Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 48 49 50 51 52 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Мефистофель
сообщение May 31 2005, 00:21
Сообщение #1226


Level 6
Иконки Групп

Класс: Страж Тьмы
Характер: Lawful Good
Раса: Баатезу



Спасибо Лекс, но возникли некоторые неполадки, дело в том что скелет, после смерти непися, долго появляется, и эффект смери не работает, скелет нападает на ПК.
Добавлено в [mergetime]1117488620[/mergetime]
Спецефический вопрос. Если играть за друида, то ПК может превращатся в жевотных, дак вот, скажите можно ли, также поменять ПК только ранне задуманным NPC?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
minion
сообщение May 31 2005, 01:17
Сообщение #1227


Level 4
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Эльф



Я выложил вариант с двумя ингридиентами так как он проще. Но и в не мчто-то не работает.
Функция SetupLab () создает своебразный массив по номеру комбинации. Допустим если было кастованр заклинание из первой комбинации, то имеем в переменной nComboNumber = 1. А в массиве под этим номером уже читаем сами ингридиенты и то что должно получиться.
mamuc в каком именно цикле for?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение May 31 2005, 09:46
Сообщение #1228


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Minion, ты можешь перепутать FALSE и TRUE и не будет пахать ничего. Сделай фукцию Debug и впиши ее после каждого действия в код. Пусть она выводит тебе мессаги, что сделано и что происходит. Так гадать можно до второго пришествия. Увидишь что и как, сам найдешь ошибку. У меян при входе в мод все пестрит мессагами, кто где пукнул, выдохнул у меян все пишет в дебаг.

2 Архангел. Табличку кроме панели смерти прилепить нельзя.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Archangel
сообщение May 31 2005, 09:49
Сообщение #1229


Восставший из пепла
***

Класс: Бледный Мастер
Характер: Neutral Evil
Раса: Человек
ПОДМАСТЕРЬЕ



QUOTE
Archangel, есть идея, ставь на хартбит игрока или модуля скрипт который будет проверять время суток(день-ночь). Если ночь, то начинается диалог(который будет за табличку). 
Ну еще сделай локалку чтобы ночью диалог не начинался каждые 6 секунд 

QUOTE
2 Архангел. Табличку кроме панели смерти прилепить нельзя.

Ладно, спасибо. Че-нить придумаем... ;)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение May 31 2005, 10:47
Сообщение #1230


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



QUOTE
Я выложил вариант с двумя ингридиентами так как он проще. Но и в не мчто-то не работает.
Функция SetupLab () создает своебразный массив по номеру комбинации. Допустим если было кастованр заклинание из первой комбинации, то имеем в переменной nComboNumber = 1. А в массиве под этим номером уже читаем сами ингридиенты и то что должно получиться.
mamuc в каком именно цикле for?


в SetupLab () .
..сначало напишу как у тебя работает по тому , что написано сейчас
1) устатнавливаешь int nComboNumber = 1;
2) запускаешь цыкл for для того же nComboNumber с 1 до 5 (nNumberOfCombos = 5) ...таким образом цыкл работает 5 раз
3) в цыкле у тебя токо один свич для того самого бедного nComboNumber , где в зависимости от значения создает твой "своебразный массив по номеру комбинации"...усе это срабатывает 5 раз каждый раз присваивается знач масива и в итоге ты получаешь в своем масиве ВСЕГДА то что присваиваешь, когда
nComboNumber=5, поскольку это действие присвоения в SetupLab () выполняеться последним

что бы работало так как ты описал SetupLab () должен быть с параметром nComboNumber, и цыкл там совсем ненужен, должен токо свич остатся....
короче- с исправлениями должна выглядеть примерно так
Neverwinter Script Source
void SetupLab (int nComboNumber)
{
  SetLocalString (GetModule(), "NW_MYCHESTTAG", "M3Q1LABCHEST");
  //* M3Q1LABCHEST - тег сундука с ингридиентами
      switch (nComboNumber)
      {
        case 1:
            SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_MELFS_ACID_ARROW);
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC12");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC09");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MRING004);
        break;
        case 2:
            SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_MAGEARMOR);
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC12");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC10");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MNECK015);
        break;
        case 3:
            SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_ENERVATION);
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC11");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC08");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, M3Q1A09LABROBE);
        break;
        case 4:
            SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_FEEBLEMIND);
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC06");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC06");
            SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_WMGST005);
        break;
        case 5:
             SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_STONESKIN);
             SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC14");
             SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC06");
             SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MBOOTS004);
        break;
      }
}

