Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
Lorendroll
Если зомби всегда будут лежать на одних и тех же местах (или может это убитые на случайном месте персонажи?) то имхо, легче всего нарисовать тригер со скриптом на OnEnter.
Если нет, можно убить чара на спауне (не забыв поставить нон-дестроибл) а на хертбите организовать подобие персепшена: как увидел игрока лечиться и делаться хостайлом (при мертвом персонаже персепшен работать вроде не будет). Кстати можно сделать так чтобы зомби не просто вскакивал, а поднимался с анимацией. Точно не знаю, но для этого похоже нужно его заставить либо "использовать" самого себя либо идти на локацию где он лежал. Надо выяснять эксперементально smile.gif
StalkerDtN
Lorendroll
QUOTE
Если нет, можно убить чара на спауне (не забыв поставить нон-дестроибл) а на хертбите организовать подобие персепшена


Не смотря на то, что тушка зомби не исчезла, формально для движка зомби мертв, а потому не один эвент с него не сработает, в тч и ХБ.
Имхо удобнее в данной ситуации все же триггер, соответственно всю анимацию туда же...какую - на вкус автора модуля, я бы предложил туже что и при закле воскрешения. smile.gif
Zirrex
Есть один прекрасный скрипт, который создает скелетов из сложенных черепов. Работает не на основе триггера, а проверяет, есть ли рядом игрок, если есть, пересоздать объект. Также можно и тут. Лежат, к примеру, мертвые зомби (каламбур; куда уж мертвее), а проходящий мимо игрок их поднимает. Учуяли свежую кровь и душу smile.gif

самим зомби сделать в момент появления анимацию. Я так создавал Таннари. Вначале кидал на них эффект нулевого объекта, потом пересоздавал через 1-2 секунды в нормальном облике, чтобы монстры не тупили, а сразу шли в бой. В нашем случае это нужно, чтобы зомби положить на землю, а потом через анимацию их плавно поднять. Но необходимо так подгадать время исчезновения трупов, чтобы это не казалось пропущенными кадрами в плохом кино.
Nuprahtor
Спасибо вам всем.Придется ставить на триггер.
helvene
QUOTE(Zirrex @ Mar 13 2006, 10:26) [snapback]72517[/snapback]
Есть один прекрасный скрипт, который создает скелетов из сложенных черепов. Работает не на основе триггера, а проверяет, есть ли рядом игрок, если есть, пересоздать объект. Также можно и тут. Лежат, к примеру, мертвые зомби (каламбур; куда уж мертвее), а проходящий мимо игрок их поднимает. Учуяли свежую кровь и душу

Хм-хм... более того, есть такой объект среди стандартных, во вкладке Battlefield... даже два - Zombie Corpse и одна из Pile of Sculls. Они ровненько это и делают.

(скрипты там назначены на hb)
Артём
КТО ЗНАЕТ ГДЕ МОЖНО НАЙТИ ЛЕКСИКОН РУССКОЙ ВЕРСИИ?
-fenix-
QUOTE(Артём @ Mar 13 2006, 22:07) [snapback]72578[/snapback]
КТО ЗНАЕТ ГДЕ МОЖНО НАЙТИ ЛЕКСИКОН РУССКОЙ ВЕРСИИ?

НИ КТО НЕ ЗНАЕТ - НЕТ ЕГО!!! biggrin.gif

Есть на сайте перевод некоторых статей, а так - промт или сократ в руки и вперед. Я так лексикон и читаю, вроде успешно.
Артём
То-что на сайте я давно скачал.Попробую абайтися переводчиком!
Zirrex
Артём, подобные вещи редко переводят, если только не нужно их пускать в большой тираж и знакомить множество людей с их тематикой. Но если человека интересует данный предмет, он сделает все, чтобы его изучить. Мне хватает английской версии, да и все познается экспериментальным путем.
gennady
QUOTE(mamuc @ Feb 27 2006, 09:33) [snapback]71143[/snapback]
Вот кусок скрипта официантки.
Нужно, чтобы она шла так, как нужно, и при этом не зависала и не прерывалась.
Попробовал делать блокировку/разблокировку очереди - официантка подбегает и ничего не делает.
(Скрипт висит на OnConversation)


