Vitalist загляни в тему скриптов для новичков. Самый большой скрипт на OnSpawn объекта. ПОЧИТАЙ КОММЕНТАРИИ мои. И настрой как надо.
Dik Morris
Oct 12 2005, 12:07
Vitalist ставишь на onSpawn, НПС.
Neverwinter Script Source |
void main() { ActionPlayAnimation(ANIMATION_LOOPING_CONJURE1,1.0,9999.0f); } |
обрати внимание на то что константу ANIMATION_LOOPING_CONJURE1, ты можешь заменить на свою + регулировать время и скорость проигрывания анимации.
PS: прочитай статейку Лекса, там все
ПОДРОБНЕЙШИМ способом расписано. В свое время она мне очень помогла.
Вот ссылка:
http://wrg.ru/old/stat_anim_npc1.htmАйван сорри, я не заметил пост.
acdcee
Oct 14 2005, 19:29
Можно ли сделать так что бы после смерти моба, если игрок на него наводиться не показывало его имя(моба)?
У меня есть некое понятие переменной, если в смерти указать переменную которая при смерти если узать труп будет обозначать его имя, так можно сделать.Это все к событию смерти игрока, как Феникс писал выше о том что после смерти остаеться НПС типа как труп, и когда вот его юзаешь чтобы достать оттуда труп и шмотки, писалось бы имя умершего, вот вариант, если так мона сделать?:
Neverwinter Script Source |
string sName = GetName(oPC); string sID = GetPublikCDKey(oPC);
SetLocalString(oLootNPC(это наш НПС),"oDiedName",sName); |
Это все на события умершего игрока, а что написать и куда вставить что при юзаниии трупа появлялось имя?
QUOTE (acdcee @ Oct 14 2005, 20:29) |
У меня есть некое понятие переменной, если в смерти указать переменную которая при смерти если узать труп будет обозначать его имя, так можно сделать.Это все к событию смерти игрока, как Феникс писал выше о том что после смерти остаеться НПС типа как труп, и когда вот его юзаешь чтобы достать оттуда труп и шмотки, писалось бы имя умершего, вот вариант, если так мона сделать? |

этот абзац я, к сожалению, не понял.

