Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74
Aiwan
Гиларион тебе нужны БАЗОВЫЕ знания. Ты знаешь чем отличается TAG oт ResRef-a или от Name объекта? Читай статьи пока и спрашивай.
Добавлено в [mergetime]1108842910[/mergetime]
Статьи смотри ТУТ
Archangel
QUOTE
Гиларион тебе нужны БАЗОВЫЕ знания. Ты знаешь чем отличается TAG oт ResRef-a или от Name объекта? Читай статьи пока и спрашивай.


Вот, вот Aiwan и я ему про тоже....
tongue.gif tongue.gif tongue.gif tongue.gif tongue.gif
Nokoll
QUOTE
Вот, вот Aiwan и я ему про тоже....

Господи вы уж меня извените за оффтоп, ну зачем же так флудить!
Добавлено в [mergetime]1108851238[/mergetime]
Shad Спасибо за совет, надеюсь я правильно скрипт написал!
Nokoll
Вот мой скрипт для брата он попросил сделать Битву с Балрогом на Мосте Минастрита,
Дак вот я сделал но много что не получается вот скрипт..
Neverwinter Script Source
//-----------------------------------------------------------------------|
void main()
{
//{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}////////////////////////|
        object oPC = GetEnteringObject();
        object oBalrog = GetObjectByTag("BALROG");
        object oGendolf = GetObjectByTag("GENDOLF");
        object oRc1 = GetObjectByTag("ORC_1");
        object oRc2 = GetObjectByTag("ORC_2");
        object oRc3 = GetObjectByTag("ORC_3");
        object oSk4 = GetObjectByTag("ORC_4");
        object oSk5 = GetObjectByTag("ORC_5");
        object oSk6 = GetObjectByTag("ORC_6");
        object oRc7 = GetObjectByTag("ORC_7");
        object oRc8 = GetObjectByTag("ORC_8");
        object oRc9 = GetObjectByTag("ORC_9");
        object oRc10 = GetObjectByTag("ORC_10");
//Tochki Morshruta==============================================================
        object oWpPc = GetWaypointByTag("PC_1");
        object oWpPc1 = GetWaypointByTag("PC_2");
        object oWpFare = GetWaypointByTag("Faire");
        object oWpFare1 = GetWaypointByTag("Faire1");
        object oWp3 = GetWaypointByTag("Go3");
        object oWp4 = GetWaypointByTag("Go4");
        object oWp5 = GetWaypointByTag("Go5");
        object oWp6 = GetWaypointByTag("Go6");
        object oWp7 = GetWaypointByTag("Go7");
        object oWp8 = GetWaypointByTag("Go8");
        object oWp9 = GetWaypointByTag("Go9");
        object oWp10 = GetWaypointByTag("Go10");
//----------------------O Camera Tochki-----------------------------------------
        object oCamera = GetWaypointByTag("Camera1");
        object oCamera2 = GetWaypointByTag("Camera2");
        object oCamera3 = GetWaypointByTag("Camera3");
//==============================================================================
//==========================+Nicita the Lord of tne Ring+=======================
//##############################=VISUAL EFFECT=#################################
        effect eVis1 = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
        effect eVis2 = EffectVisualEffect(349);
        effect eVis3 = EffectVisualEffect(VFX_IMP_HARM);
        effect eVis4 = EffectVisualEffect(VFX_DUR_PIXIEDUST);
        effect eVis5 = EffectVisualEffect(VFX_DUR_MAGICAL_SIGHT);
        effect eDed =  EffectDeath();
        effect eCutInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
//=============================================================================
        location Loc1 = GetLocation(oWpFare);
        location Loc2 = GetLocation(oWpFare1);
//-----------------------------------------------------------------------------
        if (!GetIsPC(oPC)||GetLocalInt(oPC,"Minas_Morgul")==TRUE)
        return;
        {
        AssignCommand(oPC,ClearAllActions());
        AssignCommand(oGendolf,ClearAllActions());
//------------------------------------------------------------------------------
        SetLocalInt(oPC,"Nicita rolic",TRUE);
        SetLocalLocation(oPC,"MinasMorgul",GetLocation(oPC));
        SetCutsceneMode(oPC);
        DelayCommand(3.7,FadeFromBlack(oPC,FADE_SPEED_SLOW));
        AssignCommand(oPC,JumpToObject(oWpPc1));
        ApplyEffectToObject(DURATION_TYPE_PERMANENT,eCutInv,oPC);
        DelayCommand(4.5,  AssignCommand(oPC,SetCameraFacing(0.0,6.0,45.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
        DelayCommand(17.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis1,Loc1,23.5));
        DelayCommand(17.1, ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis2,Loc2,24.6));
        DelayCommand(19.5, AssignCommand(oPC,SetCameraFacing(3.0,5.0,50.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
        DelayCommand(23.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDed,oRc1));
        DelayCommand(24.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDed,oRc2));
        DelayCommand(25.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDed,oRc3));
        DelayCommand(27.1, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis3,oWp4,24.6));
        DelayCommand(29.1, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis3,oWp5,24.6));
        DelayCommand(31.1, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis3,oWp6,24.6));
