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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 53 54 55 56 57 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Aiwan
сообщение Jun 26 2005, 17:22
Сообщение #1336


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

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



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-
сообщение Jun 26 2005, 17:40
Сообщение #1337


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



СПАСИБО АЙВАН:good:, у меня еще вопросик:D

Когда ПС подходит к точки, режим кут-сценки снимается, почему?
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)));
    }

}


Сообщение отредактировал -fenix- - Jun 26 2005, 17:50
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 26 2005, 19:56
Сообщение #1338


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

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



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

Попробуй три строки заменить на это. Если будет косяк поменяй местами нижние две строки.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jun 27 2005, 11:17
Сообщение #1339


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Айван все отлично, только я не понял, что SetCutsceneMode не ставится в очередь ПС, у нас все команды запоминает тригер.
Я пробовал написать через ActionDoCommand для ПС начало и конец кутсценки, но это все равно не помогало, в чем тут соль?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 27 2005, 13:02
Сообщение #1340


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

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



эх.. все по новой..
QUOTE (-fenix- @ Jun 26 2005, 18:40)
ActionDoCommand(AssignCommand(oPC, SetCutsceneMode(oPC, FALSE)));

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

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


Так что на триггере особого смысла нет загонять все AssignCommand в ActionDoCommand
А вот делать стек на игрока надо. Тогда все будет последовательно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 27 2005, 15:48
Сообщение #1341


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

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



-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-
сообщение Jun 27 2005, 19:31
Сообщение #1342


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE
Ясно?


Да, Айвен спасибо тебе огромное, перемолол в пудру! :D Я этот момент упускал все время.

Сообщение отредактировал -fenix- - Jun 27 2005, 19:32
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Malos
сообщение Jun 28 2005, 03:56
Сообщение #1343


Level 1


Класс: Некромант
Характер: Chaotic Evil
Раса: Нежить



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

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Buldog
сообщение Jun 28 2005, 09:05
Сообщение #1344


Level 5
**

Класс: Мастер Оружия
Характер: Chaotic Neutral
Раса: Полуорк



Где то тут это уже обсуждалось, поищи по форуму. Кажись, во II томе Скриптов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
minion
сообщение Jun 29 2005, 12:42
Сообщение #1345


Level 4
**

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



Malos вот тебе ссылка: тут
У меня тоже была такая идея и я переписал скрипт. Будут вопросы спрашивай через приват.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jun 30 2005, 10:36
Сообщение #1346


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Извините, закинул не туда вопросы, размещаю тут.

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

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 - Выпадение из рук оружия, если его решили сменить в бою


Сообщение отредактировал Zirrex - Jun 30 2005, 10:37
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jun 30 2005, 14:03
Сообщение #1347


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

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



Zirrex
QUOTE (Zirrex @ Jun 30 2005, 11:36)
Извините, закинул не туда вопросы, размещаю тут.

а в чем, собственно, вопросы то? :xz:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jun 30 2005, 21:07
Сообщение #1348


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



dumbo, я довольно четко изложил свои вопросы.

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

2. Насколько представленное мной решение по смене оружия верно, и есть ли более легкий способ?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jul 5 2005, 12:27
Сообщение #1349


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



У меня такие вопросы

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

Neverwinter Script Source
TouchAttackRanged

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

И
Neverwinter Script Source
GetAttemptedAttackTarget()

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

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


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

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

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

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



А вот как потычки в сценках делать, ActionAttack и др Attack чета не пашут :xz:

Сообщение отредактировал -fenix- - Jul 5 2005, 18:01
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 5 2005, 22:50
Сообщение #1350


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



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

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

з.ы. эх, мне бы кто подсказал по выше описанным скриптам иное решение проблемы.

Сообщение отредактировал Zirrex - Jul 5 2005, 22:57
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jul 6 2005, 07:54
Сообщение #1351


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

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



QUOTE (Zirrex @ Jul 6 2005, 01:50)
з.ы. эх, мне бы кто подсказал по выше описанным скриптам иное решение проблемы.