Нужно отделить мух от котлет. Не все команды станут в очередь, а тем более проверки идут мгновенно. Попробуй повесить подобный скрипт на ХБ официантки. Написан по твой идеи, для 4 персов. Блокировка на весь маршрут, но в конце можно поговорить с персом.
NSS
void GoToObject(object oTarget, object oPC)
{
AssignCommand(oPC, ActionMoveToObject(oTarget, FALSE));
AssignCommand(oPC, ActionSpeakString("Получите ваш заказ."));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_READ, 1.0, 3.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0));
}
void WalkToObject(object oTarget, object oPC, vector vFace)
{
AssignCommand(oTarget, ClearAllActions());
AssignCommand(oTarget, SetFacingPoint(vFace));
DelayCommand(3.0, AssignCommand(oTarget, ActionSpeakString("Спасибо!")));
DelayCommand(5.0, AssignCommand(oTarget, ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK, 1.0, 5.0)));
}
void main()
{
object oPC = OBJECT_SELF;
object oTarget = GetNearestObjectByTag("POSIT_1");
object oTarget2 = GetNearestObjectByTag("POSIT_2");
object oTarget3 = GetNearestObjectByTag("HOZYAIN");
vector vFace = GetPosition(oPC);
//================  МАРШРУТ ====================================================
if(GetLocalInt(OBJECT_SELF, "MARSH") != 1)
{
SetLocalInt(oPC,"MARSH",1);
AssignCommand(OBJECT_SELF, ClearAllActions());
DelayCommand(0.3, SetCommandable(FALSE, oPC)); // заблокировать очередь
GoToObject(oTarget, oPC);
GoToObject(oTarget2, oPC);
AssignCommand(oPC, ActionMoveToObject(oTarget3, FALSE));
AssignCommand(oPC, ActionSpeakString("Получите выручку. Ох, и жаркий денек!"));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 3.0));
DelayCommand(30.1,SetCommandable(TRUE,oPC)); // разблокировать очередь
DelayCommand(30.5, AssignCommand(oPC, SpeakString("Ох, жара!")));
DelayCommand(40.0,SetLocalInt(OBJECT_SELF,"MARSH",FALSE)); // длительность маршрута
}
//---------------- проверки каждый раунд ---------------------------------------
if (GetDistanceBetween(oTarget, oPC) < 3.0)
  WalkToObject(oTarget, oPC, vFace);
if (GetDistanceBetween(oTarget2, oPC) < 3.0)
  WalkToObject(oTarget2, oPC, vFace);
if (GetDistanceBetween(oTarget3, oPC) < 4.0)
   {
switch (Random(3)+1)
{
case 1:
AssignCommand(oPC, SpeakString("Ох, и жаркий денек!"));
AssignCommand(oTarget3, SpeakString("Давай работай!"));
AssignCommand(oTarget3, SetFacingPoint(vFace));
break;
case 2:
AssignCommand(oPC, SpeakString("Давай пива и рыбу, есть еще заказ."));
AssignCommand(oTarget3, SpeakString("Бойко торгуем!"));
AssignCommand(oTarget3, SetFacingPoint(vFace));
break;
case 3:
AssignCommand(oPC, SpeakString("Ноги уже не держат..."));
AssignCommand(oTarget3, SpeakString("Вперед и с песней!"));
AssignCommand(oTarget3, SetFacingPoint(vFace));
break;
}
}
}
Артём
У меня вопрос.Как в он спаун одного непися, сделать анимацыю другого непися?
К примеру:После того как непись поздаровался (Аним преветствия) другой непись поклонился (Аним поклон)?
-fenix-
Артём, тебе ведь уже писали.
NSS
object oNPC = OBJECT_SELF;//это тот на ком стоит скрипт
object oNPC1 = GetOBjectByTag("ТАГ");//это тот другой

//непись, нак отором стоит скрипт, что-то делает.
//2.0 - время, через которое нужно выполнить действие. Ставь скока там надо.
//AssignCommand - дать команду oNPC.
//ActionPlayAnimation - команда проиграть анимацию
DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ТУТ_НУЖНАЯ _АНИМАЦИЯ)));
//другая непись что-то делает
//2.0 - время, через которое нужно выполнить действие. Ставь скока там надо.
//AssignCommand - дать команду oNPC.
//ActionPlayAnimation - команда проиграть анимацию
DelayCommand(3.0, AssignCommand(oNPC1, ActionPlayAnimation(ТУТ_НУЖНАЯ _АНИМАЦИЯ)));