//OXRANA SDOXLA POAVILIS SCELETA////////////////////////////////////////////////
        DelayCommand(32.0,AssignCommand(oSk4,ActionJumpToObject(oWp4)));
        DelayCommand(33.0,AssignCommand(oSk5,ActionJumpToObject(oWp5)));
        DelayCommand(34.0,AssignCommand(oSk6,ActionJumpToObject(oWp6)));
        DelayCommand(36.5, AssignCommand(oPC,SetCameraFacing(0.0,0.0,30.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
//==============PEREMENI I ZAMENIM MUSICU=======================================
        MusicBackgroundChangeNight(GetArea(OBJECT_SELF), 43);
//------------------------------------------------------------------------------
        DelayCommand(40.0,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis1,Loc1,23.5));
        DelayCommand(41.1,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis2,Loc2,24.6));
        DelayCommand(43.0,AssignCommand(oGendolf,ActionSpeakString("d")));
        DelayCommand(48.8, AssignCommand(oSk4, ActionDoCommand(DestroyObject(oSk4))));
        DelayCommand(49.8, AssignCommand(oSk5, ActionDoCommand(DestroyObject(oSk5))));
        DelayCommand(52.8, AssignCommand(oSk6, ActionDoCommand(DestroyObject(oSk6))));
        AssignCommand(oPC,JumpToObject(oWpPc));
        DelayCommand(55.5, AssignCommand(oPC,SetCameraFacing(180.0,10.0,49.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
        ActionWait(3.4);
        DelayCommand(60.5, AssignCommand(oPC,SetCameraFacing(111.0,5.0,10.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
        ActionWait(4.4);
        DelayCommand(61.5, AssignCommand(oPC,SetCameraFacing(0.0,5.0,50.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
        //////////////////////////
        effect ePr = EffectCutsceneParalyze();
        //////////////////////////
        DelayCommand(62.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis4,oWp10));
        DelayCommand(64.0,AssignCommand(oBalrog,ActionJumpToObject(oWp10)));
        DelayCommand(66.0, AssignCommand(oBalrog, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING, 0.9, 5.0)));
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePr, oBalrog, 40.5);
        DelayCommand(68.0,AssignCommand(oBalrog,ActionSpeakString("d ")));
//::::HODUMAEM HMMMM GENDOLF O NUKA POHOL POHOL:::::::::::::::::::::::::::::::::
        DelayCommand(68.0,AssignCommand(oGendolf,ActionSpeakString("d")));
        DelayCommand(70.0,AssignCommand(oGendolf,ActionMoveToObject(oWp5,TRUE)));
        DelayCommand(76.0, AssignCommand(oBalrog, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING, 0.9, 5.0)));
        DelayCommand(78.0,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis1,Loc1,23.5));
        DelayCommand(79.1,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis2,Loc2,24.6));
        DelayCommand(82.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDed,oGendolf));
        DelayCommand(85.5, AssignCommand(oPC,SetCameraFacing(4.0,6.0,45.0,CAMERA_TRANSITION_TYPE_MEDIUM)));

        }

      }

Неполучается Сменить музыку путём ночи..
Камеры Ващще ужас. Мне всего та надо чтобы ПК ровно двигался по мосту а затем поднялся в верх..
И скрипт не дописан потому что мне надо чтобы когда Появится Балрог из огня он дыхнул огнём на Гендольфа и только тогда гендольф умер..
И ещё думаю это невозможно но всё же спрошу можно ли сделать так чтобы мост сломался после смерти Гендольфа эффекто разрушился, балрога нет и гендольфа нет!
С камерами я сам разберусь но помогите с этим хотябы кто нибут+ь.
Aiwan
Nokoll что бы дать совет по катсцене ее надо двадцать раз запустить и посмотреть что происходит. Мне лично нет ни времени ни желания разбираться в твоих каракулях. Ты подумай, как я могу на глаз определить где ты затупил?
Насчет музыки попробуй так:
Neverwinter Script Source
MusicBackgroundChangeNight(GetArea(OBJECT_SELF), 43);
        MusicBackgroundChangeDay(GetArea(OBJECT_SELF), 43);

Ты ж не знаешь когда войдет игрок, днем или ночью.
MasterMage
Nokoll
УХХХХХ, Айван же сказал, что так на глаз нельзя, катсцены это такое ювелирное искуство, как часовщик, их нужно настраивать.... А камеры нужно понять... я свои катсцены для своего модуля настраивал не один день... Зато если (повторюсь)у кого версия 1.30, могу прислать и показать...
Итак, если версия у тея 1.30 присылай мне локацию, я посмотрю!! diablo.gif diablo.gif wizard.gif
MasterMage
Скрипт ставится на выход их локации...
РС должен перенестить после ролика туда, куда ведет дверь
Neverwinter Script Source
void main()
{
    object oPC=GetExitingObject();
    object oZed=GetObjectByTag("Zed");
    object oV1=GetObjectByTag("valun_1");
    object oV2=GetObjectByTag("valun_2");
    object oV3=GetObjectByTag("valun_3");
    object oV4=GetObjectByTag("valun_4");
    object oWp1=GetWaypointByTag("E_D_ZED");
    object oWp2=GetWaypointByTag("pp_point_zed_1");
    object oWp3=GetWaypointByTag("pp_point_pc_1");
    object oWp4=GetWaypointByTag("pp_point_pc_2");
    object oArea2=GetObjectByTag("area006");
    object oTr=GetTransitionTarget(GetObjectByTag("D_RichExit1"));
    effect eCutInv=EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
    effect oEf1=EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL);

    if(GetLocalInt(oPC,"ZedInt")==TRUE&&GetLocalInt(oPC,"ZedRolic")==1)
    {
    AssignCommand(oPC,ClearAllActions());
    SetLocalInt(oPC,"ZedRolic",2);
    DelayCommand(0.1,SetCutsceneMode(oPC));
    DelayCommand(0.2,AssignCommand(oPC,JumpToObject(oWp3)));
    DelayCommand(0.2,AssignCommand(oZed,JumpToObject(oWp2)));
    DelayCommand(0.2,ApplyEffectToObject(DURATION_TYPE_PERMANENT,eCutInv,oPC));
    DelayCommand(0.5,AssignCommand(oPC,SetFacingPoint(GetPosition(oZed))));
    DelayCommand(2.5,AssignCommand(oPC,SetCameraFacing(0.0,3.5,89.0,CAMERA_TRANSITION_TYPE_SLOW)));
    DelayCommand(4.5,AssignCommand(oZed,ActionSpeakString("Так, так, так...")));
    DelayCommand(6.5,AssignCommand(oPC,ActionMoveToObject(oZed,FALSE,1.0)));
    DelayCommand(8.5,AssignCommand(oPC,SetCameraFacing(10.0,4.0,55.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
    DelayCommand(12.5,AssignCommand(oPC,JumpToObject(oWp4)));
    DelayCommand(12.5,MusicBackgroundChangeDay(oArea2,TRACK_BATTLE_ENDBOSS));
    DelayCommand(12.5,AssignCommand(oPC,SetFacingPoint(GetPosition(oZed))));
    DelayCommand(17.0,AssignCommand(oZed,ActionCastSpellAtObject(SPELL_EPIC_RUIN,oV2,METAMAGIC_NONE,TRUE,0,PROJECTILE_PATH_TYPE_HIGH_BALLISTIC,FALSE)));
    DelayCommand(19.5,DestroyObject(oV1));
    DelayCommand(19.5,DestroyObject(oV2));
    DelayCommand(19.5,DestroyObject(oV3));
    DelayCommand(19.5,DestroyObject(oV4));
    DelayCommand(20.5,AssignCommand(oZed,ActionSpeakString("Порйадок! ")));
    DelayCommand(21.5,ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,oEf1,GetLocation(oWp2),2.5));
    DelayCommand(24.5,AssignCommand(oZed,JumpToObject(oWp1)));
    DelayCommand(29.0,AssignCommand(oPC,JumpToLocation(GetLocation(oTr))));
    DelayCommand(29.1,SetCutsceneMode(oPC,FALSE));
    DelayCommand(29.1,RemoveEffect(oPC,eCutInv));
    }
}

Добавлено в [mergetime]1108898438[/mergetime]
как?
Nokoll
Скажи что именно не работает возможно надо так
Neverwinter Script Source
DelayCommand(24.5,AssignCommand(oZed,ActionJumpToObject(oWp1)));
Shad
QUOTE (Nokoll @ Feb 20 2005, 02:47)
И ещё думаю это невозможно но всё же спрошу можно ли сделать так чтобы мост сломался после смерти Гендольфа эффекто разрушился, балрога нет и гендольфа нет!

Вижу два пути:
1. Какой-нибудь взрыв на мосту, потом затемняешь экран и переносишь всех на другую локу - точную копию той, на которой битва, но без моста и пары бойцов. Не забудь перенести на всякий случай все вещи, которые могут лежать на полу (функция GetNextObjectInArea(...)).
2. Используй "Tile magic" - функции TLChangeAreaGroundTiles(...) и TLResetAreaGroundTiles(...) из x2_inc_toollib.
Nokoll
Shad Пасибо.
Но я придумал так сделать типа мост из предметов у меня хак пак с предметным мостом,
и сделать Еффект Смерти на предмет, и ещё еффект взрыва, как думаете такое можно?
Shad
Если есть placeable по которым сможешь ходить, то это хороший способ.
Nokoll
Я про тоже placeable есть проверял но скрипт не проверял тока идея появилась.
А хак Пак стандартный СЕР.
MasterMage
Nokoll прости, ошибка не в этой строчке...ошибки нет...мне нужно добавить строчку, которая перенесет туда, куда ты шел, после ролика
Oksivarus
В разделе скриптов есть скрипт на умирание в котором (насколько я понял) есть строчька которая должна создавать пятно крови возле игрока - как ее создать, а вернее в каком разделе предметов. Я нашел в стандартной политре это пятно поставил в тут строчьку ее тег но пятно не появляется. Подскажите что нетак.
Nokoll
Тег не нужен добавь в скрипт эффект VFX_COM_BLOOD_CRT_RED, их в тулсете много выбери любой.
Grazzt, Dark Prince
Вопрос из области cut-сцен. Каким образом можно быстро убрать накастованые на область заклинания типа кислотного тумана? Смысл преблизительно следующий - после "мажеского" поединка включается cut-сцена. Эффекты от накастованых во время боя заклинаний просто заполняют собой экран и мешают правильному визуальному восприятию сцены. Причем надо учитывать тот факт, что на некоторых объктах области висят перманентные эффекты, которые весьма желательно сохранить.
Nokoll
СЛУШАЙ ВРОДЕ ТАК ПОПРОБУЙ EffectAbilityDecrease, ИЛИ EffectAbilityIncrease, ПРОСТО СЕЙЧАС ГОЛОВА ЕДЕТ немогу сосредоточится!
Tarre Talliorne
Перебери циклом все эффекты.
effect eE=GetFirstEffect ...
потом посмотри, если их криатер - маг1 или маг2, удаляй их.
GetEffectCreater();
цикл while (GetIsEffectValid(eE))
Добавлено в [mergetime]1109005998[/mergetime]
QUOTE (Oksivarus @ Feb 21 2005, 12:35)

В разделе скриптов есть скрипт на умирание в котором (насколько я понял) есть строчька которая должна создавать пятно крови возле игрока - как ее создать, а вернее в каком разделе предметов. Я нашел в стандартной политре это пятно поставил в тут строчьку ее тег но пятно не появляется. Подскажите что нетак.

Дело в том, что объекты создаются не по тэгу, а по ресрефу. Поэтому 2 выхода:
1. или заменяй в скрипте ресреф(в CreateObject) на ресреф пятна стандатрного, либо
2. создавай новый обжект с нужным (скрипту) ресрефом
Grazzt, Dark Prince
>Tarre Talliorne
Нечто в этом роде я и предполагал. Громаднейшее спасибо crazy.gif
Добавлено в [mergetime]1109056973[/mergetime]
А еще один мааленький вопросик: GetEffectCreater(); - насколько я пронимаю выдает объекта-криэйтора эффекта. То бишь условно говоря мага2. А если к примеру маг2 уже подох, и соответственно функция вернет INVALID'а (ну насколько я понимаю - или нет?). Надо ли onDeath мага2 к примеру вешать функцию криэйта его копии в закрытой локации или вешать какой нибудь EffectRespawn() и т.д, и только после этого удалять эффекты?
Nokoll
Я считаю что надо я так и делаю вешаю onDeath мага2 и только после этого удаляю эффекты. victory.gif
Добавлено в [mergetime]1109060073[/mergetime]
А зачем ващще EffectRespawn(), здесь незнаю dntknw.gif
Возможно я опозорюсь но я думал что INVALID это фракцыя как и OBJECT_SELF.
Grazzt, Dark Prince
QUOTE (Nokoll @ Feb 22 2005, 11:11)
А зачем ващще EffectRespawn(), здесь незнаю dntknw.gif


Респаун просто не даст задестроится объекту маг2, после чего его можно пихать в цикл, где будет GetEffectCreater(), после выполнения цикла дать EffectDeath() или DestroyObject() на мага2. При этом надо учитывать, что при десторое onDeath выполнится еще раз. Следовательно надо сделать еще один цикл, в котором на первом шаге снимаются эффекты, а на втором собственно маг и дохнет. Видимо как-то так. В меру моего понимания данной реализации конечно и не имея под руками Лексикона...
Nokoll
QUOTE
Следовательно надо сделать еще один цикл, в котором на первом шаге снимаются эффекты, а на втором собственно маг и дохнет. Видимо как-то так. В меру моего понимания данной реализации конечно и не имея под руками Лексикона...

Попробуй так EffectDeath(), будет лучше смотреца, и поставь мою выдуманную но рабочую функцыю
DestroyEffect, иба маг умрёт со звучком даже, эффекты исчезнут. sclerosis.gif
DBColl
QUOTE (Nokoll @ Feb 22 2005, 10:11)
Возможно я опозорюсь но я думал что INVALID это фракцыя как и OBJECT_SELF.

swoon.gif biggrin.gif
QUOTE (Grazzt @ Dark Prince, Feb 22 2005, 09:06)
А еще один мааленький вопросик: GetEffectCreater(); - насколько я пронимаю выдает объекта-криэйтора эффекта. То бишь условно говоря мага2. А если к примеру маг2 уже подох, и соответственно функция вернет INVALID'а (ну насколько я понимаю - или нет?). Надо ли onDeath мага2 к примеру вешать функцию криэйта его копии в закрытой локации или вешать какой нибудь EffectRespawn() и т.д, и только после этого удалять эффекты?

Копия объекта-креатора не будет являться креатором эффекта. Это не выход.
Выход тогда:
1. Делать TEMPORARY эффект. Подстраивать его длительность ручками.
2. Сделать креатора SetIsDestroyable(FALSE); и не бояться, что креатор дестроится, когда загнется.
Nokoll
ДБ нет ты не отом подумал, я мимел в виде не то что INVALID тоже самое что и
OBJECT_SELF.
Grazzt, Dark Prince
QUOTE (DBColl @ Feb 22 2005, 13:28)
Копия объекта-креатора не будет являться креатором эффекта. Это не выход.

Тут я немножко хочу прояснить для себя c точки зрения теории: если последовательно обьект маг2 был в какой-то момент задестроен, а потом в локации был создан другой точно такой-же объект маг2. Например:
DestroyObject(bla-bla-bla);
DelayCommand(0.1,CreateObject(bla-bla-bla)); То почему с точки зрения функционирования системы он не будет являтся креатором эффекта? Ведь фактически он в конкретный момент вемени уникален -т.е. никаких других обьектов с такими тэгом и ресцефом на локации (да и во всем модуле) не присутствует. Я понимаю так, что существует некий стэк обьектов, и у обьекта, если он присутствует в локации, кроме тэга и ресцефа существует еще некий int-идентификатор. Это видно например из функции, возвращающей ближайший к объекту oPC объект: object oMage=GetNearestObjectByTag("oMage2",oPC,i); - где i - насколько я понимаю и является этим идентификатором. Следовательно, если предположить существуют 2 объекта oMage2, то у одного условно говоря в конкретный момент времени i=0, а у другого i=1 - очевидно, что объекты разные. Но если объект в конкретный момент времени ОДИН, то и значение i для него будет всегда условно говоря равно 0. Так почему для функции GetEffectCreater(); он будет ДРУГИМ объектом? Непонятно? Или у обьектов есть еще какой-то скрытый идентифицирующий их признак? Или я что-то неправильно понимаю?
Friedrich
QUOTE (DBColl)
Копия объекта-креатора не будет являться креатором эффекта. Это не выход.

QUOTE (Grazzt @ Dark Prince, Feb 22 2005, 15:42)
Например:
DestroyObject(bla-bla-bla);
DelayCommand(0.1,CreateObject(bla-bla-bla)); То почему с точки зрения функционирования системы он не будет являтся креатором эффекта? Ведь фактически он в конкретный момент вемени уникален -т.е. никаких других обьектов с такими тэгом и ресцефом на локации (да и во всем модуле) не присутствует.

Рес-реф и тэг тут не причем.
А что такое object?
object - это 32 битное целое, которое указывает на определенный объект в модуле (что это - адрес в памяти или просто абсолютный номер объекта, точно не знаю, скорее второе). Имеется функция
string ObjectToString(object), возвращающая (как строку) значение идентификатора объекта в виде шестнадцатиричного числа.

Соответственно, GetEffectCreater() вернет значение указателя на объект-креатор, предположительно, просто достав его из соответствующего поля эффекта (effect - это, кажется, по сути struct такой). Проверки на существование объекта с таким идентификатором при этом, происходить не должно (хотя ХЗ, чего там на самом деле происходит dntknw.gif ). Видимо для подобных ситуаций, когда значение объекта не равно OBJECT_INVALID но самого объекта в модуле уже нет, и написана функция GetIsObjectValid(..).

Когда же ты создаешь новый объект, он получает новый идентификатор, который, естественно, не будет соответствовать идентификатору объекта, созданного когда-то по тому же рес-рефу и имевшему тот же тэг (а жив он сейчас или нет - не важно).

Исходя из вышесказанного можно предложить следующие.
Накладывая эффект мы одновременно сохраняем в локалке идентификатор объекта-креатора:
SetLocalObject(oTarget, "effect_creator", OBJECT_SELF);
А потом, будем проверять соответствие креатора эффекта этой локалке, а не вновь найденному по тэгу объекту.
Правда, нет никакой уверенности в том, что это будет работать, но можно попробовать. Заодно проверить истинность моих домыслов.
Friedrich
Да. Усе работает. yahoo.gif
Если сохранить креатора эффекта в локалку, то потом можно использывать это значение, независимо от бытия самого креатора.
Фрагмент лога:
CODE
[Wed Feb 23 01:08:03] Loading Module: TEST_Lair_02
.*** Effect creator is :OID: 0x4, Name: Altar, Tag: TL_ALTAR, ResRef: plc_altrneutral ***
..*** -= xx_altar_ouexe run =- ***
.*** -= removeEffectByStoredCreator(7fffffff, effector) called =- ***
*** Effect creator was: OID: 0x4, Name: n/a, Tag: n/a, ResRef: n/a ***
*** GetIsObjectValid(oCreator) return: 0 ***
*** 1 effects was removed. ***
***  -------------  ***
..................................[Wed Feb 23 01:14:33] Server Shutting Down

Объекта с oСreator == 0x04 уже не существует (причем oCreator != OBJECT_INVALID), но созданный им эфект удаляется.
0x7FFFFFFF - это первый игрок.
OBJECT_INVALID, кажется, равен 0x7F000000 (хотя это и не важно)
Neverwinter Script Source
void removeEffectByStoredCreator(object oTarget, string sVarName)
{
  object oCreator = GetLocalObject(oTarget, sVarName);
  effect eRemove = GetFirstEffect(oTarget);
  while (GetIsEffectValid(eRemove))
  {
    if (GetEffectCreator(eRemove) == oCreator)
    {
      RemoveEffect(oTarget, eRemove);
    }
    eRemove = GetNextEffect(oTarget);
  }
}

вот функция - в общем виде.
Grazzt, Dark Prince
>Friedrich
Thanks biggrin.gif biggrin.gif biggrin.gif
Nokoll
Дайте плизз ктонибудь скрипт, чтобы любой Непись сделался статуей, я видел такой скрипт в 1 Аддоне.
Но ево у меня уже нет!
Стереть все эктион у Непися и Наложить Камень в Плоть! тоюеж чтобы он недвигался и покрылся камнем!
Tarre Talliorne
Тут надо юзать эффекты катсцен: CutsceneParalyse и еще что-нибудь (я б кинул для верности все, кроме инвизбла)
Friedrich
QUOTE (Nokoll @ Feb 25 2005, 13:09)
Дайте плизз ктонибудь скрипт, чтобы любой Непись сделался статуей

Окаменение - это, вроде EffectPetrify()
Lexey aka Hawk
Вставить в скрипт OnSpawn Creature.

// * If Statue, apply statue visual effect
if (GetCreatureFlag(OBJECT_SELF, "STATUE") == TRUE)
{
effect eStatue = EffectPetrify();
eStatue = ExtraordinaryEffect(eStatue);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStatue, OBJECT_SELF);
SetPlotFlag(OBJECT_SELF, TRUE);
}

В Тулсете на монстер-статуе прописать переменную тип int, имя STATUE, значение TRUE.

В теории надо еще спелл Stone to Flesh слегка отредактировать, чтобы такую статую нельзя было раскаменить.
Nokoll
Lexey aka Hawk
Спасибо Сделаю!

QUOTE
В теории надо еще спелл Stone to Flesh слегка отредактировать, чтобы такую статую нельзя было раскаменить
.
Можно чуть по подробнее как сделать!
Lexey aka Hawk
В SoU это было сделано так. На событии OnSpellCastAt моба-статуи стоит такой скрипт
Neverwinter Script Source
//reapply stone effect

void Stone()
{
    SetPlotFlag(OBJECT_SELF, FALSE);
    effect eStone = EffectPetrify();
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStone, OBJECT_SELF);
    SetPlotFlag(OBJECT_SELF, TRUE);
}

