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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 80 81 82 83 84 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Zirrex
сообщение Feb 24 2006, 00:51
Сообщение #2011


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

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



mamuc, спасибо, я попробую этот скрипт, только есть несколько но, переменную 'WorkArena' мне нужно изменять только тогда, когда нет игрока, с которого создалась копия, если он вышел с поля Арены или из игры.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Feb 24 2006, 01:31
Сообщение #2012


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

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



Цитата
2. В скрипте Кат Сценки Проверяю на Локалку. И канечно же ничо не Пашит Хелп. плиз.

И правильно делает, я бы то же не пахал, когда говорят не пахать!!!
Neverwinter Script Source
if (!(nDED == 1))

У тебя тут отрицание стоит, при чем очень странное - этот скрипт вообще ни когда не выполнится, так как в проверке локалка забыта. Ты зачем-то устанавливаешь в nDED единицу, а потом ставешь отрицание.
Выглядеть должно так
Neverwinter Script Source
if (nDED == 1)
//или так
if (nDED)


Сообщение отредактировал -fenix- - Feb 24 2006, 01:31
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Feb 24 2006, 05:05
Сообщение #2013


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

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



NedWarN, скрипт конечно еще тот. Учись писать красиво скрипты, иначе сразу разобраться очень тяжело. Переписал его, кое-что подправив. Не знаю для чего именно тебе две переменных, но видимо где-то используются, поэтому оставил.

Neverwinter Script Source
void Create()
{
    object oCreate = GetObjectByTag("WG_WHITE_EFFECT");
    object oEfCre = CreateObject(OBJECT_TYPE_CREATURE, "NewTag", GetLocation(oCreate), TRUE);
}

#include "x2_inc_cutscene"

int CUTSCENE_NUMBER = 5217;

void main()
{
    object oPC = GetEnteringObject();
    object oNPC = OBJECT_SELF;

    if (!GetIsPC(oPC) || GetLocalInt(oNPC, "LOK_CUT"))
    {
        return;
    }

    int nDED = GetLocalInt(oPC, "DED");
    int nDoOnce = GetLocalInt(GetArea(oNPC), "CUT_Map_E3S");

    object oMagz = GetObjectByTag("WG_SUPER_BOSS");
    object oWP = GetWaypointByTag("WG_GO_BOSS");
    object oEffect = GetObjectByTag("WG_WHITE_EFFECT");
    object oCam = GetWaypointByTag("WG_CAM_PC_BOSS");

    effect eMo5 = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
    effect eLi1 = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_5);
    effect eLi2 = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_10);
    effect eLi3 = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_15);
    effect eLi4 = EffectVisualEffect(VFX_IMP_HEALING_X);
    effect eLi5 = EffectVisualEffect(VFX_FNF_LOS_HOLY_30);

    if (nDoOnce != 1)
    {
        SetLocalInt(GetArea(oNPC), "CUT_Map_E3S", 1);
        ExploreAreaForPlayer(GetArea(oPC), oPC);
    }

    if (nDED != 1)
    {
        SetCutsceneMode(oPC);// Minu and du for Disable/ is cut-scene.
        //-------------------------------------------
        CutSetActiveCutscene(CUTSCENE_NUMBER, CUT_DELAY_TYPE_CUMULATIVE);
        CutSetActiveCutsceneForObject(oPC, CUTSCENE_NUMBER, TRUE);
        CutSetActiveCutsceneForObject(oNPC, CUTSCENE_NUMBER);
        CutSetCutsceneMode(0.2, oPC, TRUE, CUT_CAMERA_HEIGHT_MEDIUM, TRUE, TRUE);
        CutFadeOutAndIn(0.0, oPC, 1.5);
        CutSetLocation(0.0, oPC);
        AssignCommand(oPC, ActionJumpToObject(oCam, FALSE));
        DelayCommand(0.0, AssignCommand(oPC, ClearAllActions()));

        DelayCommand(0.7, FadeToBlack(oPC, FADE_SPEED_MEDIUM));
        DelayCommand(2.5, FadeFromBlack(oPC, FADE_SPEED_FAST));

        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eMo5, oPC);
        CutSetCamera(0.0, oPC, CAMERA_MODE_TOP_DOWN, 80.0, 0.0, 79.0, CAMERA_TRANSITION_TYPE_VERY_FAST);

        DelayCommand(5.0, AssignCommand(oPC, SetCameraFacing(280.0, 0.0, 79.0, CAMERA_TRANSITION_TYPE_MEDIUM)));
        DelayCommand(6.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eLi1, oEffect, 1.0));
        DelayCommand(7.7, ApplyEffectToObject(DURATION_TYPE_INSTANT, eLi2, oEffect));
        DelayCommand(9.7, ApplyEffectToObject(DURATION_TYPE_INSTANT, eLi3, oEffect));

        DelayCommand(7.0, AssignCommand(oPC, SetCameraFacing(80.0, 3.0, 58.0, CAMERA_TRANSITION_TYPE_MEDIUM)));
        DelayCommand(10.2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eLi4, oEffect));
        DelayCommand(11.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eLi5, oEffect));

        DelayCommand(11.5, AssignCommand(oMagz, ActionJumpToObject(oEffect,FALSE)));

        DelayCommand(11.5, Create());
    }
}


