Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
serafim
Мда... половины конечно не понял... ну буду копатся дальше.
И вопрос, а как это ставить на игрока скрипт????
gennady
Тут есть две сложности...
Первая - это герой не слушается функции, поэтому если так уж нужна именно ходьба. то вешаем эффект...
Вторая - это акция сидения, т.е. после неё команды более не будут исполнятся, поэтому нужно их переложить на триггер. Вот тут и нужно использовать оператор ActionDoCommand.
Что получим в итоге:
Neverwinter Script
// СНЯТЬ ЭФФЕКТ
//  int iOne -  EFFECT_TYPE_...
void DelOneEffectOnPC(object oObject, int iOne)
{
effect eEffect = GetFirstEffect(oObject);
while (GetIsEffectValid(eEffect))
{
  if (GetEffectType(eEffect) == iOne)
  RemoveEffect(oObject, eEffect);
  eEffect = GetNextEffect(oObject);
}
}
///////////////////////////////////////////////////////////////////////////////
void main()
{
object oSelf = OBJECT_SELF;
object oPC = GetEnteringObject();  // Берем того, кто наступил на триггер
object oChair = GetObjectByTag("Chair_cast_01");
object oWP_1 = GetWaypointByTag("WP_cast_01");
object oWP_2 = GetWaypointByTag("WP_cast_02");
object oWP_3 = GetWaypointByTag("WP_cast_03");
effect eSlow = EffectSlow();

if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)
    return;

   SetLocalInt(OBJECT_SELF, "TRIGGER", 1);
   SetCutsceneMode(oPC);
   ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSlow, oPC);
//СТРОЙ АКЦИЙ ДЛЯ ГЕРОЯ
AssignCommand(oPC, ClearAllActions(TRUE));
AssignCommand(oPC, ActionForceMoveToObject(oWP_1, FALSE, 1.0, 10.0));
AssignCommand(oPC, ActionSpeakString("Бла-бла-бла..."));
AssignCommand(oPC, ActionWait(3.5));
AssignCommand(oPC, ActionForceMoveToObject(oWP_2, FALSE, 1.0, 10.0));
AssignCommand(oPC, ActionSpeakString("Тра-лe-лe..."));
AssignCommand(oPC, ActionWait(2.5));
AssignCommand(oPC, ActionForceMoveToObject(oWP_3, FALSE, 1.0, 10.0));
AssignCommand(oPC, ActionDoCommand(DelOneEffectOnPC(oPC, EFFECT_TYPE_SLOW)));
//СТРОЙ АКЦИЙ ДЛЯ ТРИГГЕРА
AssignCommand(oPC, ActionDoCommand(AssignCommand(oSelf, ActionWait(1.5))));
AssignCommand(oPC, ActionDoCommand(AssignCommand(oSelf, AssignCommand(oPC, SpeakString("Трам-тара-рам!")))));
AssignCommand(oPC, ActionDoCommand(AssignCommand(oSelf, ActionWait(1.5))));
AssignCommand(oPC, ActionDoCommand(AssignCommand(oSelf, ActionDoCommand(SetCutsceneMode(oPC, FALSE)))));
//СТРОЙ АКЦИЙ ДЛЯ ГЕРОЯ
AssignCommand(oPC, ActionSit(oChair));
}
serafim
Ген, спасибо огромное. теперь все ясно.
Этот скрипт поможет мне в дальнейшем ... Вы все тут Гении скриптинга, что тут скажешьsmile.gif...
А вот вопрос, как долго ты Ген, и все остальные изучали скрипты чтоб вот так как два пальца ... их щелкать. Так, чистое любопытсвтво smile.gif еещ раз СПС.

ребят, а как вы в ПЛ сделали масштабную карту передвижения??
какие графические редакторы и тому подобное??
Lex
- 3д макс - создание основы для карты
- прописывание нового тайлсета (в котором 1 групповой тайл - основа карта)
- куча плейсов - элементы карты (деревья, горы, города)
- скрипты
в невышдшем Пути все то же самое, только скрипты другие. Свободное перемещение между любыми точками карты, стычки и тд.
serafim
не фурычат вот эти три функции:
Neverwinter Script
AssignCommand(oPC, ActionForceMoveToObject(oWP_1, FALSE, 1.0, 10.0));
AssignCommand(oPC, ActionForceMoveToObject(oWP_2, FALSE, 1.0, 10.0));
AssignCommand(oPC, ActionForceMoveToObject(oWP_3, FALSE, 1.0, 10.0));


