Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
justshurik
ТОЧНО!!! как я сам не додумался! спасибо!
Xfans
Цитата(Ilerien @ Jun 14 2008, 15:07) *
А мы баньшой, баньшой... Фокус на некро имеется smile.gif
Всё очень просто, нужно заменить
Neverwinter Script
RemoveHenchman(oPC, GetHenchman(oPC));
на
Neverwinter Script
RemoveHenchman(oPC, GetHenchman(oPC, 2));

Ну а мы этой Баньши не очень-то боимся. От магии смерти тож много защит есть=)))
А почему иногда при перезагрузке хенчи меняются местами? Сначала один был сверху pardon.gif , а потом другой сверху оказывается. (соответственно, который из них 1-й, а который 2-й?)
Ilerien
Цитата
А почему иногда при перезагрузке хенчи меняются местами? Сначала один был сверху , а потом другой сверху оказывается. (соответственно, который из них 1-й, а который 2-й?)
При перезагрузке чего? smile.gif Save-Load, что ли?) Первый - скорее всего тот, что выше в списке партии, но я в этом не уверен. Поэкспериментируй smile.gif Сделай итем, который при юзе будет выдавать имена хенчей в порядке возрастания их номеров.
Xfans
Цитата(Ilerien @ Jun 15 2008, 12:39) *
При перезагрузке чего? smile.gif Save-Load, что ли?) Первый - скорее всего тот, что выше в списке партии, но я в этом не уверен. Поэкспериментируй smile.gif Сделай итем, который при юзе будет выдавать имена хенчей в порядке возрастания их номеров.

Ой! Это много хуже баньши=) Когда игру сохраняешь, а потом снова с сейва заходишь, портрет Даэлана (например) сидит сразу под портретом ПС, хотя когда сохранялись, он был под Лину (например). В другой раз зайдешь, портрет Лину выше scratch_one-s_head.gif
А вообще еще заинтересовала одна вещь: по идее хенч, когда он нанят, ведет себя одним образом, а когда не нанят, что-то может быть по-другому. Как задать поведение ненанятого хенча? Неохота делать двух одинокавых НПС с разными скриптами.
Ilerien
Нужно копаться в аи smile.gif
Xfans
Цитата(Ilerien @ Jun 15 2008, 13:50) *
Нужно копаться в аи smile.gif

В чьем? У нас своего нет. Для ньюбов объясни, плиз, где покопаться надо. (лопата уже при себе имеется)
Lirulin
Еще один вопрос про посажение на стулья=) Почему если на кресло перс садится, то слишком "проваливается"? (сиденье оказываеся выше его ног). Надо как-то отдельно прописывать на какой высоте должен находиться сидящий объект? Или просто смириться с неизбежным? (я уж не говорю про то, как выглядела попытка перса сесть на кровать=))))
Ilerien
Надо сделать статичную кровать/кресло/etc и обжект с названием "кресло" или какое там тебе нужно, с моделькой "невидимый объект". В onUsed этого обжекта и засунуть сажающий скрипт, обжект "положить" на кресло (высоту можно отрегулировать).
Цитата
В чьем? У нас своего нет. Для ньюбов объясни, плиз, где покопаться надо. (лопата уже при себе имеется)
Ты скажи, что конкретно нужно. Аи большой smile.gif Рыться - в скриптах nw_c2_default*. Вообще, аи в нвне, имхо, самое сложное для скриптера.
Lirulin
Цитата(Ilerien @ Jun 15 2008, 17:48) *
Надо сделать статичную кровать/кресло/etc и обжект с названием "кресло" или какое там тебе нужно, с моделькой "невидимый объект". В onUsed этого обжекта и засунуть сажающий скрипт, обжект "положить" на кресло (высоту можно отрегулировать).

Спасибо, так и сделаю! А для "положения" перса на кровать или коврик тоже надо делать невидимый объект? (я помню, что скрипты как положить я тут видел, но вот как бы он опять не провалился ПОД кровать! biggrin.gif )