Сообщение отредактировал Zirrex - Feb 24 2006, 05:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Feb 27 2006, 09:33
Сообщение #2014


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

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



Цитата
mamuc, спасибо, я попробую этот скрипт, только есть несколько но, переменную 'WorkArena' мне нужно изменять только тогда, когда нет игрока, с которого создалась копия, если он вышел с поля Арены или из игры.

... а оно и меняеться реально только тогда , когда на арене нету игрока..а в остальное время оно FALSE (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Feb 27 2006, 20:37
Сообщение #2015


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Вот кусок скрипта официантки.
Нужно, чтобы она шла так, как нужно, и при этом не зависала и не прерывалась.
Попробовал делать блокировку/разблокировку очереди - официантка подбегает и ничего не делает.
(Скрипт висит на OnConversation)
Neverwinter Script Source
void CheckIsHere(object oTarget, string sOrder)
{
    if(GetDistanceBetween(OBJECT_SELF, oTarget) < 4.0)
    {
        ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.0);
        ActionDoCommand(_CreateItemOnObject(sOrder, oTarget));
    }
    else
    {
        SpeakString("Куда вы ушли??");
        ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 1.0);
        ActionDoCommand(_CreateObject(OBJECT_TYPE_ITEM, sOrder, GetLocation(OBJECT_SELF), TRUE));
    }
    ActionDoCommand(SetLocalInt(OBJECT_SELF, "vir_waiter_busy", FALSE));

    //заблокировать и разблокировать очередь
    DelayCommand(0.1, SetCommandable(FALSE));
    AssignCommand(OBJECT_SELF, ActionDoCommand(SetCommandable(TRUE)));
}

void GoToObject(object oTarget, float fTimeout)
{
    ActionForceMoveToLocation(GetLocation(oTarget), TRUE, fTimeout);
    ActionDoCommand(SetFacingPoint(GetPosition(oTarget)));
}

void WalkToObject(object oTarget, float fTimeout)
{
    ActionForceMoveToObject(oTarget, TRUE, 2.0, fTimeout);
    ActionDoCommand(SetFacingPoint(GetPosition(oTarget)));
    ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.0);

    //заблокировать и разблокировать очередь
    DelayCommand(0.1, SetCommandable(FALSE));
    AssignCommand(OBJECT_SELF, ActionDoCommand(SetCommandable(TRUE)));
}

void GoToPlayer(object oTarget, string sOrder, float fTimeout)
{
    ActionForceMoveToLocation(GetLocation(oTarget), TRUE, fTimeout);
    ActionDoCommand(SetFacingPoint(GetPosition(oTarget)));
    ActionDoCommand(CheckIsHere(oTarget, sOrder));

    //заблокировать и разблокировать очередь
    DelayCommand(0.2, SetCommandable(FALSE));
    AssignCommand(OBJECT_SELF, ActionDoCommand(SetCommandable(TRUE)));
}

void GiveBottleTo(object oPC, string sOrder)
{
    if (oPC != oShouter)
        oPotionWaypoint = GetNearestObjectByTag(sPotionWaypointTag,oPC);
    if (GetDistanceBetween(oPC, oPotionWaypoint)<=2.5)
    {
        WalkToObject(oPotionWaypoint, 15.0);
        ActionDoCommand(_CreateObject(OBJECT_TYPE_ITEM, sOrder, RandomLocationFrom(GetLocation(oPotionWaypoint), 0.2, 0.2),TRUE));
    }
    else
    {
        GoToPlayer(oPC, sOrder, 15.0);
        //ActionDoCommand(_CreateItemOnObject(sOrder, oPC));
    }
}