Насколько я понял, ты знаешь ВСЕ плохие твои эффекты? Если да, то потри их так и добавь те что тебя напрягают еще:
Neverwinter Script Source
void Debug(string message)
{
    object oPC = GetFirstPC();
    if (!GetLocalInt(GetModule(), "DEBAG_PC"))
    {
      SendMessageToPC(oPC, "Debag message: "+message);
    }
    if (!GetLocalInt(GetModule(), "DEBAG_DM"))
          {
            SendMessageToAllDMs("Debag message to DMs: "+message);
          }
}
void RemoveingBadEffect(object oPlayer)
{
        effect eBad = GetFirstEffect(oPlayer);
        while(GetIsEffectValid(eBad))
        {
            if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
                GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
                GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
                GetEffectType(eBad) == EFFECT_TYPE_POISON ||
                GetEffectType(eBad) == EFFECT_TYPE_SLOW ||
                GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
                GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
                {
                    Debug("RemoveEffect");
                    RemoveEffect(oPlayer, eBad);
                }
            eBad = GetNextEffect(oPlayer);
        }
        //Fire cast spell at event for the specified target
        SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));
}


Либо проверь таг и ресреф невидимиго объекта в инвентаре:

Neverwinter Script Source
void DebugObject(object oObject)
{
    string sTag = GetTag(oObject);
    string sResRef = GetResRef(oObject);
    string sName = GetName(oObject);
    Debug ("TAG = "+sTag+", ResRef = "+sResRef+",  Name = "+sName+".");
}

void main()
{
        object oItemCr = GetFirstItemInInventory(oPC);
        while(GetIsObjectValid(oItemCr))
            {
            DebugObject(oPC);
            oItemCr = GetNextItemInInventory(oPC);
            }
}

Не притендую на работостпособность кода. Пишгу на форуме. Потести сам ;)
Потом попросту, сделай его не плотовым. Удали и все дела.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jul 6 2005, 08:08
Сообщение #1352


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

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



Zirrex
в случае с полиморфом ты перемудрил, чем спровоцировал так называемое "непредсказуемое поведение". кстати, очень интересный глюк - уничтожение "недоубитой"(в данном случае хайд уничтожается при снимании полиморфа) вещи оставляет ее эффекты болтаться на PC. либо просто убери уничтожение хайда(кстати, эффекты могут висеть не только на ней), либо до снимания полиморфа сделай цикл по кричным слотам:
Neverwinter Script Source
for (i = 14; i < 18; i++) {
    oItem = GetItemInSlot(i, oPC);
    if (GetIsObjectValid(oItem))
      DestroyObject(oItem);
  }

насчет противодействия смене оружия ничего не слышал, хотя сам в свое время заметил, что не только количество атак за раунд повышается, но и, похоже, пересчитываются шансы попадания. понимаю, что по идее там обычный рандом должен быть, но вот мне показалось, что попадает чаще, если "передергивать" оружие... :xz:
если твой скрипт пашет, то и хорошо ;) если только подоптимизировать его может быть немного стоит - сложилось впечатление, что это можно сделать, хотя и не всматривался... :crazy:
Добавлено в [mergetime]1120627258[/mergetime]
да, стоит добавить, что сказанное о полиморфе действительно для версии 1.65, потому как в предыдущих версиях он сильно баговал, и как там работает этот скрипт одному биовару известно...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jul 6 2005, 09:58
Сообщение #1353


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Вот кутсценка
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
object oBarmen = GetObjectByTag("OBJECT_SELF");
object oVor = GetObjectByTag("VOR");
object oSunduk = GetObjectByTag("sunduk");
//==============================================================================
object oWP = GetWaypointByTag("WP_VOR_01");
object oWP_PC_1 = GetWaypointByTag("WP_PC_1");
//==============================================================================
object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC);
object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC);
object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC);
//==============================================================================
effect eCutInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
effect eCutPar = EffectParalyze();
//==============================================================================
SetLocalInt(oPC, "CUT_SCEN_03", TRUE);
SetLocalLocation(oPC, "START_POINT", GetLocation(oPC));
AssignCommand(oBarmen, ActionPauseConversation());
AssignCommand(oVor, ClearAllActions());
AssignCommand(oVor, ActionJumpToObject(oWP));
FadeToBlack(oPC, FADE_SPEED_FASTEST);
AssignCommand(oPC, ClearAllActions());
SetCutsceneMode(oPC);
SetAILevel(oVor, AI_LEVEL_HIGH);
//==============================================================================
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutInv, oAnimal, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutPar, oAnimal, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutInv, oDominated, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutPar, oDominated, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutInv, oFamiliar, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutPar, oFamiliar, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutInv, oHenchman, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutPar, oHenchman, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutInv, oSummoned, 13.5);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutPar, oSummoned, 13.5);
//==============================================================================