пишет: переменная без определенного типа.
Что это?
как это исправить? smile.gif СПС!
virusman
Выкладывать надо весь скрипт целиком.
Очевиднр, oWP_1,2,3 не определены.
serafim
Вирусмен,
скрипт выложен Геной, он на три поста выше smile.gif

то что oWP_1,2,3 --неопределены я то понял. а что это значит? и как решить эту проблему?--нет.
serafim
АУ!!!!!
помогите, плиззз.
azathoth
всё прекрасно компилируется:
Код
29.04.2009 19:41:19: 0 Errors. 'test' compiled successfully

мб ты что-то менял?
serafim
Да, в том то и дело, что ничего не менял.

Если я убираю в команде-- иди к обьекту oWP_1,2,3-- время то, все идет нормально, тольк персонаж скачет галопом, а вебпоинтах останавливается, а мне этого не нужно. Ладно, пороюсь еще, ведь пока сам недогоню, ничего же сделать несмогу. СПС всем!
serafim
скрипт наконец заработал. просто не поставил одну функцию. но вот беда, на персонажа ефект замедления не действует. Если отключить режим кастсцены то пишет-- РС иммунен к замедлениею. Что за фигня??? Как только что сделанй РС 1-го уровня обладает иммуном к замедлениею?? (скрипт лежит выше--Гены).
И еще РС садится на стул и непроизносит третью фразу, а просто сидит и кастсцена продолжается, приходится выбивать игру. sad.gif
И еще:
я смотрел в ПЛ, функции игрока в срипте (например кастсцена Воин Орды), сторится на DelayCommand. Я так понял эта команда влияет на игрока и НПС, а не на триггер. может через нее попробовать?
Lex
Цитата(serafim @ May 6 2009, 09:27) *
И еще РС садится на стул и непроизносит третью фразу, а просто сидит и кастсцена продолжается, приходится выбивать игру. sad.gif

свойство функции ActionSit. Акция не заканчивается сама, соотв. все что за ней - не будет работать пока ты сам сиденье не прервешь. Частично решается через привязку акций на другой объект. Но учти, что во время сиденья РС мало что может сделать. Говорить - пожалуй единственное приличное дейсво. Только делать его нужно в этом случае через SpeakString с нужными задержками. ActionSpeakString по вышеуказанным причинам не сработает.

DelayCommand ни на что не влияет. Она фактически задержка для функции. В сложных роликах где неполучается обойтись стеком акций, приходится прибегать к этой функции для синхронизации действий.
BloodTension1
Всем привет

нужен скрипт на подобии того, что в самом начале HotU

Персонаж автолевелиться до определнного уровня в соответствии со своей специальностью

(в нашем случае маг с 1 до 40)

И еще вопрос: предположим перед автолевелом я сбрасываю лвл до 1 и потом уже автолевелюсь до 40го, можно посредством скриптов добавить мультикласс?

Зарнее благодарю

Цитата
И еще вопрос: предположим перед автолевелом я сбрасываю лвл до 1 и потом уже автолевелюсь до 40го, можно посредством скриптов добавить мультикласс?


предположим я сбросил маша с 15го до 1го и мне нужно его проавтолевелить, можно сделать так: 5 маг 35 жрец
azathoth
Neverwinter Script
// Levels up a creature using default settings.
// If successfull it returns the level the creature now is, or 0 if it fails.
// If you want to give them a different level (ie: Give a Fighter a level of Wizard)
//    you can specify that in the nClass.
// However, if you specify a class to which the creature no package specified,
//  they will use the default package for that class for their levelup choices.
//  (ie: no Barbarian Savage/Wizard Divination combinations)
// If you turn on bReadyAllSpells, all memorized spells will be ready to cast without resting.
// if nPackage is PACKAGE_INVALID then it will use the starting package assigned to that class or just the class package
int LevelUpHenchman(object oCreature, int nClass = CLASS_TYPE_INVALID, int bReadyAllSpells = FALSE, int nPackage = PACKAGE_INVALID)

