Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
-fenix-
Neverwinter Script Source
void
void BlindPC(object oPC)
{
  effect eBlind =  EffectBlindness();
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBlind, oPC, 7.0);
}

Эффект слепоты на 7 секунд
Neverwinter Script Source
void RemoveBlindPC(object oPC)
{
    effect eBad = GetFirstEffect(oPC);
        while(GetIsEffectValid(eBad)) {
        int nEtype=GetEffectType(eBad);
        if (nEtype == EFFECT_TYPE_BLINDNESS) {
            RemoveEffect(oPC, eBad);
        }
        eBad = GetNextEffect(oPC);
    }
}

Удаление слепоты

Neverwinter Script Source
void main()
{
  object oPC = GetEnteringObject();
  if(GetIsPC(oPC) == TRUE)
  {
    object oWP = GetNearestObjectByTag("wp_bed_in", oPC);
    if(oWP == OBJECT_INVALID)
      AssignCommand(oPC, SpeakString("No wp_bed_in tag nearby."));
    AssignCommand(oPC, ClearAllActions()); // чистим актионы
    AssignCommand(oPC, JumpToObject(oWP)); // прыжок к вейпу
    DelayCommand(1.0, AssignCommand(oPC,  PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 99999.0))); // проигрывание анимации
    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_SLEEP), oPC, 10.0)); // наложение эффекта
    DelayCommand(6.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_SLEEP), oPC, 10.0)); // наложение эффекта
    DelayCommand(2.0, SetCommandable(FALSE, oPC)); // блокируем стек
    //DelayCommand(3.0, BlindPC(oPC)); // наложение еффекта
    //DelayCommand(10.0, RemoveBlindPC(oPC)); // снятие
    DelayCommand(10.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC)); // восстановление хитов
    DelayCommand(10.0, AssignCommand(oPC, SpeakString("You are healed, though you must rest to regain spells.")));
    DelayCommand(9.8, SetCommandable(TRUE, oPC)); // разблокируем стек
  }
}

Если ПС открывает объект, то его должно джампнуть к ближайшему объекту с тегом "wp_bed_in", если такого нет, то пишется "No wp_bed_in tag nearby".
Если находится, то происходит джамп к вейпу, затем ПС проигрывает анимацию и на него два раза накладывается эффект сна. Далее блокируется стек(ПС больше нас не слушается). Можно раскоментировать две строчки и тогда будет наложение эффекта слепоты,а через 7 секунд его снятие. Потом восстанавливаем хиты и говорим "You are healed, though you must rest to regain spells." Затем снова можем управлять героем.
Это, что скрипт на сон? Такое ощущение, что он был вырван от куда-то.
Lex
QUOTE (-fenix- @ Aug 19 2005, 15:42)
Если ПС открывает объект,

если игрок входит в локу, наступает на триггер и тд. (скрип стоит на слоте onEnter)
Vhall
Спасибо good.gif
QUOTE (-fenix- @ Aug 19 2005, 14:42)
Это, что скрипт на сон? Такое ощущение, что он был вырван от куда-то.

Естественно. Так бы я не просил о разъяснении smile.gif

Этот скрипт - из модуля-демонстрашки кроватей, на которых можно лежать (модифицированный вокмеш). Собственные кровати мной уже сделаны - осталась сама скриптовая реализация. На самом деле лежабельность кровати - фича для НПС, которые ложились бы спать на ночь pilot.gif Но, помимо этого, хочется придать такую возможность и персу. Как я слышал, rest возможен ТОЛЬКО при анимации sit. Правду говорят?
Lex
QUOTE (Vhall @ Aug 19 2005, 16:17)
ТОЛЬКО при анимации sit. Правду говорят?

нет, не правду говорят.
Exectrix
Товарищи знатоки. Внимание на экран, вопрос:

Я поставил диалог NPC, члену команды. В стиле "вызывай подкрепление", на что NPC должен вызвать звера, надцатого уровня. А если в тот же день попросить вызвать ещё, NPC посылает меня подальше... думаю в скрипте вызова надо поставить Лок.переменную которая будет обнуляться после определённого времени. Если переменная =1, то меня посылают, если 0, то помогают. Но это догадка, а как это будет выглядеть?
Lex
читай ВиО. Там есть пример, как с локалками работать в случае диалога. У тебя именно такой случай. Только снимать локалку я думаю надо по отдыху.