void main()
{
    int nSpell = GetLastSpell();
    if(nSpell == SPELL_DISPEL_MAGIC || nSpell == SPELL_GREATER_DISPELLING || nSpell ==SPELL_MORDENKAINENS_DISJUNCTION)
    {
        DelayCommand(2.1, Stone());
    }
}


Я бы в соответствующие спеллы просто вставил такую строчку.
Neverwinter Script Source
if (GetCreatureFlag(GetSpellTargetObject(), "STATUE") == TRUE) return;


В любом случае это лишь один из многочисленных вариантов.
Proydoha
Как выглядит скрипт из начала компании ХоТУ, который обдирал игрока как липку и переносил все его вещи в отдаленный сундук в Андердарке. Я искал, но не нашел.
Lexey aka Hawk
1-я глава XP1
Локация Waterdeep - Yawning Portal - Second Floor
Событие OnEnter локации. Скрипт q2a_enter_rooms.
Neverwinter Script Source
object oContainer = GetObjectByTag("x2_chapter1pcequip"); //NEW CONTAINER -
        // This container is in the final area of Chapter 1!

        // * pick up any equipment lying on the ground
        // * Thanks Mr. Cheater!
        object oArea = OBJECT_INVALID;
        object oItem = GetFirstObjectInArea(oArea);
        while (GetIsObjectValid(oItem) == TRUE)
        {
            if (GetObjectType(oItem) == OBJECT_TYPE_ITEM)
            {
                CopyItem(oItem, oContainer);
                SetPlotFlag(oItem, FALSE);
                DestroyObject(oItem, 0.1);
            }
            oItem = GetNextObjectInArea(oArea);
        }

        //if this is the main PC - who has had the dream
        if (GetLocalInt(oPC, "nPCNumber") == 1)
        {

            //if this is the case, strip PC of all equipment, place
            //it on the weapons rack ("q2a_pc_equip" and
            //spawn in the assassin ("q2adrowassassin")
            // Removing PC's equipment.
            object oGear = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC);
            object oGear2;
            //object oContainer = GetObjectByTag("q2a_pc_equip");//OLD CONTAINER - IN PC START ROOM
            int nGold = 0;

            if(GetIsObjectValid(oGear))
            {
                nGold = nGold + GetGoldPieceValue(oGear);
                oGear2 = CopyItem(oGear, oContainer);
                SetPlotFlag(oGear, FALSE);
                DestroyObject(oGear);
            }
            oGear = GetItemInSlot(INVENTORY_SLOT_BELT, oPC);
            if(GetIsObjectValid(oGear))
            {
                nGold = nGold + GetGoldPieceValue(oGear);
                oGear2 = CopyItem(oGear, oContainer);
                SetPlotFlag(oGear, FALSE);
                DestroyObject(oGear);
            }
            oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC);
            if(GetIsObjectValid(oGear))
            {
                nGold = nGold + GetGoldPieceValue(oGear);
                oGear2 = CopyItem(oGear, oContainer);
                SetPlotFlag(oGear, FALSE);
                DestroyObject(oGear);
            }