Читай на форуме тему по анимации! ТУТ
Артём
Феникс я написал так как ты сказал.Но всеровно анимацыя второго неиграит.
NSS
void main()
{
object oNPC = OBJECT_SELF;
object oNPC1 = GetOBjectByTag("GAD_3");

DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));;
DelayCommand(0.5, SpeakString("?? ??… ??????? ????????, ??? ???? !"));
DelayCommand(PlaySound("vs_favhen5m_say")wink3.gif;

DelayCommand(3.0, AssignCommand(oNPC1, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));
object oNPC=GetObjectByTag("GAD_3");
DelayCommand(3.5, AssignCommand(oNPC, SpeakString("? ??????? ??? ?? ?????? ????????!")));

DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));
DelayCommand(6.5, SpeakString("?? ??? ?????? ????? !"));
DelayCommand(PlaySound("vs_favhen5m_yes")wink3.gif;
}
[MoF]Darth_Nick
QUOTE
DelayCommand(PlaySound("vs_favhen5m_say");

- неправельно

QUOTE
object oNPC = OBJECT_SELF;
...
object oNPC=GetObjectByTag("GAD_3");

- неправельно

QUOTE
object oNPC1 = GetOBjectByTag("GAD_3");

- неправельно

научись смотреть на ошибки компилятора..

1. DelayCommand, 1й аргумент всегда время через которое действие будет воспроизводится!
2. нельзя так делать..если хочеш переменой задать другое значение, то тип нельзя указывать( object oPC = GetEnteringObject(); ... oPC=GetExitingObject(); к примеру)
3. компилятор различает регистр..( GETENTERINGOBJECT() - неправельно, GetEnteringObject() - правельно.... )... GetObjectByTag надо...

З.Ы.
QUOTE
object oNPC = OBJECT_SELF;
необязательно

QUOTE

object oNPC = OBJECT_SELF;
object oNPC1 = GetOBjectByTag("GAD_3");
..
object oNPC=GetObjectByTag("GAD_3");


брет...
Lex
QUOTE(Артём @ Mar 19 2006, 22:32) [snapback]73339[/snapback]
Феникс я написал так как ты сказал.Но всеровно анимацыя второго неиграит.

а ЭТО скомпилировалось? shok.gif
-fenix-
Артём, вот так все компилируется, но явно не работает правильно, ибо разобраться кто у тебя когда что делает не представляется возможным - это сам правь.
NSS
void main()
{
object oNPC = OBJECT_SELF;
object oNPC1 = GetObjectByTag("GAD_3");
object oNPC2 = GetObjectByTag("GAD_4");

DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));
DelayCommand(0.5, SpeakString("?? ??… ??????? ????????, ??? ???? !"));
DelayCommand(2.0, PlaySound("vs_favhen5m_say"));

DelayCommand(3.0, AssignCommand(oNPC1, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));
DelayCommand(3.5, AssignCommand(oNPC, SpeakString("? ??????? ??? ?? ?????? ????????!")));

DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));
DelayCommand(6.5, SpeakString("?? ??? ?????? ????? !"));
DelayCommand(2.0, PlaySound("vs_favhen5m_yes"));
}


Пара пояснений:

1) object oNPC1 = GetObjectByTag("GAD_3");
object - тип переменной, вданном случае указывает, что в данной переменной хранится объект.
oNPC1 - имя переменной с префиксом. Имя - вещь уникальная, двух переменных с одним именем быть не может. Точнее может, но это совсем не надо, ибо последняя заменяет первую.
У тебя есть такая ошибка
NSS
object oNPC = OBJECT_SELF;
object oNPC=GetObjectByTag("GAD_3");

GetObjectByTag("GAD_3") - функция, которая "помещает" в переменную объект с тегом GAD_3.
И такая ошибка
NSS
object oNPC1 = GetObjectByTag("GAD_3");
object oNPC=GetObjectByTag("GAD_3");

2) DelayCommand(2.0, PlaySound("vs_favhen5m_yes"));
Надо указывать время, через которое будет выполнена команда. Я поставил 2.0 - ставь скока надо.
3) Следи за кол-вом скобок - слева и справа их должно быть одинаково и за кол-вом ";" - должна быть одна в строке.

Прочитай темку, на которую я дал тебе ссылку, а еще вот ЭТУ, ЭТУ и ЭТУ.
Артём
Теперь я понял свои глупые ошибки.
Спосибо!
Nashman
Привет,
Такая вот проблемка, нужно сделать невидимую дверь... Но невидимая до тех пор, пока о ней не розкажет НПС. Надеюсь, что это можно сделать скриптами...
[MoF]Darth_Nick
вешаеш на дверь cutscene_invis, потом убираеш
NSS
effect eVis = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
object oDoor = GetObjectByTag(""); // or OBJECT_SELF
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eVis,oDoor);

потом к примеру
NSS
object oDoor = GetObjectByTag(""); // or OBJECT_SELF
RemoveEffect(oDoor,GetFirstEffect(oDoor));
-fenix-
QUOTE(Nashman @ Mar 20 2006, 16:24) [snapback]73434[/snapback]
Такая вот проблемка, нужно сделать невидимую дверь... Но невидимая до тех пор, пока о ней не розкажет НПС. Надеюсь, что это можно сделать скриптами...

Какая дверь?
Ну вообще можно создавать в нужном месте из палитры секретную дверь(эт которая вместе с рамой), вот и все. Так пойдет?
Артём
У меня как всегда очередной глупый вопрос! Какой нежно написать скрипт чтобы убить нужных мне неписей, желательно с каким-нибудь эффектом.



У меня как всегда очередной глупый вопрос! Какой нежно написать скрипт чтобы убить нужных мне неписей, желательно с каким-нибудь эффектом.

[MoF]Darth_Nick
хыть так:
NSS
object oNPC = GetObjectByTag("some"); // можно и Nearest
effect eEff = EffectDeath();
ApplyEffectToObject(DURATION_TYPE_INSTANT,eEff ,oNPC);