в помощь.
BloodTension1
Как сделать так что бы комп сам раскидал заклинания по книге ?
Lex
скорее всего никак.
BloodTension1
можно с помощью скриптов убирать классы совсем? (например был 1 виз\1кл, убираю все до 1го уровня, кто остается виз или кл?)
virus_found
Кто был сперва, тот и будет. У каждого игрового персонажа (насчёт монстров не знаю) есть "история левелапов".
serafim
как в скрипте прервать чертово сиденье на стуле! Я уже над этим скриптом бьюсь 2 недели и пока нифига не получается. Уже прям смешно становится. То сначала ПЦ не бегал по тригерам, то бегл но не болтал, то не садиося на стул, то садится но каст сцена не заканчивалась, а теперь и ходить отказывается, а бегает. smile.gif) Право, смешно и обидно. Но в этом есть громадный плюс! 2 недеди долбания и ковыряния этого скрипта не прошли даром. много было понятно и уяснено smile.gif
Но все таки помогите: как сделать что бы кастсцена прервалась, когда ПЦ сел настул и прошла актионпауза 3 секунды. И почему эффект слоу не работает? (Скрипт все тот же smile.gif
ПС: простите, я наверное всех уже запарил, но к кому же мне еще обратится а?!
serafim
ВСе, скрипт, заработал! УРА!!!!!! smile.gif только вот эфект хотьбы не работает, бегать ПЦ, сволоч, нравится.

ДОП.ВОПРОС: как с кастсцене поставить скриптом камеру, чтобы она находилась не сверху и не сбоку, и горизонтально, тоесть что-то типа вид от третьего лица но, камера смотрит в газа ПЦ максимально от него удалена. И при этом работает в таком режиме до конца кастсцены. я длеаю (180.0, 20.0, 50.0) вроде бы 180- в горизонт, (если начертить себ таблицу градусов), 20--макс. удаление, а 50- угол наклона камеры--должно смотреть -- в глаза а получается черте как. СОС!
serafim
как сделать действие эффкта паутины на область триггра длительным?
как сделать эффект паутины я понял, сделал и получилось. вот только беда, если делать его на локацию, например область триггера, то эффект быстро исчезает, даже если я в конце функции указываю время. А если делат этот эффект на ПЦ то выгялдит не красиво--он двидется и вся паутина за ним. Что тоакое SetTime? оно поможет в решении это проблемы???
gennady
Серафим, скрипт был рабочий, но с 1 ошибкой:
Neverwinter Script
AssignCommand(oPC, ActionDoCommand(AssignCommand(oSelf, AssignCommand(oPC, SpeakString("Трам-тара-рам!")))));

Тут нужно было было делать через ActionDoCommand...
В остальном это все твои глюки...

Эффект паутины кинь на невидимый объект и будет тебе счатье...
serafim
Ген, СПС!
еще вопросик. Видел в базе скриптов скрипт на оживление зомби при их смерти.
Нужен скрипт при котором убить зомби можно только одним предметом, например определенным мечем. В противном случае зомбяка оживает. Но, вот беда я немогу понять как прописать такой предмет и как прописать что бы зомби сами себя воскрешали, а не какой-то другой предмет или НПЦ. ХЕЛП!!!!!
Deirel
Я это так делал:

Neverwinter Script
void main()
{
    object oKiller = GetLastKiller();
    string sWeaponTag = GetTag(GetLastWeaponUsed(oKiller));
    if (sWeaponTag != "Тег оружия")
    {
        SendMessageToPC(oKiller, "HELLO");
        object oNewZombie = CreateObject(OBJECT_TYPE_CREATURE, GetResRef(OBJECT_SELF), GetLocation(OBJECT_SELF));
    }
}


Это стояло на OnDeath зомбика.

У меня не получилось сделать так, чтобы воскрешался именно тот зомби которого убили... Может, поможет это.

О, Сорри) SenMessageToPc не надо, это я так, для отладки))
Lex
Цитата(Deirel @ May 13 2009, 22:21) *
У меня не получилось сделать так, чтобы воскрешался именно тот зомби которого убили

эм.. а в чем проблема?
1. см. SetIsDestroyable() - (или как-то так. ищите в фильтре функций по части "IsDestroyable"). Ею ставим неисчезаемое тело после смерти.
2. с задержкой накладываем эффект воскрешение. или ресурекшн. Или какой хотите.
Deirel
Lex, так я уже пытался, и почему-то не вышло.(

У менятакой вопрос, люди) можно ли скриптами поставить объект в место с определенными координатами?
azathoth
определяем локацию, куда создаём.
Neverwinter Script
// Create a location.
location Location(object oArea, vector vPosition, float fOrientation)

