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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 23 24 25 26 27 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
K.SpecTr
сообщение Jan 23 2005, 17:42
Сообщение #591


Level 10
***

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



Тут у меня появилась пара вопросов.
1) Есть oNPC и несколько Вэйпоинтов. Нужно чтобы он пробежал по ним выполняя возле каждого действие и ожидая пока oPC подойдет. Реализовал, разместив под каждый Вэйпоинт триггеры - oPC подходит, наступает, oNPC бежит дальше, дело делать. В общем, сколько вэйпоинтов -> столько триггеров -> столько скриптов, а можно ли как-то это ожидание в одном скрипте забить? И убрать лишние триггеры?
2) Как повернуть oNPC лицом к объекту, SetFacing() - требует угол, который так просто не узнать, SetFacingPoint() - требует вектор, а как его получить я не понимаю, как координаты объекта получить?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jan 23 2005, 17:52
Сообщение #592


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

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



1. Пошли оРС за НПС и что бы он был с забитым стеком команд. SetCommandable FALSE, как все выполнит НПС TRUE.
Neverwinter Script Source
AssignCommand(oPC, ActionForceFollowObject(object oNPC, 5.0f)); // Идти за НПС не дальше 5 метров


2.
Neverwinter Script Source
AssignCommand(oPC, SetFacingPoint(GetPosition(oDoor))); // Повернем лицом к двери

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
K.SpecTr
сообщение Jan 23 2005, 18:07
Сообщение #593


Level 10
***

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



2) Про GetPosition() то я и забыл. :vava: Спасибо.
1) Не, не так. Мне oPC нужен как раз Commandable, просто NPC ждет пока расстояние между ними не станет <= fVarName. Я сперва думал Delay поставить, но тогда есть шанс, что oPC, о чем-то задумавшись, его из виду потеряет (хотя так даже интереснее). Просто, если я буду дистанцию loop'ом проверять, то загружу все что можно. Или нет?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Jan 23 2005, 18:45
Сообщение #594


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

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



QUOTE (K.SpecTr @ Jan 23 2005, 16:42)
1) Есть oNPC и несколько Вэйпоинтов. Нужно чтобы он пробежал по ним выполняя возле каждого действие и ожидая пока oPC подойдет. Реализовал, разместив под каждый Вэйпоинт триггеры - oPC подходит, наступает, oNPC бежит дальше, дело делать. В общем, сколько вэйпоинтов -> столько триггеров -> столько скриптов, а можно ли как-то это ожидание в одном скрипте забить? И убрать лишние триггеры?

Лучше все-таки делать этот прикол с триггерами. Да, триггеров останется такое же количество, но избежать "пложения" скриптов можно, если дать триггерам разные тэги и в скрипте в зависимости от тэга OBJECT_SELF-объекта делать то или другое.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
K.SpecTr
сообщение Jan 23 2005, 18:51
Сообщение #595


Level 10
***

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



Пока повесил на oNPC локалку и сделал switch, но с тэгами тоже попробую поиграться.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Jan 23 2005, 19:39
Сообщение #596


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Срочно нужна помощь я написал скрипт где много наворотов всяких но скрипт не доделан до конца потому что я не знаю что делать с этой проблемой
Neverwinter Script Source
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur)

; здесь не нужно, но почему эта проблема всегда вылезает?
Neverwinter Script Source
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur);

Поставлено.
Помогите коль кто может.
Маленькая просьба можно по подробнее.
ЗАРАНЕЕ СПАСИБО ВСЕМ!!!!!!!!!!!!

Neverwinter Script Source
#include "x2_inc_cutscene"
void CutSound(int nCutscene, object oSound);
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur);
void MultiJump(object oPC, string sWay);
void PlayMusic(int nCutscene, object oPC);
void SetShift(int nCutscene, object oPC, float fShift);

int nCutsceneNumber = 20;

void main()