А, вот еще... есть такой скрипт:
Neverwinter Script
void main()
{
    object oPlayer;
    int nRequiredXP, nXPDelta;

    oPlayer = GetPCSpeaker();
    nRequiredXP=190000;

    nXPDelta = nRequiredXP - GetXP(oPlayer);
    if ( nXPDelta <= 0 )
    {
        SetXP(oPlayer,nRequiredXP);
    }
    else
    {
        GiveXPToCreature(oPlayer,nXPDelta);
    }
}


Как сделать так, чтобы если опыта уже больше 190000, не урезалось бы до этих самых 190000?

P.S. Попробовал я с invisible object'ом - странное дело - проваливается все равно (хотя я этот инвизибл уже даже выше кресла поднял), так еще и физией строго на восток садится! Как ни крути=((()
Вот кадр
Xfans
Цитата(Ilerien @ Jun 15 2008, 15:48) *
Ты скажи, что конкретно нужно. Аи большой smile.gif Рыться - в скриптах nw_c2_default*. Вообще, аи в нвне, имхо, самое сложное для скриптера.

Вообще-то мы задумали, чтобы хенч сидел пока его не наймут. Так вот как сделать, чтобы он не бежал садиться, если его наняли. Нельзя просто поставить на heartbeat условие, чтобы он сидел при условии, что Master = OBJECT_INVALID?
Ilerien
Цитата
P.S. Попробовал я с invisible object'ом - странное дело - проваливается все равно (хотя я этот инвизибл уже даже выше кресла поднял), так еще и физией строго на восток садится! Как ни крути=((()
Обжект ещё повернуть надо smile.gif Там просто моделька кресла кривая такая, ничего не сделать.
Цитата
Как сделать так, чтобы если опыта уже больше 190000, не урезалось бы до этих самых 190000?
Neverwinter Script
const int nRequiredXP = 190000;

void main()
{
    object oPC = GetPCSpeaker();

    if (GetXP(oPC) < nRequiredXP)
        SetXP(oPC, nRequiredXP);
}
Цитата
А для "положения" перса на кровать или коврик тоже надо делать невидимый объект?
С кроватью сложнее, вроде как в стандартных тайлах интерьера зашито, что по кровати нельзя ходить, а, значит, телепорт на неё приведёт к глюкам. Так что скорее всего на кровать максимум получится сесть с помощью того же невидимого обжекта. С ковриком проще, если он лежит на walkable тайле, просто сделать невидимый обжект, в юз которого сунуть лежание на коврике smile.gif
Цитата
Вообще-то мы задумали, чтобы хенч сидел пока его не наймут. Так вот как сделать, чтобы он не бежал садиться, если его наняли. Нельзя просто поставить на heartbeat условие, чтобы он сидел при условии, что Master = OBJECT_INVALID?
C nw_c2_default* я наврал, у хенчей по идее другие скрипты, но не суть smile.gif Можно и в хербит такую проверку, если производительности не жалко wink3.gif
denis0k
Цитата
так еще и физией строго на восток садится! Как ни крути
Невидимая табуретка - далеко не панацея. Если плейс расположен выше уровня пола, то как ни крути, чар садится мордой на восход. Кстати, высота плейса над полом не влияет на высоту расположения чара, хоть под потолок его ставь, сядет чар как обычно, это в анимации наглухо зашито.
shadowdweller
Цитата(Xfans @ Jun 15 2008, 22:32) *
Вообще-то мы задумали, чтобы хенч сидел пока его не наймут. Так вот как сделать, чтобы он не бежал садиться, если его наняли.

Цитата(Ilerien @ Jun 15 2008, 23:05) *
у хенчей по идее другие скрипты

Вопрос давно меня мучает - насколько я знаю, у хенча там просто целый комплект скриптов выставляется, если не ошибаюсь, называется set_xp1_henchman.ini
Так вот собственно, вопрос - можно ли как-то, допустим, скриптом из диалога заменить у НПС набор скриптов в свойствах? То есть сначала он действует как НПС, можно прописать ему анимацию и т.д., а как только игрок поговорил с ним и нанял, набор скриптов меняется на тот, что у должен быть у хенча?
azathoth
в нвн1 так просто нельзя. но можно наверное создать свой набор скриптов в каждый слот типа:

Neverwinter Script
void main()
{
    object oHenchman = OBJECT_SELF;
    if (ХенчманЛи(oHenchman)) // GetIsPC(GetMaster(oHenchman)) Ы?
    {
        ExecuteScript("соответсвующий_скрипт_для_хенчмана", oHenchman);
    }
    else
    {
        ExecuteScript("соответствующий_скрипт_для_неписи_обыкновенно
й", oHenchman); // nw_c2_default* Ы?
    }
}
Lirulin
Цитата(Ilerien @ Jun 16 2008, 01:05) *
С кроватью сложнее, вроде как в стандартных тайлах интерьера зашито, что по кровати нельзя ходить, а, значит, телепорт на неё приведёт к глюкам. Так что скорее всего на кровать максимум получится сесть с помощью того же невидимого обжекта.

Я попробовал хотя бы посадить. Оно село в центр кровати! Прям так, насквозь=) Ниче видок был. Рисковать тогда с "положить" не буду rolleyes.gif


Цитата(denis0k @ Jun 16 2008, 02:45) *
Невидимая табуретка - далеко не панацея. Если плейс расположен выше уровня пола, то как ни крути, чар садится мордой на восход. Кстати, высота плейса над полом не влияет на высоту расположения чара, хоть под потолок его ставь, сядет чар как обычно, это в анимации наглухо зашито.

А почему на диванчики садится мордой куда надо? (т.е. прямо) Как вообще вычислить, на какой предмет мебели садить можно, а на какой - лучше не стоит смешить людей?
Xfans
Цитата(Ilerien @ Jun 16 2008, 01:05) *
C nw_c2_default* я наврал, у хенчей по идее другие скрипты, но не суть smile.gif Можно и в хербит такую проверку, если производительности не жалко wink3.gif

А производительность сильно пострадает? Мы не он-лайн делаем, потому тормозить сильно не должно.
А еще можно ли поставить ограничение на полное имя ПС? Не допустить в модуль ПС с конкретным именем. Чтобы герой сам с собой не встретился в темном углу. crazy.gif Мы так поняли, что надо соединить две стринги, а потом ставить условие. Вот нашли в Лексиконе два куска скрипта, но не понимаем, как на базе этого сделать то, что нам нужно.

Neverwinter Script
string sFullName = "John" + " " + "Doe";


Neverwinter Script
struct strName
{
     string First;
     string Last;
};

void main()
{
     struct strName test;

     // dot operator assignment
     test.First = "Bob";
     test.Last = "Dobbs";

     // dot operator access
     string sFname = test.First;
     string sLname = test.Last;
    

}


Цитата(Lirulin @ Jun 16 2008, 15:02) *
Я попробовал хотя бы посадить. Оно село в центр кровати! Прям так, насквозь=) Ниче видок был. Рисковать тогда с "положить" не буду rolleyes.gif

Кажется в Леворе мы видели, чтобы ПС лежал на кровати, но как это сделать, не знаемsad.gif
denis0k
Цитата
А почему на диванчики садится мордой куда надо? (т.е. прямо) Как вообще вычислить, на какой предмет мебели садить можно, а на какой - лучше не стоит смешить людей?
Чтобы чар смотрел в нужную сторону, плейс должен быть точно на уровне пола. Все стандартные плейсы для сидения банально имеют одну высоту, на них чар выглядит нормально. Помнится есть в стандартной комплектации каменные скамейки (большие такие) - вот в них чар немного тонет.

Вычислить легко - методом научного тыка.
azathoth
Цитата
Вот нашли в Лексиконе два куска скрипта, но не понимаем, как на базе этого сделать то, что нам нужно.

