![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3021
|
|
Level 5 ![]() ![]() Класс: Разведчик Арфистов Характер: Chaotic Good Раса: Эльф ![]() |
У меня вопрос. Самый простейший скрипт и не получается! (IMG:style_emoticons/kolobok_light/sad.gif)
Когда ПС появляется в области триггера, над ним появляется выплывающий текст. Я делаю триггер, в слоте Оn_Еnter делаю такой скрипт NSS void main() { if (GetLocalInt(OBJECT_SELF,"ENTERED")!=1)return; object oPC=GetEnteringObject(); if (!GetIsPC((oPC))) return; else { AssignCommand(oPC, ClearAllActions()); AssignCommand(oPC,ActionSpeakString("собсно мой текст")); SetLocalInt(OBJECT_SELF,"ENTERED",1); } } Вроде все правильно тем не менее ничего не выходит, в чем моя ошибка? Сообщение отредактировал Arilyn Moonblade - Mar 7 2007, 12:52 |
![]()
Сообщение
#3022
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
угу вродебы понял пасибо... буду пробовать...
|
![]()
Сообщение
#3023
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Arilyn Moonblade, хех, 3 строчка: if (GetLocalInt(OBJECT_SELF,"ENTERED")!=1)return; Из-за нее скрипт ни когда не выполнется, так как в начале переменная действительна не равна 1 (да же если такой переменной еще и нету). Ну и соответственно строчка SetLocalInt(OBJECT_SELF,"ENTERED",1); не выполница, и скрипт так и не сдвинется с мертвой точки.
|
![]()
Сообщение
#3024
|
|
Level 5 ![]() ![]() Класс: Разведчик Арфистов Характер: Chaotic Good Раса: Эльф ![]() |
Усе понял! (IMG:style_emoticons/kolobok_light/slow.gif)
|
![]()
Сообщение
#3025
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
(IMG:style_emoticons/kolobok_light/sad.gif) так пока про спам никто презнаваться нихочет... немного отложим то чтоестьрасмотрим другую структуру.
есть два тригера на onEnter первогостоит NSS void main() { object oTrig1=GetObjectByTag("Perd_Deru"); object oTrig2=GetObjectByTag("Za_Deru"); object oSt=GetObjectByTag("Strag"); object oSh=GetObjectByTag("Shaman"); if (GetLocalInt(oTrig2, "TriggerState")) { DestroyObject(oSt,0.0); DestroyObject(oSh,0.0); DestroyObject(oSt,0.0); SetLocalInt(oTrig2, "TriggerState",0); } else { SetLocalInt(oTrig1, "TriggerState",1); } } на onEnter второго NSS void main() { object oTrig1=GetObjectByTag("Perd"); object oTrig2=GetObjectByTag("Za"); location lStart_1=GetLocation(GetObjectByTag("WP_1")); location lStart_2=GetLocation(GetObjectByTag("WP_2")); location lStart_3=GetLocation(GetObjectByTag("WP_3")); if (GetLocalInt(oTrig1, "TriggerState")) { CreateObject(OBJECT_TYPE_CREATURE,"VoinH",lStart_1,FALSE,"Strag"); CreateObject(OBJECT_TYPE_CREATURE,"ShamanH",lStart_2,FALSE,"Shaman"); CreateObject(OBJECT_TYPE_CREATURE,"VoinH",lStart_3,FALSE,"Strag"); SetLocalInt(oTrig1, "TriggerState",0); } else { SetLocalInt(oTrig2, "TriggerState",1); } } не работает... что должно делать: два тригера один перед дверями второй за при входе в комнату происходит респ при выходе убираються путем ряда тестов пришел к выводу что скорее всего ошибка в NSS if (!GetLocalInt(oTrig1, "TriggerState")) может я чтото не допонимаю в переменных или в условных операторах еще раз просветите Сообщение отредактировал Teranozavr_REX - Mar 7 2007, 16:42 |
![]()
Сообщение
#3026
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
корявая организация: лишние переменные, в которых ты путаешься + сама структура перекручена, самому неудобно ее отслеживать.
+ у тебя в скриптах триггеры берутся по разным тэгам: Perd и Perd_Deru например. |
![]()
Сообщение
#3027
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
*стёрто* пришла нянька ты кнула носом, ошибка в имени тега все заработало))
всем пасибо извените... после прадников продолжем Сообщение отредактировал Teranozavr_REX - Mar 7 2007, 17:48 |
![]()
Сообщение
#3028
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
ну что могу сказать. Отдебаж.
Введи в разных местах NSS SendMessageToPC(GetFirstPC(),"TriggerState="+IntToString(GetLocalInt(oTrig1, "TriggerState"))); узнаешь, где косяк. Или не присваивается, или условие глючит. |
![]()
Сообщение
#3029
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
Это на заметку возьму пасибо
не все еще заработало )) и дебаг веселые вещи показывает пока помучаюсь если не получиться я вернусь)) Сообщение отредактировал Teranozavr_REX - Mar 7 2007, 18:08 |
![]()
Сообщение
#3030
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
все косяки исправил ( вчасносте в определении тригера была рефр сылка а не тег и не работало (IMG:style_emoticons/kolobok_light/sad.gif) )
возникла новая проблема... мне надо проверить есть ли у того кто наступил на тригер некий итем. как сделатьпроверку я знаю вродебы воврос в том как определить\обьявить обект что то типа "тот кто наступил на тригер" |
![]()
Сообщение
#3031
|
|
Level 5 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [Sn] ![]() |
QUOTE(Teranozavr_REX @ Mar 15 2007, 17:38) [snapback]105767[/snapback] воврос в том как определить\обьявить обект что то типа "тот кто наступил на тригер" NSS // The value returned by this function depends on the object type of the caller: // 1) If the caller is a door it returns the object that last // triggered it. // 2) If the caller is a trigger, area of effect, module, area or encounter it // returns the object that last entered it. // * Return value on error: OBJECT_INVALID // When used for doors, this should only be called from the OnAreaTransitionClick // event. Otherwise, it should only be called in OnEnter scripts. object GetEnteringObject() ps: используется на onEnter триггера) |
![]()
Сообщение
#3032
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
пааасибо помогло все прикрасно работает ...
теперь последний так сказать штрих НПС что респиться по событию тригера... должен ити по некоему моршруту... я его проложил точками маршрута... так вот... 1) если просто проложить маршрут точками, то дойдя до конца маршрута НПС, возвращайеться назад, а надо что бы останавливался, это как то можно??? 2) как скриптом заставить НПС ити к поинту ??? 3) возможно ли сделатьчтото типа так: НПС идет к поинту когда доходит уничтожаеться...( как уничтожатьуже нашел... там помойму задержка естьесли я не ошибаюсь до уничтожения если мона пользоваться ею то насколько она будет подтормаживать сервер...) Сообщение отредактировал Teranozavr_REX - Mar 15 2007, 18:35 |
![]()
Сообщение
#3033
|
|
Level 7 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Начало Войны ![]() |
QUOTE(Teranozavr_REX @ Mar 15 2007, 18:32) [snapback]105785[/snapback] 2) как скриптом заставить НПС ити к поинту ??? NSS AssignCommand(oNPC,ActionMoveToObject(GetWayPointByTag("tag")));
|
![]()
Сообщение
#3034
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
пасибо помогло только там GetWaypointByTag если вдруг кто то еще решит воспользоваться))
как повернуть НПС так что бы он смотрел в заданом направлении?? |
![]()
Сообщение
#3035
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
SetFacing(...)
SetFacingPoint(...) лексикон бы скачал и не парился |
![]()
Сообщение
#3036
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
Дальше
слот OnUsed как определить обьект (плеера) кторый использовал предмет??? P.S с вами получаеться куда лудше и быстрее а главное веселее а пролексикон уже писал естьон уменя не помогает(( Сообщение отредактировал Teranozavr_REX - Mar 16 2007, 18:57 |
![]()
Сообщение
#3037
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
омг.. ну если не Лексикон, то хоть фильр функций в скрипт-редакторе попользуй. Например попробуй саааамый тупой вариант - написать в фильтр слово "use". О!! Чудо!! Среди прочих было
NSS GetLastUsedBy(); Колдовство, ей богу. Сам не понимаю, как оно так получилось. |
![]()
Сообщение
#3038
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Небывальщина... (IMG:style_emoticons/kolobok_light/smile.gif)
QUOTE(Teranozavr_REX @ Mar 15 2007, 18:32) [snapback]105785[/snapback] 3) возможно ли сделатьчтото типа так: НПС идет к поинту когда доходит уничтожаеться...( как уничтожатьуже нашел... там помойму задержка естьесли я не ошибаюсь до уничтожения если мона пользоваться ею то насколько она будет подтормаживать сервер...) Можно триггером на "месте прибытия", который уничтожит нужный объект. Но лучше построить очередь действий: выглядеть будет примерно так: NSS AssignCommand(oNPC,ActionMoveToObject(GetWayPointByTag("tag"))); ... AssignCommand(oNPC,ActionDoCommand(DestroySelf(...)))); Чтобы очереть не сбилась "по пути" ее надо закрыть (SetCommandable). |
![]()
Сообщение
#3039
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
Доброе время суток, и снова свами я, со своими вопросами
два скриптика точнее наверное всегонавсегострочки интересуют 1) как сделать так что бы Чар получил бонус АС (скажем додж) на какой то интервал времени 2) как сделатьтак что бы Чар получил бонус к с килу (скажем Лоре) на какой то интервал времени P/S обе эти вещи закручю на палочку... при использовании думаю должнополучиться) Сообщение отредактировал Teranozavr_REX - Apr 3 2007, 15:27 |
![]()
Сообщение
#3040
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
см описания функций:
Neverwinter Script Source ApplyEffectToObject()
EffectSkillIncrease() EffectACIncrease() |
![]()
Сообщение
#3041
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
Neverwinter Script Source #include "x2_inc_switches" void main() { int nEvent = GetUserDefinedItemEventNumber(); if(nEvent == X2_ITEM_EVENT_ACTIVATE) { object oPC=GetLastUsedBy(); effect eACDodg=EffectACIncrease(20,AC_DODGE_BONUS,AC_VS_DAMAGE_TYPE_ALL); ApplyEffectToObject(1,eACDodg,oPC,1.0); SendMessageToPC(oPC,"TEST"); } } И снова я. Я тут как не мучался, не заработало. Уже пол дня сижу. Но день закончлся и мне пора может кто до утра поймет в чем тут ошибка. что должно делать есть итем с тегом А (бутылочка на которой висит использовать1 раз вдень) есть скрипт с именем А ( собственноон прикреплен в начале) мало того что нет ожидаемого эфекта ( а именно 20 додж ас) так даже на строку дебага нереагирует ... да и так и не понял что дает первый параметр у ApplyEffectToObject |
![]()
Сообщение
#3042
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(Teranozavr_REX @ Apr 4 2007, 19:02) [snapback]106813[/snapback] да и так и не понял что дает первый параметр у ApplyEffectToObject DURATION_TYPE - тип наложения эффекта. Примерно вот так: TEMPORARY - временный INSTANТ - постоянный PERMANENT - разовый Разница между INSTANT и PERMANENT весьма зыбкая.. но некоторые эффекты накладываются только каким-то одним (из этих 2х) образом. Подробнее см. описания или лексикон. по скрипту: Neverwinter Script Source object oPC=GetLastUsedBy(); не канает. Читай описание функции. Тебе нужна функция связанная с использованием предмета, а не взаимодействием с объектом. GetLastItemActivator() - вроде такая. |
![]()
Сообщение
#3043
|
|
Level 2 ![]() Класс: Фея Характер: Chaotic Good Раса: Фея ![]() |
DURATION_TYPE_PERMANENT это разновидность DURATION_TYPE_TEMPORARY, только при PERMANENT таймер эффекта вообще не крутится, то есть эффект будет держаться вечно(пока не будет отдиспелен). То есть, точнее:
разница между INSTANT и (PERMANENT\TEMPORARY) весьма зыбкая.. Вместо таких громоздких констант удобнее использовать их значения: DURATION_TYPE_INSTANT = 0 DURATION_TYPE_TEMPORARY = 1 DURATION_TYPE_PERMANENT = 2 В ApplyEffectToObject(1,eACDodg,oPC,1.0); используется TEMPORARY(первый параметр) на длительность __1 сек__(4ый параметр). SendMessageToPC(oPC,"TEST"); Для отладки лучше всегда использовать: SendMessageToPC(GetFirstPC(),"TEST"); а если бы Teranozavr_REX использовал SendMessageToPC(GetFirstPC(),"debug:"+GetName(oPC)); то потратил бы на отладку всего пару минут. Сразу понял бы где ошибка. Если отлаживать надо много мест в скрипте, то лучше вывод сообщений отладки сделать через свою функцию: Neverwinter Script Source #include "......." void debugm(str string){ SendMessageToPC(GetFirstPC(),"debug: "+str); } void main() { ... debugm("messaga tyt"); ... } Тогда глаза не будут так разбегаться от обилия кода. Кому как, мне вынос кусков кода в функции сильно помогает(где это возможно). |
![]()
Сообщение
#3044
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(diggers @ Apr 5 2007, 02:10) [snapback]106824[/snapback] DURATION_TYPE_PERMANENT это разновидность DURATION_TYPE_TEMPORARY, только при PERMANENT таймер эффекта вообще не крутится, то есть эффект будет держаться вечно(пока не будет отдиспелен). наверное. Хотя вроде были случаи, когда это неверно (для визуалок), но я так навскидку их не вспомню. Но на практике обычно получалось так: если нужен временный эффект - темпорари, а если постоянный, то инстант/перманент, в зависимости от описания. Цитата(diggers @ Apr 5 2007, 02:10) [snapback]106824[/snapback] Вместо таких громоздких констант удобнее использовать их значения: DURATION_TYPE_INSTANT = 0 DURATION_TYPE_TEMPORARY = 1 DURATION_TYPE_PERMANENT = 2 тоже не сказал бы. Читать удобнее константы. Цитата(diggers @ Apr 5 2007, 02:10) [snapback]106824[/snapback] то потратил бы на отладку всего пару минут. Сразу понял бы где ошибка. я потратил пару секунд чтобы понять, что не приходит сообщение потому что oPC определен неверно. Так что все относительно (IMG:style_emoticons/kolobok_light/smile.gif) . Но вынос функции дебага эт правильный ход, вроде как все так делают. |
![]()
Сообщение
#3045
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Good Раса: Нежить ![]() |
всем спасибо заработало...
как написать условие используют только (список класов) и если есть хоть какой то другой класс то предмет не используеться... может есть какаято командочка ??? потому что мне пока только на ум приходит проверить через Neverwinter Script Source GetLevelByClass по всем классам которые не должны использовать а так как таких намногобольше чем тех ктоиспользует получаеться очень громоздкое условие |
![]() ![]() |
Текстовая версия | Сейчас: 29th July 2025 - 12:53 |