... и т.д. Весь скрипт приводить не буду, т.к. найти его теперь не составит проблем, а форум не резиновый.
Лито
Прошу помочь скриптом. Чтобы при воскрешении и райз дэде снимался опыт -50 за уровень(как при респауне). Я понимаю что я задавал этот вопрос, но тогда мне сказали как просто снять с игрока определенное кол-во опыта.
Nokoll
Народ помогайте вот сделал скрипт просто не могу сёйчас с катушек съеду
Вот скрипт.
Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name: PIVI_ATTAC
//:: Copyright © 2001 WRG Corp.
//:://////////////////////////////////////////////
/*
    Piviga Attacuet? CutScena Nachalo Bitva/
*/

//:://////////////////////////////////////////////
//:: Created By: Nokoll
//:: Created On: Feb 25, 2005
//:://////////////////////////////////////////////

#include "x2_inc_cutscene"
//Include dobovlaet plavnost camere i novie deistvia!
void main()
{
object oPC = GetEnteringObject();
object oPIVI = GetObjectByTag("PIVI_GIVI");//BIG BOSS....
object oNpc1 = GetObjectByTag("NPC1");
object oNpc2 = GetObjectByTag("NPC2");
object oNpc3 = GetObjectByTag("NPC3");
object oNpc4 = GetObjectByTag("NPC4");
object oNpc5 = GetObjectByTag("NPC5");
object oNpc6 = GetObjectByTag("NPC6");
object oNpc7 = GetObjectByTag("NPC7");
object oNpc8 = GetObjectByTag("NPC8");
object oNpc9 = GetObjectByTag("NPC9");
object oNpc10 = GetObjectByTag("NPC10");
//------------------------------------------------------------------|
effect eCutIn = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);//|:CutSchene:
//------------------------------------------------------------------|
effect on = EffectDazed();
effect eVis = EffectAreaOfEffect(VFX_DUR_DARKNESS);
object oNpc11 = GetObjectByTag("NPC11");
object oNpc12 = GetObjectByTag("NPC12");
object oNpc13 = GetObjectByTag("NPC13");
object oNpc14 = GetObjectByTag("NPC14");
object oNpc15 = GetObjectByTag("NPC15");
object oNpc16 = GetObjectByTag("NPC16");
object oNpc17 = GetObjectByTag("NPC17");
object oNpc18 = GetObjectByTag("NPC18");
object oNpc19 = GetObjectByTag("NPC19");
object oNpc20 = GetObjectByTag("NPC20");
//======================================================================
//Get Waypoint by teg!--------------------------------------------------
object oPIVIWP = GetWaypointByTag("PIVIWP");//BIG BOSS WP!
object oWP1 = GetWaypointByTag("WP1");
object oWP2 = GetWaypointByTag("WP2");
object oWP3 = GetWaypointByTag("WP3");
object oWP4 = GetWaypointByTag("WP4");
object oWP5 = GetWaypointByTag("WP5");
object oWP6 = GetWaypointByTag("WP6");
object oWP7 = GetWaypointByTag("WP7");
object oWP8 = GetWaypointByTag("WP8");
object oWP9 = GetWaypointByTag("WP9");
object oWP10 = GetWaypointByTag("WP10");
object oWP11 = GetWaypointByTag("WP11");
object oWP12 = GetWaypointByTag("WP12");
object oWP13 = GetWaypointByTag("WP13");
object oWP14 = GetWaypointByTag("WP14");
object oWP15 = GetWaypointByTag("WP15");
object oWP16 = GetWaypointByTag("WP16");
object oWP17 = GetWaypointByTag("WP17");
object oWP18 = GetWaypointByTag("WP18");
object oWP19 = GetWaypointByTag("WP19");
object oWP20 = GetWaypointByTag("WP20");
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
object oDrc1 = GetWaypointByTag("DARC1");
object oDrc2 = GetWaypointByTag("DARC2");
object oDrc3 = GetWaypointByTag("DARC3");
object oDrc4 = GetWaypointByTag("DARC4");
//.......................................................................
object oCm1 = GetWaypointByTag("Camera1");
object oCm2 = GetWaypointByTag("Camera2");
object oCm3 = GetWaypointByTag("Camera3");
    AssignCommand(oNpc1, ClearAllActions());
    AssignCommand(oNpc2, ClearAllActions());
    AssignCommand(oNpc3, ClearAllActions());
    AssignCommand(oNpc4, ClearAllActions());
    AssignCommand(oNpc5, ClearAllActions());
    AssignCommand(oNpc6, ClearAllActions());
    AssignCommand(oNpc7, ClearAllActions());
    AssignCommand(oNpc8, ClearAllActions());
    AssignCommand(oNpc9, ClearAllActions());
    AssignCommand(oNpc10, ClearAllActions());
    AssignCommand(oNpc11, ClearAllActions());
    AssignCommand(oNpc12, ClearAllActions());
    AssignCommand(oNpc13, ClearAllActions());
    AssignCommand(oNpc14, ClearAllActions());
    AssignCommand(oNpc15, ClearAllActions());
    AssignCommand(oNpc16, ClearAllActions());
    AssignCommand(oNpc17, ClearAllActions());
    AssignCommand(oNpc18, ClearAllActions());
    AssignCommand(oNpc19, ClearAllActions());
    AssignCommand(oNpc20, ClearAllActions());