слепить вместе? смешать, но не взбалтывать?
Neverwinter Script
if (GetName(GetFirstPC()) == "Лорд Нэшер Собственной Персоной")
{
    // OMG АХТУНГ-АХТУНГ!!! LOGIC SCRAMBLED!!! НАРУШЕНИЕ КВАНТОВОЙ НЕОПРЕДЕЛЁННОСТИ!!!
}


Цитата
Кажется в Леворе мы видели, чтобы ПС лежал на кровати, но как это сделать, не знаем

существует .hak как раз этому посвящённый, только вот как называется - не помню.
Xfans
Цитата(azathoth @ Jun 16 2008, 20:33) *
слепить вместе? смешать, но не взбалтывать?
Neverwinter Script
if (GetName(GetFirstPC()) == "Лорд Нэшер Собственной Персоной")
{
    // OMG АХТУНГ-АХТУНГ!!! LOGIC SCRAMBLED!!! НАРУШЕНИЕ КВАНТОВОЙ НЕОПРЕДЕЛЁННОСТИ!!!
}

А в игре это как выразится? Типа ПС сразу погиб что ли? (как в Леворе) Или ему посто вылезет предупреждение "поменяй имя"? И куда этот скрипт вставлять? На Enter Module?
Ilerien
Цитата
А в игре это как выразится? Типа ПС сразу погиб что ли? (как в Леворе) Или ему посто вылезет предупреждение "поменяй имя"? И куда этот скрипт вставлять? На Enter Module?
На заход в модуль. Что с игроком произойдёт - это нужно вписать в блок.
Neverwinter Script
object oPC = GetEnteringObject();
if(GetName(oPC) == "имя")
{
    ApplyEffectToObject(DURATION_TYPE_INSTANT, oPC, SupernaturalEffect(EffectDeath())); // например, эта строчка убьёт игрока с неугодным именем
    BootPC(oPC); //а эта выкинет его из модуля
}
Цитата
Кажется в Леворе мы видели, чтобы ПС лежал на кровати, но как это сделать, не знаем
Нужны walkable тайловые кровати smile.gif
Lamonde
Всем превеД.
Сразу к вопросу перейду к вопросу, чтобы не напрягать никому моСки. smile.gif
Почитал вот тут
http://www.city-of-masters.ru/forums/index...ost&p=19372
и вот тут
http://www.city-of-masters.ru/forums/index...ost&p=19385
как делать спеллы и с чем их едят.

Пытался сделать то, что написано - вышло вот как.
Захожу в игру, открываю книгу заклятий, а там 4 спелла (вместо 1 с развитвлениями) :

1. Превращения в дракона
2. Синий
3. Красный
4. Черный

Спеллы запоминаются и после реста становятся активными, но при активации, курсор так и остается серым (ни на себя, ни на локу не кастануть). В чем проблема, так и не разобрался. Если не трудно, можно было бы показать все 4 строчки в 2да спеллов?

============

Решил сделать свой спел с нуля (телепортация в точку падения выпущенного спелла). Все вышло, все работает. Очень рад. Но проблема с развлетвлениями, не получившаяся в первом примере, не дает покоя.

П.С. Автору Ф.А.К.-а большей Респект, сам бы годы потратил, чтобы подобное узнать.

Lex
Цитата(Lamonde @ Jun 17 2008, 07:11) *
но при активации, курсор так и остается серым (ни на себя, ни на локу не кастануть). В чем проблема, так и не разобрался.

неправильные данные в столбце, который отвечает за цель заклинания (на карту, на объект, на себя). Посмотри описание спелл.2да более внимательно и посмотри что в этом столбце стоит у того заклинания, которое наиболее близко тебе по смыслу (те в случае с превращением это будет полиморф какой-нить).

про разветвления там тоже подробно написано. Надо в "материнском" заклинании в одном из столбов поставить отметку что есть подзаклинания. А у подзаклинаний должен быть линк на материнское.
Lamonde
Так я так и сделал. Главному спеллу указал на 3 под-спелла, а подспеллам, указал на "мастера".