vPosition - сюда и вписываем наши определённые координаты, например [0.0, 1.0, 0.0]
oArea и fOrientation - соотвественно область и поворот предмета;
а затем используем эту локацию в функции CreateObject.

насчёт воскрешения вот информация к размышлению
Neverwinter Script
void main()
{
    SetIsDestroyable(FALSE);
    effect eEffect = EffectResurrection();
    object oNPC = OBJECT_SELF;
    object oArea = GetArea(oNPC);
    AssignCommand(oArea, DelayCommand(6.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oNPC)));
}
Deirel
azathoth, спасибо) теперь мне, наконец, стало понятно, что такое Location и чем оно отличается от Area, а то я их вообще путал=) А на счет скрипта, спасибо за идею, я пытался повесить воскрешение на PC, но не вышло...И с Area почему-то не работает! Ничего не понимаю(

(Ого, я сделал прыгающую колонну!!)))
zeon
Уважаемые коллеги ,решил и я заняться скрипто0писанием(куда уж без него в хорошем модуле) и появилось очень много вопросов...если позволите я задам вам их.
1.Нужен скрипт простой телепортации ,в редакторе скриптов нашел образец но естественно не понял,скажем телепортация к waypoint.
2.По СВОИМ соображениям решил заблокировать класс варвар в своем модуле ,по шаблону сделал условие и если человек заходит играть barbarian следует end module,но опять же ничего не получилось при входе любым классом клиент просто повисает.
Просьба расписать все по полочкам буду благодарен!
Virake
Итак, я НЕ ШАРЮ в скриптах. А еще, я запарился лазить в темах по скритах, что бы найти всего один скрипт - скрипт, позволяющий игроку отдыхать ТОЛЬКО на определенном триггере. Мне этот скрипт нужен позарез. Пожалуста, если кто может, выложите этот скрипт здесь или дайте ссылку.

Если я этим постом нарушил какие-нибудь правила - извиняйте, небыло времени с ними познакомиться.
Deirel
Товарищи, я бы сделал так:

На OnEnter триггера:

Neverwinter Script
void main()
{
    object oPC = GetEnteringObject();

    if (GetIsPC(oPC))
    {
        SetLocalInt(oPC, "IS_RESTING_ENABLE", 1);
    }
}


На OnExit триггера:

Neverwinter Script
void main()
{
    object oPC = GetExitingObject();

    if (GetIsPC(oPC))
    {
        SetLocalInt(oPC, "IS_RESTING_ENABLE", 0);
    }
}


На OnPlayerRest (в свойствах модуля) добавил бы:

в начале (после "object oPC = GetLastPCRested()"):

Neverwinter Script
if (GetLocalInt(oPC, "IS_RESTING_ENABLE") == 1)
{


а в конце, перед последней "}"

Neverwinter Script
}
else
{
    AssignCommand(oPC, SpeakString("Вы не можете отдыхать блаблабла"));
}


И в событии области OnEnter:

Neverwinter Script
void main()
{
    oPC = GetEnteringObject();
    SetLocalInt(oPC, "IS_RESTING_ENABLE", 0);
}


Я правильно мыслю, товарищи? )))
Lex
Цитата(zeon @ May 16 2009, 18:25) *
1.Нужен скрипт простой телепортации ,в редакторе скриптов нашел образец но естественно не понял,скажем телепортация к waypoint.

я тоже не понял. Из того что ты написал совершенно не понятно какой скрипт тебе нужен. Во-первых потому что ничего не сказано про того, КТО перемещается. Во-вторых не уточнено, КОГДА это происходит. Ну и в-третьих, КАК/КУДА.
если тебе это не принципиально и нужен скрипт с разбором, то собсна вот:
Neverwinter Script
void main()
{
object oCreature = GetEnteringObject(); // кто телепортируется. Входящий в триггер объект (игрок или НПС)
object oTarget = GetObjectByTag("WP_TARGET"); // куда телепортируется. В конкретную точку с тэгом WP_TARGET
AssignCommand(oCreature,ClearAllActions(TRUE)); // убираем текущий стек действий, чтобы не мешал
AssignCommand(oCreature,JumpToObject(oTarget)); // телепортируем
}
Цитата(zeon @ May 16 2009, 18:25) *
2.По СВОИМ соображениям решил заблокировать класс варвар в своем модуле ,по шаблону сделал условие и если человек заходит играть barbarian следует end module,но опять же ничего не получилось при входе любым классом клиент просто повисает.