ВиО = Вопросы и Ответы.. тема чуть ниже.
2_advanced
всем привет.
задача - узнать какой тип дамага нанесен двери - например холодом
вот назрел вопрос bad.gif как?! unsure.gif
в OnDmg: GetDamageDealtByType() возвращает -1 всегда :|
GetMaxHitPoints()-GetCurrentHitPoints() - дает только то, что дверь повреждена :|

остается перебор SpellId() в onSpellCast и проверка оружия, которым бьют О.о помогите нубику
в поиске ни чего не нашел
Lex
GetDamageDealtByType(int)
Determines the amount of damage of a specific type dealt to an object.
Neverwinter Script Source
int GetDamageDealtByType(int nDamageType);


Description
Returns the amount of damage of type nDamageType that has been dealt to the caller. When called from the OnDamaged event, this function returns only the damage which was caused during that event.

nDamageType can be assigned to OR-ed values from the constant group DAMAGE_TYPE_*.

For example, GetDamageDealtByType(DAMAGE_TYPE_PIERCING | DAMAGE_TYPE_SLASHING) would return the damage dealt by piercing and slashing attacks.

The base weapon damage is the base damage delivered by the weapon before any additional types of damage (e.g. fire) have been added. Use DAMAGE_TYPE_BASE_WEAPON, in the 1.64 patch, to get this. Previously, you couldn't get this amount of damage.




Remarks
This only works with EffectDamage, as detailed below.

It must be noted that this function returns -1 if no damage of that type occured.

Because of this, do not use this line, it will never work;

if(!GetDamageDealtByType(DAMAGE_TYPE_PIERCING))

And this line will always be true, as it mearly does the opposite of the above:

if(GetDamageDealtByType(DAMAGE_TYPE_PIERCING))

This would be the correct way:

if(GetDamageDealtByType(DAMAGE_TYPE_PIERCING) != -1)

Or even better, look at the example for a valid way of using this function to see if we were damaged of a cirtain type of damage.



Known Bugs
EffectDamage() now isn't the only thing that affects this function. It can return DAMAGE_TYPE_BASE_WEAPON for any phisical weapon damage done *before* additional enery (fire etc.) damage done by that same weapon.

The issue with DAMAGE_TYPE_SONIC is fixed in 1.64.



Version
1.64
Neverwinter Script Source
Example
// If we had any fire damage applied to us, we will say some catchline.
void main()
{
    if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) >= 1)
    {
        // Obviously a high-strung-evangilist voiceset helps.
        SpeakString("Hey, baby, I'm on FIIIREEEEE!");
    }
}



© LEXicon
DraX
Извините, коль вопрос уже был задан, нету времени смотреть 32 страницы crazy.gif
Кто может объяснить, куда вставлять CustomTalk'ины. Слышал, что они делают много полезных вещей. Объясните, плз.
dumbo
QUOTE (DraX @ Aug 22 2005, 18:39)
Кто может объяснить, куда вставлять CustomTalk'ины

в диалоги и имена плэйсов. вставлять в виде "<CUSTOMnnnn>"(без кавычек), где nnnn - номер этого тукена. ставится из скриптов путем вызова SetCustomToken(nnnn, "строка"). читайте Lexicon, даже без знания английского там можно интуитивно догадаться, что к чему.
Добавлено в [mergetime]1124728780[/mergetime]
да, номера тукенов от 0 до 9 используются игрой, посему не стоит использовать эти номера.
2_advanced
QUOTE
GetDamageDealtByType(int)

издеваетесь? smile.gif
говорю ведь, что вешал на дверь (не кричей насиловать) - всегда возвращает -1 black eye.gif
DraX
2_advanced
QUOTE
Returns the amount of damage of type nDamageType that has been dealt to the caller.