..я конечно еще рекомендовал бы вместо SetLocalArrayInt ,SetLocalArrayString использовать структуры ...это гораздо удобнее ( и короче в записи тоже) ИМХО :yes:
вот примерно так...(это кроме всего дает возможность вообще обходиться без навешивания лишних локальных на плейс)
Neverwinter Script Source
struct stRec
{
    int spell;
    string req1;
    string req2;
    string rez;
};


struct stRec SetupLab(int nComboNumber)
{
    struct stRec stR;
    if (!nComboNumber) return stR;
    switch (nComboNumber)
    {
        case 1:
            stR.spell = SPELL_MELFS_ACID_ARROW;
            stR.req1 = "NW_IT_MSMLMISC12";
            stR.req2 = "NW_IT_MSMLMISC09";           
            stR.rez = "****";
            // kstati v sozdanii rezultata nuzhen resref, a ne tag itema
            // ( i resref obichno pishetsa strokovimi bukvami)
            break;
        case 2:
            stR.spell = SPELL_MAGEARMOR;
            stR.req1 = "NW_IT_MSMLMISC12";
            stR.req2 = "NW_IT_MSMLMISC10";           
            stR.rez = "****";
            break;
        // i tak dalee       
    }
    return stR;
}


Сообщение отредактировал mamuc - Jun 3 2005, 08:48
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение May 31 2005, 13:18
Сообщение #1231


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



Народ, объясните плиз мне, как переопределить ряд стандартных спеллов? Что такое спеллхук и че с ним делать?..
В этом я совсем профан... :ph34r: =)

Проясните плз... только пошагово. Можно и кратко, но по шагам. А также о зависимостях между 2да-хами и скритами спеллов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение May 31 2005, 13:28
Сообщение #1232


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



QUOTE (Лито @ May 30 2005, 14:18)
QUOTE (Lex @  May 20 2005, 22:22)
Через стоимость вещи вроде можно определить уровень. Где-то кто-то расписывал табличку такую. Сравнивай потом с уровнем игрока и все.

