![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2286
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
http://download.wrg.ru/public_wrg/toolset/...ra_tutorial.exe
QUOTE(Noah @ May 30 2006, 00:41) [snapback]83142[/snapback] А нет ли анимаций сидячим нпс? Вот скрипт, думаю разберешься. NSS //::////////////////////////////////////////////// //:: OnUserDefaine am_cud_sit //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Скрипт садит НПС на стул или на землю. SIT_CHAIR - таг стула для сидения. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 07.07.2005 //::///////////////////////////////////////////// void main() { object oPC = GetFirstPC(); if (GetIsDead(OBJECT_SELF)==TRUE) return; // Если он помер, то пусть молчит if (GetArea(OBJECT_SELF)!=GetArea(oPC)) return; if (GetLocalInt(OBJECT_SELF, "STOP")) return; // Отключаем если нам это надо if (GetIsInCombat(OBJECT_SELF)) return; if (IsInConversation(OBJECT_SELF)) return; int nEvent = GetUserDefinedEventNumber(); //=========================== HEARTBEAT EVENT ================================== if (nEvent == EVENT_HEARTBEAT) // Сигнал поступает с HeartBeat слота. { //------------------------------------------------------------------------------ if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CROSS") == TRUE) { if (GetLocalInt(OBJECT_SELF, "DISTURBED")) return; ClearAllActions(); SetLocalInt(OBJECT_SELF, "DISTURBED", TRUE); ActionMoveToLocation(GetLocalLocation(OBJECT_SELF, "initLoc")); ActionDoCommand(SetFacing(GetLocalFloat(OBJECT_SELF, "initFacing"))); ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 99999.9); return; } //------------------------------------------------------------------------------ if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == TRUE) { if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == 2) return; if (GetCurrentAction() == ACTION_SIT) return; if (GetCurrentAction() == ACTION_MOVETOPOINT) return; object oChair = GetNearestObjectByTag("SIT_CHAIR"); if (GetIsObjectValid(oChair)) { ClearAllActions(); ActionSit(oChair); ActionDoCommand(SetLocalLocation(OBJECT_SELF, "initFacing", GetLocation(OBJECT_SELF))); } } } //============================= DIALOGUE EVENT ================================= if (nEvent == EVENT_DIALOGUE) // Стандартный сигнал { SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE); } //============================= PERCIEVE EVENT ================================= if (nEvent == EVENT_PERCEIVE) // Стандартный сигнал { if (GetIsPC(GetLastPerceived())) { SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE); } } //========================== END COMBAT ROUND EVENT ============================ if (nEvent == EVENT_END_COMBAT_ROUND) // Стандартный сигнал { SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE); } //------------------------------------------------------------------------------ } Скрипт ставится на слот UserDef |
![]()
Сообщение
#2287
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Noah @ May 29 2006, 22:41) [snapback]83142[/snapback] А нет ли анимаций сидячим нпс? Если я правильно понял вопрос, то вам нужна дополнительная анимация сидящим персам? Недавно этот вопрос обсуждался, читайте статью Лекса ЗДЕСЬ. Если задействована ActionSit, то наложение анимации поднимет перса со стула. Можно совместить с ANIMATION_LOOPING_SIT_CHAIR кое-что из анимаций, но вот стул под перса не подставишь (или я это тупо делал). А вот на CROSS, можно все свободно вешать. Вот простой скрипт на ХБ-ит перса. Если нужно, чтобы перс смотрел в определенную сторону, то задайте точку "V_ + тэг перса." NSS void main() { object oWay = GetWaypointByTag("V_" + GetTag(OBJECT_SELF)); vector vFace = GetPosition(oWay); if(GetArea(GetFirstPC()) != GetArea(OBJECT_SELF)) return; // если ПС нет локе if (!IsInConversation(OBJECT_SELF)) { SetFacingPoint(vFace); switch (Random(3)+1) { case 1: if(Random(100) >= 50) ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS); else ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK); break; case 2: if(Random(100) >= 50) ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); else ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK); break; case 3: if(Random(100) >= 50 && GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 17) ActionPlayAnimation(ANIMATION_FIREFORGET_READ); else { if (GetGender(OBJECT_SELF)==GENDER_MALE) PlaySound("as_pl_yawningm1"); else PlaySound("as_pl_yawningf1"); ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); } break; } ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 6.0); } } /* Персонаж сидит на земле, пьет и чешет голову. Если интеллект выше 17, то еще и читает. Слот HB */ Спасибо метрам за подсказку! Учту в дальнейшем. (IMG:style_emoticons/kolobok_light/thank_you.gif) Сообщение отредактировал gennady - Jun 1 2006, 12:41 |
![]()
Сообщение
#2288
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
gennady, есть смысл добавить проверку РС в локации. Что бы НПС все это делал только если в локации есть игрок.
|
![]()
Сообщение
#2289
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Aiwan @ Jun 1 2006, 09:23) [snapback]83448[/snapback] gennady, есть смысл добавить проверку РС в локации. Что бы НПС все это делал только если в локации есть игрок. Aiwan, если можно киньте оную. Вообще я подметил, что ХБ начинает работать в определенном радиусе от героя, или я не прав? Тут у меня назрел вопрос по скриптам на OnSpawn, ведь насколько я понял локалки в вышеприведенном вами скрипте, вешаются именно там. Просто у меня было несколько проколов. Все работает 10-20 раз, а на тридцатом, бах висяк! Пришлось переписать и бросить все ХБ, т.к. с сюжетным персам это непозволительно. Теперь трижды думаю, стоит ли ставить что на OnSpawn. Непонятно…, или это только у меня такие приколы? (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) |
![]()
Сообщение
#2290
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(gennady @ Jun 1 2006, 12:49) [snapback]83468[/snapback] Вообще я подметил, что ХБ начинает работать в определенном радиусе от героя, или я не прав? хб работают везде, во всех локациях. Но там, где нет игрока - чуть медленнее (бывает 7-8-9 секунд 1 такт) NSS // если игрок не в одной локе с НПС - выйти из скрипта
if( GetArea(GetFirstPC())!=GetArea(OBJECT_SELF)) return; |
![]()
Сообщение
#2291
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(gennady @ Jun 1 2006, 14:49) [snapback]83468[/snapback] Тут у меня назрел вопрос по скриптам на OnSpawn, ведь насколько я понял локалки в вышеприведенном вами скрипте, вешаются именно там. Просто у меня было несколько проколов. Все работает 10-20 раз, а на тридцатом, бах висяк! Пришлось переписать и бросить все ХБ, т.к. с сюжетным персам это непозволительно. Ни разу не произошло ни одного сбоя. (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) приведи код скрипта сюда. |
![]()
Сообщение
#2292
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Aiwan @ Jun 1 2006, 22:15) [snapback]83524[/snapback] Ни разу не произошло ни одного сбоя. приведи код скрипта сюда. Коды как мои, так и базовые, в том числе Леворовские. Неверский я видно тупо использовал, ребята спавнили перса в процессе игры, у меня же перс при загрузке уже находился в локе. Т.ч. есть рифы, и о них надо помнить. Да, забыл, были банальные баги при раздачи уровня. (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) Доморощенный код (последний баг, сработал 50/50, стал только сюжетным) NSS void main() { DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectPetrify()), OBJECT_SELF)); DelayCommand(1.5, SetPlotFlag(OBJECT_SELF, TRUE)); // сюжет } os_died (кусок кода из скрипта Левора, стоял полный код) NSS void main() { SetLocalInt(OBJECT_SELF, "SPAWNED_DEAD", 1); SetIsDestroyable(FALSE, FALSE, FALSE); effect eDeath = EffectDeath(); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, OBJECT_SELF); } nw_c2_j_assvict1 (базовый неверский код) NSS #include "NW_I0_GENERIC"
void main() { SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after // combat. } |
![]()
Сообщение
#2293
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Команда Делей не всегда корректно, а скажем почти всегда неккоректно работает с OBJECT_SELF. Делай так:
NSS object oSelf = OBJECT_SELF; NSS void main() { object oNpc = OBJECT_SELF; SetIsDestroyable(FALSE,FALSE,FALSE); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(TRUE,TRUE), oNpc); } Вообще не рекомендую тереть скрипты спавновские полностью, если НПС должен что то делать. Если он мертвый то три. Код выше. |
![]()
Сообщение
#2294
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Делай лучше вообще не использовать в спауне, как раз всякие баги и 50/50 и вылезают.
Особенно, когда мод грузится, при загрузке лок либо нет такого, либо баги реже/меньше, но при загрузке мода 100% бяки вылезают. |
![]()
Сообщение
#2295
|
|
Level 8 ![]() ![]() ![]() Класс: Паладин Характер: Lawful Good Раса: Полуэльф ПОДМАСТЕРЬЕ ![]() |
Возникла следующая проблема:
На одну из ветвей диалога вешаю вот такой скрипт: NSS const float SND_DURATION=5.0; void main() { ClearAllActions(); ActionWait(1.5); ActionDoCommand(PlaySound("sound_2")); ActionWait(SND_DURATION); ActionStartConversation(GetPCSpeaker(), "dialog_name", FALSE, FALSE); } По идее, NPC должен чуть подождать (1.5 сек), проиграть звук, а потом начать диалог. А он ждет 5 секунд (SND_DURATION), а затем начинает диалог и параллельно проигрывает звук. Где у меня неправильно?.. |
![]()
Сообщение
#2296
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
NSS const float SND_DURATION=5.0; void main() { ClearAllActions(); DelayCommand(1.5, ActionDoCommand(PlaySound("sound_2"))); DelayCommand(SND_DURATION+1.5, ActionStartConversation(GetPCSpeaker(), "dialog_name", FALSE, FALSE)); } Ждет полторы секунды, играет звук, ждет 5 секунд, начинает диалог. |
![]()
Сообщение
#2297
|
|
Level 8 ![]() ![]() ![]() Класс: Паладин Характер: Lawful Good Раса: Полуэльф ПОДМАСТЕРЬЕ ![]() |
kreon, прикинь - не работает!
А вот что написано в лексиконе: QUOTE This might not be an actual bug, but though PlaySound isn't an action (you don't get the little yellow square on the screen), if you assign a PlaySound to someone, it will wait for their current action queue to finish before playing. Сейчас буду извращаться на тему... |
![]()
Сообщение
#2298
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
Гмм.. ща тоже чего-нить попробую... Я думал что ошибка в ActionWait(), т.к. действия воспроизведения звука не вейтятся вроде...
. А, идея повяилась... Сделать SetCommandable(FALSE) (нечего будет ждать), воспроизвести звук и потом дать команду диалога. Сообщение отредактировал kreon - Jun 2 2006, 20:47 |
![]()
Сообщение
#2299
|
|
Level 8 ![]() ![]() ![]() Класс: Паладин Характер: Lawful Good Раса: Полуэльф ПОДМАСТЕРЬЕ ![]() |
Итак, злобно извратившись, я добился того, чего хотел.
Вот так: Родительский скрипт: NSS void main() { object oSelf=OBJECT_SELF; ClearAllActions(); DelayCommand(1.5, PlaySound("sound_1")); DelayCommand(1.5, ExecuteScript("play1", oSelf)); } Скрипт play1: NSS const float SND_DURATION=3.0;
void main() { ActionWait(SND_DURATION); ActionStartConversation(GetPCSpeaker(), "dialog_1", FALSE, FALSE); } Сообщение отредактировал Kavin - Jun 2 2006, 20:56 |
![]()
Сообщение
#2300
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
а нафига так то?
NSS void main() { ClearAllActions(); DelayCommand(1.5, PlaySound("sound_1")); ActionWait(SND_DURATION + 1.5); ActionStartConversation(GetPCSpeaker(), "dialog_1", FALSE, FALSE); } те звук через делей, остальное в стек. ну или взять вариант Креона и выкинуть там ActionDoCommand, ибо в том варианте под задержкой он нафиг не нужен. В стек стремно по 1 причине - можно сбить. Поэтому можно подстраховаться и стек закрыть (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2301
|
|
Level 8 ![]() ![]() ![]() Класс: Паладин Характер: Lawful Good Раса: Полуэльф ПОДМАСТЕРЬЕ ![]() |
Lex, попробовал - не сработало. Если верить лексикону, то получается, что PlaySound() не выполняется до тех пор, пока в стеке что-то есть. Глюк биоваревский. Т.е. очередь действий кончилась - начался звук.
Поэтому нужно делать так, чтобы PlaySound срабатывал, когда стек пуст, а затем он начинал заполняться. Разница в доли секунды получится, и глазу юзера будет незаметна. |
![]()
Сообщение
#2302
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
NSS void ANIMATION(object oD) { int A=0; float T,S; switch (Random(8)+1) { case 2: A=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD;T=3.0;S=1.0;break; case 3: A=ANIMATION_FIREFORGET_TAUNT;T=3.0;S=1.0;break; case 4: A=ANIMATION_FIREFORGET_PAUSE_BORED;S=1.0;break; case 5: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break; case 6: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break; } if (A==0) return; AssignCommand(oD,PlayAnimation(A,S,T)); } void DIALOG(object oD1,object oD2) { string s1="",s2=""; string ya = GetName(GetObjectByTag("ya")); switch (Random(30)) { case 0: s1="×òî ìû òåïåðü äåëàòü-òî áóäåì?";s2=" Íåçíàé! Âðåìÿ ïîêàæåò...";break; case 1: s1="À ó íàñ åñòü ÷å ïîåñòü òî, à?";s2="Ñõîäèì â òàâåðíó, òàì äîëæíû áûòü áîè, íàâåðíÿêà ìîíåòêè òî ïîñûïÿòñÿ íà çåìëþ, õåõå...";break; case 2: s1="Ó ìåíÿ â æèâîòå óð÷èò";s2="Òàê ñõîäè, ïîåøü, ñòàðóøêà äðÿõëàÿ ìîÿ!";break; case 3: s1="À íàøà äî÷êà íàâåðíî æèâåò ñ÷àñòëèâîé æèçíü...";s2="Ïðèøåë áû ÿ äîìîé íà ïÿòü ìèíóò ðàíüøå, ÿ áû èç Ñàí÷åçà âñþ äóðü òî âûáèë!! Ýõ ÿ åìó...";break; } AssignCommand(oD1,SpeakString(s1)); AssignCommand(oD2,DelayCommand(5.0,SpeakString(s2))); } void main() { object oPC = GetFirstPC(); if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return; object oD1 = GetNearestObjectByTag("oldman1"); object oD2 = GetNearestObjectByTag("oldwoman1"); if (GetIsInCombat(oD1)) return; if (GetIsInCombat(oD2)) return; if ( (IsInConversation(oD1)) || (IsInConversation(oD2)) ) return; if (GetDistanceToObject(oPC)>10.0) return; AssignCommand(oD1,SetFacingPoint(GetPosition(oD2))); AssignCommand(oD2,SetFacingPoint(GetPosition(oD1))); DIALOG(oD1,oD2); ANIMATION(oD1); ANIMATION(oD2); } Два вопроса. 1 - почему не составляется(хотя в игре все ОК) 2 - почему НПСы болтают вроде бы, но не слова не появляется!? PS 1 - при английских словах все ОК 2 - при английских словах такаяже лажа(IMG:style_emoticons/kolobok_light/sad.gif) |
![]()
Сообщение
#2303
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
1.
Избавляйся от маленькой буквы я, либо ставь патч от dumbo. NSS ... "Избавл"+ya+"йся" ... 2. Ты точно указал таги NPC ? Сообщение отредактировал Dik Morris - Jun 6 2006, 17:06 |
![]()
Сообщение
#2304
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(..::SERGO::.. @ Jun 6 2006, 17:35) [snapback]83853[/snapback] switch (Random(30)) а кейса 4. У тебя вероятность 4 к 30 что раз в 6 секунд они что-то скажут. + смотри, там же стоит проверка на дистанцию: те если игрок далеко, то фраз видно не будет. ЗЫ: хм.. лучше поменять очередность.. анимация, потом проверка на дистанцию, потом слова. Так реалистичнее |
![]()
Сообщение
#2305
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(..::SERGO::.. @ Jun 6 2006, 17:35) [snapback]83853[/snapback] Два вопроса. 1 - почему не составляется(хотя в игре все ОК) 2 - почему НПСы болтают вроде бы, но не слова не появляется!? PS 1 - при английских словах все ОК 2 - при английских словах такаяже лажа SERGO, у тебя не правильно составлены стринги. Смотри как надо, и правь последнею строку сам. Если скрипт стоял на ХБ перса, то скрипт поэтому и не работал, он написан у тебя для работы с третьего перса. Маленький совет: копируй скрипт при русском шрифте в обоих редакторах, как в редакторе скриптов, так и в текстовом редакторе, должен стоять русский шрифт. NSS void ANIMATION(object oD)
{ int A=0; float T,S; switch (Random(5)+1) { case 2: A=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD;T=3.0;S=1.0;break; case 3: A=ANIMATION_FIREFORGET_TAUNT;T=3.0;S=1.0;break; case 4: A=ANIMATION_FIREFORGET_PAUSE_BORED;S=1.0;break; case 5: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break; case 6: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break; } if (A==0) return; AssignCommand(oD,PlayAnimation(A,S,T)); } void DIALOG(object oD1,object oD2) { string s1="",s2=""; string ya = GetName(GetObjectByTag("ya")); switch (Random(30)) { case 0: s1="Что мы теперь делать-то будем? ";s2="Не знаю! Врем"+ya+" покажет…";break; case 1: s1="А у нас есть че поесть-то, а? ";s2="Сходим в таверну, там должны быть бои, навер"+ya+"ка монетки-то посып"+ya+"тс"+ya+" на землю, хе-хе…";break; case 2: s1="У мен"+ya+" в животе урчит… ";s2="Так сходи, поешь, старуха др"+ya+"хла"+ya+" мо"+ya+"!";break; case 3: s1="А наша дочка наверно живет счастливой жизнью… ";s2="Пришел бы Я домой на пЯть минут раньше, Я бы из Санчеса всю дурь то выбил!! Эх Я ему…";break; } AssignCommand(oD1,SpeakString(s1)); AssignCommand(oD2,DelayCommand(5.0,SpeakString(s2))); } void main() { object oPC = GetFirstPC(); if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return; object oD1 = GetNearestObjectByTag("oldman1"); object oD2 = OBJECT_SELF; if (GetIsInCombat(oD1)) return; if (GetIsInCombat(oD2)) return; if (IsInConversation(oD1) || IsInConversation(oD2)) return; if (GetDistanceToObject(oPC)>10.0) return; AssignCommand(oD1,SetFacingPoint(GetPosition(oD2))); AssignCommand(oD2,SetFacingPoint(GetPosition(oD1))); DIALOG(oD1,oD2); ANIMATION(oD1); ANIMATION(oD2); } Сообщение отредактировал gennady - Jun 7 2006, 15:17 |
![]()
Сообщение
#2306
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE object oD2 = OBJECT_SELF; Так я же ставил на "ХБ невидимого обьекта между ними" Не пашет, все есть, токо слов не видно(IMG:style_emoticons/kolobok_light/sad.gif) |
![]()
Сообщение
#2307
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(gennady @ Jun 7 2006, 07:37) [snapback]83894[/snapback] Если скрипт стоял на ХБ перса, то скрипт поэтому и не работал, он написан у тебя для работы с третьего перса он написан для стороннего контроллера и на его (контроллера) ХБ и стоит. QUOTE(..::SERGO::.. @ Jun 7 2006, 13:04) [snapback]83897[/snapback] Не пашет, все есть, токо слов не видно я тебе сказал, в чем дело скорее всего. У тебя 4 пары фраз? Ну так ставь Рандом(5) а не 30. ____ кстати делай фразы покороче. Большие объемы текста выглядят не очень. QUOTE(gennady @ Jun 7 2006, 07:37) [snapback]83894[/snapback] if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return; // Эта проверка здесь лишнЯЯ. Есть проверка дистанции… не лишняя. Проверка дистанции, если игрок не в локации, даст -1.0, а это меньше 10. Так что проверка на своем месте. Тем более читай выше (поставить проверку дистанции после анимации, но до текста) __ ЗЫ: у меня в Тсурле этот скрипт и его модификации различные пашут без проболем. Если проблема не в том, что я написал выше, у тебя верные тэги и условия соблюдены, в ХБ неписей ничего сбивающего не стоит, то я хз, почему у тебя не работает. |
![]()
Сообщение
#2308
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(..::SERGO::.. @ Jun 7 2006, 13:04) [snapback]83897[/snapback] Так я же ставил на "ХБ невидимого обьекта между ними" Не пашет, все есть, токо слов не видно У меня скрипт пахал на ХБ перса, по скрипту я понял, что у тебя он стоял на невидимом объекте, для данного скрипта он в принципе лишний. Можешь вернуть NSS object oD2 = GetNearestObjectByTag("oldwoman1"); Будет усё пахать, только правильно настрой свойства невидимого объекта. Поставь галку - сюжет Убери галку - статик Убери галку – используемый Но может и глючить, желательно все же ставить «используемый», т.ч. лучше выкидай этот объект. Проверка дистанции, если игрок не в локации, даст -1.0, а это меньше 10. Точно, Лекс прав. Ну, и голова! Сообщение отредактировал gennady - Jun 7 2006, 15:14 |
![]()
Сообщение
#2309
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
можно просто без галки статик, у меня все контроллеры такие. Используемый - не обязательно совершенно. Не глючит при этом никогда.
|
![]()
Сообщение
#2310
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
АА! в задницу все! (IMG:style_emoticons/kolobok_light/declare.gif) Можно ли это заточить только под одного персонажа(типа торговца, который выкрикивает весь день)
|
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 00:28 |