Тут же все подробно описано. dntknw.gif Lex взял описание напрямую из Лексикона.
Если не понятно, объясню. Эта функция должна выводить кол-во урона, нанесенного определенным типом повреждения. Т.е. если ты хочешь получить тип повреждения, тебе надо включить смекалку. Этой функцией ты просто узнаешь кол-во урона, нанесенного одним типом. Тебе нужен скрипт, типа:
Neverwinter Script Source
int XP_GetDamageType()
{
  int TYPE;

  if(GetDamageDealtByType(DAMAGE_TYPE_ACID) >= 1)
      TYPE = 1;

  else if(GetDamageDealtByType(DAMAGE_TYPE_COLD) >= 1)
      TYPE = 2;

  else if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) >= 1)
      TYPE = 3;

  .......................

  return TYPE;
}


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

ЗЫ: А -1 она у тебя выводит, потому что не был причинен урон описанного тобой типа (если ты его вообще описывал smile.gif )
-fenix-
QUOTE (DraX @ Aug 23 2005, 11:01)
Этой функцией ты просто узнаешь кол-во урона, нанесенного одним типом.

В том-то и дело, что не узнаешь!

Вот что нашел.
OnDamaged
Creature, door, or placeable object has lost hit points, apart from instant death.

GetDamageDealtByType will only return damage amounts for EffectDamage, and so no phisical attack damage will be picked up.

Для НПС все получается, а вот для дверей и объектов и правдо -1 выдает

НА OnDamaged НПС это катит, а на OnDamaged скажем Армоире нет.
Neverwinter Script Source
void main()
{
    if(GetDamageDealtByType(DAMAGE_TYPE_FIRE) >= 5)
    {
        // Obviously a high-strung-evangilist voiceset helps.
        SpeakString("Hey, baby, I'm on FIIIREEEEE!");
    }
}
DraX
Извиняюсь, если вопрос уже был задан. Очень Инет тормозит.
Вопрос, вобщем, не совсем мой. Но мне тоже будет интересно узнать. 1. Каким образом можно повысить уровень хэнча (с помощью скриптов, конечно smile.gif ) и 2. как сделать так, чтобы при повышении уровня хозяина, повышался уровень хэнча. Лично я использовал для этой цели 3 различных скрипта, которые просто обязаны были сработать. Но не сработали. Помогите, кто знает.

DikMorris ©
Lex
1
Neverwinter Script Source
// If successfull it returns the level the creature now is, or 0 if it fails.
// If you want to give them a different level (ie: Give a Fighter a level of Wizard)
//    you can specify that in the nClass.
// However, if you specify a class to which the creature no package specified,
//  they will use the default package for that class for their levelup choices.
//  (ie: no Barbarian Savage/Wizard Divination combinations)
// If you turn on bReadyAllSpells, all memorized spells will be ready to cast without resting.
// if nPackage is PACKAGE_INVALID then it will use the starting package assigned to that class or just the class package
int LevelUpHenchman(object oCreature, int nClass = CLASS_TYPE_INVALID, int bReadyAllSpells = FALSE, int nPackage = PACKAGE_INVALID)

(с) Lexicon
юзай это на игрока и будет тебе счастье.

2
на скрипт onPCLevelUp в свойствах модуля используй функцию, что написана выше на хенче.
DraX
Все перепробовал, а это забыл! lol.gif lol.gif
Спасибо, большое. Теперь повышается, родной.
Извините за СПАМ, просто радости сдержать немогу. Столько недель, и вот!..
DEM
ВОт мне очень интересно, почему многие на форуме про вопрос:"Как зделать так, что бы НЕПИСЬ или ПС сели на объект?", отвечают большими скриптами?
Мне кажеться что этот нанмого легче smile.gif
Neverwinter Script Source
void main()
{
  object oChair = OBJECT_SELF;
  if (!GetIsObjectValid(GetSittingCreature(OBJECT_SELF))) {
      AssignCommand(GetLastUsedBy(), ActionSit(oChair));
  }
}


Кажеться так...
Добавлено в [mergetime]1125090539[/mergetime]
Скажите, как зделать так, что бы выбирался один эффект из 3 (предположим). И что бы выбранный эффект был временным...
2_advanced
не
QUOTE
void main()
{
  object oChair = OBJECT_SELF;
  if (!GetIsObjectValid(GetSittingCreature(OBJECT_SELF))) {
      AssignCommand(GetLastUsedBy(), ActionSit(oChair));
  }
}