Где именно? Через поиск ничего не нашел. :(

нарисовал тут на досуге:
1. dmb_inc_ilr:
Neverwinter Script Source
void Read2DA()
{
  int nRow;
  string sDA;
  // можно на модуль, можно на плэйс какой-нибудь...
  object oStore = GetModule();
  for (nRow = 0; nRow < 60; nRow++) {
    sDA = Get2DAString("itemvalue", "MAXSINGLEITEMVALUE", nRow);
    if (sDA == "") break;
    SetLocalInt(oStore, "ILR_"+IntToString(nRow+1), StringToInt(sDA));
  }
}

int GetILR(object oItem)
{
  object oStore = GetModule();
  int bIdentified = GetIdentified(oItem);
  if (!bIdentified) SetIdentified(oItem, TRUE);
  int nGP = GetGoldPieceValue(oItem);
  SetIdentified(oItem, bIdentified);
  int nLevel = 1;
  while (nLevel < 60 &&
        GetLocalInt(oStore, "ILR_"+IntToString(nLevel)) < nGP)
    nLevel++;
  return nLevel;
}

2. в OnModuleLoad:
Neverwinter Script Source
#include "dmb_inc_ilr"
void main() {
  Read2DA();
  ...

3. пользовать по усмотрению. например, в OnPlayerEquipItem:
Neverwinter Script Source
#include "dmb_inc_ilr"
void main() {
  object oPC = GetPCItemLastEquippedBy();
  object oItem = GetPCItemLastEquipped();
  int nLevel = GetILR(oItem);
  if (nLevel > GetHitDice(oPC))
  {
    SendMessageToPC(oPC, "Для ношения этой вещи требуется "+
                        IntToString(nLevel)+" уровень");
      // закрываем окно инвентаря, ибо его плющит...
      OpenInventory(oPC, oPC);
      OpenInventory(oPC, oPC);
      AssignCommand(oPC, ActionUnequipItem(oItem));
      return;
  }
  ...


ps. особо не проверялось, посему ежели что - пишите...
Добавлено в [mergetime]1117537069[/mergetime]
DBColl
по spell-hook'ам - ТУТ

основная зависимость скриптов спеллов от 2да'х - в spells.2da в колонке ImpactScript прописаны их имена.. :) или ты про что-то другое?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение May 31 2005, 14:27
Сообщение #1233


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



QUOTE (dumbo @ May 31 2005, 13:28)
DBColl по spell-hook'ам - ТУТ

основная зависимость скриптов спеллов от 2да'х - в spells.2da в колонке ImpactScript прописаны их имена..или ты про что-то другое?

Да, я про это. Спасибо, почитаю ;). :good:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 1 2005, 13:20
Сообщение #1234


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Мефистофель @ May 31 2005, 01:21)
Спасибо Лекс, но возникли некоторые неполадки, дело в том что скелет, после смерти непися, долго появляется, и эффект смери не работает, скелет нападает на ПК.

так тебе это и надо было, нет?
Или надо чтобы скелет на земле валялся? Тогда при его создании ставь SetIsDestroyable(FALSE,FALSE); и накладывай эффект смерти EffectDeath() через ApplyEffectToObject()
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Мефистофель
сообщение Jun 2 2005, 00:16
Сообщение #1235


Level 6
Иконки Групп

Класс: Страж Тьмы
Характер: Lawful Good
Раса: Баатезу



QUOTE
так тебе это и надо было, нет?
Или надо чтобы скелет на земле валялся? Тогда при его создании ставь SetIsDestroyable(FALSE,FALSE); и накладывай эффект смерти EffectDeath() через ApplyEffectToObject()

Не лекс, эффекты ты прописал, но они не работают!? Мне надо было чтобы скелет мгновенно, появился за место НПК, как это было в ХотУ, я и сам эффекты накладывал, всё кампилилось, но не работало! во как.
Наверное я уже достал..Понимаю
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 2 2005, 08:31
Сообщение #1236


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



те он появляется, а тот НПС еще дергается? Так местами там поменяй функции анимации и создания скелета..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jun 2 2005, 21:54
Сообщение #1237


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



Мефистофель
ну и задачку ты себе нашел! :crazy:
на OnDamage вешать эту анимацию не очень хорошо, потому как есть всякая нехорошая магия, которая убивает сразу. если смотреть в торону OnDeath, то при смерти движок с довольно большой вероятностью успевает до вызова скрипта навесить анимацию падения - отследить это без мазы, поэтому часто начальная часть анимации пропадает. хотя и в OnDamage могут убить в лежачем положении(кнок)... вобщем, сделать так, чтоб это работало всегда красиво и правильно невозможно, так что вешай вот это на OnDeath и смирись :yes:
Neverwinter Script Source
void main()
{
  object oNPC = OBJECT_SELF;
  if (GetLocalInt(oNPC,"DEATH")) return;
  SetLocalInt(oNPC,"DEATH",TRUE);
  ClearAllActions(TRUE);
  SetImmortal(oNPC,TRUE);
  SetIsDestroyable(FALSE);
  SetAILevel(oNPC, AI_LEVEL_VERY_LOW); // stop nw_c2_default1 and 2
  float fT = 0.0, fSpasm1 = 2.0, fSpasm2 = 1.0, fDestroy = 5.0;
  DelayCommand(fT+=0.01,ApplyEffectToObject(DURATION_TYPE_PERMANENT,
                        EffectResurrection(),oNPC));
  DelayCommand(fT+=0.01,ApplyEffectToObject(DURATION_TYPE_PERMANENT,
                        EffectHeal(30),oNPC));
  DelayCommand(fT+=0.10,PlayAnimation(ANIMATION_LOOPING_SPASM, 1.0, fSpasm1));
  DelayCommand(fT+=fSpasm1,SetCreatureAppearanceType(oNPC,
                          APPEARANCE_TYPE_SKELETON_COMMON));
  DelayCommand(fT+=0.01,PlayAnimation(ANIMATION_LOOPING_SPASM, 1.5, fSpasm2));
  DelayCommand(fT+=fSpasm2,SetImmortal(oNPC,FALSE));
  DelayCommand(fT+=0.01,ApplyEffectToObject(DURATION_TYPE_INSTANT,
                        EffectDeath(),oNPC));
  DelayCommand(fT+=fDestroy,SetIsDestroyable(TRUE));
}

также, на все остальные слоты лучше навесить врапперы типа:
Neverwinter Script Source
void main()
{
  if (!GetLocalInt(OBJECT_SELF,"DEATH"))
    ExecuteScript("nw_c2_default5", OBJECT_SELF);
}

вызываемый скрипт для каждого слота, естественно, свой. критичны 1,2,3,5,6,8,b... короче, проще все сделать. :crazy:

ps. после "чуть-чуть подумать" переделал все, посему пришлось прибегнуть к редактированию поста... :oops:

Сообщение отредактировал dumbo - Jun 3 2005, 03:42
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
minion
сообщение Jun 3 2005, 01:17
Сообщение #1238


Level 4
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Эльф



mamuc У меня тут появилась немного другая идея, но раз ты предложил решенте проблемы то я сначала рассмотрю твое. Спасибо за помощь. :good:
Если будут еще вопросы, то непременно об этом сообщу.
Aiwan У меня и стаяли дебаги везде. Вот только я все равно не мог понять в чем баг. :yes: Но все равно спасибо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Garou
сообщение Jun 3 2005, 09:59
Сообщение #1239


Level 3
*

Класс: Оборотень
Характер: Chaotic Good
Раса: Человек



В нормальном состоянии в игре кнопкой (Esc) можно прервать любой диалог, есть ли возможность вставив скрипт в () запретить прерывание (Уж больно ответственный момент в игре) диалога? Как выглядит этот скрипт?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 3 2005, 10:04
Сообщение #1240


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Над этим бились очень долго сингловики. Выход нашли такой:
в начале диалога такое сделать (те в скрипте onDialog у НПС добавить строку)
Neverwinter Script Source
SetCutsceneMode(GetPCSpeaker(),TRUE); // вот не помню, катит тут такое определение игрока или нет

а в конце
Neverwinter Script Source
SetCutsceneMode(GetPCSpeaker(),FALSE);
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Garou
сообщение Jun 3 2005, 10:40
Сообщение #1241


Level 3
*

Класс: Оборотень
Характер: Chaotic Good
Раса: Человек



Попробую. Спас:)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
minion
сообщение Jun 4 2005, 12:50
Сообщение #1242