QUOTE (acdcee @ Oct 14 2005, 20:29) |
Можно ли сделать так что бы после смерти моба, если игрок на него наводиться не показывало его имя(моба)? |
нет. движковое.
QUOTE (acdcee @ Oct 14 2005, 20:29) |
... SetLocalString(oLootNPC(это наш НПС),"oDiedName",sName); Это все на события умершего игрока, а что написать и куда вставить что при юзаниии трупа появлялось имя? |
только причем тут НПС?!
на OnUsed плэйса трупа поставить что-то вроде того:
Neverwinter Script Source |
void main() { SendMessageToPC(GetLastUsedBy(), "это хладный трупик "+ GetLocalString(OBJECT_SELF, "oDiedName")); } |
acdcee
Oct 15 2005, 12:54
QUOTE |
УРРРЯЯЯ, порылся в тулсе и лексеконе - оказывается и правда можно сделать, чтобы у НПС был лут после смерти, нашел еще кое-что, собственно теперь все решаемо. Только пока без клона, а с заготовленными НПС!
AliceDiren, ты ба сразу сказала, что есть такая-то функция, а то я ХОТУ два дня только как поставил! Добавлено в 00:43 Вот это надо ставить на OnSpawn лут-НПС
Neverwinter Script Source SetIsDestroyable(TRUE, FALSE, TRUE); SetLootable(OBJECT_SELF, TRUE);
А вот это на OnPlayerDeath
Neverwinter Script Source void main() { object oPC = GetLastPlayerDied(); location lLocPC = GetLocation(oPC);
object oLootNPC = CreateObject(OBJECT_TYPE_CREATURE, "РесРеф лут-НПС", lLocPC);
PopUpDeathGUIPanel(oPC,TRUE); DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oLootNPC));
int iGold = GetGold(oPC); int i = 0;
while(i<14) { object oItemInSlot = GetItemInSlot(i, oPC);
if(oItemInSlot != OBJECT_INVALID) { AssignCommand(oLootNPC, ActionTakeItem(oItemInSlot, oPC)); } i ++; }
object oItemInInventory = GetFirstItemInInventory(oPC);
while(GetIsObjectValid(oItemInInventory)) { CopyItem(oItemInInventory, oLootNPC); DestroyObject(oItemInInventory); oItemInInventory = GetNextItemInInventory(oPC); }
AssignCommand(oLootNPC, TakeGoldFromCreature(iGold, oPC)); } |
Это вот к этому
QUOTE |
QUOTE (acdcee @ Oct 14 2005, 20:29) У меня есть некое понятие переменной, если в смерти указать переменную которая при смерти если узать труп будет обозначать его имя, так можно сделать.Это все к событию смерти игрока, как Феникс писал выше о том что после смерти остаеться НПС типа как труп, и когда вот его юзаешь чтобы достать оттуда труп и шмотки, писалось бы имя умершего, вот вариант, если так мона сделать?
этот абзац я, к сожалению, не понял. |
dumboесли ты не знал то мона еще и с копией игрока после смерти такое делать, только пока че то у меня много косяков.
Так вот если вот такое вот ставить
Neverwinter Script Source |
SpeakString("Труп"+GetLocalString(OBJECT_SELF,"oDiedName"),TALKVOLUME_TALK; |
То в костомный НПС куда это ставить, поставил на onSpawn не работает, все перепробовал, а толку не кого мож кто знает, куда ставить?
NedWarN
Oct 15 2005, 21:16
Немогу, никак сделать, абзац какойто.
нужен скрипт когда уничтожаеш дверь, резко начинался разгавор. с рядом стоящим НПК.
немогу просто задать ПК, GetLastKiller, GetLastDamager, всё перепробовал неполучается.
не забывай, что сразу после боя (уничтожение плейса это тоже бой) начать разговор низя. Нужно ждать 4-5 сек.
Но непосредственно на дверь эту задержку вешать низя, ибо двери уже нету.

Так что Через Assign вешаем на НПС с Delay начать разговор с GetLastKiller через 5 секунд. Должно сработать.
-fenix-
Oct 15 2005, 22:03
Лекс, а у меня все пашет на смерти двери, хотя в Лексиконе и правда говорится, что работать не должно! Вот это работает
Neverwinter Script Source |
void main() { object oPC = GetLastKiller(); object oNPC = GetObjectByTag("ТАГ НПС");
if(GetIsPC(oPC)) { DelayCommand(8.0, AssignCommand(oNPC, ActionStartConversation(oPC))); } } |
Пардон
NedWarN
Oct 15 2005, 22:07
-fenix- пасиба но я написал в точности такойже скрипт и нефига, тётька как стояла так и стоит.
но только я писал сразу Assign, а у тебя задержка на 8 секунд, и поэтому как сказал лекс работать будет.
Lex Пасиба пойду тестить.
Приветики, давно я тут не появлялась, дел полно. Но вот вопросик один появился.У меня в тулсете, когда используешь несколько ХакПаков начинаютя глюки. Например выбираешь предмет стул,а тип внешности у него лестница. Тип внешности другой поставить не проблема, но так во всех предметах, это раздражает очень и работу тормозит. Это как-нибудь лечится или нет?
yudgi , ты меняешь 2Да файлы, в них прописаны твои модели. Изменил порядок, изменились модельки палитры. К примеру, в одном хаке модель лестницы на месте модели стула. Ясно? Конфликт в placeables.2da.
Это возвращает к одному моему преддидущему вопросу чем открываются эти 2Да файлы, чем и как редактируются.
Добавлено в [mergetime]1129446634[/mergetime]
Сорри за вопрос не по этой теме.
Dik Morris
Oct 16 2005, 10:10
yudgi 2Да таблицы открываются программой
NWNExplorer, скачай ее (на сайте должны ссылки быть)
А редактируются вполне нормально, обычным блокнотом.
Вот пожалуйста, все что тебе нужно:
http://lextom.narod.ru/files.htmКстати, если у тебя установлен критикалл, то
2Да файлы лежат в попке
Source в проинсталированной игре.
Спасибо. Извините за глупые вопросы. Я всё же хочу получше разобраться в мире тулсета, поэтому и спрашиваю.
QUOTE (yudgi @ Oct 16 2005, 11:09) |
Это возвращает к одному моему преддидущему вопросу чем открываются эти 2Да файлы, чем и как редактируются. |
В зависимости от случая. Чаще всего я юзаю
Baldur's Legacy Toolkit, но иногда пригождается и блокнот (Bred весьма удобен)
QUOTE (Dik Morris @ Oct 16 2005, 11:10) |
Кстати, если у тебя установлен критикалл, то 2Да файлы лежат в попке Source в проинсталированной игре. |
Isendel
Oct 21 2005, 11:28
Можно ли, и, если можно, то как сделать систему боя а-ля котор1, т.е. чтобы хенчи, помершие в бою, после окончания оного, воскресали?
Давненько я не заглядывал, здрасьте! Ися три вопросика - два по теме, и один - нет.
Вопросик первый: КАК делается проверка на наличие в инвентаре перса нескольких предметов с одним тегом? (тех, которые по одному в стеке)
Вопросик второй: Копался я в модуле орд, и нашел такую (ВЫРЕЗАНО ЦЕНЗУРОЙ): <CUSTOM89004>Что это такое и как его использовать?
Вопросик третий: В магазине встретил диск Newervinter nights: Kingmaker. Что это такое и стоит ли тратить на ЭТО деньги?
QUOTE (zmey @ Oct 21 2005, 16:09) |
Вопросик первый: КАК делается проверка на наличие в инвентаре перса нескольких предметов с одним тегом? (тех, которые по одному в стеке) |
считать эти предеметы. Если их >= нужного то...
QUOTE (zmey @ Oct 21 2005, 16:09) |
Вопросик второй: Копался я в модуле орд, и нашел такую (ВЫРЕЗАНО ЦЕНЗУРОЙ): <CUSTOM89004>Что это такое и как его использовать? |
кастом токен. В скрипте юзаем функцию:
Neverwinter Script Source |
// Set the value for a custom token. void SetCustomToken(int nCustomTokenNumber, string sTokenValue) |
тогда в диалоге под номером nCustomTokenNumber (те в твоем случае nCustomTokenNumber = 89004, и под токеном <CUSTOM89004>) будет текст sTokenValue. (тот, что вобьем туда).
QUOTE (zmey @ Oct 21 2005, 16:09) |
Вопросик третий: В магазине встретил диск Newervinter nights: Kingmaker. Что это такое и стоит ли тратить на ЭТО деньги? |
Премиум модуль от Биовар. Мнения разные. Сам не играл.
Dik Morris
Oct 23 2005, 08:17
Boт элементарный скриптик, но НПС не идет за игроком!!! Подходит, в диалоге но не идет.
undefined
Neverwinter Script Source |
void main() { object PC =GetPCSpeaker(); object V = GetObjectByTag("V"); AssignCommand(V, ActionForceMoveToObject(PC,FALSE,1.0f)); } |
ОК. Все нашел, скрипт работает на 5. Честно сказать, это я ступил блин!
Neverwinter Script Source |
ActionForceMoveToObject(PC |
Нужно указывать не
ПС, а того кто следует. В моем случае
V
Глянь базу скриптов. Там есть такой рабочий.
Dik Morris
Oct 23 2005, 10:47
Извините за глупые вопросы, но время для меня сейчас очень критично (12 часов, осталось до подачи работы на конкурс (!) В другой ситуациии я бы додумался сам, но для этого понадобилось бы время.
Такая ситуация:
Игрок убивает несколько НПС после смерти каждого из них, ему записывается определенная переменная, но вот проблема... С игроком, находится другой НПС, дружественный игроку. Ведь, если он грохнет враждебных неписей, то переменная
Добавлено в [mergetime]1130054231[/mergetime] запишется ему!
ВОПРОС: как сделать чтобы при убийстве определенного НПС (или нескольких), у игрока появ. строчка в диалоге? (при условии, того что пару врагов, уложит дружественный НПС)
Добавлено в [mergetime]1130054349[/mergetime] Нэт тормозит страшно. Не было еще такого...
QUOTE (Dik Morris @ Oct 23 2005, 11:47) |
Извините за глупые вопросы, но время для меня сейчас очень критично (12 часов, осталось до подачи работы на конкурс (!) В другой ситуациии я бы додумался сам, но для этого понадобилось бы время. Такая ситуация: Игрок убивает несколько НПС после смерти каждого из них, ему записывается определенная переменная, но вот проблема... С игроком, находится другой НПС, дружественный игроку. Ведь, если он грохнет враждебных неписей, то переменная запишется ему! ВОПРОС: как сделать чтобы при убийстве определенного НПС (или нескольких), у игрока появ. строчка в диалоге? (при условии, того что пару врагов, уложит дружественный НПС) Нэт тормозит страшно. Не было еще такого...  |
Дружественный - это хенчмен, помошник?
Поможет функция GetMaster(), она возращает "хозяина" указанного объекта. В особо тяжелых случаях (когда к примеру убивает самон твоего хенча) рекомендуют использовать вот так:
Neverwinter Script Source |
void main() { //The actual killer object oKiller=GetLastKiller();
//Loop through until we find one that doesn't have a master
while (GetIsObjectValid(GetMaster(oKiller))) { oKiller=GetMaster(oKiller); }
//we're now at the top of the hierarchy. Let's check if it //is a PC if (!GetIsPC(oKiller)) return;
//Give XP GiveXPToCreature(oKiller, 500); } |
Это пример на событие onDeath моба
Dik Morris
Oct 23 2005, 12:23
_kaa_ нет не хенч, простой
НПС. Как я понял к нему данный ответ не применишь
тогда юзай
Neverwinter Script Source |
// * Returns TRUE if oSource considers oTarget as a friend. int GetIsFriend(object oTarget, object oSource=OBJECT_SELF) |
будет что-то типа:
Neverwinter Script Source |
void main() { //The actual killer object oKiller = GetLastKiller(); object oPC = GetFirstPC(); if (((GetIsPC(oKiller)) || (GetIsFriend(oPC,oKiller))) SetLocalInt(oPC,"Q_KILLS",GetLocalInt(oPC,"Q_KILLS")+1); } |
это если ЛЮБОЙ дружественный игроку НПС завалит монстра или нпс с этим скриптом в слоте onDeath
Если нужен какой-то определенный, то проверяй у киллера не GetIsFriend а его ТЭГ.
Добавлено в 15:39
вообще в такой ситуации наверное даже СОВСЕМ не важно, кто убил. Так что просто счетчик увеличивай и все. Скрипт стоять ведь будет не у всех, а тока у нужных НПС, так что все будет нормально.
Добавлено в [mergetime]1130072087[/mergetime]
тема "Скрипты на конкурс" временно убрана. Верну потом.
Archangel
Oct 23 2005, 20:29
Люди, помогите, как сделать так, чтобы в модуль можно было бы играть только одним определенным персонажем. Т.е. игрок запускает модуль, появляется менюшка "создать собственного персонажа" или "выбрать из списка", а потом, если игрок создает своего перса, то его (перса) убивают сразу же в начале модуля, а если он выбирает одного уже заготовленного перса из списка (не любого из списка, а только того на кого я укажу), то чувствует себя хорошо и начинает проходить модуль...
Пытался сам такое сделать, но какая-то муть получается
Isendel
Oct 23 2005, 20:31
Сделай ему условием определенное имя - как Айван, респект ему, показал.
Archangel
Oct 23 2005, 20:33
QUOTE |
Сделай ему условием определенное имя - как Айван, респект ему, показал. |
Хех, знал бы я еще как это сделать и цены б мне не было...
Isendel
Oct 23 2005, 20:37
Так это ж все выше есть.
NedWarN
Oct 23 2005, 20:38
Neverwinter Script Source |
Хех, знал бы я еще как это сделать и цены б мне не было... |
Neverwinter Script Source |
if(GetPCPlayerName(oPC) == "Archangel") |
Так наверное!
проверяй имя, бога, класс, экспу, расу, пол, статы.
А то я сгенерю перса, назову Архом и буду гамать.
Добавлено в [mergetime]1130098557[/mergetime]
QUOTE (Archangel @ Oct 23 2005, 21:33) |
Хех, знал бы я еще как это сделать и цены б мне не было...  |
хреново, что не знаешь.
Archangel
Oct 24 2005, 10:53
QUOTE |
Neverwinter Script Source | if(GetPCPlayerName(oPC) == "Archangel") |
Так наверное!
|
QUOTE |
проверяй имя, бога, класс, экспу, расу, пол, статы. А то я сгенерю перса, назову Архом и буду гамать. |
NedWarN, Lex спасибо за совет.
QUOTE |
хреново, что не знаешь. |
Учиться никогда непоздно!
Daemonix
Oct 29 2005, 02:19
В биотварском модуле shadow guard в певой локе есть такая фича

то есть перс полупрозрачный.
никто не знает, каким путём можно этого достичь? (для одной определённой локи)
не вижу скрина.
Скорее всего визуальный эффект. Гост визаж или ефир
Daemonix
Oct 29 2005, 13:45
Я в скором времени выложу нормальный скриншот. А вот ещё что случилось - когда я запускаю свой мод, он не хочет пахать под предлогом "Слишком мало места на жёстком диске для воспроизведения операции". Все другие моды работают нормально. Что делать?
Vitalist
Oct 29 2005, 17:31
Что нужно, чтобы NPC не беспокоить? То есть, к примеру, стоят двое NPC, типа разговаривают (анимация), а игрок не может им помешать - они "заняты".
Dik Morris
Oct 29 2005, 18:31
Вот пара вариантов:
1) Игрок, может поговорить с НПС, а после диалога они снова повернутся друг к другу, и начнутся "разговаривать".
На строчку в диалоге 1 НПС (НЕ ИГРОКУ!) в совершены действия:
Neverwinter Script Source |
void main() { object oNPC_2 = GetNearestObjectByTag("TAG_NPC_2");//Укажи ТАГ того НПС к которому повернется 1 НПС DelayCommand(1.0f, AssignCommand(OBJECT_SELF, ClearAllActions())); DelayCommand(2.0f, AssignCommand(OBJECT_SELF, SetFacingPoint(GetPosition(oNPC_2)))); DelayCommand(3.0f, AssignCommand(OBJECT_SELF, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL)));//Можешь выбрать сам анимационную константу. (ANIMATION_*) } |
Аналогично, ставишь НПС 2, такой же скрипт. Но указываешь ТАГ 1 НПС.
2)Игрок подходик к неписям, но его "отбрасывает" немного назад, на нужный вайпоинт.
рисуешь вокруг неписей триггер, на onEnter ставишь:
Neverwinter Script Source |
void main() { object oV = GetEnteringObject(); object oWP = GetObjectByTag("ТАГ ВАЙПОИНТА"); ActionDoCommand(AssignCommand(oV, ClearAllActions())); ActionDoCommand(AssignCommand(oV, ActionJumpToObject(oWP))); } |
QUOTE |
"Слишком мало места на жёстком диске для воспроизведения операции". |
Hу если места, мало дык жесткий почисти!
Daemonix
Oct 29 2005, 20:15
QUOTE |
Hу если места, мало дык жесткий почисти! |
Ну места там достаточно. Все другие-то модули запускаются! А мой нет.
NedWarN
Oct 29 2005, 20:38
QUOTE |
Ну места там достаточно. Все другие-то модули запускаются! А мой нет. |
Открой Модуль, и зайди в Папку "Модулес" Скопируй всё кданибудь, из папки temp0 и создай новый модуль, открой всё также и вставь всё скопированное туда.
2. удали ненужные модули!
3. Если модуль очень большой, снизь графику, просто это может быть из-за RAM!
Daemonix
Oct 30 2005, 01:46
Хм, знаете, я тут поэкспериментировал - такое ощущение, что глюк с нехваткой места вылетает, когда задано слишком длинное название модуля...
Dik Morris
Nov 3 2005, 09:11
Хм... Люди подскажите, почему эффект не налаживается.
Вот некоторые строчки из скрипта:
Neverwinter Script Source |
effect oApper = EffectDisappearAppear(Target); location Target = GetLocation(GetObjectByTag("WJ_JEREMI_KATAKOMBA")); object oDJ = GetObjectByTag("DJEREMI"); ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,oApper,oDJ)); |
Вроде, все так но вот, НПС не приземляется в нужную точку.
AliceDiren - самое то!
Aiwan - у меня, кстати и без AssignCommand налаживается

QUOTE |
зачем тебе нужно ActionDoCommand? |
Просто, я привел пару строк, а в скрипте их намного больше и выполнятся они должны в строгой последовательности
Dik Morris в ХоТУ эффекты накладываются так:
Neverwinter Script Source |
AssignCommand(oSelf, ApplyEffectToObject(DURATION_TYPE_INSTANT,oApper,oDJ)); |
AliceDiren
Nov 3 2005, 09:58
Aiwan , так у него эффект срабатывает, но не правильно
Dik Morris , вот так точно работает
Neverwinter Script Source |
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,oApper,oDJ,5.0) |
5.0 - время через которое твой oDJ должен появиться в нужной точке.
Добавлено в [mergetime]1131001667[/mergetime]
Dik Morris, и, кстати, действительно, зачем тебе нужно ActionDoCommand?
Белатрис
Nov 3 2005, 11:14
Как объединить HotU и SoU?
AliceDiren
Nov 3 2005, 11:18
QUOTE (Белатрис @ Nov 3 2005, 12:14) |
Как объединить HotU и SoU? |
QUOTE (Aiwan @ Nov 3 2005, 10:37) |
Dik Morris в ХоТУ эффекты накладываются так:
Neverwinter Script Source AssignCommand(oSelf, ApplyEffectToObject(DURATION_TYPE_INSTANT,oApper,oDJ)); |
Ванька, ты че-т путаешь. Можно без привязки. (в лексиконе так надо делать, когда в скрипте не рекомендуется юзать OBJECT_SELF, но я с этим редко сталкивался..)
QUOTE (Dik Morris @ Nov 3 2005, 12:11) |
Вот некоторые строчки из скрипта: |
Соответсвенно скрипт большой и юзаются разные объекты. Если я его правильно понял, то эффект у него как бы в мини сценке. Соответсвенно и дал расклад. Объяснять не стал, так как толку честно говоря от таких разъяснений мало. А вы уж запинали меня
Добавлено в [mergetime]1131025515[/mergetime] Вообще с OBJECT_SELF я напарился в СОУ еще в ПЛ. Так что

лучше юзать так:
Neverwinter Script Source |
object oSelf = OBJECT_SELF; |
Daemonix
Nov 4 2005, 03:26
Хм, а почему портреты, которые я вставляю в папку Portraits в каталоге НВН нельзя поставить какому-нибудь неписю, а только игроку?
Dik Morris
Nov 4 2005, 06:02
Daemonix Тут нужно делать, хак.
Прописывать нужные портреты в 2ДА таблице, и собирать все в хак.
PS: более, подробно это написана в мануале
Aiwana, почитай.
------------------------------------------
Ах, да. Никто не подскажет константу, эффекта землетрясения?
------------------------------------------
Aiwan, сенкс.
VFX_FNF_SCREEN_BUMP - делает большой БУМ!
VFX_FNF_SCREEN_SHAKE - эффект моей стиральной машинки.
Dik Morris
Nov 4 2005, 21:35
В чем дело? Скрипт, стоит на оnEnter локации, но эффекта 0.
Neverwinter Script Source |
void main() { object oPC = GetEnteringObject(); if (GetIsPC(oPC)) { ActionDoCommand(AddJournalQuestEntry("PROLOG",1,oPC)); } else { ClearAllActions(); } } |
PS: хотя если поставить на триггер, все работает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.