т.к.
1 при выходе сидячего чара из игры место накрывается
2 у коротышек 5ая точка находится внутри больших сидячих мест, что выглядит стремно
3 что-то еще было ;Р

мой вариант усаживалки - создание невидимого объекта, на который игрок садится.. ну там с проверками всякими и т.п..
в 4 утра скрипт найти не смогу drag.gif

добавлено %
если из под седячего выбить стул, то он в позе ахтунг еще довольно долгое время будет ;Р а с невидимого объекта можно спокойненько встать
ломающиеся стулья в гостиннице - для звереющих вышибал buba.gif
-fenix-
DEM, посмотри этот скрипт в Скриптах для новичков, там все написано.
-fenix-
У меня такой вопрос.
Делая свой отдых, я захотел, чтобы ПС после него проигрывал анимацию, сделать это оказалось легко, на REST_EVENTTYPE_REST_FINISHED и REST_EVENTTYPE_REST_CANCELLED это ставется без проблем. Потом по совету, я решил сделать анимацию перед отдыхом и вот это у меня ни как не получается sad.gif
Как я понял, стандартный отдых: усаживание ПС на пятую точку, полосочка, восстановление хитов и снятие эффектов - это прописанно в движке или где-нить глубоко. И это не меняемо, это остается и будет всегда.
Когда мы пишем скрипт в OnPlayerRest, мы просто можем добавить некоторые мелочи связанные с игроком: он скажет фразу, затемним экран... и все, что угодно с ним не связанным: создание под ним подстилки и костерчика рядом...
Если с игроком делать, что-то серьезное, то либо это не случается, либо отдых отменяется, допустим анимация.
Если делать через ActionPlayAnimation, то она соответственно ставется в стек, и отдых выполняется первым, поэтому сама анимация не выполняется. Если делать через PlayAnimation, то она в стек не ставется и в результате отменяет отдых, точнее он заканчивается не успевая начаться. Наложение анимации не происходит, хоть стандартная анимация и LOOPING, видимо там все слито во едино.
Пробовал делать ,что-то типо этого
Neverwinter Script Source
if (iRestType == REST_EVENTTYPE_REST_STARTED)

    if (!GetLocalInt(OBJECT_SELF, "rr") == 1)
        {
        AssignCommand(oPC, ActionDoCommand(ClearAllActions()));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 4.0));
        ActionDoCommand(SetLocalInt(OBJECT_SELF, "rr", 1));
        AssignCommand(oPC, ActionRest());
        }

Но выяснилось, что при вызове ActionRest из ActionRest игра виснет намертво, спасает только перезагрузка. После 7-10 перезагрузок и всевозможных, прешедших в голову переборов, эта идея то же испарилась.
Создается впечатление, что добавить что-то серьезное в REST_EVENTTYPE_REST_STARTED не возможно.
Пожалуйста, помогите, кто знает.
Lex
хм.. а как насчет вызова ActionRest НЕ в onPCRest?
К примеру в ПЛ отдых сделан через диалог. Те нажимая кнопку мы начинаем диалог (там отдых прерывается сразу) и там выбираем, как отдохнуть (или просто подождать) и после этого собственно запускается ActionRest (если он нужен)
Вот в таком варианте, например, добавить анимацию ДО отдыха имхо вполне реально...
другое дело, что диалог, но и тут можно вроде обойти этот момент, сделав просто ExecuteScript() вместо диалога.
там будет анимация и ActionRest. Чтобы не было цикла, просто сделай проверку локалки, что анимация уже была (в диалоговом режиме то же самое, там проверяется локалка, которая хранит количество часов, что мы хотим поспать)

Удачи.
Friedrich
QUOTE (-fenix- @ Aug 29 2005, 16:15)
Как я понял, стандартный отдых: усаживание ПС на пятую точку, полосочка, восстановление хитов и снятие эффектов - это прописанно в движке или где-нить глубоко. И это не меняемо, это остается и будет всегда.