Level 4
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Эльф



mamuc А если я хочу, чтобы на одном спелле висело 3 ингридиента, а на другом допустим 4, то я могу сделать так:
Neverwinter Script Source
struct stRec
{
    string req1;
    string req2;
    string req3;
    string req4;
    string rez;
    int num;
};

struct stRec SetupLab(int nSpellID)
{
    struct stRec stR;
    switch (nSpellID)
    {
        case SPELL_MELFS_ACID_ARROW:
            stR.req1 = "NW_IT_MSMLMISC12";
            stR.req2 = "NW_IT_MSMLMISC09";
            stR.req3 = "****";
            stR.req4 = "****";         
            stR.rez = "****";
            stR.num = 4; // число ингридиентов
            break;
        case SPELL_MAGEARMOR:
            stR.req1 = "NW_IT_MSMLMISC12";
            stR.req2 = "NW_IT_MSMLMISC10";
            stR.req3 = "****";         
            stR.rez = "****";
            stR.num = 3;
            break;
        // пример для 2 спеллов     
    }
    return stR;
}


Т.е. сначала я определяю кастуемый спелл, а потом вызываю SetupLab (кастуемый спелл). Или мне надо сделать по другому?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Archangel
сообщение Jun 5 2005, 19:01
Сообщение #1243


Восставший из пепла
***

Класс: Бледный Мастер
Характер: Neutral Evil
Раса: Человек
ПОДМАСТЕРЬЕ



Неподскажите, что тут неправильно:
Neverwinter Script Source
DelayCommand(2.2, AssignCommand(oPC, SetCameraFacing(CAMERA_MODE_STIFF_CHASE_CAMERA)));

Мдя... наверно тут написана полная охинея. :crazy: Че-то плоховато я разбираюсь с изменением режима камер. :swoon:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
minion
сообщение Jun 5 2005, 19:07
Сообщение #1244


Level 4
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Эльф



Archangelэ А что должно произойти по твоей задумке? А то не совсем понятно.
Добавлено в [mergetime]1117987770[/mergetime]
по тому что у тебя написано камера закрепится за игроком без возможности поворота.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Archangel
сообщение Jun 5 2005, 19:10
Сообщение #1245


Восставший из пепла
***

Класс: Бледный Мастер
Характер: Neutral Evil
Раса: Человек
ПОДМАСТЕРЬЕ



QUOTE
Archangelэ А что должно произойти по твоей задумке? А то не совсем понятно.

Должен поменятся режим камеры. От вида "сверху" к виду "со спины".
Добавлено в [mergetime]1117988024[/mergetime]
QUOTE
по тому что у тебя написано камера закрепится за игроком без возможности поворота.

Мне невожна возможность поворота. У мня КутСцена. Так что камера должна быть статичной.

Сообщение отредактировал Archangel - Jun 5 2005, 19:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
minion
сообщение Jun 5 2005, 19:15
Сообщение #1246


Level 4
**

Класс: Волшебник
Характер: Chaotic Good
Раса: Эльф



Как я написа камера по константе у тебя происходит закрепление камеры за игроком.
И для смены режима камеры используй
Neverwinter Script Source
void SetCameraMode(
    object oPlayer,
    int nCameraMode
);

Сама комманда с параметрами.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Мефистофель
сообщение Jun 6 2005, 01:20
Сообщение #1247