еффект аналогично, но eEff будет равен EffectVisualEffect(константа VFX_*)
от еффекта зависит еще его продолжительность DURATION_TYPE_*

еще полезная ф-ция:
NSS
// Link the two supplied effects, returning eChildEffect as a child of
// eParentEffect.
// Note: When applying linked effects if the target is immune to all valid
// effects all other effects will be removed as well. This means that if you
// apply a visual effect and a silence effect (in a link) and the target is
// immune to the silence effect that the visual effect will get removed as well.
// Visual Effects are not considered "valid" effects for the purposes of
// determining if an effect will be removed or not and as such should never be
// packaged *only* with other visual effects in a link.
effect EffectLinkEffects(effect eChildEffect, effect eParentEffect )
Артём
Понятно
Nashman
QUOTE
Ну вообще можно создавать в нужном месте из палитры секретную дверь(эт которая вместе с рамой), вот и все. Так пойдет
А как ею управлять? ТОесть загружается обл. и двери нету, а после разговора с НПС дверь есть?
Zirrex
Nashman, по окончании разговора делается скриптовая проверка, есть ли нужный объект в области, если нет, создать его там, где необходимо. В момент перехода через такую дверь, поставить скрипт на действие OnUsed, чтобы удалить дверь.
Артём
У МЕНЯ ВОПРОС.Напишыте пожалуйста скрипт эффекта невидемости каторый накладывается на игрока и действует постоянно
-fenix-
NSS
void main()
{
object oTarget = GetFirstPC();//игрок
effect eInvisibility = EffectInvisibility(INVISIBILITY_TYPE_NORMAL);//эффект невидимости

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInvisibility, oTarget);//непосредственно наложение эффекта
// DURATION_TYPE_PERMANENT - эффект будет действовать постоянно
}

Этот эффект невидимости снимется если начнется бой. Чтобы такого не было нужно INVISIBILITY_TYPE_NORMAL заменить на INVISIBILITY_TYPE_IMPROVED, а чтобы еще и иконка не отображалась, что на чаре невидимость(или я не так понял?), поставь INVISIBILITY_TYPE_DARKNESS.
Артём
Понятно.
[MoF]Darth_Nick
пара фиксоф(может пригодится кому...)(хотя не тестировал..лень)

NSS
// 1 из десятка способоф убийства в ноу пвп.. просто сбить экшен атаки
void dn_NoPvPE(object oPC)
{
    if(GetCurrentAction(oPC) == ACTION_ATTACKOBJECT)
        DelayCommand(1.0,AssignCommand(oPC,ClearAllActions(TRUE)));
}


NSS
// ну эт думаю ясно...
object oPC = GetEnteringObject();

if(GetXP(oPC) == 0)
{
SetXP(oPC,1);
BootPC(oPC);
}


NSS
// сбить Байл тайд при заходе
void dn_BTFix(object oPC)
{
    if(GetHasSpellEffect(SPELL_BATTLETIDE,oPC))
        RemoveSpellEffects(SPELL_BATTLETIDE,oPC,oPC);
}


NSS
// должно пахать..проверять лень
void dn_dmhookFix(object oPC)
{
    object oItem=GetFirstItemInInventory(oPC);
    int i;
    int nGold = GetGold(oPC);
    if(GetXP(oPC) == 0)
    {
        while(GetIsObjectValid(oItem))
        {
            DestroyObject(oItem);
            oItem=GetNextItemInInventory(oPC);
        }

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

        for(i=0; i<18; i++)
        {
            object oEquipItem = GetItemInSlot(i,oPC);
            if(GetIsObjectValid(oEquipItem))
                DestroyObject(oEquipItem);
        }

        SendMessageToPC(oPC,"сцуко-читор! пишем в лог и бутаем");
        WriteTimestampedLogEntry("ахтуцнк! сцукочитор: "+GetPCPlayerName(oPC)+"; IP: "+GetPCIPAddress(oPC)+"; Public Key:"+GetPCPublicCDKey(oPC));
        DelayCommand(1.0,BootPC(oPC));
    }
}


ну дальше тестово можно..
стойку ДД переписывать надо
стандартный крафт лучше убрать(если СЕР вдвойне советую убрать)
при одевании шмота вешать дикрис атаки и спел фелчар(скрипт стер случайно..заного писать лень)
монкам поставить имун к спид дикризу и т.д.(слишком много способов активировать багу)(лучше фит вырубить еще)
смеху наташи(ничего личного) поставить чек на алаймент помойму надо
спелл хуком проверять контрл спелл и ставить ПЦ паралайз или другой изврат
пересмотреть полиморф с рассой дварфа
убрать шмотье с экстра турнингом(или пофиксить, когда пал одевает)
если есть афтофолоу на шарде либо убрать, либо запретить юз на земле
двери стараться заменять переходами между ними
открыть скрипт x0_s0_light, закоментить\etc вешанье постоянного еффекта на палку..
скрипт x2_s2_ruin, поставить чек на локу
скрипт x2_s2_hellball, поставить чек на локу
ну поправить половина нвновских спеллов это думаю ясно
чекать апиренс входящего, если надо изменять\бутить
чекать акк входящего, особенно несколько первых символов
вызов балора запретить читать в ноу пвп
грабли ПМа тоже запретить в ноу пвп\или убрать
вроде еще когда кастуется шш и дез вард, дез вард при диспеле не слетает(хтя хз)
клир сам себя убить еще может без спасов дыркой(имплозией)
щас уже не помню, была еще зрень выкидывания одеваемого нон дроп айтема..