Но можно сделать свою анимацию и ForceRest(object) использывать, по-мойму так .) Тока, тогда отдых, конечно, без полосочки будет.

QUOTE (-fenix- @ Aug 29 2005, 16:15)
Если делать через ActionPlayAnimation, то она соответственно ставется в стек, и отдых выполняется первым, поэтому сама анимация не выполняется.

ActionRest is added to the front of the action queue. If you want to add it as a normal action, you can call ActionDoCommand(ActionRest()); -Lexicon.
Так что юзай:

AssignCommand(oPC, ActionPlayAnimation(...));
AssignCommand(oPC, ActionDoCommand(ActionRest()));

Иногда бывает полезно в Лексикон заглядывать... biggrin.gif
-fenix-
Lex, спасибо good.gif
QUOTE (Friedrich @ Aug 29 2005, 22:47)
Но можно сделать свою анимацию и ForceRest(object) использывать, по-мойму так .) Тока, тогда отдых, конечно, без полосочки будет.

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

QUOTE (Friedrich @ Aug 29 2005, 22:47)
ActionRest is added to the front of the action queue. If you want to add it as a normal action, you can call ActionDoCommand(ActionRest()); -Lexicon. Так что юзай:

AssignCommand(oPC, ActionPlayAnimation(...)); AssignCommand(oPC, ActionDoCommand(ActionRest()));

Иногда бывает полезно в Лексикон заглядывать...

Чета последнее время меня все просят Лексикон почитать? smile.gif
Давно взял за правило это делать, особенно когда не знакомые функции.smile.gif
Вот только скажи, что это мне дает?
Анимация ставется в стек, а ActionRest нет, в результате отдых происходит первым и анимация не проигрывается. Может я что-то и не так сказал, но пробовать я это пробовал
Neverwinter Script Source
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 4.0));
AssignCommand(oPC, ActionDoCommand(ActionRest()));

Проирсходит, что я и говорил!
2_advanced
тут


Alian REXis
Когда-то спрашивал, решил повторить. Как отследить попадание некого существа по PC с целью повреждения доспеха? Для NPC это просто, ставя скрипт на OnDamaged, а для PC что-то не получается, вернее мыслей нет.
Lex
QUOTE (Alian REXis @ Aug 31 2005, 23:47)
Как отследить попадание некого существа по PC с целью повреждения доспеха?

как это "с целью повреждения доспеха" ???

Вообще вариант у меня только 1: на всю одежку вешать OnHit - CastSpell - Unic... как-то так.. те уникальная обработка при попадании по доспеху.. Минусы есть
- кушает ресурсы
- игрок может быть и без доспеха
2_advanced
шкуру нацеплять.. и на шкуру вешать уже OnHit - CastSpell drag.gif

Neverwinter Script Source
// инициализация шкуры =P
void sr_InitializePcSkin()
{
    struct SR_INFO_S sr = sr_GetSubRace(GetLocalInt(OBJECT_SELF, "SUBRACE"));

    object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR);

    if(oSkin == OBJECT_INVALID)
        return;

    craft_ParsePropStrForObject(oSkin, sr.skin);

    SendMessageToPC(OBJECT_SELF, "DEBUG: subrace "+sr.view);
}
// нацепление шкуры..
object oSkin = CreateItemOnObject("rau_emptyskin", oPC);
AssignCommand(oPC, ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR)); // + проверки в модульном onEquip tongue.gif
DelayCommand(1.0f, AssignCommand(oPC, sr_InitializePcSkin()));

цкрипт на спелл:
Neverwinter Script Source
void main()
{
object oPC = OBJECT_SELF; // кого ударили
object oItem = GetSpellCastItem(); // шкура =P
object oTarget = GetSpellTargetObject(); // кто ударил
}


кстати.. почему оно будет кушать ресурсы? в модуле выполняются тысячами скрипты АИ мобов.. и норм.
не умрет сервант от маленького скриптика (хотя хрен знает unsure.gif файтеры любят дрыном махать)
Lex
QUOTE (2_advanced @ Sep 1 2005, 00:09)
шкуру нацеплять.. и на шкуру вешать уже OnHit - CastSpell :drag