DelayCommand(1.0, AssignCommand(oPC, SetCameraFacing(100.0, 20.0, 30.0,
CAMERA_TRANSITION_TYPE_SNAP)));
DelayCommand(1.5, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
DelayCommand(2.0, AssignCommand(oPC, ClearAllActions()));
DelayCommand(2.5, AssignCommand(oVor, ClearAllActions()));
DelayCommand(3.0, AssignCommand(oVor, SpeakString("Åùå îäèí ñóíäó÷îê")));
DelayCommand(4.0, AssignCommand(oVor, ActionMoveToObject(oSunduk)));
DelayCommand(7.0, AssignCommand(oVor, ActionDoCommand(SetFacingPoint(GetPosition
(oSunduk)))));
DelayCommand(8.0, AssignCommand(oVor, ActionPlayAnimation(
ANIMATION_LOOPING_GET_MID,9.0, 1.0)));
DelayCommand(9.0, AssignCommand(oSunduk,ActionPlayAnimation(
ANIMATION_PLACEABLE_OPEN,1.0)));
DelayCommand(10.0, AssignCommand(oVor, SpeakString("Âîò ýòî êóø, óñå, ïîðà ñâàëèâàòü")));
DelayCommand(12.0, AssignCommand(oVor,ActionPlayAnimation
(ANIMATION_LOOPING_GET_MID,9.0, 1.0)));
DelayCommand(12.5, AssignCommand(oSunduk, ActionPlayAnimation(
ANIMATION_PLACEABLE_CLOSE,1.0)));
DelayCommand(14.0, AssignCommand(oVor, ActionMoveToObject(oBarmen, TRUE)));
DelayCommand(15.0, AssignCommand(oVor, ActionAttack(oBarmen, FALSE)));
DelayCommand(20.0, AssignCommand(oPC, ClearAllActions()));
DelayCommand(24.5, AssignCommand(oBarmen, ActionResumeConversation()));
DelayCommand(25.0, AssignCommand(oPC, SetCutsceneMode(oPC, FALSE)));
}



1)Вор не хочет идти к бармену, но если поставить вейп рядом с барменом то к нему идет.
2)Если поссорить до сценки, то во время сценки они друг на друго бросаются (близко стоят). А во время сценки не получается я делал так
Neverwinter Script Source
DelayCommand(14.5, AssignCommand(oVor, AdjustReputation(OBarmen, oVor, -90)));
DelayCommand(14.5, AssignCommand(oBarmen, AdjustReputation(OVor, oBarmen, -90)));

3)выполнять ActionAtatck не хочет ни как.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jul 6 2005, 18:55
Сообщение #1354


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

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



QUOTE (-fenix- @ Jul 6 2005, 10:58)
Neverwinter Script Source
object oBarmen = GetObjectByTag("OBJECT_SELF");

это что за...?! :this:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jul 6 2005, 20:31
Сообщение #1355


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE (dumbo @ Jul 6 2005, 18:55)
это что за...?!

Не знаю! Кот на клаве полежал :oops: :)

Отлично, машутся, только каряво - это выглядет, как тырканье, дерганье, но уж точно не как драка. Так это и должно выглядеть?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 6 2005, 20:46
Сообщение #1356


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



dumbo, спасибо конечно, но как мне поможет этот цикл? Я же не хочу, чтобы каждый входящий персонаж в полиморфе лишался вещей. Ты не забывай, что не все полиморфы "закрывают" надетые вещи на персонаже. Тому пример, Друиды. И может так случиться, что удалятся вещи, которые и трогать то не нужно. Может все-таки стоит проверять только невидимые?

Aiwan, не совсем понял, причем тут плохие эффекты?! Полиморфы разве создают их? Возьмем за пример полиморф Голема. Заклинание "Shapechange". При полиморфе создается невидимый объект, если посмотреть 2da, то можно увидеть его тэг "NW_IT_CREITEMCO3". Ищем его у стандартного Голема. Что видим:

CODE