еще осталось, но либо лень называть, либо нету желания оглашать общественность, либо они скриптами не фиксятцо
скрипты эти писал очень давно(когда бы нубом(хотя помойму им и остался smile.gif )), так что могут быть ошибки и т.д... переправлять лень

© я
credits: 2_advanced (грех не написать), axistown(начало багаюза), cormyrean(продолжение и собственно конец)

еще чет хотел...забыл..пойду спать )
Zirrex
Четвертый скрипт, это не фикс, а стандартный скрипт раздевания только что созданного персонажа. Вот только зачем бутить персонажа, если у него и так все отбирается?

Второй скрипт работает ровно до второго захода.

Из того, что написано ниже скриптов, понял несколько строк, остальные из-за дурацкого жаргона очень трудно разобрать. Зачем что-то сюда писать, если это может быть не всем понятно? Хотя если язык пострадал, это навсегда, проверено временем.

По первому скрипту, самый распространенный способ убийства. Причем работает до сих пор. Странно что это не исправили. Хотя чего проще, во время перехода очищать очередь действий.

QUOTE

грабли ПМа тоже запретить в ноу пвп\или убрать
вроде еще когда кастуется шш и дез вард, дез вард при диспеле не слетает(хтя хз)
при одевании шмота вешать дикрис атаки и спел фелчар(скрипт стер случайно..заного писать лень)

Вообще не понял о чем речь идет.

З.Ы. Новичком и остался, сюдя по языку. Ничего личного.
[MoF]Darth_Nick
QUOTE
Вообще не понял о чем речь идет.

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

QUOTE
Четвертый скрипт, это не фикс, а стандартный скрипт раздевания только что созданного персонажа. Вот только зачем бутить персонажа, если у него и так все отбирается?

ну-ну, ты лучше название скрипта прочти..хотя тебе это мало что скажет..

QUOTE
Зачем что-то сюда писать, если это может быть не всем понятно?

кому надо - поймет, я старался по меньше ошибок делать...всё таки в 7 утра не каждый асилит столько писать

QUOTE
самый распространенный способ убийства

их там 10, и все они распространенные

QUOTE
З.Ы. Новичком и остался, сюдя по языку. Ничего личного.

ты просто попробуй понять вообще о чем речь идет...а потом суди
готов поспорить у тебя и четверть этого не фикшена
и вообще..не нравится не читай =Р
Lex
QUOTE
пара фиксоф(может пригодится кому...)(хотя не тестировал..лень)

1. может пригодится.
2. не тестировал - плохо. Если что выкладываешь, всетаки проверяй smile.gif
3. Zirrex, [MoF]Darth_Nick, взаимные претензии в приват. smile.gif Тут ни-ни.
Sharklike
[MoF]Darth_Nick, спасибо за список багов. Можешь подробнее описать косяк со стойкой ДД?

P.S. Касательно 4-го скрипта. Если с помощью хука на шард заводится чар с ненулевой экспой, тогда что?
[MoF]Darth_Nick
2Lex дык, кому надо и кто понял суть, сам напишет фикс если понадобится
2Sharklike в ней бегать и атаковать можно
скрипта стойки нету, только забавный комментарий
4) попробуй завести такого smile.gif
Sharklike
QUOTE
Darth_Nick' date='Mar 22 2006, 20:48' post='73689']
4) попробуй завести такого smile.gif

Да заводил. Вообще я спросил, потому что мне интересно стало - может тот хук, который видел ты и который видел я работают по-разному?
QUOTE
Darth_Nick' date='Mar 22 2006, 20:48' post='73689']
не поможет не ключ, не айпи

Ты имеешь ввиду, что все таки можно войти любым чаром с акка, название которого ассоциируется с ключом, сохраненным на сервере и не известным злоумышленнику? Или ты про то, что можно просто войти чужой на акк и посмотреть чаров?
2_advanced
NSS
void main()
{
    object oPC = GetEnteringObject();
    if(GetIsDM(oPC)) // дм
    {
//...проверка по ключам/IP/спец итему и т.п.. - для извращенцев
    }
    else
    if(GetPlotFlag(oPC)) // может злобный ДМ в квесте повесит плот на игрока, а тот вылетит/перезайдет
    {
        SetPlotFlag(oPC, 0);
        BootPC(oPC);
    }
    else
    if(!GetXP(oPC)) // новый чар или тупящий нуб с софтом
    {
        SetXP(oPC, 1);
        BootPC(oPC);
    }
    else // плеер..
    {
    }
}
prankster2.gif