пиши, что за скрипт у тебя получился. Разбирать и исправлять свои ошибки эффективнее, чем вставлять чужое готовое решение.

Цитата(Virake @ May 17 2009, 20:32) *
Если я этим постом нарушил какие-нибудь правила - извиняйте, небыло времени с ними познакомиться.

тем не менее с правилами лучше ознакомиться. Во избежании.

Цитата(Deirel @ May 17 2009, 21:08) *
Я правильно мыслю, товарищи? )))

вроде да, а зачем перестраховка с последним скриптом?
Virake
Deirel, большое спасибо за скрипты. clapping.gif

Цитата(Lex @ May 18 2009, 07:32) *
... а зачем перестраховка с последним скриптом?

Я, конечно, не разбираюсь в скриптах, но возможно дело в том, что для перехода в некоторые области игроку не нужно выходить за границы триггера-отдыха(?).

Последний скрипт не компилируется.
Что-то не так со строкой oPC = GetEnteringObject();
Как это исправлять?
Lex
Neverwinter Script
object oPC = GetEnteringObject();
Virake
Теперь все ясно.

Снова что-то не так. Неработает скрипт система. Вместо того, чтобы показывать "Это неподходящее место для отдыха" тогда, когда герой жмет REST не на триггере, оно показывает это сообщ. когда игрок сам прерывает отдых. Т.е. главная функция не работает. Не знаю как решить эту проблему.
Lex
это уже косяк того, что ты внутри OnPlayerRest напихал. Без полного текста скрипта тебе никто не поможет.
А вообще советую начинать разбираться самому. Дело пойдет быстрее, чем с каждым вопросом сидеть на форуме и ждать.
zeon
Цитата(Lex @ May 18 2009, 16:05) *
это уже косяк того, что ты внутри OnPlayerRest напихал. Без полного текста скрипта тебе никто не поможет.
А вообще советую начинать разбираться самому. Дело пойдет быстрее, чем с каждым вопросом сидеть на форуме и ждать.

спасибо за ответы на все вопросы,но пока ждал уже сам во всем разобрался.
Оффтоп,теперь борюсь с глючностью самой игры=(
intel core 2 duo e6750,radeon hd 2600xt,4gb ram 800mghz,vista sp1 x64.
В игре что на минимальных что на максимальных одинаково глючит,производительность как в crysis на максимальных,тобишь играть невозможно!
При чем на старом кампьютере тоже самое но в меньшей степени(картинку ощутимо поддергивает)-там стоит все с точностью на оборот winxp 32,amd athlon 3000+,geforse 6600.
P.S версия diamond 1.69 eng.
В самом редакторе тоже одни ошибки постоянно выскакивают Atioglxx.dll
P.S.S не ужели придется перебираться на NWN2 там все идет ровно!
Ilerien
В nwnplayer.ini поставить Client CPU Affinity=0
zeon
Цитата(Ilerien @ May 18 2009, 18:24) *
В nwnplayer.ini поставить Client CPU Affinity=0

я конечно извеняюсь но оно там и стоит=(
скорее всего что то в видео карте ,у кого на radeon игра нормально ползет?
P.S опросил пару друзей играющих в нвн,сказали что не совсем уж и глючит но подлагивает,это что такие особенности движка?!
Deirel
Ну не знаю, на моем средненьком Radeon X1550 ничего не лагает) Хотя...блеск воды не работает))
Ilerien
Ну, тогда могу могу посоветовать с дровами на видео пошаманить. Как вариант, поставить в advanced sound options другой кодек, например, miles fast 2D - у кого-то из-за этого были подобные глюки.
Virake
Цитата(Lex @ May 18 2009, 15:05) *
это уже косяк того, что ты внутри OnPlayerRest напихал. Без полного текста скрипта тебе никто не поможет.
А вообще советую начинать разбираться самому. Дело пойдет быстрее, чем с каждым вопросом сидеть на форуме и ждать.

