Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
defolt
что такое Валео?..или кто такой?
-fenix-
QUOTE
что такое Валео?..или кто такой?


Кто такой. Автор перевода функций скриптов тулсета на русском. Но он дощел до "G" и дальше видемо надоело, тем более, что осталось еще наверно 3/4.

QUOTE
Нет. Есть желание? Вперед!


Желание есть и английский там понять можно(только это дополнительное время), да вот только этих функций еще до Х..., очень много. Короче нужно просто много времени, а его как раз и нет. Уламываю друга, каторый в английском шарит, помочь, но он пока усердно отбивается. biggrin.gif
Добавлено в 17:19
Тут где-то говорили про функцию, каторая заставляет телеги ездить, кораблики плавать. Ненапишите ее еще разок ПЛИЗ
Добавлено в 22:10
Написал вот это

Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oNPC1 = GetObjectByTag("NPC_1");
object oNPC2 = GetObjectByTag ("NPC_2");
object oWP = GetObjectByTag ("WP_PC_1");
/*
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/

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

    return;

    {
    SetLocalInt(OBJECT_SELF, "TRIGGER", 1);
    SetCutsceneMode(oPC);
    AssignCommand(oNPC1, ClearAllActions());
    AssignCommand(oPC, ClearAllActions());

    ActionDoCommand(AssignCommand(oPC, ActionMoveToObject(oWP)));
    ActionDoCommand(AssignCommand(oPC, SetCameraFacing(280.0, 20.0, 45.0,
    CAMERA_TRANSITION_TYPE_MEDIUM)));

    ActionWait(2.5);

    ActionDoCommand(AssignCommand(oNPC1, ActionMoveToObject(oPC)));
    ActionDoCommand(AssignCommand(oNPC1, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE,
    1.0, 3.0)));
    ActionDoCommand(AssignCommand(oNPC1, PlayVoiceChat(VOICE_CHAT_HELLO)));
    ActionDoCommand(AssignCommand(oNPC1, SpeakString("ÏÐÈÂÅÒ")));
    ActionDoCommand(AssignCommand(oPC, SetCutsceneMode(oPC, FALSE)));
    ActionDoCommand(AssignCommand(oNPC1, ActionStartConversation(oPC)));
    }

}


все нормально только:

НПС должен выполнить команды в таком порядке подойти к ПС-> проиграть анимацию-> проиграть звук-> сказать привет.

А на деле получается так сказал привет-> проиграл звук-> подошел-> проиграл анимацию

ПОЧЕМУ ТАК?

Friedrich
QUOTE (-fenix- @ Jun 19 2005, 10:52)
ActionDoCommand(AssignCommand(oNPC1, ActionMoveToObject(oPC)));
    ActionDoCommand(AssignCommand(oNPC1, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE,
    1.0, 3.0)));
    ActionDoCommand(AssignCommand(oNPC1, PlayVoiceChat(VOICE_CHAT_HELLO)));
    ActionDoCommand(AssignCommand(oNPC1, SpeakString("ÏÐÈÂÅÒ")));


Чего такое очередь дейсвий в курсе? Вижу в курсе.

Тогда почему SpeakString, а не ActionSpeakString и PlayVoiceChat, значит, тоже надо в очередь ставить (которая на НПС1 своя собственная).
-fenix-
Friedrichvictory.gif Усе допер.
Zik
Приветствую вас.

Вот такой у меня вопрос- если в инвентаре игрока есть допустим 10 stacked items (незнаю как перевести- суммированных? dntknw.gif ),
Например 10 зелий лечения. Как при определенном действии уничтожить 5 из них? Например в диалоге- чтобы нпс забирал заданное кол-во этих зелий?
Dik Morris
Zik!!! Делается это очень просто для начала создай нужное зелье и дай ему ТЭГ затем, открываешь редактор диалогов, и соответственно открываешь тот диалог, который нужен тебе, далее выбираешь ту ветку диалога в которой NPC должен забрать у игрока зелья, когда ты ее выберешь, нажми вкладку СОВЕРШЕНЫ ДЕЙСТВИЯ там нажми кнопку МАСТЕР СКРИПТОВ там выбери ВОЗМИТЕ У ИГРОКА и в окошечке ВОЗЬМИ ПРЕДМЕТ пиши ТЭГ твоего зелья. Все закончить.
Zik
В таком случае к сожалению забирается именно предмет- то есть в данном случае все зелья, сложенные в один набор с этим тэгом.
Я имею в виду те предметы, у которых есть размер стэка. К примеру дефолтно у зелий он 10, то есть зелья одинакогого типа сложатся в 1 наборчик с подписью 10. У стрел- 99. Мне необходимо забрать только часть - допустим у меня лежит 99 стрел (изображается как стрела, занимающая 2 квадратика инвентори с подписью 99), мне нужно из них взять 33.
Lex
Работа со стеком у вещей :
Neverwinter Script Source
void SetItemStackSize(object oItem, int nSize)

Neverwinter Script Source
int GetItemStackSize(object oItem)

Технология такая: нашел вещь, узнал сколько их в стеке. Если больше, чем тебе надо взять, то
SetItemStackSize(oItem,GetItemStackSize(oItem)-N)
где N - cколько надо взять.
Иначе берем все (DestroyObject()), N понижаем на GetItemStackSize(object oItem) и бежим дальше по циклу.

(ДО этого надо сделать проверку на общее кол-во вещей и сравнить с N. Скрипт такой есть в базе)





Zik
А если из общего количества вещей в инвентори отнимать? Например есть 1 упаковка 10 бутылок и одна неполная- 7, всего 17 бутылок, надо отнять 12.

Вот таким скриптом я узнаю сколько всего бутылок в инвентори игрока:
CODE
int GetNumItems(object oTarget,string sItem)
{
int nNumItems = 0;
object oItem = GetFirstItemInInventory(oTarget);
while (GetIsObjectValid(oItem) == TRUE)
{
if (GetTag(oItem) == sItem)
{
nNumItems = nNumItems + GetNumStackedItems(oItem);
}
oItem = GetNextItemInInventory(oTarget);
}
return nNumItems;
}


Не подскажете как из него отнимать? Что нибудь вроде SetNumItems
Friedrich
Zik
Чего-нить в этом роде
Neverwinter Script Source
int removeStackItems(object oInventory, string sItem, int nNum)
{
  object oItem = GetFirstItemInInventory(oInventory);
  int nCount = nNum; // столько итемов осталось удалить
  while(GetIsObjectValid(oItem) && (nCount > 0))
  {
    if(GetTag(oItem) == sItem)
    {
      int nStack = GetItemStackSize(oItem);
      if (nStack <= nCount)    // ЕСЛИ в стопке предметов меньше,
      {                        // чем нам нужно удалить:
        DestroyObject(oItem);  // - удаляем все стопку
        nCount-=nStack;        // - уменьшаем счетчик на кол-во уд-х пред-ов
      } else                       
      { // ИНАЧЕ сокращ. размер стопки и обнуляем счетчик
        SetItemStackSize(oItem, nStack-nCount);
        nCount = 0;
      } 
    } 
    oItem = GetNextItemInInventory(oInventory);
  }
  return nNum - nCount; // возвращаем кол-во уд-х пред-ов
}

Вроде, работает.
Убо-Сатло
Джентельмены! Помогите разобраться с функциями FadeTo/FromBlack Никогда раньше не пользовался ими, вот сейчас понадобилось. Я просмотрел здесь на форуме скрипты с этими ф-циями, вроде делаю все как там, а получается такая лажа:
Вот кусок скрипта:
Neverwinter Script Source
DelayCommand(144.0, FadeToBlack(oPC, FADE_SPEED_MEDIUM));
// ...Несколько
// ...различных
// ...функций (джампы PC и NPC + одна анимация)
DelayCommand(145.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));

После команды FadeToBlack ничего не происходит в указанное время, потом, когда уже совершены ф-ции между ...To... и ...From..., экран затемняется на полсекунды, потом светлеет на пару сек. и медленно гаснет с концами. Не зависает игра, на Esc реагирует, но света нету. Пробовал еще так:

Neverwinter Script Source
DelayCommand(144.0, AssignCommand(oPC, FadeToBlack(oPC, FADE_SPEED_MEDIUM)));
// .....
DelayCommand(145.0, AssignCommand(oPC, FadeFromBlack(oPC, FADE_SPEED_MEDIUM)));

То же самое. Что я делаю неправильно?
З.Ы. Все дело происходит за сек 10 до конца кутсценки, я пробовал и время увеличить до конца, думал типа может если во время сценки не успевает фромблэкнуться, то потом не может уже. Ни фига! Тот же результат!
Агрессинг
Убо-Сатло

Я НА БЫСТРУЮ РУКУ СКЛЕПАЛ ТЕБЕ МОД, ПОСМОТРИ, ВСЕ РАБОТАЕТ КАК НАДО. КАЧАЙ ТУТ
Добавлено в [mergetime]1119393941[/mergetime]
Убо-Сатло
QUOTE
DelayCommand(145.0, AssignCommand(oPC, FadeFromBlack(oPC, FADE_SPEED_MEDIUM)));

Похоже вот твоя ошибка (выделена красным) Но для надежности все равно скачай мод и посмотри.
Убо-Сатло
Агрессинг , скачал. Открываю архив, там "В помощь. mod". Пытаюсь извлечь - говорит нет файлов для извлечения!
Если ошибка то, что ты выделил красным, то в первом(основном) варианте этого нет. А второй я просто пробовал на всякий случай. Кстати, насчет твоего модуля "В помощь", у меня SOU 1.30, если у тебя новее версия, я его не смогу открыть.
Агрессинг
У меня Орды и Тени 1.30
Так что выладываю скрипт. Все идеально работает. Подставляй свои значения.
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oНПС = GetObjectByTag("ТЕГ");
DelayCommand(3.0, FadeToBlack(oPC, FADE_SPEED_MEDIUM));
DelayCommand(5.0, AssignCommand(oНПС, ActionJumpToObject(GetWaypointByTag("WP"))));
DelayCommand(5.0, AssignCommand(oPC, ActionJumpToObject(GetWaypointByTag("WP"))));
DelayCommand(7.0, AssignCommand(oНПС, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID)));
DelayCommand(9.0, AssignCommand(oНПС, FadeFromBlack(oPC, FADE_SPEED_MEDIUM)));
}
Aiwan
Вот кусок моего кода. Не надо никакие акции на снятие.
Neverwinter Script Source
DelayCommand(75.0, AssignCommand(oPC, ClearAllActions()));
    DelayCommand(77.0, FadeToBlack(oPC, FADE_SPEED_FASTEST));
    DelayCommand(78.0, AddCutEffects(oPC));
    DelayCommand(78.1, AssignCommand(oPC, JumpToObject(oWpCamPC4)));
    DelayCommand(78.5, AssignCommand(oPC, SetCameraFacing(45.0, 5.0, 70.0, CAMERA_TRANSITION_TYPE_SNAP)));
    DelayCommand(79.0, FadeFromBlack(oPC, FADE_SPEED_FAST));
Nick Parker
Начинаю учиться построению сценок и возникают некоторые тупые вопросы, до которых я сам не догоню.
Почему у меня не уничтожается oNPS, в то время как oNRS исчезает? Что я забыл или что переборщил?

Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oNPS = GetObjectByTag("ENEMY2");
object oNRS = GetObjectByTag("ENEMY1");
object oWPpc = GetWaypointByTag("WPPS1");
object oWP1 = GetWaypointByTag("WP01");
object oWP2 = GetWaypointByTag("WP02");
effect eCutInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)
    return;
  {
  FadeToBlack(oPC, FADE_SPEED_FASTEST);
  AssignCommand(oPC, ClearAllActions());
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutInv, oPC, 16.6);
  SetCutsceneMode(oPC);
  SetAILevel(oNPS, AI_LEVEL_HIGH);
  SetAILevel(oNRS, AI_LEVEL_HIGH);
  DelayCommand(0.5, AssignCommand(oPC, JumpToObject(oWPpc)));
  AssignCommand(oPC, SetCameraFacing(270.0, 15.0, 45.0, CAMERA_TRANSITION_TYPE_SLOW));
  DelayCommand(1.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
  DelayCommand(1.5, AssignCommand(oNPS, ActionJumpToObject(oWP1)));
  DelayCommand(2.0, AssignCommand(oNPS, ActionJumpToObject(oWP2)));
  DelayCommand(1.5, AssignCommand(oNRS, ActionJumpToObject(oWP1)));
  DelayCommand(2.0, AssignCommand(oNRS, ActionJumpToObject(oWP2)));
  DelayCommand(12.8, AssignCommand(oNPS, ActionDoCommand(DestroyObject(oNPS))));
  DelayCommand(12.9, AssignCommand(oNRS, ActionDoCommand(DestroyObject(oNRS))));
  DelayCommand(15.5, FadeToBlack(oPC, FADE_SPEED_FASTEST));
  DelayCommand(17.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
  DelayCommand(18.0, SetCutsceneMode(oPC, FALSE));
  }
}
Aiwan
Твои НПС не делают никаких актионов, зачем им в стэк пихать дестрой? Удаляй проще по таймингу делей командой.
Neverwinter Script Source
DelayCommand(12.8, (DestroyObject(oNPS));
  DelayCommand(12.9, (DestroyObject(oNRS));
Friedrich
QUOTE (Nick Parker @ Jun 22 2005, 13:00)
SetAILevel(oNPS, AI_LEVEL_HIGH);
  SetAILevel(oNRS, AI_LEVEL_HIGH);

А это зачем?
DBColl
Friedrich
Чтобы умнее были. Нормальная практика. yes.gif
Nick Parker
QUOTE (Friedrich @ Jun 22 2005, 13:44)
А это зачем?

Они иногда тупить начинают. То в стенку идут, то ваще ничего не делают, когда их бьют.
А с этой командой на 50% вероятности, что этого не будет.
Добавлено в [mergetime]1119441452[/mergetime]
Конечно, если правильно понял biggrin.gif
dumbo
насколько я понял, уровень AI является, по сути, неким "событийным приоритетом". т.е. на низких уровнях события, предназначенные для объекта, могут быть вытеснены более приоритетными - оттого и тупят. я так думаю! (с) мимино crazy.gif
Убо-Сатло
Нашел свою ошибку с блэками! Спасибо Агрессингу и Aiwanу, но у меня ошибка была в другом месте. Кстати, Aiwan, а что за функция AddCutEffects(oPC);? У меня ее нет (SOU 1.30). Что за эффекты она добавляет? И с какой версии игры появляется?
Aiwan
Это функция моя.
Neverwinter Script Source
// СДЕЛАТЬ НЕВИДИМЫМ oCreature
// Если bSlow = TRUE, то накладываем EffectSlow()
// Если int bInv = TRUE - накладываем невидимость
void AddCutEffects(object oCreature, int bInv=TRUE, int bSlow=FALSE);

void AddCutEffects(object oCreature, int bInv=TRUE, int bSlow=FALSE)
    {
      effect eInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
      effect eSlow = EffectSlow();
      if (oCreature != OBJECT_INVALID)
      {
      if(bInv==TRUE){
      ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInv, oCreature);}
      if(bSlow==TRUE){
            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSlow, oCreature);}
      }
    }
-fenix-
1) Можно сделать, чтобы игрок не мог атаковать? Ни врагов ни друзей ни какими спосабами, включая магию. Но при этом он может двигаться.

2) Как заставить ездить тележки?
Агрессинг
QUOTE
Как заставить ездить тележки?

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

Я не уверен, не разбирался, но попробуй поставить условие если ПК атакует, то на нем запускается ClearAllActions. Поставь скрипт onSpawn непися.
Хотя может более опытные подскажут.. dntknw.gif
-fenix-
QUOTE
Создай животное и выбери ему внешность тележки, а потом двигай как непися

Кажись есть функция, она мне и нужна.

QUOTE
Я не уверен, не разбирался, но попробуй поставить условие если ПК атакует, то на нем запускается ClearAllActions. Поставь скрипт onSpawn непися.

Совсем забыл blush.gif На челе невидемость, НПС его атаковать не могут, нужно чтоб и ПС не мог даже если захочет и чтоб заклинания не кастовал.
Агрессинг
QUOTE
Кажись есть функция, она мне и нужна.

функция, чтобы телега двигалась? Сделай животное как я собьяснил ранее
а потом на существо onSpawn функцию
Neverwinter Script Source
ActionMoveToObject(GetWaypointByTag("ТЕГ ВЕЙПА"));

QUOTE
Совсем забыл  На челе невидемость, НПС его атаковать не могут, нужно чтоб и ПС не мог даже если захочет и чтоб заклинания не кастовал.
Все равно видимый невидимый, так ты сможешь сам этот скрипт написать?
minion
Aiwan это не существенно, но можно немного укоротить твою ф-ию:
Neverwinter Script Source
// СДЕЛАТЬ НЕВИДИМЫМ oCreature
// Если bSlow = TRUE, то накладываем EffectSlow()
// Если int bInv = TRUE - накладываем невидимость
void AddCutEffects(object oCreature, int bInv=TRUE, int bSlow=FALSE);

void AddCutEffects(object oCreature, int bInv=TRUE, int bSlow=FALSE)
    {
      effect eInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
      effect eSlow = EffectSlow();
      if (oCreature != OBJECT_INVALID)
      {
      if(bInv)// так проще
      {
      ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInv, oCreature);}
      if(bSlow)
      {
            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSlow, oCreature);}
      }
    }
Aiwan
Хм, я смотрел инклюды БИОВАР, а они так и писали проверки если надо. Тебе решать wink.gif Я останусь при своем коде.
-fenix-
QUOTE
Создай животное и выбери ему внешность тележки, а потом двигай как непися

Эээ - это как? Кажись не лзя менять внешность НПС на внешность размещаемых объектов, сделать из слона подсвечник не получется.
Или у меня версия ущербная?
Friedrich
QUOTE (-fenix- @ Jun 26 2005, 10:36)
Эээ - это как? Кажись не лзя менять внешность НПС на внешность размещаемых объектов, сделать из слона подсвечник не получется.

Можно, если 2da подредактировать.
QUOTE (minion @ Jun 25 2005, 21:12)
if(bInv)// так проще

Ага. И это экономит 8 байт скомпелированного кода, и видимо, пару наносекунд процессорного времени. tongue.gif
А нано- это сколько, ксати?
Aiwan
QUOTE (Friedrich @ Jun 26 2005, 14:48)
А нано- это сколько, ксати?

Во во. АНАНО... rofl.gif
-fenix-
QUOTE
Можно, если 2da подредактировать.

Тогда вопросик, как это сделать? Вещь полезная!
Aiwan
Если напишете как это сделать забаню и сотру пост. В приват! Итак ДМ-ы шардов нге знают как грамотеев отваживать, вы тут еще научите плохому! aggressive.gif
-fenix-
Через скрипты редактировать погоду можно только с помощью этого
Neverwinter Script Source
void SetWeather(object oTarget, int nWeather)

или есть еще функции? Я имею в виду можно ли через скрипты менять погоду, как через меню локи, выставлять проценты осадков, силу ветра?
Aiwan
Neverwinter Script Source
// Gets the weight of an item, or the total carried weight of a creature in tenths
// of pounds (as per the baseitems.2da).
// - oTarget: the item or creature for which the weight is needed
int GetWeight(object oTarget=OBJECT_SELF)

// Set the weather for oTarget.
// - oTarget: if this is GetModule(), all outdoor areas will be modified by the
//  weather constant. If it is an area, oTarget will play the weather only if
//  it is an outdoor area.
// - nWeather: WEATHER_*
//  -> WEATHER_USER_AREA_SETTINGS will set the area back to random weather.
//  -> WEATHER_CLEAR, WEATHER_RAIN, WEATHER_SNOW will make the weather go to
//      the appropriate precipitation *without stopping*.
void SetWeather(object oTarget, int nWeather)

// Gets the fog amount in the area specified.
// nFogType = nFogType specifies wether the Sun, or Moon fog type is returned.
//    Valid values for nFogType are FOG_TYPE_SUN or FOG_TYPE_MOON.
// If no valid area (or object) is specified, it uses the area of caller.
// If an object other than an area is specified, will use the area that the object is currently in.
int GetFogAmount(int nFogType, object oArea=OBJECT_INVALID)

// Gets the fog color in the area specified.
// nFogType specifies wether the Sun, or Moon fog type is returned.
//    Valid values for nFogType are FOG_TYPE_SUN or FOG_TYPE_MOON.
// If no valid area (or object) is specified, it uses the area of caller.
// If an object other than an area is specified, will use the area that the object is currently in.
int GetFogColor(int nFogType, object oArea=OBJECT_INVALID)

// Sets the fog amount in the area specified.
// nFogType = FOG_TYPE_* specifies wether the Sun, Moon, or both fog types are set.
// nFogAmount = specifies the density that the fog is being set to.
// If no valid area (or object) is specified, it uses the area of caller.
// If an object other than an area is specified, will use the area that the object is currently in.
void SetFogAmount(int nFogType, int nFogAmount, object oArea=OBJECT_INVALID)

// Sets the fog color in the area specified.
// nFogType = FOG_TYPE_* specifies wether the Sun, Moon, or both fog types are set.
// nFogColor = FOG_COLOR_* specifies the color the fog is being set to.
// The fog color can also be represented as a hex RGB number if specific color shades
// are desired.
// The format of a hex specified color would be 0xFFEEDD where
// FF would represent the amount of red in the color
// EE would represent the amount of green in the color
// DD would represent the amount of blue in the color.
// If no valid area (or object) is specified, it uses the area of caller.
// If an object other than an area is specified, will use the area that the object is currently in.
void SetFogColor(int nFogType, int nFogColor, object oArea=OBJECT_INVALID)

// Changes the sky that is displayed in the specified area.
// nSkyBox = SKYBOX_* constants (associated with skyboxes.2da)
// If no valid area (or object) is specified, it uses the area of caller.
// If an object other than an area is specified, will use the area that the object is currently in.
void SetSkyBox(int nSkyBox, object oArea=OBJECT_INVALID)
-fenix-
СПАСИБО АЙВАНgood.gif, у меня еще вопросикbiggrin.gif

Когда ПС подходит к точки, режим кут-сценки снимается, почему?
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oNPC1 = GetObjectByTag("barmen");
object oWP = GetObjectByTag ("WP_PC_1");
//==============================================================================
  if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)

    return;

    {
    SetLocalInt(OBJECT_SELF, "TRIGGER", 1);
    SetCutsceneMode(oPC, TRUE);
    AssignCommand(oNPC1, ClearAllActions());
    AssignCommand(oPC, ClearAllActions());

    ActionDoCommand(AssignCommand(oPC, ActionMoveToObject(oWP)));
    ActionDoCommand(AssignCommand(oPC, SetCameraFacing(280.0,20.0, 90.0,
    CAMERA_TRANSITION_TYPE_MEDIUM)));

    ActionWait(2.0);

    ActionDoCommand(AssignCommand(oNPC1, ActionMoveToObject(oPC)));
    ActionDoCommand(AssignCommand(oNPC1, ActionPlayAnimation
    (ANIMATION_FIREFORGET_SALUTE, 1.0, 3.0)));
    ActionDoCommand(AssignCommand(oNPC1, ActionDoCommand(PlayVoiceChat
    (VOICE_CHAT_HELLO))));
    ActionDoCommand(AssignCommand(oNPC1, ActionSpeakString("ÏÐÈÂÅÒ")));
    ActionDoCommand(AssignCommand(oPC, SetCutsceneMode(oPC, FALSE)));
    ActionDoCommand(AssignCommand(oNPC1, ActionStartConversation(oPC)));
    }

}
Aiwan
Neverwinter Script Source
ActionDoCommand(AssignCommand(oNPC1, ActionSpeakString("")));
    ActionDoCommand(AssignCommand(oNPC1, ActionStartConversation(oPC)));
    ActionDoCommand(AssignCommand(oNPC1, ActionDoCommand(SetCutsceneMode(oPC, FALSE))));

Попробуй три строки заменить на это. Если будет косяк поменяй местами нижние две строки.
-fenix-
Айван все отлично, только я не понял, что SetCutsceneMode не ставится в очередь ПС, у нас все команды запоминает тригер.
Я пробовал написать через ActionDoCommand для ПС начало и конец кутсценки, но это все равно не помогало, в чем тут соль?
Lex
эх.. все по новой..
QUOTE (-fenix- @ Jun 26 2005, 18:40)
ActionDoCommand(AssignCommand(oPC, SetCutsceneMode(oPC, FALSE)));

поставить в стек акций триггера привязку к игроку снятие режима кат-сцены.

Ну в общем не важно чего, факт в том, что на триггере у тебя формируется очередь акций, которые привязывают другому объекту действия. Такая очередь выполнится за 1 секунду. (ибо привязать действие != самому действию. Триггер ждать окончания действия не будет)


Так что на триггере особого смысла нет загонять все AssignCommand в ActionDoCommand
А вот делать стек на игрока надо. Тогда все будет последовательно.
Aiwan
-fenix- ты немного не понял. Ты подумай ВНИМАТЕЛЬНО. Я немного добавлю, Леш.
Смотри ты раздал по очереди которая выстроилась на триггере. Все верно. Ты задал оРС ОДИН Актион:
Neverwinter Script Source
ActionDoCommand(AssignCommand(oPC, ActionMoveToObject(oWP)));
  ---------------
  ActionWait(2.0);
  ---------------
  ActionDoCommand(AssignCommand(oPC, SetCutsceneMode(oPC, FALSE)));

Он выполнит первый, и триггер выполнит сразу же второй через 2 секунды. Я же, поставил функцию снятия катсцены в очередь к НПС, ведь наша задача такая: НПС, подошел, Начал разговор. Следовательно если воткнуть на его Актионы и завершение сценки это будет логично. Верно?
Neverwinter Script Source
ActionDoCommand(AssignCommand(oNPC1, ActionStartConversation(oPC)));
ActionDoCommand(AssignCommand(oNPC1, ActionDoCommand(SetCutsceneMode(oPC, FALSE))));

Расшифровываю: Актон для триггера, Дать удаленную команду оNPC1, поставить в очередь актион НАЧАЛО ДИАЛОГА С оРС.
Расшифровываю: Актон для триггера, Дать удаленную команду оNPC1, поставить в очередь не актион СНЯТЬ КАТСЦЕНУ С оРС.
Ясно?
-fenix-
QUOTE
Ясно?


Да, Айвен спасибо тебе огромное, перемолол в пудру! biggrin.gif Я этот момент упускал все время.
Malos
Народ все кто в состоянии мне помочь помогите. У меня вот тут такая проблемка.diablo.gif Я хочу создать магическую лабораторию, в которой при смешении определенных ингредиентов можно получать определенные предметы. К примеру, магический котел. Если в него положить два ингредиента и направить на котел нужное заклинание, то можно получить зелье. Подобная лаборатория есть в главной компании Neverwinterа у Эльтуры в гильдии магов. Пробовал вытаскивать скрипты оттуда и составлять свои собственные, но ничего хорошего из этого не вышло.unsure.gif

Buldog
Где то тут это уже обсуждалось, поищи по форуму. Кажись, во II томе Скриптов.
minion
Malos вот тебе ссылка: тут
У меня тоже была такая идея и я переписал скрипт. Будут вопросы спрашивай через приват.
Zirrex
Извините, закинул не туда вопросы, размещаю тут.

Ребята, вопросы следующего содержания. Может быть вам они не покажутся новыми, но нормальное решение им я пока что найти не смог.

1. Все наверняка знают, что вышедший Хоту привнес массу недоразумений и ошибок. Одна из таких ошибок, не затирающиеся иммунитеты от полиморфов, когда им перезаходишь на сервер.

Снять сам полиморф не составляет труда, но эффекты остаются все равно. В каком видел они хранятся на персонаже, не понятно. В момент полиморфа на персонаже создается невидимый объект, в котором хранятся все установки полиморфа. Пробовал проверить, так ли это, нет его, но если посмотреть 2da, то там четко видно, что подобный объект создается. Что происходит с эффектами в момент снятия полиморфа, я так и не понял, но они становятся постоянными и снимаются лишь через сон или смерть. Лечу подобное недоразумение пока что снятием полиморфа и затиранием всех заклинаний, иначе их становится по 255. Старый баг колдуна.

Скрипт, который на данный момент служит мне лечением:

Neverwinter Script Source
void RemovePolymorth(object oPC)
{
    // Посмотреть первый эффект
    effect eEffect = GetFirstEffect(oPC);

    while (GetIsEffectValid(eEffect))
    {
        // Если есть эффект полиморфа на игроке, то продолжить
        if (GetEffectType(eEffect) == EFFECT_TYPE_POLYMORPH)
        {
            // Удалить эффект полиморфа с игрока
            RemoveEffect(oPC, eEffect);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC);
            break;
        }
        // Посмотреть следующий эффект
        eEffect = GetNextEffect(oPC);
    }

    object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC);

    // Если есть объект невидимой брони, удалить
    if (GetIsObjectValid(oSkin))
    {
        DestroyObject(oSkin);
    }
}


2. Биоваре оставили баг со сменой оружия. Почему его до сих пор не исправили, мне не ясно, ибо он на корню нарушает раундовую боевую систему, позволяя атаковать за 1 раунд несколько раз, без учета, что этих атак может быть гораздо меньше. Применил пока что такое решение проблемы. Подскажите, в чем я не прав, или как это можно сделать проще. Скрипт находится на эвенте "On Attacked" скрипта "nw_c2_default5":

Neverwinter Script Source
if (GetIsDM(oPC) || GetIsDMPossessed(oPC) || !GetIsPC(oPC)) return;

// Start script - Выпадение из рук оружия, если его решили сменить в бою
    object oWeaponR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
    object oWeaponL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
    effect eAttack = EffectAttackDecrease(15);

    int nUsedOther;
    string sMessage = "Вы пытаетесь быстро выхватить новое оружие в бою, но все равно мешкаете немного!";

    if (GetIsObjectValid(oWeaponR) && GetIsObjectValid(oWeaponL))
    {
        if ((GetLocalInt(oWeaponR,"WeaponR") != 1) || (GetLocalInt(oWeaponL,"WeaponL") != 1))
        {
            object oItem = GetFirstItemInInventory(oPC);

            while (GetIsObjectValid(oItem))
            {
                if (GetLocalInt(oItem,"WeaponR") == 1) ||
                  (GetLocalInt(oItem,"WeaponL") == 1))
                {
                    nUsedOther = 1;
                    DeleteLocalInt(oItem, "WeaponR");
                    DeleteLocalInt(oItem, "WeaponL");
                    break;
                }
                oItem = GetNextItemInInventory(oPC);
            }

            if (nUsedOther == 1)
            {
                nUsedOther = 0;
                SendMessageToPC(oPC, sMessage);
                AssignCommand(oPC, ClearAllActions(TRUE));
                AssignCommand(oPC, ActionUnequipItem(oWeaponR));
                AssignCommand(oPC, ActionUnequipItem(oWeaponL));
                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, 60.0f);
            }
            else
            {
                SetLocalInt(oWeaponR, "WeaponR", 1);
                SetLocalInt(oWeaponL, "WeaponL", 1);
                DelayCommand(7.0, DeleteLocalInt(oWeaponR, "WeaponR"));
                DelayCommand(7.0, DeleteLocalInt(oWeaponL, "WeaponL"));
            }
        }
    }
    else if (GetIsObjectValid(oWeaponR))
    {
        if (GetLocalInt(oWeaponR,"WeaponR") != 1)
        {
            object oItem = GetFirstItemInInventory(oPC);

            while (GetIsObjectValid(oItem))
            {
                if (GetLocalInt(oItem,"WeaponR") == 1)
                {
                    nUsedOther = 1;
                    DeleteLocalInt(oItem, "WeaponR");
                    break;
                }
                oItem = GetNextItemInInventory(oPC);
            }

            if (nUsedOther == 1)
            {
                nUsedOther = 0;
                SendMessageToPC(oPC, sMessage);
                AssignCommand(oPC, ClearAllActions(TRUE));
                AssignCommand(oPC, ActionUnequipItem(oWeaponR));
                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, 60.0f);
            }
            else
            {
                SetLocalInt(oWeaponR, "WeaponR", 1);
                DelayCommand(7.0, DeleteLocalInt(oWeaponR, "WeaponR"));
            }
        }
    }
    else if (GetIsObjectValid(oWeaponL))
    {
        if (GetLocalInt(oWeaponL,"WeaponL") != 1)
        {
            object oItem = GetFirstItemInInventory(oPC);

            while (GetIsObjectValid(oItem))
            {
                if (GetLocalInt(oItem,"WeaponL") == 1)
                {
                    nUsedOther = 1;
                    DeleteLocalInt(oItem, "WeaponL");
                    break;
                }
                oItem = GetNextItemInInventory(oPC);
            }

            if (nUsedOther == 1)
            {
                nUsedOther = 0;
                SendMessageToPC(oPC, sMessage);
                AssignCommand(oPC, ClearAllActions(TRUE));
                AssignCommand(oPC, ActionUnequipItem(oWeaponL));
                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, 60.0f);
            }
            else
            {
                SetLocalInt(oWeaponL, "WeaponL", 1);
                DelayCommand(7.0, DeleteLocalInt(oWeaponL, "WeaponL"));
            }
        }
    }
// End script - Выпадение из рук оружия, если его решили сменить в бою
dumbo
Zirrex
QUOTE (Zirrex @ Jun 30 2005, 11:36)
Извините, закинул не туда вопросы, размещаю тут.

а в чем, собственно, вопросы то? dntknw.gif
Zirrex
dumbo, я довольно четко изложил свои вопросы.

1. Не удается затереть эффекты от полиморфа при входе игрока на сервер. Снимается лишь эффект полиморфа, остальные же эффекты, иммунитеты, абсорбы и т.п. остаются на персонаже игрока до смерти или сна.

2. Насколько представленное мной решение по смене оружия верно, и есть ли более легкий способ?
-fenix-
У меня такие вопросы

Что делают эти функции
Neverwinter Script Source
TouchAttackMelee

Neverwinter Script Source
TouchAttackRanged

у меня в переводе это как, Вызывающий оператор выполнит Сенсорную Атаку(Нападение) Melee на oTarget и как Вызывающий оператор выполнит Поколебленную Сенсорную Атаку на oTarget. В игре это выглядит как "Кто-то применяет Рукопашная атака Alies Signe" и как "кто-то применяет Атаку из далека на Alies signe".А что это значит?

И
Neverwinter Script Source
GetAttemptedAttackTarget()

Это получить цель, каторую пытается атаковать кто-то?

И как делать стычки в катсценах, обычные скрипты на атаку не пашут или там какая-нить хитрая функция для их юзания?


Кажись понял!

TouchAttackMelee - это просто "устная" атака указаной цели, с целью узнать как оно будет атаковано (промах, удар, критический удар), это можно отразить в окне, а можно нет. Это наверно используется в АИ, ну и в других целях.

TouchAttackRanged - а это кажись то же самое, только с закленаниями.

GetAttemptedAttackTarget() - а это при каждом действии атаки (в бою) получать цель атаки ?



А вот как потычки в сценках делать, ActionAttack и др Attack чета не пашут dntknw.gif
Zirrex
-fenix-, должна работать команда "ActionAttack". Главное при ее использовании верно указывать цели, но самое лучшее решение, это поссорить фракции двух целей, которые должны сразиться между собой.

У меня в модуле есть скрипт, который устраивает петушиные бои. Изначально у петухов фракции были одинаковые, и они стравливались с помощью этой команды, но потом я им сделал разную фракцию, и они стали кидаться гораздо яростнее.

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