QUOTE
поставить чек на локу
не на локу!
[MoF]Darth_Nick
да там по разному можно, главное суть

Ссылка, по которой вы попали на эту страницу является «мертвой» или удаленной.
2_advanced
NSS
// в не_пвп все ПЦ дружелюбны blum3.gif
    object oPC = OBJECT_SELF;
    object oTarget = GetSpellTargetObject();
    if(GetIsReactionTypeFriendly(oPC, oTarget))
        return;
Nashman
Привет,
Обясните плс. (долбался долго...честно), как сделать невидимую дверь, я уже спрашивал и по способу, какой мне посоветовали у меня sad.gif. Нужно так, вы заходите в локу, разговариваете с НПС, а после вы уже видите дверь.....
2_advanced
создавать на вейпоинте объект двери после определенных действий (или варианта в диалоге) игрока

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

примеры:
nw_o2_detectdoor - древний вариант
x2_**_secretdoor - ХоА вариант с хертбитами..
лучше написать что-то своё если для шарда делается
gennady
QUOTE(2_advanced @ Mar 24 2006, 18:01) [snapback]73968[/snapback]
Привет,
Обясните плс. (долбался долго...честно), как сделать невидимую дверь, я уже спрашивал и по способу, какой мне посоветовали у меня . Нужно так, вы заходите в локу, разговариваете с НПС, а после вы уже видите дверь.....

В диалоге вызови потайную дверь из стандартной палитры скриптом…, тогда точка перемещения будет иметь тег ”DST_DOOR_SEC_1”.
NSS
void main()
{
object oWP = GetWaypointByTag("WP_XXX");// точка вызова двери
location Loc = GetLocation(oWP);
object oDoor = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_sec_door1", Loc, TRUE, "DOOR_SEC_1");  // Объект дверь
}

Можно сделать и свою синьку двери, но нужно повесить на слот OnUsed скрипт перемещения (x0_o2_use_wdoor), или можно взять скрипт Айва из базы скриптов для новичков, или можешь воспользоваться моей версией. Если хочешь использовать секретный триггер, то вот краткая справка:
Секретный объект
Триггер содержит в названии ResRef объкта, который появится.
Точка, где появится объект LOC_+Тег триггера.
Тег точки перемещения DST_+Тег триггера.
NSS
//:://////////////////////////////////////////////
/*
     УНИВЕРСАЛЬНЫЙ СКРИПТ ПЕРЕМЕЩЕНИЙ ГЕРОЯ
*/

//:://////////////////////////////////////////////

void JumpFirstPC(object oWP)
{
object oPC = GetFirstPC();
object oSP = GetHenchman(oPC);
object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION,oPC);
object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oPC);
object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED,oPC);
object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oPC);
   AssignCommand(oPC, ClearAllActions());
   AssignCommand(oSP, ClearAllActions());
   AssignCommand(oAnimal, ClearAllActions());
   AssignCommand(oFamiliar, ClearAllActions());
   AssignCommand(oDominated, ClearAllActions());
   AssignCommand(oSummoned, ClearAllActions());
AssignCommand(oPC, JumpToObject(oWP));
AssignCommand(oSP, JumpToObject(oWP));
AssignCommand(oAnimal, JumpToObject(oWP));
AssignCommand(oFamiliar, JumpToObject(oWP));
AssignCommand(oDominated, JumpToObject(oWP));
AssignCommand(oSummoned, JumpToObject(oWP));
}

void main()
{
object oPC = GetFirstPC();
object oSP = GetHenchman(oPC);
object oPoint = GetWaypointByTag("TP_" + GetTag(OBJECT_SELF));
  if (!(GetLocked(OBJECT_SELF) == TRUE)) // если замок открыт
   {
    DelayCommand(0.1, ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN));
    DelayCommand(2.6, JumpFirstPC(oPoint)); // перемещаем всю компанию
    DelayCommand(6.6, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE));
   }
  else
  {
    AssignCommand(OBJECT_SELF, SpeakString("Замок закрыт"));
    int nSkill = 20 + GetSkillRank(SKILL_OPEN_LOCK, oSP);
    if (nSkill >= GetLockUnlockDC(OBJECT_SELF)) // если спутник может открыть замок
    AssignCommand(oSP, SpeakString("Попробуй открыть, не получитсЯ Я сам открою!"));
    else
    AssignCommand(oSP, SpeakString("Мне не осилить этот замок…"));
   }
}
// помещать в слот OnUsed OnEnter OnClick OnAreaTransitionClick
//Перемещение героя и спутников для размещаемых объектов
Aiwan
Вот код скрипта. Вешаешь на триггер на OnEnter, на триггере вешаешь локальные стринги PLC_ResRef == ресрефу твоей создаваемой двери. Можешь серетный шкаф даже, любой предмет PLC_ и когда РС наступит на триггер, то произойдет проверка его ДС в случае успеха, выдаст ему дверь или еще что. Можешь наложить на твою дверь все что надо скриптом, напиши скрипт и присвой на триггер стрингом RUN_SCRIPT. Имя триггера - стринг над РС. Типа, О! Я нашел дверь! Так же хеньчманы боолтают и указывают что надо тут быть внимательным.
NSS
//:://////////////////////////////////////////////
//:: OnEnter  am_ten_searh_plc
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  ПРИ УСПЕШНОЙ ПРОВЕРКЕ СКИЛА ПОИСК, СОЗДАЕМ PLC.