С "неработающими" спеллами уже разобрался. smile.gif //проблема была в том, что я невольно глянул не на страницу со спеллкоделкой, а на "Его величество ФИТЫ!.2да" smile.gif
Skid
Люди у меня в общем вопросов много, и кто может помочь пишите пожайлуста в аську...Просто в асе удобнее будет обьснять и тд и тп.
Аська моя - 495853536
Leon PRO
Цитата
Люди у меня в общем вопросов много, и кто может помочь пишите пожайлуста в аську...

ТУТ_ЕСТЬ_ВСЁ
Lirulin
Цитата(Ilerien @ Jun 17 2008, 02:53) *
Нужны walkable тайловые кровати smile.gif

А сами тайлы при этом стандартные или тоже из хака?
Lamonde
Там может и есть все (много чего через поиск нашел), но вот ответа на вопрос, как сделать развитвления, я так и не получил.

Сделал, все, как в описании,
"мастеру" - номера строк "под-спеллов", а "под-спеллам" номер строки с мастером. В итоге получил 4 спелла, вместо одного.
Ilerien
Цитата
А сами тайлы при этом стандартные или тоже из хака?
Из хака.
Xfans
Цитата(Ilerien @ Jun 12 2008, 14:35) *
Скрипт для триггера:
Neverwinter Script
void main()
{
    object oPC = GetEnteringObject();
    object oHench = GetHenchman(oPC);
    if(GetIsObjectValid(oHench) && GetIsPC(oPC))
    {
        AssignCommand(oHench, SpeakString("<слова хенча>"));
        DelayCommand(0.5f, AssignCommand(oPC, SpeakString("<слова игрока>")));
    }
}

Интересно, что когда с одним хенчем идешь, скрипт срабатывает и все ок, а вот если возьмешь двоих, молчат как рыбы. Где и как там приписать про то, чтобы говорил первый из хенчей?

Цитата(Ilerien @ Jun 16 2008, 23:53) *
На заход в модуль. Что с игроком произойдёт - это нужно вписать в блок.

Вот спасиб огромный!!!! Не хотелось как-то зверствовать и убивать героя прямо сразу. Тока вот как быть, если на EnterModule уже стоит какое-то условие? Как безболезненно соединять скрипты?
Ilerien
Цитата
Тока вот как быть, если на EnterModule уже стоит какое-то условие? Как безболезненно соединять скрипты?
Этот блок кинуть перед закрывающей скобкой функции main. Например.
Цитата
Интересно, что когда с одним хенчем идешь, скрипт срабатывает и все ок, а вот если возьмешь двоих, молчат как рыбы. Где и как там приписать про то, чтобы говорил первый из хенчей?
По идее там первый болтать и должен в любом случае. Припиши после описания переменных
Neverwinter Script
SendMessageToPC(oPC, GetName(oHench));
, это выведет в лог игроку имя первого хенча.
denis0k
Там с хенчами какая-то хитрож... хитрость smile.gif Мел делала возможность присоединения нескольких хенчей, но забила. Если я не ошибаюсь, там постоянно их ид (номера) сбиваются и кажется даже идут не по порядку после нескольких присоединений/разделений. Т.е. имеем 2 хенча, делаем цикл ид от 1 до 2 и получаем OBJECT_INVALID два раза.

В общем, в граблях не уверен, но то, что мы их встретили - 100%.


P.S. А еще был такой замечательный модуль по сеттингу DragonLance, там хенчей штуки 3-4 было. Ух как они глючили...
Lirulin
Цитата(denis0k @ Jun 18 2008, 11:57) *
P.S. А еще был такой замечательный модуль по сеттингу DragonLance, там хенчей штуки 3-4 было. Ух как они глючили...

А КАК они глючили? Ну, чтобы быть готовым к тому, что они могут выкинуть=) (а если помимо хенчей еще их и свои фамильяры и др. зверюшки? Это ж вовсе жуть=))
denis0k
Цитата
А КАК они глючили? Ну, чтобы быть готовым к тому, что они могут выкинуть=)
Дело было давно и неправда, года 4 назад smile.gif Так что помню смутно.