void main()
{
    nGroupSize = 1;
    oShouter = GetLastSpeaker();
    oPotionWaypoint = GetNearestObjectByTag(sPotionWaypointTag,oShouter);
    object oCurrentClient = GetLocalObject(OBJECT_SELF, "vir_waiter_client");
   
    //пропущено:
    //распознавание того, что сказал игрок, проверки и т.д....
   
    //Busy: если официантка занята
    if (GetLocalInt(OBJECT_SELF, "vir_waiter_busy")==TRUE)
    {
        SpeakString("Подождите, пока я освобожусь");
        return;
    }

    ClearAllActions();
    SetLocalInt(OBJECT_SELF, "vir_waiter_busy", TRUE);

    //пропущено:
    //берем деньги...

    if (nGroupOrder == TRUE)
    {
        SpeakString("Group order processing...");
        oGroupMember = GetFirstFactionMember(oShouter);
        while(GetIsObjectValid(oGroupMember))
        {
            if(GetObjectSeen(oGroupMember)) GiveBottleTo(oGroupMember, sOrder);
            oGroupMember = GetNextFactionMember(oShouter);
        }
    }
    else
    {
        GiveBottleTo(oShouter, sOrder);
    }

    ActionDoCommand(SetLocalInt(OBJECT_SELF, "vir_waiter_busy", FALSE)); //освобождаем официантку

    DelayCommand(0.2, SetCommandable(FALSE));
    AssignCommand(OBJECT_SELF, ActionDoCommand(SetCommandable(TRUE)));


Сообщение отредактировал virusman - Feb 27 2006, 20:42
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DEM
сообщение Feb 27 2006, 22:00
Сообщение #2016


Level 7
**

Класс: Маг
Характер: Lawful Neutral
Раса: Эльф



А нельзя сделать что бы она просто шла по вейпоинтам? Например пошла к такому-то вейпоинты, через пять сек к другому и т.д. Или я чего-то не понял...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 27 2006, 22:09
Сообщение #2017


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

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



Везде где юзаешь Делей, попробуй сделать так:
Neverwinter Script Source
void ActionCreateObject(int nObjType, string sCreature, location lLoc, int iAnimation, string sNewTag="")
{
  CreateObject(nObjType, sCreature, lLoc, FALSE, sNewTag);
}


void CheckIsHere(object oTarget, string sOrder)
{
    object oSelf = OBJECT_SELF;

    if(GetDistanceBetween(oSelf, oTarget) < 4.0)
    {
        AssignCommand(oSelf, PlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.0));
        CreateItemOnObject(sOrder, oTarget, 1);
    }
    else
    {
        SpeakString("Куда вы ушли??");
        ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 1.0);
        ActionCreateObject(OBJECT_TYPE_ITEM, sOrder, GetLocation(OBJECT_SELF), TRUE);
    }
    AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf, "vir_waiter_busy", FALSE)));

    //заблокировать и разблокировать очередь
    AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf)));
    DelayCommand(0.3, SetCommandable(FALSE, oSelf));
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Feb 28 2006, 00:14
Сообщение #2018


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Спасибо, завтра попробую..
Но всё же, как я понимаю, многократная блокировка-разблокировка оставляет возможность (в течение 0.2-0.3 с) сбить работу официантки.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NedWarN
сообщение Mar 3 2006, 06:34
Сообщение #2019


Level 5
**

Класс: Маг
Характер: Lawful Good
Раса: Тварь