ResRef создаваемого объекта равен локальному
стрингу "PLC_ResRef". Создаем рандомно на
случайной локации или специально на месте объекта
"SECRET_PLC_"+[Таг Триггера]
Поле триггера KeyTag - сложность проверки скилла:
DC_EASY = 0; DC_MEDIUM = 1; DC_HARD = 2;
Локалка "ACTION_MODE_DETECT" устанавливает свойство
триггера, он сработает только когда РС в режиме
обнаружения.

*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 02.01.2006 С новым Годом!
//:://///////////////////////////////////////////
#include "nw_i0_tool"

/*  Функция рандомной локации, написана Баалом. */
location CreateRandomLocation(object oTarget, float fRadius, int bOnLine = TRUE)
{
  if(!bOnLine)
  fRadius=IntToFloat(Random(FloatToInt(fRadius)));

  float iXO=VectorMagnitude(GetPosition(oTarget))*cos(VectorToAngle(GetPosition(oTarget)));
  float iYO=VectorMagnitude(GetPosition(oTarget))*sin(VectorToAngle(GetPosition(oTarget)));
  float fRndomAngle=IntToFloat(Random(360));
  location lNEW=Location(GetArea(oTarget),Vector(iXO+fRadius*cos(fRndomAngle),iYO+fRadius*sin(fRndomAngle)),360.0);
  return lNEW;
}

void main()
{
  object oPC = GetEnteringObject();
  object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
  object oSelf = OBJECT_SELF;
  string sMessage = GetName(oSelf); // Сообщение при обнаружении предмета
  string sHench1 = GetLocalString(oSelf, "HENCHMAN_string_1");
  string sHench2 = GetLocalString(oSelf, "HENCHMAN_string_2");
  string sHench3 = GetLocalString(oSelf, "HENCHMAN_string_3");
  string sHench4 = GetLocalString(oSelf, "HENCHMAN_string_4");
  string sHench5 = GetLocalString(oSelf, "HENCHMAN_string_5");
  int iDC = StringToInt(GetLockKeyTag(oSelf)); // Сложность проверки скилла

  if(!GetIsPC(oPC)||GetIsInCombat(oPC)||GetLocalInt(oSelf, "DEACTIVATED"))
      return;

  if(!GetActionMode(oPC, ACTION_MODE_DETECT) && GetLocalInt(oSelf, "ACTION_MODE_DETECT"))
  {
    if (GetIsObjectValid(oHench)) // Хеньчман нас предупреждает, что тут что-то есть
    {
    if(!GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
    {
      SetLocalInt(oSelf, "HENCHMAN_SPEAK", TRUE);
      DelayCommand(0.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_SEARCH)));
      DelayCommand(0.21, AssignCommand(oHench, SpeakString(sHench1)));
    }
    }
    if(GetGameDifficulty() == GAME_DIFFICULTY_EASY || !GetLocalInt(GetModule(), "DEBAG_PC"))
      SendMessageToPC(oPC, "<cу  >ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.</c>");
    return;
  }

  SetLocalInt(oSelf, "DEACTIVATED", TRUE);
  string sResRef = GetLocalString(oSelf, "PLC_ResRef");  // Объект создаваемый
  float f = GetLocalFloat(oSelf, "DISTANCE"); // Расстояние от РС для находки
  if(f==0.0) f = 5.0; // Если нет, то по умолчанию 5 метров радиус
  location lLoc = CreateRandomLocation(oPC, f);
  object oPlc = GetNearestObjectByTag("SECRET_PLC_"+GetTag(oSelf)); // Если конкретное место
  string sNewTag;
  if(oPlc != OBJECT_INVALID)
  {
      lLoc = GetLocation(oPlc);
      sNewTag = GetTag(oPlc);
  }

  if(AutoDC(iDC, SKILL_SEARCH, oPC))
    {
    if(sResRef != "")
    {
        effect eEffect = EffectVisualEffect(VFX_FNF_DISPEL);
        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eEffect, lLoc, 4.0);
        object oNewPlc = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, lLoc,0,sNewTag);
        string sRunScript = GetLocalString(oSelf, "RUN_SCRIPT");
        if(sRunScript!="")
        DelayCommand(2.0, ExecuteScript(sRunScript, oNewPlc));
        AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_LOOKHERE));
        if(sMessage == "Объект + [Текст над РС]") sMessage = "";
        AssignCommand(oPC, SpeakString(sMessage));
        SendMessageToPC(oPC, "<c у >Вы обнаружили секретный объект.</c>");
        AssignCommand(oPC, ClearAllActions());
        AssignCommand(oPC, ActionDoCommand(SetFacingPoint(GetPositionFromLocation(lLoc))));
        DelayCommand(0.3, SetCommandable(FALSE, oPC));
        DelayCommand(2.0, SetCommandable(TRUE, oPC));

        if (GetIsObjectValid(oHench))
        {
          AssignCommand(oHench, ClearAllActions());
          AssignCommand(oHench, SetFacingPoint(GetPositionFromLocation(lLoc)));

          if(GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
          {
            DelayCommand(3.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_THANKS)));
            DelayCommand(3.21, AssignCommand(oHench, SpeakString(sHench2)));
          }
          else
            {
              DelayCommand(3.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_YES)));
              DelayCommand(3.21, AssignCommand(oHench, SpeakString(sHench3)));
            }
      }
    }
    else
        {
          // Если мы забыли написать ResRef предметов, то ошибка
          SendMessageToPC(oPC, "<cу  >ОШИБКА!</c> Не могу создать объект. Нет ResRef-а!");
        }
    }
    else
        {
          if(GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
          {
              AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_CANTDO));
              AssignCommand(oPC, SpeakString("Ты ошибаешься. Я ничего не нахожу."));
              DelayCommand(3.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_YES)));
              DelayCommand(3.21, AssignCommand(oHench, SpeakString(sHench4)));
              DelayCommand(6.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_BADIDEA)));
              DelayCommand(6.21, AssignCommand(oHench, SpeakString(sHench5)));

          }
        }
}
2_advanced
NSS
const string _DOOR_RES = "x0_sec_tdoor1";