{
    object oPC = GetEnteringObject();
    object oGlav = GetObjectByTag("PIVIGA");
    object oWP1 = GetObjectByTag("WP_1");
    object oWP3 = GetObjectByTag("WP_3");
    object oWP4 = GetObjectByTag("WP_4");
    object oWP5 = GetObjectByTag("WP_5");
    object oWP6 = GetObjectByTag("WP_6");
    object oWP7 = GetObjectByTag("WP_7");
    object oSound = GetObjectByTag("cut20_summ_sfx");
//Effect Vizual Effect==========================================================
    effect eZa1 = EffectVisualEffect(VFX_BEAM_BLACK);
    effect eZa2 = EffectVisualEffect(VFX_BEAM_EVIL);
    effect eZa3 = EffectVisualEffect(VFX_IMP_DEATH_WARD);
    effect eZa4 = EffectVisualEffect(VFX_IMP_FEAR_S);
//Localnoe======================================================================
    location lMes1=GetLocation(oWP1);
    location lLoc2=GetLocation(oWP7);
    location lMes3=GetLocation(oWP3);
    location lMes4=GetLocation(oWP4);
    location lMes5=GetLocation(oWP5);
//==============================================================================
    if (!GetIsPC(oPC)||GetLocalInt(oPC,"Proverochoi tur!")==TRUE)
    return;
    {
    SetLocalInt(oPC,"Proverochoi tur",TRUE);
    AssignCommand(oPC,ClearAllActions());
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDarkness(),oPC,20.0);
    DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa1,lMes1,3.0));
    DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa2,lLoc2,3.0));
    DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa3,lMes3,3.0));
    DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa4,lMes4,3.0));
    DelayCommand(2.0,AssignCommand(oGlav,JumpToLocation(lMes1)));
    DelayCommand(2.0,AssignCommand(oGlav,ActionSpeakString("KO MHE MOI SLUGI")));
    DelayCommand(1.0,AssignCommand(oGlav,ActionMoveToObject(oPC,FALSE,0.5)));
//Camera mode===================================================================
    DelayCommand(1.5, DelayCommand(GetShift(oPC, TRUE), MyPentogramma(nCutsceneNumber, oPC, 482, 3.0)));
    DelayCommand(1.5, FadeFromBlack(oPC));
    CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 10.0, 50.0, CAMERA_TRANSITION_TYPE_SNAP);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 9.0, 40.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE);
    CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 12.0, 60.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Vso dla camera
    object oCam1 = GetWaypointByTag("Camera1");
    object oCam2 = GetWaypointByTag("Camera2");
    object oCam3 = GetWaypointByTag("Camera3");
    object oCam4 = GetWaypointByTag("Camera4");
    object oCam5 = GetWaypointByTag("Camera5");
    object oCam6 = GetWaypointByTag("Camera6");
//+++++++++++++++++++++++++++++CAMERA+++++++++++++++++++++++++++++++++++++++++++
    CutPlayAnimation(1.5, oCam1, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
    CutPlayAnimation(1.5, oCam2, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
    CutPlayAnimation(0.5, oCam3, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
    CutPlayAnimation(1.5, oCam4, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
    CutPlayAnimation(0.5, oCam5, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
    CutPlayAnimation(18.0, oCam6, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
//Camera stroenie===============================================================
    CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 182.0, 111.0, 56.0,
                CAMERA_TRANSITION_TYPE_SLOW);
    CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 5.0, 65.0,
                CAMERA_TRANSITION_TYPE_SNAP);

    CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
                CAMERA_TRANSITION_TYPE_VERY_FAST);

    CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 155.0, 45.0, 82.0,
                CAMERA_TRANSITION_TYPE_SNAP);

    CutSetCamera(15.6, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
                CAMERA_TRANSITION_TYPE_SNAP);

    CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 10.0, 4.0, 82.0,
                CAMERA_TRANSITION_TYPE_SNAP);

    CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
                CAMERA_TRANSITION_TYPE_SNAP);

    CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 90.0, 40.0, 82.0,
                CAMERA_TRANSITION_TYPE_SNAP);

    CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
                CAMERA_TRANSITION_TYPE_SNAP);

    CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 105.0, 4.0, 82.0,
                CAMERA_TRANSITION_TYPE_SNAP);
}
//PENTAGRAMMA VOCRUG++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur)
{
  if(CutGetActiveCutsceneForObject(oPC) == nCutscene)
  {
    object oPen1 = GetObjectByTag("Pen1");
    object oPen2 = GetObjectByTag("Pen2");
    object oPen3 = GetObjectByTag("Pen3");
    object oPen4 = GetObjectByTag("Pen4");
    object oPen5 = GetObjectByTag("Pen5");

    int iBeam2 = 483;

//Rasstavlaem+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam, oPen1, BODY_NODE_CHEST, FALSE), oPen2, fDur);

    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen2, BODY_NODE_CHEST, FALSE), oPen3, fDur);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen3, BODY_NODE_CHEST, FALSE), oPen4, fDur);

    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen4, BODY_NODE_CHEST, FALSE), oPen5, fDur);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen5, BODY_NODE_CHEST, FALSE), oPen1, fDur);
    }
}