ты сам это пробовал, у тебя работало?
у меня нет.. sad.gif
Добавлено в [mergetime]1125521403[/mergetime]
Neverwinter Script Source
if (nEvent ==X2_ITEM_EVENT_ONHITCAST)
    {
    oItem  =  GetSpellCastItem();                  // The item casting triggering this spellscript
    object oSpellOrigin = OBJECT_SELF ;
    object oTarget = GetSpellTargetObject();
    oPC = OBJECT_SELF;

    AssignCommand(oPC,SpeakString(GetName(oTarget)));


ничего не говорит
Добавлено в [mergetime]1125521571[/mergetime]
и что кстати там в инициализации происходит? Выдача на шкурку свойств субрассы?
2_advanced
у меня - да smile.gif субрасса.. кроме как шкурами пока еще ни чего лучше не придумал..

Neverwinter Script Source
// в spells.2da
1605  <сабж>  16777296  ir_craft    E    T  vs  0x00  0x3A  <цкрипт>  **** ****  ****  **** **** ****  1 1500 hand ****  **** ****  ****  ****  ****  out 0 ****  ****    ****  ****  0      ****  ****  ****  **** ****  ****  0  ****  ****  ****  ****  ****  ****  ****  4  ****  0    0  **** 0  ****  ****  **** 0           

// в iprp_onhitspell.2da
180  <сабж>  16777296  1605        0.5

void sr_InitializePcSkin()
{
    object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR);

    if(oSkin == OBJECT_INVALID)
        return;

    AddItemProperty(DURATION_TYPE_PERMANENT, ItemPropertyOnHitCastSpell(180, 1), oSkin);
}

всё работает.
Lex
аа..хех, я не знал, что тут надо в 2да прописывать уникальный спелл.. Сенькс. Сейчас у себя проверю..


А тогда X2_ITEM_EVENT_ONHITCAST для чего используется?
2_advanced
биоварами для чего-нибудь неизведомого smile.gif
когда они этот евент сами скриптом откуда-то создают
Lex
я думал как раз для уникального ОнХитКаст..
Neverwinter Script Source
// this code runs when the item has the OnHitCastSpell: Unique power property

Его и ставил в свойства шкурки, но этот кусок скрипта не запускался у меня и я забил.

Еще раз сенькс за идею со своим спелом, страно, что сам не дополз до нее. smile.gif
Добавлено в [mergetime]1125523776[/mergetime]
А вот с обычными вещами (доспехами и одежкой) этот эвент запускается.... как собсна я и говорил Алину
2_advanced
Neverwinter Script Source
//дык это nw_s3_actitem01
SignalEvent(GetModule(), EventActivateItem(oItem, lLocal, oTarget));

//или X2_S3_OnHitCast:

if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE)
{
      SetUserDefinedItemEventNumber(X2_ITEM_EVENT_ONHITCAST);
      int nRet =  ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oItem),OBJECT_SELF);
      if (nRet == X2_EXECUTE_SCRIPT_END)
      {
          return;
      }
}

имхо лучше что-то своё использовать smile.gif а то биовары извращенцы.. и оно действительно ресурсы будет жрать
Lex
QUOTE (2_advanced @ Sep 1 2005, 01:38)
EventActivateItem

нене, активация вещи это не то... это у айтема SpellCast - ActivateItem

а вот X2_S3_OnHitCast вроде как вызывает для вещи тот самый эвент.. но вот для шкурок не хочет это работать smile.gif

CODE

  WARNING!
  This item property can be a major performance hog when used
  extensively in a multi player module. Especially in higher
  levels, with each player having multiple attacks, having numerous
  of OnHitCastSpell items in your module this can be a problem.

я про это говорил..

Хотя Алину не актуально, у него сингл.
Alian REXis
QUOTE (Lex @ Sep 1 2005, 00:44)
Хотя Алину не актуально, у него сингл.