Например, иногда они не слушались команд, теряли статус хенча (правый клик не показывал меню хенча, хотя они были в пати), ко всему этому они как любая компьютерная болванка ужасно тупили. Когда хенч один, он тупит как один, когда их 5 - этот зоопарк тупит в 5 раз сильнее smile.gif Я себя всегда представлял мамой-мартышкой из одного старого отечественного мультика. А когда кто-то из них умирал... Это словами не передать smile.gif Частые сейв-лоад как раз по-моему меняли их местами в пати и иногда ломали меню.


Все имхо из-за того, что множественные хенчи были добавлены в хоту через какой-то костыль. Изначально нвн под это не приспособлен.
azathoth
Попробуйте
Neverwinter Script
object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, 1 или 2);
Xfans
Цитата(Ilerien @ Jun 17 2008, 22:18) *
Этот блок кинуть перед закрывающей скобкой функции main. Например.По идее там первый болтать и должен в любом случае. Припиши после описания переменных
Neverwinter Script
SendMessageToPC(oPC, GetName(oHench));
, это выведет в лог игроку имя первого хенча.

Так вот не говорят они, ни один, ни другой. Как будто триггер не срабатывает вообщеsad.gif

Цитата(azathoth @ Jun 18 2008, 15:21) *
Попробуйте
Neverwinter Script
object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, 1 или 2);

А эту строку куда вставить? До функции в самое начало?
Ilerien
Neverwinter Script
void main()
{
    object oPC = GetEnteringObject();
    object oHench = GetHenchman(oPC);
    if(GetIsObjectValid(oHench) && GetIsPC(oPC))
    {
        AssignCommand(oHench, SpeakString("<слова хенча>"));
        DelayCommand(0.5f, AssignCommand(oPC, SpeakString("<слова игрока>")));
    }

    //Дебаг: выведет имена хенчей от 1 до 20 (чтоб уж наверняка) в лог игроку, можно поэкспериментировать с этой штукой, юзая сейв/лоад и всё такое
    int i;
    for(i = 1; i <= 20; i++)
        SendMessageToPC(oPC, "Henchman №" + IntToString(i) + ": " + GetName(GetHenchman(oPC, i)));

}
Xfans
Цитата(Ilerien @ Jun 18 2008, 16:41) *
Neverwinter Script
    //Дебаг: выведет имена хенчей от 1 до 20 (чтоб уж наверняка) в лог игроку, можно поэкспериментировать с этой штукой, юзая сейв/лоад и всё такое

Ну что ж, поэкспериментируем! Только вот где взять 20 хенчей? Их всего-то 14, и то не весь же зоопарк сразу нанимать=)))))
Вот еще одна фиговина. Мы не можем понять, почему визуальный эффект не проявляется никак?
Neverwinter Script
object oPlayer = GetPCSpeaker();

void main()
{
DestroyObject(OBJECT_SELF);
{
        object oBoss1 = CreateObject(OBJECT_TYPE_CREATURE,
                                    "alienhunter",
                                    GetLocation(GetNearestObjectByTag("WP_alienhunter")));
        DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectV
isualEffect(VFX_FNF_ELECTRIC_EXPLOSION),oBoss1));
        DelayCommand(1.3,ActionDoCommand(SetFacingPoint(GetPosition(oPlaye
r))));
        DelayCommand(1.5,AssignCommand(oBoss1,SetFacingPoint(GetPosition(OBJECT_SELF))));
    }
}