//=============================***SCRIPT***==============================
DelayCommand(0.5, FadeToBlack(oPC, FADE_SPEED_FASTEST));
SetCutsceneMode(oPC);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCutIn, oPC, 20.0);
DelayCommand(2.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
DelayCommand(3.0, AssignCommand(oPC, SetCameraFacing(90.0, 5.0, 79.0, CAMERA_TRANSITION_TYPE_SNAP)));
//.......................................................................
DelayCommand(6.7, AssignCommand(oPC, SetCameraFacing(90.0, 5.0, 79.0, CAMERA_TRANSITION_TYPE_SNAP)));
DelayCommand(8.5, AssignCommand(oPIVI, ActionMoveToObject(oPIVIWP)));
DelayCommand(14.0, AssignCommand(oPIVI, PlayVoiceChat(VOICE_CHAT_GOODBYE)));
DelayCommand(15.0, AssignCommand(oPIVI, ActionCastSpellAtObject(SPELL_HEALING_STING,oPC, METAMAGIC_ANY, 1)));
DelayCommand(16.5, AssignCommand(oPC, ActionJumpToObject(oCm1)));
DelayCommand(17.7, AssignCommand(oPC, SetCameraFacing(90.0, 5.0, 79.0, CAMERA_TRANSITION_TYPE_SNAP)));
//=======================Go Go Go========================================
DelayCommand(20.5, AssignCommand(oNpc1, ActionMoveToObject(oWP1)));
DelayCommand(21.5, AssignCommand(oNpc2, ActionMoveToObject(oWP2)));
DelayCommand(23.5, AssignCommand(oNpc3, ActionMoveToObject(oWP3)));
DelayCommand(24.5, AssignCommand(oNpc4, ActionMoveToObject(oWP4)));
DelayCommand(25.5, AssignCommand(oNpc5, ActionMoveToObject(oWP5)));
DelayCommand(27.5, AssignCommand(oNpc6, ActionMoveToObject(oWP6)));
DelayCommand(28.5, AssignCommand(oNpc7, ActionMoveToObject(oWP7)));
DelayCommand(29.5, AssignCommand(oNpc8, ActionMoveToObject(oWP8)));
DelayCommand(31.5, AssignCommand(oNpc9, ActionMoveToObject(oWP9)));
DelayCommand(33.5, AssignCommand(oNpc10,ActionMoveToObject(oWP10)));
//________________________________________________________________________
DelayCommand(36.5, AssignCommand(oNpc11, ActionMoveToObject(oWP11)));
DelayCommand(37.5, AssignCommand(oNpc12, ActionMoveToObject(oWP12)));
DelayCommand(38.5, AssignCommand(oNpc13, ActionMoveToObject(oWP13)));
DelayCommand(39.5, AssignCommand(oNpc14, ActionMoveToObject(oWP14)));
DelayCommand(40.5, AssignCommand(oNpc15, ActionMoveToObject(oWP15)));
DelayCommand(41.5, AssignCommand(oNpc16, ActionMoveToObject(oWP16)));
DelayCommand(43.5, AssignCommand(oNpc17, ActionMoveToObject(oWP17)));
DelayCommand(45.5, AssignCommand(oNpc18, ActionMoveToObject(oWP18)));
DelayCommand(47.5, AssignCommand(oNpc19, ActionMoveToObject(oWP19)));
DelayCommand(49.5, AssignCommand(oNpc20, ActionMoveToObject(oWP20)));
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
DelayCommand(50.0, AssignCommand(oNpc10, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP, 13.2, 2.0)));
DelayCommand(52.0, AssignCommand(oNpc20, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP, 15.4, 2.0)));
DelayCommand(56.0, AssignCommand(oPIVI, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHING, 12.1, 3.0)));
DelayCommand(57.0, AssignCommand(oPIVI, PlayVoiceChat(VOICE_CHAT_LAUGH)));
DelayCommand(59.5, AssignCommand(oPC, ActionJumpToObject(oCm2)));
DelayCommand(62.6, AssignCommand(oPC, SetCameraFacing(180.0, 5.0, 180.0, CAMERA_TRANSITION_TYPE_SNAP)));
DelayCommand(63.0, SetCutsceneMode(oPC, FALSE));
DelayCommand(64.5, AssignCommand(oPC, ActionJumpToObject(oCm3)));
DelayCommand(65.5,RemoveEffect(oPC,eCutIn));
}