// Taime =======================================================================
void SetShift(int nCutscene, object oPC, float fShift) {
    if(CutGetActiveCutsceneForObject(oPC) == nCutscene)
      SetLocalFloat(GetArea(oPC), ".."fShift);
}

void CutSound(int nCutscene, object oSound)
{
    if(CutGetActiveCutsceneForObject(oSound) == nCutscene)
    {
        SoundObjectPlay(oSound);
    }
//===============================================================================

}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Jan 23 2005, 23:27
Сообщение #597


Level 4
**

Класс: Волшебник
Характер: True Neutral
Раса: Полуэльф



Поправил скрипт с выпадением луте заменив соответствующюю сточку на
то что предложил MasterMage

AssignCommand(oPlayer,ActionPutDownItem(GetItemInSlot(i,oPlayer)));

после чего в самом шарде после смерит выдает ошибку, toolset же ошибок при компилировании не находит
ошибка -

скрипт _ondeath; OID; 80000000; TAG;
ошибка слишком много инструкций;

возможно есть други ворианты как быросить на землю из слотов 1-14 игрока присмерти предметы (применяется на шарде)

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Jan 24 2005, 00:48
Сообщение #598


Level 4
**

Класс: Волшебник
Характер: True Neutral
Раса: Полуэльф



убрал все свои действия и условия для проверки работоспособности самой строки, оказалось что работает но возникла 2 проблема - выдает сообщение что героя нельзя разоружать во время боя.
подскажите как это реализовать то, на многих шардах такое видел значить както всетаки можно выбросить предметы игрока.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tiger Greyhawk
сообщение Jan 24 2005, 04:02
Сообщение #599



Иконки Групп

Класс: Обыватель
Характер: Chaotic Good
Раса: Человек
NWN: Скриптинг [Sn]



To Oksivarus.
QUOTE (Oksivarus @ Jan 24 2005, 00:48)
выдает сообщение что героя нельзя разоружать во время боя.

Попробуй ClearAllAction (TRUE). Значение TRUE очищает боевые команды. Хотя, не уверен, что в данном случае поможет.
То что тебе предложил MasterMage, ИМХО, очень даже правильно в том случае, если у тебя скрипт вызывается не с игрока. А, я думаю, у тебя так и есть. Ошибка не в AssignCommand. Здесь другая проблема. Команда ActionPutDownItem заставляет выполняющего положить шмотки. В твоем же случае он этого не может сделать, поскольку мертв. Нужна другая команда. Есть очень геморный и не презентабельный вариант через копирование шмоток в новосозданный (после смерти героя) лут, но я думаю, все проще. Попробуй спросить в разделе шардов.


To MasterMage.
QUOTE (MasterMage @ Jan 23 2005, 13:28)
Дело в том, что я не понимаю, как добиться от while, чтобы если не найдет итема выполняла действие ниже...

