![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3201
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
"У меня есть несколько вопросов относительно скриптов сам редактор я знаю оч хорошо а вот в скриптах нуб подскижите мне пару скриптов для:
1) Как сделать чтоб люди вокруг говорили когда ты проходиш мимо или кто нибудь рубил дрова стрелял из лука бил тренеровочное чучело? 2) Как сделать чтобы как только ты оказался на определенном участке земли к тебе подошел нпс и начал первым диалог которы нельзя прервать? 3) Как сделать чтобы после твоего диалога с нпс он ушел бы из данной локи в какую нибудь другую локу? 4) И еще если можно опишите мне как сделать компаньена чтобы он следовал за тобой или вернулся назад в место его найма? Приведите скрипты и куда их надо втавлять описывать необязательно и последнее самое главное как сделать скрипт смерти нпс чтобы при смерти у него отнимались деньги опыт и он переносился в определенную локу или просто умирал бы без респава? Заранее благодарю!" Сообщение отредактировал Azzerrotter - Dec 7 2009, 18:42 |
![]()
Сообщение
#3202
|
|
Level 3 ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
2 Azzerrotter
http://www.city-of-masters.ru/forums/index...c=1612&st=0 |
![]()
Сообщение
#3203
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
спс за ссылку да только там нету того что я искал про переход нпс тока есть скрипт да и то не совсем тот что нужен мне надо чтоб нпс ушел с 1 локи на другую а тут нпс просто переходит к точке маршрута которую указываеш в скрипте и исчезает...
|
![]()
Сообщение
#3204
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Ну так убери в скрипте строку дестроя и добавь команду для ухода в другую локу.
Neverwinter Script //:://////////////////////////////////////////////
//:: ActionTaken am_at_npcwp_exit //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* NPC уходит на персональный вейпоинт, таг которого равен AM_WP_ESC_ плюс таг НПС и дестроится на ней. Ставим на диалог с НПС, устанавливаем в локации вейпоинт AM_WP_ESC_[ТАГ_НПС]. Если надо что бы НПС побежал к точке, то присвоим на поинт локалку "RUN". */ //::///////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 20.09.2005 //::///////////////////////////////////////////// void main() { object oPC = GetPCSpeaker(); // Игрок object oNpc = OBJECT_SELF; // НПС с которым идет диалог string sTag = GetTag(oNpc); // Таг НПС object oExit = GetNearestObjectByTag("AM_WP_ESC_"+sTag); // Вейпоинт int iRun = FALSE; // Параметр определяющий скорость НПС // Если в локации нет вейпоинта, то НПС скажет что некуда бежать if (!GetIsObjectValid(oExit)||(GetArea(oExit)!=GetAre a(oNpc))) { AssignCommand(oNpc, SpeakString("Нет вейпоинта, или он не в этой этой локации!")); return; } if(GetLocalInt(oExit, "RUN")) { iRun = TRUE; // Если присвоить локалку "RUN" на поинт, то он побежит. } AssignCommand(oNpc, ClearAllActions()); // Почистим стек команд AssignCommand(oNpc, ActionForceMoveToObject(oExit, iRun, 1.0, 30.0)); AssignCommand(oNpc, ActionJumpToObject(GetObjectByTag("ТАГ_ТВОЕГО_ПОИНТА_В_ДРУГОЙ_ЛОКАЦИИ"))); DelayCommand(0.5, SetCommandable(FALSE, oNpc)); // Что бы случайно не забыл } |
![]()
Сообщение
#3205
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Я стер строчку
// Если в локации нет вейпоинта, то НПС скажет что некуда бежать if (!GetIsObjectValid(oExit)||(GetArea(oExit)!=GetAre a(oNpc))) { AssignCommand(oNpc, SpeakString("Нет вейпоинта, или он не в этой этой локации!")); return; } теперь нпс переходит в другую локу все норм только нпс сразу после диалога исчезает а мне бы так чтобы он сначало подошел к двери и потом ток исчез (сорь если чтот нетак делаю скрипты сложная для меня вещь) |
![]()
Сообщение
#3206
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Вот в этом скрипте учтено присутствие двери рядом с точкой ухода...
Neverwinter Script //::///////////////////////////////////////
//:: УНИВЕРСАЛЬНОЕ ПЕРЕМЕЩЕНИЕ СУЩЕСТВА //:: Created By: Gennady //:: FileName: p_object //::////////////////////////////////////// void main() { object oPC = GetFirstPC(); object oSelf = OBJECT_SELF; object oPoint1 = GetObjectByTag("TROP_"+ GetTag(oSelf)); object oPoint2 = GetNearestObjectByTag("EXIT_"+ GetTag(oSelf)); object oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oPoint2); location LOC = GetLocation(oSelf); effect eJump = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3); int INTEL = GetAbilityScore(oSelf, ABILITY_INTELLIGENCE); //***** БЛОКИРОВКА ГЕРОЯ ****** AssignCommand(oPC, ClearAllActions()); AssignCommand(oPC, ActionWait(12.0)); AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать DelayCommand(0.1, SetCommandable(FALSE, oPC)); // заблокировать //******************************* AssignCommand(oSelf, ClearAllActions()); DelayCommand(0.1, SetCommandable(FALSE, oSelf)); // заблокировать DelayCommand(12.0, SetCommandable(TRUE, oSelf)); // разблокировать DelayCommand(12.0, SetCommandable(TRUE, oPC)); // разблокировать if (GetIsObjectValid(oPoint1)) { if(INTEL != 4) AssignCommand(oSelf, SpeakString("До встречи!")); if (GetIsObjectValid(oPoint2)) { AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0)); if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE) { AssignCommand(oSelf, ActionOpenDoor(oDoor)); AssignCommand(oSelf, ActionWait(2.0)); } AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать AssignCommand(oSelf, ActionJumpToObject(oPoint1)); return; } ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC); DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать AssignCommand(oSelf, ActionWait(3.0)); AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf))); AssignCommand(oSelf, ActionJumpToObject(oPoint1)); return; } else // Если нет точки, то удалить существо { if(INTEL != 4) SpeakString("Прощай!"); AssignCommand(oSelf, SetIsDestroyable(TRUE, TRUE, TRUE)); if (GetIsObjectValid(oPoint2)) { AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0)); if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE) { AssignCommand(oSelf, ActionOpenDoor(oDoor)); AssignCommand(oSelf, ActionWait(2.0)); } AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать AssignCommand(oSelf, ActionDoCommand(DestroyObject(oSelf))); return; } DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать DestroyObject(oSelf, 3.2); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC); } } /* Если есть точка "TROP_"+тэг ПС, то идет прыжок к этой точке с эффектом. Если при этом есть точка "EXIT_"+тэг ПС, то ПС уходит к этой точке и прыгает к точке "TROP_"+тэг ПС без эффекта. Если нет точки "TROP_"+тэг ПС, то ПС удаляется с эффектом. Если при этом есть точка "EXIT_"+тэг ПС, то ПС идет к этой точке и удаляется без эффекта Если интеллект равен 4, то фраз не будет. */ |
![]()
Сообщение
#3207
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
Хреновый с меня скриптограф я вроде 2 точки маршрута с нужными тегами поставил скрипт нпс дал как тока скрипт срабатывает нпс кастует на себя заклинание и исчезает нигде его нет потом...
(IMG:style_emoticons/kolobok_light/wacko.gif) |
![]()
Сообщение
#3208
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Хреновый с меня скриптограф я вроде 2 точки маршрута с нужными тегами поставил скрипт нпс дал как тока скрипт срабатывает нпс кастует на себя заклинание и исчезает нигде его нет потом... Если НПС исчезает, т.е. дестроится, то будет стринг "Прощай!". Значит нужных точек для перемещения не задано... Не понял в чем проблема с написанием нужных тегов для точек? Например тег НПС "Azzerrotter" значит тег точки, где появится НПС будет "TROP_Azzerrotter" Если нужно чтобы НПС пошел к определенной точке, а потом прыгнул на конечную, то зададим еще точку выхода "EXIT_Azzerrotter", которая должна быть в этой же локе. Если точка стоит рядом с дверью. то НПС подойдет к двери, откроет и прыгнет на конечную точку, сказав при этом: "До встречи!" |
![]()
Сообщение
#3209
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
gennady, просто человек думал скрипт это просто. Azzerrotter, надо вникать и пытаться думать. Без этого никакой мега крутой скрипт тебе не поможет.
|
![]()
Сообщение
#3210
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
ну вот я ставлю нищего даю ему тег N ставлю точку маршрута на эту же локу где и нищий даю ей тег EXIT потом переключаюсь на другую локу ставлю там точку маршрута с тегом TROP делаю скрипт который выглядит так
Neverwinter Script //:://///////////////////////////////////// //:: УНИВЕРСАЛЬНОЕ ПЕРЕМЕЩЕНИЕ СУЩЕСТВА //:: Created By: Gennady //:: FileName: p_object //::////////////////////////////////////// void main() { object oPC = GetFirstPC(); object oSelf = OBJECT_SELF; object oPoint1 = GetObjectByTag("TROP_N"+ GetTag(oSelf)); object oPoint2 = GetNearestObjectByTag("EXIT_N"+ GetTag(oSelf)); object oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oPoint2); location LOC = GetLocation(oSelf); effect eJump = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3); int INTEL = GetAbilityScore(oSelf, ABILITY_INTELLIGENCE); //***** БЛОКИРОВКА ГЕРОЯ ****** AssignCommand(oPC, ClearAllActions()); AssignCommand(oPC, ActionWait(12.0)); AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать DelayCommand(0.1, SetCommandable(FALSE, oPC)); // заблокировать //******************************* AssignCommand(oSelf, ClearAllActions()); DelayCommand(0.1, SetCommandable(FALSE, oSelf)); // заблокировать DelayCommand(12.0, SetCommandable(TRUE, oSelf)); // разблокировать DelayCommand(12.0, SetCommandable(TRUE, oPC)); // разблокировать if (GetIsObjectValid(oPoint1)) { if(INTEL != 4) AssignCommand(oSelf, SpeakString("До встречи!")); if (GetIsObjectValid(oPoint2)) { AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0)); if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE) { AssignCommand(oSelf, ActionOpenDoor(oDoor)); AssignCommand(oSelf, ActionWait(2.0)); } AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать AssignCommand(oSelf, ActionJumpToObject(oPoint1)); return; } ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC); DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать AssignCommand(oSelf, ActionWait(3.0)); AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf))); AssignCommand(oSelf, ActionJumpToObject(oPoint1)); return; } else // Если нет точки, то удалить существо { if(INTEL != 4) SpeakString("Прощай!"); AssignCommand(oSelf, SetIsDestroyable(TRUE, TRUE, TRUE)); if (GetIsObjectValid(oPoint2)) { AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0)); if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE) { AssignCommand(oSelf, ActionOpenDoor(oDoor)); AssignCommand(oSelf, ActionWait(2.0)); } AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать AssignCommand(oSelf, ActionDoCommand(DestroyObject(oSelf))); return; } DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать DestroyObject(oSelf, 3.2); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC); } } делаю нищему диалог по завершению которого должен сроботать этот скрипт нпс говорит говорит прощай и исчезает... вроде все правельно делал... (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) |
![]()
Сообщение
#3211
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Если говорит: "Прощай!", то точек нет или они не правильно пробиты... Я думаю ты забыл пробить нижний дефис между приставкой и тегом.
Если тег N, то теги точек должны быть: EXIT_N TROP_N Звиняюсь... Тока доглядел чего ты в скрипте напортачил... Это универсальный скрипт и нечего в него еще и теги НПС пробивать... Neverwinter Script object oPoint1 = GetObjectByTag("TROP_N"+ GetTag(oSelf)); object oPoint2 = GetNearestObjectByTag("EXIT_N"+ GetTag(oSelf)); Тут в моем скрипте написано: Neverwinter Script object oPoint1 = GetObjectByTag("TROP_"+ GetTag(oSelf)); object oPoint2 = GetNearestObjectByTag("EXIT_"+ GetTag(oSelf)); Это значит что идет привязка точки к тегу НПСа (+ GetTag(oSelf)-это тег НПСа), а теги точек для твоего НПС с тегом N как раз и будут EXIT_N TROP_N попробуй догодаться какие теги нужны для твоего скрипта... Azzerrotter, надо вникать и пытаться думать. Без этого никакой мега крутой скрипт тебе не поможет. +1 (IMG:style_emoticons/kolobok_light/yes3.gif) Сообщение отредактировал gennady - Dec 14 2009, 16:40 |
![]()
Сообщение
#3212
|
|
Level 2 ![]() Класс: Воин Характер: True Neutral Раса: Эльф ![]() |
спс все по описанию вправил все запахало!
Сообщение отредактировал Azzerrotter - Dec 15 2009, 13:28 |
![]()
Сообщение
#3213
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Люди, помогиге пожалуйста! Я в этих скриптах практически ничего не понимаю, да они мне на самом деле то и не нужны. НО вот какой вопрос. Я начал переводить мод НВН "Кормические ночи". И тут стал такой вопрос, а где находятся реплики НПС'шников, которые появляются у них над головами во время скриптовых сцен? Залажу в НПС, далее в скрипты. Проверил все: ну Conversation, Perception и т.д. но ни в одном из них не нашел команды типа SpeakString или ActionSpeakString. А функция FloatingTextStringOnCreature вообще пассивна и никакого текста не отображает. Может я что-то не догоняю. И не там ищу? Помогите пожалуйста разобраться. Укажите, где этот текст должен быть точно: скрипт и функцию, если он в ней. И еще один вопрос, где должен находится текст в панели отчета? Ну типа "Вы вышли из тюрьмы и в глаза вам ударил яркий солнечный свет" - текст. Там должны по-моему быть такие команды FloatingTextStringOnCreature("Текст."); SendMessageToPC(oPC, "текст"). Очень прошу помогите плиз, а то буит очень обидно, когда ВСЕ диалоги будут на русском, а эти немногочисленные фразы в скриптовых сценах так и останутся непереведенными. Заранее спасибо
|
![]()
Сообщение
#3214
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
WARLORD, в скриптах или в стрингах.
Стринги - строки с описанием могут быть где угодно, хоть на самом НПС или триггере. |
![]()
Сообщение
#3215
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
WARLORD, в скриптах или в стрингах. Стринги - строки с описанием могут быть где угодно, хоть на самом НПС или триггере. Я уже нашел. Там скрипты называются cutscene 1,2,3 и т.д. Но вот еше один ламерский вопрос: как писать в скрипте на русском? а не абракадаброй опять сам разобрался (IMG:style_emoticons/kolobok_light/rolleyes.gif) надо было шрифт поменять |
![]()
Сообщение
#3216
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Скажите, можно ли добавалять фиты персонажу скриптово(на подобии нвна 2, тоесть социальные там всякие(ну вообщем для скрипта всеравног какие, главное можно ли?))
И второй вопрос можно ли добавить фит на оружие через скрипт, из тех что нет в палитре( и врядли они там будут, т.к. их я сделал, а добавлять в палитру нехотелось бы (IMG:style_emoticons/kolobok_light/prankster2.gif) ) |
![]()
Сообщение
#3217
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Вешать на шкуру. Или через NWNX, но это вариант не для сингла.
|
![]()
Сообщение
#3218
|
|
Level 2 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Помогите со скриптом пожалуйста. нужно что бы сундук(и др. объекты с инвентарем) пропадали когда из них забирают содержимое, и появлялись заново через 10 минут (вместе с содержимым).
Я поставил на OnClosed скрипт, ломающий объект, а вот восстановить никак не могу... Да, и если можно лучше что бы просто исчезал, а не ломался, и не когда закрывают, а когда забирают содержимое (ведь можно закрыть и не взять, а объект все равно сломается). |
![]()
Сообщение
#3219
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Ставить на onDisturbed.
Neverwinter Script #include "nw_i0_2q4luskan" Можно добавить переноску имени/тега/флажков и т. д. Если инвентарь переменный, то его тоже можно сохранять (а лучше генерить на открытие плейса).
void main() { object oChest = OBJECT_SELF; location lLoc = GetLocation(oChest); string sResRef = GetResRef(oChest); if(GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_REMOVED && !GetIsObjectValid(GetFirstItemInInventory(oChest)) ) { AssignCommand(GetModule(), DelayCommand(600.0f, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, sResRef, lLoc))); DestroyObject(oChest); } } Сообщение отредактировал Ilerien - Feb 5 2010, 13:49 |
![]()
Сообщение
#3220
|
|
Level 2 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Полуэльф ![]() |
о, спасибо большое (IMG:style_emoticons/kolobok_light/thank_you.gif)
Хм..Не знает команды CreateObjectVoid, а чем она отличается от просто createobject? Добавлено: А, все, сорри, это я кривой, не скопировал первую строку, думал это комментарий (IMG:style_emoticons/kolobok_light/pardon.gif) Сообщение отредактировал Norfolk - Feb 5 2010, 13:56 |
![]()
Сообщение
#3221
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Что значит "не знает"? Эта функция лежит в стандартной библе nw_i0_2q4luskan. Отличается от простого создания обжекта тем, что возвращает не обжект, а войд - для того, чтобы можно было передать её в DelayCommand().
|
![]()
Сообщение
#3222
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]()
Сообщение
#3223
|
|
Level 4 ![]() ![]() Класс: Клерик Характер: Lawful Good Раса: Человек ![]() |
Хотел научить стражников ругаться и подбегать к игроку, если у него в руках находится оружие.
на onPerseption поставил такой кусок: Neverwinter Script object oPC = GetLastPerceived(); if (GetIsPC(oPC)&&GetLastPerceptionSeen()) { object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); if (oWeapon != OBJECT_INVALID) { ClearAllActions(); AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "noweapon")); SendMessageToPC(oPC, "Я вижу тебя!"); } } "Ай си ю" в лог говорит, а вот диалог не стартует. Нипесь привязан к вейпоинтам, быть может в них дело? Сообщение отредактировал Batkom - Feb 12 2010, 20:53 |
![]()
Сообщение
#3224
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
Batkom, попробуй заставь его сначала подойти к игроку
|
![]()
Сообщение
#3225
|
|
Level 5 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Человек ![]() |
возможно ActionDoCommand?
|
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 01:12 |