Дело в том что я хотел показать прибытие армии..
Сделал локу с трамплином завышением..
И задумал что первый пойдёт босс, а потом он засмеётся и с обоих сторон армия наваливает..
Но бос не идёт а мигом телепортируется армия вабще в премешку Пк раньше времени появляется, жуть одним словом помогите народ!
Friedrich
QUOTE (Лито @ Feb 28 2005, 20:24)
Прошу помочь скриптом. Чтобы при воскрешении и райз дэде снимался опыт -50 за уровень(как при респауне). Я понимаю что я задавал этот вопрос, но тогда мне сказали как просто снять с игрока определенное кол-во опыта.

Об этом уже говорили где-то...
В общем, самый постой способ, снимать экспу сразу при смерти героя, но онПлеерДес, а не на онРеспавн.

Ноколл,
если скрипт на триггере, то он будет срабатывать многократно, как только на него наступит какой-нибудь НПС.

Добавь
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;

И вешай локалку (или стирай триггер), чтобы скрипт запускался только один раз.
Глубже копать твои скрипты вряд ли кто-нибудь отважится. smile.gif
Лито
Friedrich Я вообще не о том...Вот например: игрок и умер и ждет пока его товарищ не реснет его. И вот когда этот товарищ скастует на труп райз или воскрешение, должно пройти пенальти
Friedrich
А какя разница, когда накладывается пеналти, когда игрок умер, или когда его воскресили? Резултат ведь одинаковый - игрок воскресает получив штраф.