попробуй с помощью функции проверки наличия предмета, а не перебора всех предметов в инвентори: if (HasItem(oPc, "IMMORTAL_RING")). Необходимо подключить библиотеку "nw_i0_plot" (#include "nw_i0_plot"). Или посмотри как это сделано в самой библ.
А по-поводу while: Куда ты вешаешь скрипт? По идее должна спотыкаться на первом же предмете, у которого таг не "ss".
И вот еще: ссылка. Может с этим трабла.

Neverwinter Script Source
void main()
{

    object oPC=GetEnteringObject(); //Куда он входит? В непися. Ладно, опустим, все равно нигде не используется.
    object oNPC=OBJECT_SELF; //На чем/ком висит скрипт. Если Heartbeat, то не забывай, что каждые 6 сек берется опять первый предмет в инвентори.
    object oItem=GetFirstItemInInventory(oNPC); //первый предмет в инвентори
    if (GetHitDice(oNPC)<5) //если мы при смерти
    {
        while(GetTag(oItem)=="ss") // и, пока N-ый (конкретный, первый попавшийся, а не какой-нить) предмет в инвентори имеет таг "ss", что, согласись, маловероятно будет продолжаться долго.
            {
            SurrenderToEnemies(); // даем команду рядом стоящим быть нейтральными.
            ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectParalyze(),oNPC); // накладываем эфф
            ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDeath(),oNPC); // накладываем эфф
            oItem=GetNextItemInInventory(oNPC); // Берем следующий предмет
            }
// скорее всего первый же предмет не будет иметь таг "ss" и выполниться след строчка

        if(GetTag(oItem)!="ss") // если таг объекта не равен "ss"
        {
        SetImmortal(oNPC,FALSE); // поставить убиваемым (по идее вот это и будет всегда выполняться. Т.к. в противном случае игра выдаст тебе ош.: слишк. много инстр.)
        }

    }
    return;
}


Может я совсем и не прав, но меня поправят.

Сообщение отредактировал Tiger Greyhawk - Jan 24 2005, 04:49
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Jan 24 2005, 14:19
Сообщение #600


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

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



:D примечание :
QUOTE
if (HasItem(oPc, "IMMORTAL_RING")). Необходимо подключить библиотеку "nw_i0_plot" (#include "nw_i0_plot"). Или посмотри как это сделано в самой библ.

:D функция HasItem состоит всего из одной строчки :D ( нужность создания сией функции вообще не очень понятна :yes: )
так что лучше изза этой функции не подключать инклюд, а сразу писать то самое что есть в HasItem :
GetItemPossessedBy(oPC,"<тэг твоего итема>");
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jan 25 2005, 20:28
Сообщение #601


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

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



Я всегда HasItem пользуюсь, хоть там и одна строка, в проверках диалоговых на наличие вещи.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Jan 25 2005, 20:37
Сообщение #602


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



помогите мне ктонибудь на стр.23 :drag:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Тобур
сообщение Jan 25 2005, 21:01
Сообщение #603


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

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



QUOTE (Nokoll @ Jan 23 2005, 19:39)
Срочно нужна помощь я написал скрипт где много наворотов всяких но скрипт не доделан до конца потому что я не знаю что делать с этой проблемой
Neverwinter Script Source
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur)

; здесь не нужно, но почему эта проблема всегда вылезает?
Neverwinter Script Source
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur);

Поставлено.
Помогите коль кто может.
Маленькая просьба можно по подробнее.
ЗАРАНЕЕ СПАСИБО ВСЕМ!!!!!!!!!!!!

Честно говоря не понял вопроса, но если ты спрашиваешь почему в одном случае после функции надо ставить ; а в другом не надо, то ответ будет такой:
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur); - это объявление функции (такое же объявление применимо к константам, переменным). Это объявление говорит компилятору, что такая функция существует.
Дело в том, что компилирование скрипта идет сверху вниз. Если бы ты не объявил эту функцию, то при попытке ее вызова из главного тела программы была бы выдана ошибка, т.к. компилятор еще этой функции не знает.

Можно обойтись без объявления функции, если ее описание (т.е. ее текст) поставить перед телом основной программы.

Объявление функций и переменных служит также для документирования программы, т.к. если выбрать название функции в теле программы , в окошке подсказки высвечивается ее заголовок и примечание (если оно есть) , предшествующее заголовку. Например, все стандартные константы и функции НВНа объявлены в стандартном скрипте nwscript.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Тобур
сообщение Jan 25 2005, 21:11
Сообщение #604


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

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



QUOTE (Csardas @ Jan 22 2005, 04:07)
Народ помогайте дайте скриптик, мне очень нужно чтобы НПК дерется с тобой и когда он будет присмерти начел разговор с РС помогите.

Я бы предложил такую схему:

1 НПС делается или через тулсет сразу Immortal или в скрипте спауна через функцию (Immortal - статус означает, что урон ему наносится, но никогда не понижается ниже 1)

2 в событии On Damage этого НПСя идет проверка, равны ли его текущие хит поинты 1 (или тому значению, при котором ты хочешь остановить бой) или нет
Если да, то останавливаешь бой и начинаешь диалог.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Jan 26 2005, 10:07
Сообщение #605


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

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



QUOTE
Я всегда HasItem пользуюсь, хоть там и одна строка, в проверках диалоговых на наличие вещи


"nw_i0_plot" это нехилово обьема инклюд( где то около полторы тыщи строк) с большим набором всяких функций...подключать это только для того, что бы пользоваться одной малюсенькой функцией HasItem( вместо которой очень просто можно сразу написать нужное) весьма не рационально :D ИМХО

Сообщение отредактировал mamuc - Jan 26 2005, 10:07
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Jan 26 2005, 13:24
Сообщение #606


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Нет Тобур ты неправельно понел мне нужно доделать скрипт а он не Компилитс и Тоолсет выдает что проблема в
Neverwinter Script Source
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur);

я бес понятия как это исправить может кто сдесь и знает мой скрипт целый можно посмотреть на стр 23!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Тобур
сообщение Jan 26 2005, 20:03
Сообщение #607


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

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



#include "x2_inc_cutscene"
void CutSound(int nCutscene, object oSound);
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur);
void MultiJump(object oPC, string sWay);
void PlayMusic(int nCutscene, object oPC);
void SetShift(int nCutscene, object oPC, float fShift);

int nCutsceneNumber = 20;

void main()

{
object oPC = GetEnteringObject();
object oGlav = GetObjectByTag("PIVIGA");
object oWP1 = GetObjectByTag("WP_1");
object oWP3 = GetObjectByTag("WP_3");
object oWP4 = GetObjectByTag("WP_4");
object oWP5 = GetObjectByTag("WP_5");
object oWP6 = GetObjectByTag("WP_6");
object oWP7 = GetObjectByTag("WP_7");
object oSound = GetObjectByTag("cut20_summ_sfx");
//Effect Vizual Effect==========================================================
effect eZa1 = EffectVisualEffect(VFX_BEAM_BLACK);
effect eZa2 = EffectVisualEffect(VFX_BEAM_EVIL);
effect eZa3 = EffectVisualEffect(VFX_IMP_DEATH_WARD);
effect eZa4 = EffectVisualEffect(VFX_IMP_FEAR_S);
//Localnoe======================================================================
location lMes1=GetLocation(oWP1);
location lLoc2=GetLocation(oWP7);
location lMes3=GetLocation(oWP3);
location lMes4=GetLocation(oWP4);
location lMes5=GetLocation(oWP5);
//==============================================================================
if (!GetIsPC(oPC)||GetLocalInt(oPC,"Proverochoi tur!")==TRUE)
return;
{ // Первая ошибка
SetLocalInt(oPC,"Proverochoi tur",TRUE);
AssignCommand(oPC,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDarkness(),oPC,20.0);
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa1,lMes1,3.0));
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa2,lLoc2,3.0));
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa3,lMes3,3.0));
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa4,lMes4,3.0));
DelayCommand(2.0,AssignCommand(oGlav,JumpToLocation(lMes1)));
DelayCommand(2.0,AssignCommand(oGlav,ActionSpeakString("KO MHE MOI SLUGI")));
DelayCommand(1.0,AssignCommand(oGlav,ActionMoveToObject(oPC,FALSE,0.5)));
//Camera mode===================================================================
DelayCommand(1.5, DelayCommand(GetShift(oPC, TRUE), MyPentogramma(nCutsceneNumber, oPC, 482, 3.0)));
DelayCommand(1.5, FadeFromBlack(oPC));
CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 10.0, 50.0, CAMERA_TRANSITION_TYPE_SNAP);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 9.0, 40.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE);
CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 12.0, 60.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Vso dla camera
object oCam1 = GetWaypointByTag("Camera1");
object oCam2 = GetWaypointByTag("Camera2");
object oCam3 = GetWaypointByTag("Camera3");
object oCam4 = GetWaypointByTag("Camera4");
object oCam5 = GetWaypointByTag("Camera5");
object oCam6 = GetWaypointByTag("Camera6");
//+++++++++++++++++++++++++++++CAMERA+++++++++++++++++++++++++++++++++++++++++++
CutPlayAnimation(1.5, oCam1, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(1.5, oCam2, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(0.5, oCam3, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(1.5, oCam4, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(0.5, oCam5, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(18.0, oCam6, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
//Camera stroenie===============================================================
CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 182.0, 111.0, 56.0,
CAMERA_TRANSITION_TYPE_SLOW);
CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 5.0, 65.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_VERY_FAST);

CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 155.0, 45.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(15.6, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 10.0, 4.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 90.0, 40.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 105.0, 4.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);
}
//PENTAGRAMMA VOCRUG++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur)
{
if(CutGetActiveCutsceneForObject(oPC) == nCutscene)
{
object oPen1 = GetObjectByTag("Pen1");
object oPen2 = GetObjectByTag("Pen2");
object oPen3 = GetObjectByTag("Pen3");
object oPen4 = GetObjectByTag("Pen4");
object oPen5 = GetObjectByTag("Pen5");

int iBeam2 = 483;

//Rasstavlaem+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam, oPen1, BODY_NODE_CHEST, FALSE), oPen2, fDur);

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen2, BODY_NODE_CHEST, FALSE), oPen3, fDur);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen3, BODY_NODE_CHEST, FALSE), oPen4, fDur);

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen4, BODY_NODE_CHEST, FALSE), oPen5, fDur);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen5, BODY_NODE_CHEST, FALSE), oPen1, fDur);
}
}