void chk()
{
    location lWP = GetLocalLocation(OBJECT_SELF, "_DOOR");

    if(GetDistanceBetweenLocations(lWP, GetLocation(OBJECT_SELF)) < 1.0f)
    {
        object oDoor = CreateObject(OBJECT_TYPE_PLACEABLE, _DOOR_RES, lWP);
        ActionResumeConversation(); // возобновляет диалог с того места, где остановился
    }
    else
    {
        if(GetCurrentAction() != ACTION_MOVETOPOINT)
            ActionMoveToLocation(lWP);

        DelayCommand(3.0f, chk());
    }
}

void main()
{
    object oWP = GetWaypointByTag(GetTag(OBJECT_SELF)); // тег вейпоинта = тегу НПС

    if(GetIsObjectValid(oWP))
    {
        ActionPauseConversation(); // прервать диалог до момента создания двери

        SetLocalLocation(OBJECT_SELF, "_DOOR", GetLocation(oWP));
        // можно возвращать НПС на место после диалога..
        SetLocalLocation(OBJECT_SELF, "_ORIG", GetLocation(OBJECT_SELF));

        AssignCommand(OBJECT_SELF, chk());
    }
    else
    {
        // ...
    }
}
Nashman
Привет,
Впринципе, почти понял. Пока только один вопрос:
- после содания этой двери, мне нужно на onAreaTransitionClick скрипт поставить.

Я подумал так, мне нужно создать свою дверь мастером с этим самым скриптом, а потом именно ее вызывать? Извините за идиотизм :-\
Lex
QUOTE(Nashman @ Mar 28 2006, 01:52) [snapback]74726[/snapback]
после содания этой двери, мне нужно на onAreaTransitionClick скрипт поставить.

нет, у этой двери нет такой штуки (areatransition это та голубенькая фигулина, на которую кликаешь при переходе меж дверьми). Так что у этой двери на onUse

Дверь сделать, чтобы в палитре была.
скриптом ее в нужном месте создавать.
Nashman
Привет,
Лекс, ты уж меня извени, но у меня есть такая штука, сначала идет она.
За ответ спасибо, эжжто то, что мне не хватало, тоесть проэкту smile.gif..
Aiwan
Скрипт на такую дверь есть в разделе скриптов новичков.
RoHaN
Превед Кросавчеги. Я вернулся , ну вы чо не рады что ли . Ну и ладно ! У меня вопрос , а не подскажет мне кто-нибудь как сделать так чтобы монстрятник при появлении в локе летел к месту где находится твой перс .
Aiwan
Ставь точку спавна в том месте где перс может появиться. Или рядом.
Lanilor
Всем Превед!
У меня вопрос: как присвоить нпс'у новый диалог с помощью скрипта. Фишка в том, что старый диалог весьма велик и изобилует скриптами. Новый по размерам не меньше, и тоже с кучей скриптов(20-30 штук). Ставить лок. пременную на все ветки диалога - можно замучиться. Искал что-то вроде "setdialog" - ничего не нашел.
Помогите!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.