Level 6
Иконки Групп

Класс: Страж Тьмы
Характер: Lawful Good
Раса: Баатезу



А помойму, нодо просто, джампить РС в другую точку и задать градусы.
Сделай обычный переход камеры от высоты, до спины, задав градусы положения. например 90.0, 6.0 50. вид с высока. и плавно переместив камеру градусами 90.0, 0.0, 79. вид со спины.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jun 7 2005, 08:42
Сообщение #1248


Level 9
Иконки Групп

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



QUOTE (Анамиэль @ Jun 6 2005, 16:55)
Можно ли сделать так,чтобы НПС сидел в кресле,но так чтобы с ним было возможно ведение диалога?

насчет того, что непись должен встать для каких либо действий мы уже прояснили. теперь пару мелких скриптиков для реализации "сидоков".
1. создаем плэйс стула(static). тэг ему прописываем например CHAIR_01.
2. создаем непися. навешиваем на него локалку-string(правый клик на неписе-Variables(Переменные)) с именем Chair и значением = тэг стула, куда он должен садиться. т.е. в нашем случае "CHAIR_01".
3. в слот OnHeartBit неписю пишем скрипт:
Neverwinter Script Source
void main()
{
  if (GetAILevel() == AI_LEVEL_VERY_LOW) return;
  ExecuteScript("nw_c2_default1", OBJECT_SELF);
  if (!IsInConversation(OBJECT_SELF) &&
      !GetIsInCombat() &&
      GetCurrentAction() != ACTION_SIT)
    ExecuteScript("dd_sit",OBJECT_SELF);
}

4. в OnSpawn:
Neverwinter Script Source
void main()
{
  ExecuteScript("nw_c2_default9", OBJECT_SELF);
  ExecuteScript("dmb_sit", OBJECT_SELF);
}

5. собственно, сам dmb_sit:
Neverwinter Script Source
void main()
{
  int nIndex = 0;
  object oChair = OBJECT_INVALID;
  string sChairTag = GetLocalString(OBJECT_SELF, "Chair");
  if (sChairTag!="") {
    oChair = GetObjectByTag(sChairTag);
  }
  else
  {
    for (nIndex = 1; nIndex < 10; nIndex++) {
      oChair = GetNearestObject(OBJECT_TYPE_PLACEABLE, OBJECT_SELF, nIndex);
      if (!GetIsObjectValid(oChair)) break;
      if (FindSubString(GetStringUpperCase(GetTag(oChair)), "CHAIR")!=-1 &&
          !GetIsObjectValid(GetSittingCreature(oChair))) {
          nIndex = 0;
          break;
      }
    }
  }
  if (nIndex==0 && GetIsObjectValid(oChair)) ActionSit(oChair);
}


все. теперь непись при появлении будет сразу садиться на стул и усаживаться туда после разговора/драки. если на непися не вешать локалку с тэгом стула, то он поищет любой рядом стоящий стул для восседания.
ps. только сейчас, заметив в своем тестовом модуле, как мимо проносится девочка и водружает свою пятую точку на сундук, решил чутка подправить... :oops:

Сообщение отредактировал dumbo - Jun 7 2005, 23:03
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Jun 7 2005, 09:10
Сообщение #1249


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



то minion
да можно=)
только не забудь вместо **** поставить для stR.req3 ,stR.req4 тэги необходимых компонентов, а stR.rez - ресреф создаваемого итема :D :yes:

и можно сделать так что бы обойтись и без поля int num; (неиспользовать)
..ведь в другом скрипте ты наверняка будешь делать проверку наличия компонентов для соотв крафта ...и там поставить условие типа если , скажем stR.req4=="" ( то есть пустой, не используется) то наличие компонента ( пустого компонента =)) есть.. =)
но это уже так на любителя..можно иделать стакой структурой как ты создал =)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2GoDoom
сообщение Jun 7 2005, 10:17
Сообщение #1250


Level 11
***

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN: Маппинг



dumbo, все круто... но вот одна недоработочка - если таких неписей (которые хотят сест ьпосидеть) будет куча - то буит жутко тормозить (из-за хертбита) тем более, что помимо "садящихся" неписей ест ьи другие скрипты.
Поэтому, имхо, лучше переписать этот скрипт под юзердейфайнед...
К тому же можно будет сразу делать проверку на то - сидит он или нет, и если нет - то скрипт вапще не выполялся (прерывался, не идя по следущим веткам) ;)

З.Ы.
Имхо так нада делать... но, возможно, я ошибаюсь?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 48 49 50 51 52 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29th March 2024 - 16:33