Damage Reduction: +3 Soak 30 Damage
Damage Vulnerability: Electrical 50% Damage Vulnerability
Immunity: Miscellaneous: Critical Hits
Immunity: Miscellaneous: Death Magic
Immunity: Miscellaneous: Disease
Immunity: Miscellaneous: Level/Ability Drain
Immunity: Miscellaneous: Mind-Affecting Spells
Immunity: Miscellaneous: Paralysis
Immunity: Miscellaneous: Poison
Immunity: Miscellaneous: Sneak Attack

Множество иммунитетов, далее снижение урона на 30 единиц от оружия +3, и ослабление защиты от электричества на 50%.

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

Пробовал ставить простой скрипт, который снимает абсолютно все эффекты с персонажа игрока, не проходит. Эти эффекты не отображаются в виде иконок, они висят как невидимые, но при этом работают, что очень плохо.

-fenix-, забавный у тебя Бармен :) Не стоит вешать такие тэги на Барменов, во-первых, это некрасиво, во-вторых, нету шаблона названий. У меня например есть разделение по названиям. Скрипты начинаются: ahs_имя; тэги НПС: npc_имя; монстры: am_bst_имя и т.д.

Если уж ты ставишь скрипт прямо на НПС, то надо так:

Neverwinter Script Source
object oBarmen = OBJECT_SELF;

Да, если честно, не знаю, после какого-то патча при сражении с монстрами стала происходить какая-то каша. Все лезут к цели, друг другу мешают, и получается очень некрасиво. Попробуй сделать так, чтобы над полем битвы летала камера. Вообще, если ты обратишь внимание на сценки из одиночной игры, то там бои происходят быстро, а не как в игре, снял немного здоровья, продолжили плясать. Ведь в жизни часто достаточно одного удара :)

Сообщение отредактировал Zirrex - Jul 6 2005, 20:53
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Мефистофель
сообщение Jul 6 2005, 20:49
Сообщение #1357


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

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



Скажите пожалуйста, мне нужно организовать большую бойню, но напихать кучу НПК враждебных и Дружественных, Имхо глупо, движок не позволит,
дак вот мне хотелось бы чтобы было две стороны ну тоесть хорошая и плохая, и они дрались, ну война короче, дык вот. как сделать скрипт чтобы например злобные появлялись, примерно по 5-10 человек с разных точек карты и бежали уничтожать базу хороших.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 6 2005, 20:58
Сообщение #1358


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



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

Движок может потянуть много персонажей на одной карте, только чем больше их в одном месте, тем мощнее нужен процессор, иначе через какое-то время они просто будут качаться на ногах и изредка наносить удары.

Да, чтобы они не сразу кидались друг на друга, перед тем, как они пойдут, сделать небольшую паузу:

Neverwinter Script Source
DelayCommand(6.0, WalkWayPoints());
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jul 6 2005, 23:03
Сообщение #1359


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Zirrex, с разделениями все ясно, это у меня левый скрипт - мой 2 мультик, на катором я решил испытать битву.

у меня версия SoU 1.30 - это та версия ?

При чем тут летающая камера, они от этого дергаться не перестанут ?! И я не видел мультика в официалке с битвами (может я слепой, тагда раскройте мне глаза :xz:). Знаю, что точно есть в ПЛ (в ней много чего интересного есть), но ее у меня нет:(.

Они полюбому кревляются, хоть интелект обоим повышай, хоть что делай (остальные способы тупые и делались мной от безисходности). Значит, чтоб они не дергались мне нужно на другую версию перейти?
Ты делал кутсцены с потычками, мож простенькую кинешь мне в ПМ. :)

Сообщение отредактировал -fenix- - Jul 7 2005, 00:19
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jul 6 2005, 23:24
Сообщение #1360


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

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



QUOTE (Zirrex @ Jul 6 2005, 21:46)
Я же не хочу, чтобы каждый входящий персонаж в полиморфе лишался вещей.
Neverwinter Script Source
int    INVENTORY_SLOT_CWEAPON_L = 14;
int    INVENTORY_SLOT_CWEAPON_R = 15;
int    INVENTORY_SLOT_CWEAPON_B = 16;
int    INVENTORY_SLOT_CARMOUR  = 17;
QUOTE (Zirrex @ Jul 6 2005, 21:46)
Может все-таки стоит проверять только невидимые?
:good:
я не просто так упомянул версию - какая версия у тебя?
перечитай еще раз мой пост.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 53 54 55 56 57 > » 
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 4th May 2025 - 12:37