Иначе, нужно переписывать скрипты спелов райз дед (и чего там еще).
Лито
QUOTE
Иначе, нужно переписывать скрипты спелов райз дед

Вот мне ето как раз и нужно!
Кстати вот ты говоришь про то что лучше снять экспу при смерти игрока, но дело упирается в том что у меня нет этого куска скрипта! не просто -300 хр а 300 за 10 левелов = 3к.
Friedrich
Скрипты спеллов, если кто не знает (сам долго не знал) называются nw_s0_* или x*_s0_*. По их названию, в общем, понятно, что за спел.

Кроме-того, биоварами во втором аддоне реализована некая Spell Hook System, позволяющая изменть действия спелов, не переписывая исходные скрипты. Об этом есть инфа в последих релизах "Лексикона":
Home > Lyceum > Tutorial > Advanced Scripting > Lilac Soul - Spell-Hooking
(Как этим пользоваться не знаю - не копался).

QUOTE
Кстати вот ты говоришь про то что лучше снять экспу при смерти игрока, но дело упирается в том что у меня нет этого куска скрипта! не просто -300 хр а 300 за 10 левелов = 3к.

Ага, говорю.
Не понял про какой кусок какого скрипта идет речь. Ичто значит "300 за 10 левелов = 3к", т.е. 300 ХП за каждый левел.
Neverwinter Script Source
//...
int nPenalty = GetHitDice(oPC)*300;
SetXP(GetXP(oPC)-nPenalty);
//...