-fenix- Zirrex.
Сорри когда писал немного "Принял" ибо без смазки немагу.
Аба на трезвую голову взглянул и всё заработало гг.
if (!(nDED == 1)) return;
вот так надо! было. хоть бы один сказал. (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Mar 3 2006, 09:51
Сообщение #2020


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

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



Цитата
if (!(nDED == 1)) return;


а не проще ли if (nDED != 1) return;
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 3 2006, 09:55
Сообщение #2021


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

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



Цитата(mamuc @ Сегодня, 11:51) [snapback]71557[/snapback]
а не проще ли if (nDED != 1) return;

Проще так:
Neverwinter Script Source
if (!nDED) return;

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Mar 3 2006, 10:01
Сообщение #2022


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

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



NedWarN, обычно пишут так:
Neverwinter Script Source
if (nDED != 1) return;

Это будет правильней, чем то что ты написал.

Если же у тебя много отрицаний, то можно написать так:
Neverwinter Script Source
if (!(nVariable1 == 1 || nVariable2 == 1 || nVariable3 == 1)) return;


Aiwan, а я бы все же проверял так, как описали мы с Мамуком, потому что такой способ более надежный.

Сообщение отредактировал Zirrex - Mar 3 2006, 10:27
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Mar 3 2006, 10:24
Сообщение #2023


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

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



Цитата
Проще так:

Neverwinter Script Source
if (!nDED) return;

Aiwan это только когда nDED может принять лишь 2 значения(0 и 1 или TRUE/FALSE) ..а если их больше 2 используються, то лучше как мы с Zirrex написали

Сообщение отредактировал mamuc - Mar 3 2006, 10:27
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 3 2006, 10:58
Сообщение #2024


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

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



Цитата(mamuc @ Сегодня, 12:24) [snapback]71570[/snapback]
Aiwan это только когда nDED может принять лишь 2 значения(0 и 1 или TRUE/FALSE) ..а если их больше 2 используються, то лучше как мы с Zirrex написали

Сорри. Я то не глянул, сколько у вас значений (IMG:style_emoticons/kolobok_light/pardon.gif)

Цитата(Zirrex @ Сегодня, 12:01) [snapback]71566[/snapback]
Aiwan, а я бы все же проверял так, как описали мы с Мамуком, потому что такой способ более надежный.

Там же у Мамука было слово ПРОЩЕ. (IMG:style_emoticons/kolobok_light/pleasantry.gif)

Про НАДЕЖНО никто не говорил. (IMG:style_emoticons/kolobok_light/blum3.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
lowlock
сообщение Mar 5 2006, 06:56
Сообщение #2025


Level 1


Класс: Воин
Характер: Lawful Good
Раса: Человек



Люди, подскажите пожалуйсто. Как мне сделать так, что-бы когда я кольцо одевал сразу появлялся эффект невидимости? или перехода местности
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nuprahtor
сообщение Mar 5 2006, 10:34
Сообщение #2026


Level 3
*

Класс: Некромант
Характер: Chaotic Neutral
Раса: Человек



Помогите чайнику пожалуйста!
Мне нужно, чтобы с убитым монстром (медведь) можно было начать диалог (вырезка шкуры), и чтобы труп пропал через столько-то секунд.
Спасибо за внимание.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Mar 5 2006, 12:03
Сообщение #2027


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



QUOTE
Люди, подскажите пожалуйсто. Как мне сделать так, что-бы когда я кольцо одевал сразу появлялся эффект невидимости? или перехода местности


Отследить надевание кольца событием OnPlayerEquipItem и наложить эффект / телепортировать.

QUOTE(Nuprahtor @ Сегодня, 10:34) [snapback]71727[/snapback]
Мне нужно, чтобы с убитым монстром (медведь) можно было начать диалог (вырезка шкуры), и чтобы труп пропал через столько-то секунд.


С самим убитым монстром поговорить не удастся. После смерти монстра (медведя) создавай невидимый объект, на OnUsed которого и начинай диалог (через действие ActionStartConversation). Нужно чтобы труп пропал через сколько-то секунд после чего? Вот отследи это что-то и удали невидимый объект с медведем через задержку:

NSS
// Delay aActionToDelay by fSeconds.
// * No return value, but if an error occurs, the log file will contain
//  "DelayCommand failed.".
// It is suggested that functions which create effects should not be used
// as parameters to delayed actions.  Instead, the effect should be created in the
// script and then passed into the action.  For example:
// effect eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
// DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget);
void DelayCommand(float fSeconds, action aActionToDelay)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nuprahtor
сообщение Mar 5 2006, 12:10
Сообщение #2028


Level 3
*

Класс: Некромант
Характер: Chaotic Neutral
Раса: Человек



Я же пока ЧАЙНИК!
Хотя генератор скриптов Лилака поможет создать обьект, но как его удалить через какой нибудь промежуток времени?
Например через 120 секунд?На хертбит.А как?
И, если не трудно, можете написать скрипт?Пожалуйста, и спасибо за все!

Сообщение отредактировал Nuprahtor - Mar 5 2006, 12:13
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Mar 5 2006, 12:26
Сообщение #2029


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



На хатбит неудобно.
Вот примерно как может выглядеть эта часть (ОnDeath существа):
NSS
void main()
{
    // создание невидимого объекта на месте смерти миши
    location lLocation = GetLocation(OBJECT_SELF);
    object oInvisible = CreateObject(OBJECT_TYPE_PLACEABLE, "XXX", lLocation);

    // убирание объекта
    DelayCommand(120.0, DestroyObject(oInvisible));
}

, где XXX - чертеж невидимого тела

также можешь использовать такое удаление с задержкой:

NSS
DestroyObject(oInvisible, 120.0);

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

Сообщение отредактировал azathoth - Mar 5 2006, 12:27
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Mar 5 2006, 15:03
Сообщение #2030


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

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



azathoth, зачем через Delay? Есть же хорошая функция:

NSS
// Set the destroyable status of the caller.
// - bDestroyable: If this is FALSE, the caller does not fade out on death, but
//  sticks around as a corpse.
// - bRaiseable: If this is TRUE, the caller can be raised via resurrection.
// - bSelectableWhenDead: If this is TRUE, the caller is selectable after death.
void SetIsDestroyable(int bDestroyable, int bRaiseable=TRUE, int bSelectableWhenDead=FALSE)

Проверяется раса, а если уж нужно точно, то тэг существа. В момент смерти для него переключается флажок, не удалять существо:

NSS
SetIsDestroyable(FALSE, FALSE, FALSE);

На невидимый объект вешается скрипт, который проверяет в момент закрытия инвентаря, осталось там что-нибудь, если нет, удалить все содержимое, и конечно же сбросить функцию:
NSS
SetIsDestroyable(TRUE, FALSE, FALSE);


Nuprahtor

В скрипте "nw_c2_default7"

NSS
// Очистка всего инвентаря и удаление экипировки, если есть
void ClearInventory(object oCorpse)
{
    int nGold = GetGold(oCorpse);

    if (nGold) TakeGoldFromCreature(nGold, oCorpse, TRUE);

    int i;

    for (i = 0; i < 18 ; i++)
    {
        object oEquip = GetItemInSlot(i, oCorpse);

        if (GetIsObjectValid(oEquip))
        {
            DestroyObject(oEquip);
        }
    }

    object oLoot = GetFirstItemInInventory(oCorpse);

    while (GetIsObjectValid(oLoot))
    {
        DestroyObject(oLoot);
        oLoot = GetNextItemInInventory(oCorpse);
    }
}

void CreateCorpse(object oCreature)
{
    object oKiller = GetLastKiller();      // Убийца
    object oCreature = OBJECT_SELF;        // Погибшее существо
    string sTag = GetTag(oCreature);        // Тэг существа

    int nCorpseFade    = 120// Задержка исчезновения тела существа.
    int nKeepEmpties    = FALSE; // Вкл., если хотите удалять тела существ моментально.

    // Узнать точку гибели существа
    location lCorpse = GetLocation(oCreature);

    // Защита существа от удаления
    SetIsDestroyable(FALSE, FALSE, FALSE);

    if (nKeepEmpties)
    {
        nCorpseFade = 0;
    }

    // Создание пятна крови
    object oBlood = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_bloodstain", lCorpse, FALSE);
    // Создание невидимого объекта, который можно открыть
    object oCorpse = CreateObject(OBJECT_TYPE_PLACEABLE, "corpse_object", lCorpse, FALSE);

    // Сохранение объектов, с которыми надо еше работать
    SetLocalObject(oCorpse, "Blood", oBlood);
    SetLocalObject(oCorpse, "Corpse", oCreature);
    SetLocalInt(oCorpse, "KeepEmpty", nKeepEmpties);

    // Создание шкурки медвеля
    if (GetTag(oCreature) == "tag_creature")
    {
        object oSkin = CreateItemOnObject("skin_bear", oCorpse)
    }

    // Проверка первой вещи в инвенторе
    object oHasInventory = GetFirstItemInInventory(oCorpse);

    // Если в инвентаре существа ничего нет, то удалить тело
    if (oHasInventory == OBJECT_INVALID)
    {
        ClearInventory(oCreature);
        ClearInventory(oCorpse);
        DestroyObject(oCorpse);
        DestroyObject(oBlood);
        SetIsDestroyable(TRUE, FALSE, FALSE);
        DestroyObject(oCreature, 1.0);
    }
    // Удаление тела существа по истечение времени
    else if (nCorpseFade > 0)
    {
        float fCorpseFade = IntToFloat(nCorpseFade);
        DelayCommand(fCorpseFade, ClearInventory(oCreature));
        DelayCommand(fCorpseFade, ClearInventory(oCorpse));
        DelayCommand(fCorpseFade, DestroyObject(oBlood));
        DelayCommand(fCorpseFade + 0.1, DestroyObject(oCorpse));
        DelayCommand(fCorpseFade + 0.2, SetIsDestroyable(TRUE, FALSE, FALSE));
        DelayCommand(fCorpseFade + 0.2, DestroyObject(oCreature));
    }
}

void main()
{
    object oKiller = GetLastKiller();

    if (GetLastKiller() == OBJECT_SELF) return;

    if (GetRacialType(OBJECT_SELF) == RACIAL_TYPE_ANIMAL)
    {
        CreateCorpse(OBJECT_SELF);
    }
}


На предмете "corpse_object" в действии OnDisturbed

NSS
// Очистка всего инвентаря и удаление экипировки
void ClearInventory(object oCorpse)
{
    // аналогичен скрипту выше
}

void main()
{
    object oCorpse = OBJECT_SELF;

    // Просмотр нужных объектов и переменных
    object oBlood = GetLocalObject(oCorpse, "Blood");
    object oBody = GetLocalObject(oCorpse, "Corpse");
    int nKeepEmpty = GetLocalInt(oCorpse, "KeepEmpty");

    // Проверка первой ячейки инвентаря
    object oHasInventory = GetFirstItemInInventory(oCorpse);

    // Если инвентарь пуст, проверить значение "KeepEmpty"
    if (oHasInventory == OBJECT_INVALID)
    {
        if (!nKeepEmpty)
        {
            ClearInventory(oBody);
            ClearInventory(oCorpse);
            DestroyObject(oCorpse);
            DestroyObject(oBlood);
            AssignCommand(oBody, SetIsDestroyable(TRUE, FALSE, FALSE));
            DestroyObject(oBody, 1.0);
        }
    }
}

Чтобы начать диалог, необходимо повесить на объект "corpse_object" в действии OnUsed скрипт:

NSS
void main()
{
    ActionStartConversation(GetLastUsedBy(), "dialog", TRUE, FALSE);
}

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

Если не все понятно, или не работает, пиши. Полностью все не проверял, потому что брал готовый скрипт, где гораздо больше объектов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dimanische
сообщение Mar 6 2006, 14:12
Сообщение #2031


Level 1


Класс: Варвар
Характер: Lawful Good
Раса: Полуэльф



Люди подскажите пажаласта как можно сделать чтобы монстры не мочили друг-друга магией если они в одной фракции.
Извените если на этот вопрос уже отвечали.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 6 2006, 17:29
Сообщение #2032


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

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



В каком смысле? Объясни ситуацию? Идет бой, монстры сражаются и задевают друг друга магией? Верно?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Mar 6 2006, 18:26
Сообщение #2033


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

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



QUOTE(Dimanische @ Сегодня, 14:12) [snapback]71834[/snapback]
Люди подскажите пажаласта как можно сделать чтобы монстры не мочили друг-друга магией если они в одной фракции.

если я правильно въехал в вопрос, то в свойствах локации Area -> Properties -> Advanced -> Player vs. Player = Party protected. также есть глобальная опция с тем же смыслом.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Mar 7 2006, 00:17
Сообщение #2034


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

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



dumbo, а если на всех локациях стоит Full PvP, и именно такая политика шарда? Нет, это не годится. Лишь как крайняя мера.

Dimanische, можно пойти путем, как описал dumbo, а можно подредактировать все площадные заклинания, в которых указать, что если противник враг, то атаковать его, а если нет, то игнорировать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Existor
сообщение Mar 7 2006, 06:07
Сообщение #2035


Level 6
**

Класс: Разведчик Арфистов
Характер: True Neutral
Раса: Животное



Как вариант - поставить средние настройки сложности сервера.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 80 81 82 83 84 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 30th April 2025 - 04:50