Там один объект исчезает, на его месте возникает другой. Должен бы с эффектом, но он просто вылазит и все! А ПС вообще на него внимания не обращает. Чем ему этот новый объект не нравится, не поймем. Помогите, плиз!
Ilerien
Цитата
Ну что ж, поэкспериментируем! Только вот где взять 20 хенчей? Их всего-то 14, и то не весь же зоопарк сразу нанимать=)))))
Да не важно, сколько их будет, эта штука отловит номер каждого хенча smile.gif
Цитата
Должен бы с эффектом, но он просто вылазит и все!
Neverwinter Script
void main()
{
    DestroyObject(OBJECT_SELF);
    object oPlayer = GetPCSpeaker();

    object oBoss1 = CreateObject(OBJECT_TYPE_CREATURE,
                                    "alienhunter",
                                    GetLocation(GetNearestObjectByTag("WP_alienhunter")));

    DelayCommand(1.0, AssignCommand(GetModule(), ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectV
isualEffect(VFX_FNF_ELECTRIC_EXPLOSION),oBoss1)));
    DelayCommand(1.3, ActionDoCommand(SetFacingPoint(GetPosition(oPlaye
r)))); // не понял смысла этой строчки smile.gif
    DelayCommand(1.5, AssignCommand(oBoss1, SetFacingPoint(GetPosition(OBJECT_SELF)))); // и этой тоже...
   
}

Что мы сделали? Перекинули заделеенные команды на модуль. В старом варианте объект убивался, а после этого через некоторое время он пытался выполнить функцию ApplyEffectToObject. Любая скриптовая команда выполняется определённым объектом, а когда этого объекта в природе уже нет, команда не выполняется.
denis0k
GetAssociate() мы и пробовали. GetHenchman() скорее всего просто морда к GetAssociate(), смысла нет разводить зоопарк одинаковых функций в движке. Жаль хистори крякнулась после очередного отключения света, нашел бы логи smile.gif


Кстати, тот эксперимент надо проводить и сразу после взятия хенчей, и после пары операций удаления-взятия.
Xfans
Цитата(Ilerien @ Jun 18 2008, 22:03) *
Да не важно, сколько их будет, эта штука отловит номер каждого хенча smile.gif
Neverwinter Script
void main()
{
... DelayCommand(1.3, ActionDoCommand(SetFacingPoint(GetPosition(oPlaye
r)))); // не понял смысла этой строчки smile.gif
    DelayCommand(1.5, AssignCommand(oBoss1, SetFacingPoint(GetPosition(OBJECT_SELF)))); // и этой тоже...
   
}

Что мы сделали? Перекинули заделеенные команды на модуль. В старом варианте объект убивался, а после этого через некоторое время он пытался выполнить функцию ApplyEffectToObject. Любая скриптовая команда выполняется определённым объектом, а когда этого объекта в природе уже нет, команда не выполняется.

Смысел этих двух строчек в том, что игрок и объект новый отворачиваются друг от друга, а надо чтобы лицом к лицу (точнее лицом к морде=)))). Если на новоявленный объект строка срабатывает, то вот РС-зараза заканчивает диалог с предыдущим существом, а потом поворачивается боком или спиной (в зависимости от своего желания видимо) к новому объекту.
А за объяснения про то, что скрипт относится к старому объекту - спасибо! Были подозрения на этот счет, но мы не поняли, как поменять тогда. Теперь пойдем пробовать=)))))
gennady
Цитата(Ilerien @ Jun 18 2008, 23:03) *
Что мы сделали? Перекинули заделеенные команды на модуль. В старом варианте объект убивался, а после этого через некоторое время он пытался выполнить функцию ApplyEffectToObject.