// Taime =======================================================================
void SetShift(int nCutscene, object oPC, float fShift) {
if(CutGetActiveCutsceneForObject(oPC) == nCutscene)
SetLocalFloat(GetArea(oPC), ".."fShift); // Вторая ошибка
}

void CutSound(int nCutscene, object oSound)
{
if(CutGetActiveCutsceneForObject(oSound) == nCutscene)
{
SoundObjectPlay(oSound);
}
//===============================================================================

}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Jan 27 2005, 08:52
Сообщение #608


Level 8
***

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



Tiger Greyhawk скрипт вешается на НПС в слот OnUserDefinite
вообщем я попробую ту строчку про HasItem..........;)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Leon PRO
сообщение Jan 27 2005, 11:01
Сообщение #609


Ушедший на войну
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Контент



Скрипт написаный ниже я поместил в On Use плейсибла, и при юзании игроком он вешает на игрока определенный Вижл эффект.

Neverwinter Script Source
void main()
{
int nVisEffect;
effect eCusEffect;
object oPC = GetLastUsedBy();

nVisEffect =  511; //просто номер эффекта - не обращайте внимания!!!

eCusEffect = EffectVisualEffect(nVisEffect);
eCusEffect = SupernaturalEffect(eCusEffect);

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCusEffect, oPC);
}


Я же теперь хочу, чтобы эффект вешался на объект или игрока, которого я укажу с помощью ванда, через Use Unical Power свойства, для облегчения скажу, что у ванда тэг "dm_effectorwand"

Вопрос номер 2. Можно - ли через runscript передать параметр для переменной.
например runscript myscript(papam1).

хех, держитесь у меня удет скоро тонна вопросов! >:/

Сообщение отредактировал Leon PRO - Jan 27 2005, 11:14
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Jan 27 2005, 11:04
Сообщение #610


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

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



Вопрос номер один не дошел до абонента. Абонент перечитал, но вопрос все равно не дошел =)

Вопрос нумбер ту:

Низя. Вызываемый скрипт должен иметь ф-цию main.
Можно сделать inc файл, содержащий нужные ф-ции и прикреплять его к скриптам. Тогда можно напрямую вызывать необходимую ф-цию с параметрами.

З.Ы. Держимся. :D

Сообщение отредактировал Lemegeton - Jan 27 2005, 11:05
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Leon PRO
сообщение Jan 27 2005, 11:15
Сообщение #611


Ушедший на войну
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Контент