Да нет, у меня существа пудинги, они по Monsters Manual повреждают оружие и доспехи. Оружие я сделал. На объекте айтема у меня счетчик стоит. Типа при попадании он инкрементируется до некоторого лимита, потом доспех должен быть у ничтожен, плюс между этим должно происходить уменьшение армор класса. Это все понятно как сделать. Вот куда вешать я не совсем понял.
Lex
Alian REXis, так все же описал 2_advanced.
1. в spells.2da после всех стандартных строк добавить свою (по хорошему там надо до 1500 строки-пустышки забить.. юзай 2да эдиторы какой-нить)
CODE

1501  НАЗВАНИЕ    IDизТЛК    ИКОНКА    E    T  vs  0x00  0x3A  ИмяСкриптаОбработчика  **** ****  ****  **** **** ****  1 1500 hand ****  **** ****  ****  ****  ****  out 0 ****  ****    ****  ****  0      ****  ****  ****  **** ****  ****  0  ****  ****  ****  ****  ****  ****  ****  4  ****  0    0  **** 0  ****  ****  **** 0

а в iprp_onhitspell.2da (его в папке sourse не найти, надо вскрывать бики эксплорером)
CODE

180  НАЗВАНИЕ  IDизТЛК  1501     0.5

2. одеть на игрока шкурку, у которой будет свойство OnHitCast - а тут то, как ты назвал свой спелл (не НАЗВАНИЕ тут будет а текст, что лежит в ТЛК под номером IDизТЛК).
3. сделать в игре скрипт ИмяСкриптаОбработчика и там делать, что тебе надо.


Если какие проблемы, могу тебе сделать демку, там только скрипт впиши свой. smile.gif


2_advanced
IDизТЛК = 0x1000000 (16777216) + № в кастомном tlk crazy.gif

биовары зарезервировали для себя? smile.gif
многовато, блин
Alian REXis
Lex, все понятно. Только смысл в том, как можно идентифицировать объект, который по тебе попал? Ведь нужно это только при попадании пудинга.
2_advanced
шкура:
Neverwinter Script Source
void main()
{
object oPC = OBJECT_SELF; // кого ударили
object oItem = GetSpellCastItem(); // шкура =P
object oTarget = GetSpellTargetObject(); // кто ударил
// пушка в этом случае = GetItemInSlot(oTarget, левая/правая рука tongue.gif)
}

пушка:
Neverwinter Script Source
void main()
{
object oPC = OBJECT_SELF; // кто ударил
object oItem = GetSpellCastItem(); // пушка =P
object oTarget = GetSpellTargetObject(); // кого ударили
// на когти им вешать..
}

-fenix-
Можно скриптом узнать время, на которое был наложен эффект?
2_advanced
все. что на ум пришло:

Neverwinter Script Source
const float F_SLEEP = 3.0f; // частота обновления =Р