Еще посмотри, как это дефолтном в onRespawn сделано (там еще добавлена проверка, чтобы игрок не мог потерять уровень).
BIK-M@K
дайте скрипт на уничтожение пк
Nokoll
BIK-M@K
Привет biggrin.gif
У новичок какойто вопрос непонятный уничтожение shok.gif shok.gif ПК как так ну как Хочеш
набери DestoriObject!
BIK-M@K
спасибо
Nokoll
У да ты сдесь прям ну сразу знай болтать сдесь нельзя! nono.gif
Добавлено в [mergetime]1109649177[/mergetime]
QUOTE
Ноколл,
если скрипт на триггере, то он будет срабатывать многократно, как только на него наступит какой-нибудь НПС.

Добавь
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;

И вешай локалку (или стирай триггер), чтобы скрипт запускался только один раз.
Глубже копать твои скрипты вряд ли кто-нибудь отважится.


Скрипт Мой Ставится на онЭнтер Локацыи!
Лито
Требуется сделать проверку, есть ли предмет oHoly в левой руке игрока. Если предмета в руке нет, то скрипт не выполняется.

Neverwinter Script Source
object oPC = GetLastSpellCaster();
    object oHoly = GetObjectByTag("cleric_symbol");
    if (!GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))
    {

     return;

    }

Я конечно понимаю, что вот то, что вверху, все неправильно, но хотелось представить все хоть какие то результаты моей деятельности...
Помогите довести проверку до ума shout.gif
Lexey aka Hawk
QUOTE (Лито @ Mar 2 2005, 11:54)
Требуется сделать проверку, есть ли предмет oHoly в левой руке игрока. Если предмета в руке нет, то скрипт не выполняется.

Neverwinter Script Source
object oPC = GetLastSpellCaster();
    object oHoly = GetObjectByTag("cleric_symbol");
    if (!GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))
    {

     return;

    }

Я конечно понимаю, что вот то, что вверху, все неправильно, но хотелось представить все хоть какие то результаты моей деятельности...
Помогите довести проверку до ума shout.gif

Ну попробуем.

Neverwinter Script Source
void main()
{
    object oPC = GetLastSpellCaster();
    object oHoly = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);

    if (GetTag(oHoly) != "cleric_symbol") return;

}

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