Спасибо за совет. Это помогло. Как окозалось, перед последней вставленой строкой, нужна была еще всего-то одна строка:
Neverwinter Script
AssignCommand(oPC, ClearAllActions());


Теперь все работает. Огромное спасибо всем за помощь.
Virake
Еще вопрос:
Вот это (из городской базы скриптов) инклюд:
Neverwinter Script
const string TXT_COLOR_GRAY    = "<c°°°>"; // Gray
const string TXT_COLOR_WHITE    = "<cууу>"; // White
const string TXT_COLOR_CYAN    = "<c уу>"; // Light Cyan
const string TXT_COLOR_MAGENTA  = "<cу у>"; // Magenta
const string TXT_COLOR_YELLOW  = "<cуу >"; // Yellow
const string TXT_COLOR_RED      = "<cу  >"; // Red
const string TXT_COLOR_GREEN    = "<c у >"; // Green
const string TXT_COLOR_BLUE    = "<c  у>"; // Blue
const string TXT_COLOR_NONE    = "";      // Default (no color)
const string TXT_COLOR_END      = "</c>"// (color end TAG)
const string TXT_COLOR_DEFAULT  = TXT_COLOR_CYAN;


// Function changes color of the string
// * Param sText - text to color
// * Param sColor - parse a color constant here
// * Returns colored string
string colorText(string sText, string sColor);


string colorText(string sText, string sColor)
{
  return sColor + sText + TXT_COLOR_END;
}

А это пример:
Neverwinter Script
#include "lib_colortext"
void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
AssignCommand(oPC, SpeakString(colorText("you are entering object", TXT_COLOR_RED)));
}

А вот, собственно, и сам вопрос (их вообще-то два):
1) Как построить скрипт, чтобы вместо SpeakString работало FloatingTextStringOnCreature;
2) Как построить скрипт, чтобы вместо SpeakString работало SendMessageToPC.
Кто знает ответ (может об таком скрипте уже спрашивали, но мне лень 126 страниц читать)?
Lex
а в чем проблема то?
Ничего принципиально не меняется. В месте вывода текста ставишь вместо "текст" конструкцию
Neverwinter Script
colorText("you are entering object", TXT_COLOR_RED)
Работает со всеми функциями по выводу текста, и FloatingTextStringOnCreature с SendMessageToPC - не исключение.
Virake
Забыл сказать. Мне нужно, что б это работало через object oPC = GetLastUsedBy.
Вот например:
Neverwinter Script
#include "lib_colortext"
void main()
{
object oPC = GetLastUsedBy();

AssignCommand(oPC, FloatingTextStringOnCreature(colorText("You are using object", TXT_COLOR_RED)));
}

И вот последняя строка неработает.
Alian REXis
А так? smile.gif
Neverwinter Script
AssignCommand(oPC, FloatingTextStringOnCreature(colorText("You are using object", TXT_COLOR_RED),oPC));
Virake
Спасибо. Теперь работает скрипт.
Ilerien
Цитата
Вот это (из городской базы скриптов) инклюд:
Это устаревшая библа, юзай x3_inc_string.
serafim
Ребята, плз, посмотрите, что тут не так и не то. Скрипт работает, вроде бы, но только с пробелами.
Суть:
Герой подходит к плейсу (возле которого стоит вебпоинт--на нео он идет), нагинается шарит руками, говорит что-то, поднимается и идет к следующему плейсу. после того как выполнена анимация плейс должен дестроится и перс продолжает движение к следующему вебпоинту.

Есть но:
1) еффект замедления не работает. --пишет, что герой иммунен к замедлению. что за... ?
2) плейсы не дестроятся! Я так понял плейсы не могут дестроится. Для этого они создаются как НПС, только выглядят как плейсы. (как например "трон" в финальной баталии Воина орды в ПЛ_1 ). Тогда возникают вопросы:
а) дестроятся ли плейсы? если да то как? у меня в скрипте написана эта функция, но ничего не происходит.
б) как из таблицы 2да плейсов переписать это плейс в 2да монстров? Проблема в том, что это стандартная палитра НВН. Если конкретней этот плей-- кусок грязи. С таблицы я переписал. А вот где взять файл палитры этой модели?? Как тут быть?

Вот сам скрипт:

Neverwinter Script
// СНЯТЬ ЭФФЕКТ
//  int iOne -  EFFECT_TYPE_...
void DelOneEffectOnPC(object oObject, int iOne)
{
effect eEffect = GetFirstEffect(oObject);
while (GetIsEffectValid(eEffect))
{
  if (GetEffectType(eEffect) == iOne)
  RemoveEffect(oObject, eEffect);
  eEffect = GetNextEffect(oObject);
}
}

void main()
{
object oPC = GetEnteringObject(); 
object oTP_1 = GetObjectByTag("TP_01");
object oTP_2 = GetObjectByTag("TP_02");
object oTP_3 = GetObjectByTag("TP_03");
object oTP_4 = GetObjectByTag("TP_04");
object oTP_5 = GetObjectByTag("TP_05"); 

object oWP_1 = GetWaypointByTag("WP_p_01");
object oWP_2 = GetWaypointByTag("WP_p_02");
object oWP_3 = GetWaypointByTag("WP_p_03");
object oWP_4 = GetWaypointByTag("WP_p_04");
object oWP_5 = GetWaypointByTag("WP_p_05");

effect eSlow = EffectSlow();
 

if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)
    return;
   {
   SetLocalInt(OBJECT_SELF, "TRIGGER", 1);


AssignCommand(oPC, ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSlow, oPC, 354.0);
AssignCommand(oPC, ClearAllActions());
SetCutsceneMode(oPC); 


DelayCommand(1.0, AssignCommand(oPC, SpeakString("бла-бла-бла...")));
DelayCommand(2.0, AssignCommand(oPC, ActionMoveToObject(oWP_1)));
DelayCommand(3.5, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0)));
DelayCommand(4.0, AssignCommand(oPC, SpeakString("бла-бла-бла...")));
DelayCommand(5.8, ActionDoCommand(DestroyObject(oTP_1)));

DelayCommand(7.0, AssignCommand(oPC, ActionMoveToObject(oWP_2)));
DelayCommand(8.5, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0)));
DelayCommand(9.0, AssignCommand(oPC, SpeakString("бла-бла-бла...")));
DelayCommand(10.0, ActionDoCommand(DestroyObject(oTP_2)));

DelayCommand(11.0, AssignCommand(oPC, ActionMoveToObject(oWP_3)));
DelayCommand(12.0, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0)));
DelayCommand(14.0, ActionDoCommand(DestroyObject(oTP_3)));

DelayCommand(15.0, AssignCommand(oPC, ActionMoveToObject(oWP_4)));
DelayCommand(16.5, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0)));
DelayCommand(17.0, AssignCommand(oPC, SpeakString("бла-бла-бла...")));
DelayCommand(18.0, ActionDoCommand(DestroyObject(oTP_4)));

DelayCommand(20.0, AssignCommand(oPC, ActionMoveToObject(oWP_5)));
DelayCommand(21.5, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0)));
DelayCommand(22.0, AssignCommand(oPC, SpeakString("бла-бла-бла...")));
DelayCommand(23.0, ActionDoCommand(DestroyObject(oTP_5)));


DelayCommand(25.0, AssignCommand(oPC, ClearAllActions()));
DelayCommand(25.5, FadeToBlack(oPC, FADE_SPEED_FASTEST));
DelayCommand(26.0, AssignCommand(oPC, SetTime(GetTimeHour()+(Random(4)), GetTimeMinute()+(Random(60)), 0, 0);
DelayCommand(26.0, AssignCommand(OBJECT_SELF, ActionResumeConversation());
DelayCommand(27.5, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));

DelayCommand(43.0, SetCutsceneMode(oPC, FALSE));

    }
}
Ilerien
Цитата
еффект замедления не работает. --пишет, что герой иммунен к замедлению. что за... ?
Значит иммунен. Такое достигается, например, любой вещью со свойством "freedom".
Цитата
плейсы не дестроятся! Я так понял плейсы не могут дестроится
Удаляются. Перед удалением нужно снять флажок:
Neverwinter Script
SetPlotFlag(oPlaceable, FALSE);
Цитата
как из таблицы 2да плейсов переписать это плейс в 2да монстров?
Сам никогда таким извращением не занимался, но здесь главное - перенести из placeables.2da в appearance.2da название модельки (ModelName -> Race). Остальное уже дело техники.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.