Ой-ли! Чтобы перекинуть команды на модуль, нужно пробить сразу ассинг, а потом только делай... Иначе Делай остается за объектом сельф...
Второй нюанс. Если кидаешь вектор поворота на модуль, то GetPosition(OBJECT_SELF) чез 1.5 секунд уже не существует... Нужно вектор пробить сразу.
Третий нюанс. Желательно еффекты сразу задавать, а не совать их в функцию, т.к. могут быть баги на некоторых эффектах, особенно на смерть...
Четвертый нюанс. Если пишем большой скрипт на дестроющемся НПС, то лучше кинуть сигнал и через OnUserDefined там все пробить. Тогда не нужно пробивать команды на модуль, или еще кого...
Вот как примерно должен выглядеть твой скрипт:
Neverwinter Script
void main()
{
DestroyObject(OBJECT_SELF);
object oPlayer = GetPCSpeaker();
object oMod = GetModule();
object oBoss1 = CreateObject(OBJECT_TYPE_CREATURE, "alienhunter", GetLocation(GetNearestObjectByTag("WP_alienhunter")));
effect eVis = EffectVisualEffect(VFX_FNF_ELECTRIC_EXPLOSION);
vector vFace = GetPosition(OBJECT_SELF);

AssignCommand(oMod, DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oBo
ss1)));
AssignCommand(oMod, DelayCommand(1.3, AssignCommand(oBoss1, SetFacingPoint(vFace))));
AssignCommand(oMod, DelayCommand(1.5, AssignCommand(oPlayer, SetFacingPoint(GetPosition(oBoss1)))));
AssignCommand(oMod, DelayCommand(1.5, AssignCommand(oBoss1, SpeakString("Я родилсЯ!"))));
}
Ilerien
Цитата
Ой-ли! Чтобы перекинуть команды на модуль, нужно пробить сразу ассинг, а потом только делай... Иначе Делай остается за объектом сельф...
По логике делей сразу выполнится объектом, до завершения скрипта и срабатывания DestroyObject. Надо тестить, мб ты и прав wink3.gif
azathoth
Цитата
По логике делей сразу выполнится объектом

конечно выполнится smile.gif и установит задержку, только вот велики шансы на то, что эта задержка пропадёт вместе с объектом wink3.gif

подпишусь под каждым словом gennady, кроме одного - OnUserDefined даже биоварями признаётся глючным. Оно хоть и прекрасно работает в большнистве случаев, но лучше обойтись.
Lirulin
А как вообще быть, если object'ов несколько? По-моему, компиллятор это не любит, ругается=) Матом=) Как правильно задать двум разным объектам в пределах одного скрипта разные действия? Когда я попробовал механически соединять два скрипта, все object'ы выписав в начале, у меня выходил фиг!=(
Ilerien
Если ты про переменные, то хоть сколько. Не знаю, сколько максимально памяти движок выделяет под локальные переменные скрипта, но обжектов можно напихать под завязку.
Цитата
конечно выполнится и установит задержку, только вот велики шансы на то, что эта задержка пропадёт вместе с объектом
Логично smile.gif Потестю - расскажу wink3.gif
Lirulin
Вопрос № следующий:
как это
Neverwinter Script
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDa
mage(GetCurrentHitPoints(oPlayer)/2),oPlayer,0.5f);

преобразовать, чтоб забирало не половину жизни, а скажем... 90%. Или еще сколько-нить этих процентов.
Ilerien
Neverwinter Script
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(FloatToInt(GetCurrentHitPoints(oPlaye
r) * 0.9)), oPlayer);//не понял, зачем тут длительность, всё равно эффект мгновенный
Можно было и самому догадаться...
Lirulin
Гр-р-р...=(( Иногда все тупят. Но это не мешает мне сказать спасибо=)
Xfans
Знаете чего, пиплы! Вы супер! Спасибо вам всем за то, что даете много вариантов и объясняете для нас, ньюбов, чего к чему! Мы знакомы всего неделю, а уже прогресс виден. Сами даже чего-то понимаем и делаем=)))))
shadowdweller
Все еще надеюсь левелапнуть своего хенчмена.
Цитата(denis0k @ Jun 7 2008, 20:17) *
Надо копаться, пробовать разные варианты smile.gif
1. Убрать скриптово плот и иммортал флаги.
2. Перекинуть дестрой на модуль: assigncommand(getmodule(), destroy...).
3. Попробовать отложенное удаление через пару секунд.

Вот это не проходит ни в какую. Не работает, хоть убейся.
Цитата(denis0k @ Jun 7 2008, 20:17) *
4. Кардинально - не удалять, а именно апать и переодевать.

А это как? Можно поподробнее?

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.