вопрос номер 1 переделал...
по вопросу номер два:
т.е. возможно к.л. макаром всетаки указать в runscript аргумент для скрипта ?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Jan 27 2005, 12:04
Сообщение #612


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

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



QUOTE
...т.е. возможно к.л. макаром всетаки указать в runscript аргумент для скрипта ?

Нет. Ты С или С++ знаешь? Хоть чуть-чуть? Там есть возможность группировать часто используемые универсальные ф-ции для вызова из других частей программы или из других программ. Это называется include файлом. В NWNScript тоже есть такая кракозябра. Т.е. создается файл - что-то вроде:

Neverwinter Script Source
//Имя файла my_functions.inc
void KillHim(object Who);

void KillHim(object Who)
{
DestroyObject(Who, 1);
return;
}


В скрипте, где надо использовать:
Neverwinter Script Source
#include "my_functions"  //ДО ф-ции main, БЕЗ указания расширения.

void main()
{
...
object BadNPC = GetObjectByTag("BadPC");
KillHim(BadNPC);   // Вызывается ф-ция, описанная в другом файле с указанием параметров.
}


ОБЯЗАТЕЛЬНО пересобрать модуль. Данный пример от-балды, вряд ли заработает, но идея такова.


<small>Добавлено в 12:15</small>
Вопрос номер один.

а. В свойствах предмета поставить: Заклинание -> Только собственное питание (это позволяет тыкать палкой :D ).

б. Надо (или не надо, еще не разобрался :D ) переписать OnActivateItem в свойствах модуля на такой:

Neverwinter Script Source
void main()
{
    object oItem = GetItemActivated();
    string tgItem = GetTag(oItem);
    object oTarget = GetItemActivatedTarget();
    ExecuteScript(tgItem, oTarget);
}


Это позволит запустить скрипт с именем тэга используемого предмета.!

в. Создать скрипт с именем тэга палки:

Neverwinter Script Source
void main()
{
int nVisEffect;
effect eCusEffect;
object oPC = OBJECT_SELF; // !!!!!!! - Это будет тот, на кого палкой ткнули - !!!!!!!

nVisEffect =  511; //просто номер эффекта - не обращайте внимания!!!

eCusEffect = EffectVisualEffect(nVisEffect);
eCusEffect = SupernaturalEffect(eCusEffect);

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCusEffect, oPC);
}


Сообщение отредактировал Lemegeton - Jan 27 2005, 12:17
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Leon PRO
сообщение Jan 27 2005, 13:02
Сообщение #613


Ушедший на войну
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Контент



Хех, пасибо, за вопрос №2, хоть ты сам точно не знаешь, но хоть ткнул меня где копать.
А по вопросу №1 ты по-моему не понял, я в курсе про инклуды.

Я говорю о такой ситуации распишу по шагам:
1. Зашел ДМ-ом на шард.
2. написал в консоли runscript имя_скрипта - работает само-собой.
3. поддерживаются-ли такие скрипты, где можно написать, вызвав иго из консоли runscript имя_скрипта(параметр) ?

По поводу скрипта:
QUOTE
object oPC = OBJECT_SELF; // !!!!!!! - Это будет тот, на кого палкой ткнули - !!!!!!!

А разве OBJECT_SELF не на того, кто палкой тыкал сработает ?

Сообщение отредактировал Leon PRO - Jan 27 2005, 13:03
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Jan 27 2005, 13:11
Сообщение #614


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

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



Не, извиняй. Я не в курсе про ДМ скрипты. :xz:

QUOTE
... разве OBJECT_SELF не на того, кто палкой тыкал сработает ?


Neverwinter Script Source
void main()
{
    object oItem = GetItemActivated();
    string tgItem = GetTag(oItem);
    object oTarget = GetItemActivatedTarget();  // <----
    ExecuteScript(tgItem, oTarget);
}


Ф-ция ExecuteScript в качестве второго параметра получает объект, от лица которого запускается скрипт. Т.е. в запущеном скрипте этот объект будет как раз OBJECT_SELF.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Leon PRO
сообщение Jan 27 2005, 13:17
Сообщение #615


Ушедший на войну
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Контент



Ок, я дома попробую, завтра еще напишу, спасибо огромное!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 23 24 25 26 27 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



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