при наложении эффекта:
Neverwinter Script Source
ApplyEffetToObj(objTarget, ....., fDelay);
if( fDelay > F_SLEEP)
{
  SetLocalFloat(objTarget, "_FL_DELAY", fDelay);
  AssignCommand(objTarget, DelayCommand(F_SLEEP, f_DecValue())wink.gif;
}

Neverwinter Script Source
void f_DecValue() // каждые 3 секунды будет убавлять на 3 =Р
{
  float fDelay = GetLocalFloat(object_self, "_FL_DELAY") - F_SLEEP;
  SetLocalFloat(objTarget, "_FL_DELAY", fDelay);

  if(fDelay > 0.0f) // перезапуск..
     DelayCommand(F_SLEEP, f_DecValue());
}

ну и получать то, что нужно:
Neverwinter Script Source
float f_GetValue(object oTarget) // >0 еще существует. <=0 уже слетело. // время в секундах..
{
  return GetLocalFloat(oTarget, "_FL_DELAY");
}

для обозначения различных *эффектов* использовать что-то типа LocalFloat("_FL_DELAY_" + sName);..
вот такой изврат beta.gif тулсета под рукой нет. мож ошибся

блин smile.gif вчитался в вопрос.. и понял, что что-то не по теме понаписал тут swoon.gif
в общем можно просто вешать сотни переменных при наложении эффекта О.о но это изврат
биовары ведь не придумали что-то типа GetEffectTime(effect); ? drag.gif
Aiwan
QUOTE (Vakhal @ Sep 7 2005, 21:30)
Скажите пожалуйста, как сделать переход в другой модуль? Например триггером.


Neverwinter Script Source
void main()
{
  object oPC = GetEnteringObject(); // Кто вошел на триггер
  if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") || GetIsInCombat(oPC))
        return; // Если не игрок, или уже наступал, или идет бой то возврат
  SetLocalInt(OBJECT_SELF, "TRIGGER", TRUE);
  ActionDoCommand(DoSinglePlayerAutoSave()); // Автосейв, на случай пожарный
  ActionDoCommand(StartNewModule("имя_модуля")); // НО БЕЗ РАСШИРЕНИЯ! *.mod
}
-fenix-
Ни кто не знает, как правельно, полностью отменить отдых у оруженосца, чтобы герой отдыхал, а оруженосец нет.
А то у меня белибердистика тварится! Написал AssignCommand(oHench, ClearAllActions()); и SetCommandable(FALSE, oHench); он отменяется, но при совершении REST_EVENTTYPE_REST_CANCELLED он опять может спокойно отдыхать. Чета похимичел и стало все нормально, лег спать. Просыпаюсь, включаю, опять все по старому и временами отдых вообще не отменяется. Химичество заключалось в раставлении ClearAllActions в разные места, это влияло, но как-то все это странно!
Да и вообще у меня сюрприз на сюрпризе, одно время
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_STRENGTH, 1), oHench, 300.0);
отказывалось накладываться, накладывалось только через
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_STRENGTH, 1), GetHenchman(oPC), 300.0);
потом само прошло. Все эти непонятности выводят из себя и отнимают кучу времени, помогите ПЛИЗЗ, я наверное чего-то не понимаю.
Через OnRest делать не могу
QUOTE

Up to version 1.60, this didn't ever ever work. As of 1.60, it does fire.

Я первый раз в темке 3DSMax и мы написал, сотрите кто-нить и извините.
-fenix-
Видимо ответа на вышенаписанный вопрос нет!? Лично я такого не нашел, или единственный ответ: "Поставь нормальную версию и делай, как люди делают и не морочь голову"? Ну не могу я сейчас перейти на новую версию sad.gif

Пользуюсь случаем не много оффтопа.
Если есть желающие помочь в тесте с версией НВН выше 1.60, напишите пожалуйста в ПМ. А я пошел переделывать с использованием OnRest.
Alian REXis
Я все о той же шкурке. Все сделал как вы сказали, но все дело в том, что у меня почему-то когда надет любой обычный доспех, шкурка игнорируется. Т.е. события на ней не срабатывают. Когда обычный доспех снимаешь, т.е. остаешься голый, то все работает нормально. Идея моя пролетает...
Lex
Не.. ты че-то путаешь.. у меня в броне все работало.
Alian REXis
QUOTE (Lex @ Sep 13 2005, 15:21)
Не.. ты че-то путаешь.. у меня в броне все работало.

Фиг знает, но когда броня одета обработчик закла ваще не работает. dntknw.gif Когда снимаю броню, все нормально пашет. Ничего не могу понять.
_kaa_
QUOTE (Alian REXis @ Sep 13 2005, 16:09)
Фиг знает, но когда броня одета обработчик закла ваще не работает. dntknw.gif Когда снимаю броню, все нормально пашет. Ничего не могу понять.

Мне это напоминает ситуацию с работой функции, возращающей оружие. есть есть оружие - возращает его. если нет - возращает ... наручни. если и их нет - тогда ничего не возращает smile.gif
Lex
QUOTE (Alian REXis @ Sep 13 2005, 17:09)
Фиг знает, но когда броня одета обработчик закла ваще не работает. dntknw.gif Когда снимаю броню, все нормально пашет. Ничего не могу понять.

хм.. глянул еще раз.. так и есть... плохо очень.

Вешай этот спел на весь армор тогда..хмы..
Alian REXis
QUOTE (Lex @ Sep 13 2005, 16:36)
Вешай этот спел на весь армор тогда..хмы..

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

Добавлено в [mergetime]1126624427[/mergetime]
Хотя болт! На хенчманов это действовать не будет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.