Помощь - Поиск - Пользователи - Календарь
Полная версия: Одиночный вопрос
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights 2 Obsidian Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Vanes
случайно обнаружил, что и в игре, и на сервере замечательно загружается модуль из папки...
кто нить заметил существенные различия кроме того, что если модуль состоит из одного файла, а не из папки, то он сохраняется в разы дольше....
Oranj
Если сохранять в модуль, то шанс ошибки выше, чем если сохранять в папку smile.gif
Griffon
Очень полезный ресурс.
Edelas
Скажите пожалуйста, никто не сталкивался с таким глюком: в некоторый момент проигрывания модуля после диалога перестают работать внутренние окна. вообще. то есть не открываются диалоги, сундуки, кнопка Escape тоже не работает, как и все внутренние вещи типа инвентаря и дневника (чего уж говорить, даже выпадающий список в левом нижнем углу не работает). Пока не уловил закономерности, в какой момент это происходит. Можете подсказать что-нибудь?
Aiwan
Скрипты часом не содержат строки типа закрыть стек команд у РС или поставить его в режим сцен?
Edelas
Нет) я весьма размыто представляю, что это есть такое, и ничем не пользовался, кроме стандартных диалоговых скриптов...
была одна догадка. При создании персонажа ему надо задать голос (если не задать, будет как ассимара). Есть там голоса, в тулсете не проигрывающиеся. Так вот, после диалога с такими товарищами обычно это происходит. Поменял всем нахрен звуковые схемы на работающие. По-моему, в следующий раз это фигня произошла, когда я с кем-то подряд 2 раза говорил... что за ерунда?!! sad.gif

P. S. простите, не сдержался. Играю сейчас в Gothic III, клянусь мамой, она глючит меньше, чем этот чертов Тулсет!!
Aiwan
Не стоит пинять на тулсет... тем более там есть твой код, даже одна строка это уже много smile.gif

Добавлено через 51 секунду

Смотри на скрипты диалогов. Наверняка. где-нибудь допустил грубую ошибку и незамечаешь. Такео бывало и не раз и не только с тобой.
Edelas
я не писал скриптов! вообще никаких! только условия, действия и пометки квеста. все. там ошибиться особо негде. кроме того, это случается в рандомном порядке после разговора с разными персонажами.
Lex
действие какое поставил? диалог писал с нуля или раскопировал стандартный? других неизвестных тебе скриптов там нету?
Aiwan
Да. ты мог где нибудь поставить метку, что бы диалог начинался с катсцены, а фразу врубить без продолжения. В итоге ты кликнул на НПС тот брякнул что то и все. Катсцена. smile.gif
Edelas
Диалог писал с нуля. скриптов других нету. скрипты задействованы - дать предмет, забрать, сделать запись, проверить запись, сделать проверку скилов, уровня, класса, а так же во вкладке note quest-запись.... не знаю, где ставить такую метку. и разве катсцена исключает возможность нажать эскейп? кстати, если попробовать задержать правой кнопкой мыши на персе (ну, чтобы вызвать список действий - атаковать, поговорить, обокрасть и т. д) игра вылетает.
Buzzard
Подскажите пожалуйста как работать со статическими камерами (static camera из blueprintов), как во время сцены переключатся между ними, какие функции с ними работают и т.д.?
Griffon
После установки камеры, меняешь ее тэг.

Управление камерой:
шифт + мышь - по оси Z;
шифт + контрл + мышь - по оси X;
шифт + альт + мышь по оси Y.

Все остальные действия со статическими камерами выполняются в редакторе диалогов - закладка строки (Node) -> установки камеры (camera settings).
Buzzard
И еще, как мне заставить NPC шагать по вейпоинтам (уже готовому маршруту)?
mamuc
скриптом..
о том как делать скриптовые сценки подробно можно прочитать здесь:
http://www.city-of-masters.ru/forums/index.php?showtopic=123
Buzzard
Подскажите как сделать чтобы PC лежал во время диалога (так как это делает команда
ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT)) до нужной реплики после которой он должен вставать?
Aiwan
В диалоге, чистишь у РС все акции, заставляешь произвести акцию ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT))
закрываешь стек команд. После нужной реплики открываешь стек команд, чистишь все акции и он встанет.
Buzzard
(небольшое замечание)Мне кажется что термин "стек" не совсем правильный так как акции выполняются втой последовательности как указано в скрипте, правильнее в таком случае "очередь", или я ошибаюсь? unknw.gif
Leon PRO
стек = "очередь" biggrin.gif
Aiwan
Buzzard, ошибаешься. У любого объекта есть стэк команд, туда вписываются команды, а вот в каком порядке они записываются это и есть очередь. Что бы очередь не сбилась стэк команд закрывают. Очередь легко сбивается извне, так как количество и источники посылаемых команд могут быть разные.
azathoth
Цитата(Buzzard @ Oct 31 2007, 14:42) *
Мне кажется что термин "стек" не совсем правильный так как акции выполняются втой последовательности как указано в скрипте, правильнее в таком случае "очередь", или я ошибаюсь?

дейтствительно, правильнее FIFO очередью называть, но тут её принято называть "стек" (наверное, чтобы серьёзнее звучало), перечь не смей -- или начнётся очередной холивар.
virusman
Цитата(Buzzard @ Oct 31 2007, 14:42) *
(небольшое замечание)Мне кажется что термин "стек" не совсем правильный так как акции выполняются втой последовательности как указано в скрипте, правильнее в таком случае "очередь", или я ошибаюсь? unknw.gif
Именно так.
За рубежом НВНщики правильно называют - action queue (очередь действий).
У программеров есть и такое словосочетание, как command stack. Реально это очередь, но называется стеком. Все знают, что это неправильно, поэтому "command stack" употребляют нечасто (предпочитая хотя бы "command queue"). В отношении НВНа это словосочетание за рубежом вообще не используется. У нас используется.
Lex
Цитата(azathoth @ Oct 31 2007, 17:39) *
перечь не смей -- или начнётся очередной холивар.

да просто уже привыкли все. smile.gif
Aiwan
Цитата(virusman @ Oct 31 2007, 19:48) *
За рубежом НВНщики правильно называют - action queue (очередь действий).

Объект NWN в стеке команд может содержать 75 аций. Их можно назвать очередю действий. Можно их объединить, а можно пониимать по разному. Я никому не навязываю свою точку зрения. Но я не думаю, что то, как я описал задачу написано неверно.
Neverwinter Script Source

// Set whether oTarget action stack can be modified
void SetCommandable( int bCommandable, object oTarget=OBJECT_SELF )


Посомтрите Лексикон, его писал явно кодер:

Neverwinter Script Source

GetCommandable( object ) // Determines if the object in question can have actions added to it action Queue.

int GetCommandable(
    object oTarget = OBJECT_SELF
);

// Description: Returns TRUE if oTarget action stack can be modified.


Добавлено через 3 минуты 32 секунды

п.с. И введите в поиске Лексикона слово stack prankster2.gif
Buzzard
Ну я думаю с этим разберусь. У меня следующий вопрос: правильно бидет выглядеть
ExecuteScript("SomeScript(10)",oPC); Запускается только если SomeScript без параметров
(ExecuteScript("SomeScript"))
Lex
Цитата(Aiwan @ Oct 31 2007, 19:26) *
Объект NWN в стеке команд может содержать 75 аций. Их можно назвать очередю действий. Можно их объединить, а можно пониимать по разному.

Айв, тут дело банально в придирках. Есть FIFO, есть FILO. FIFO - очередь, FILO - стек. Устоявшиеся программерские определения. в НВН - FIFO, но почему-то называется стек. Стороннего программиста может поначалу ввести в заблуждение, но в принципе быстро приходит понимание, что это всетаки FIFO. В общем не нужно заморачивать себе этим голову smile.gif
Aiwan
Цитата(Buzzard @ Oct 31 2007, 22:52) *
ExecuteScript("SomeScript(10)",oPC); Запускается только если SomeScript без параметров(ExecuteScript("SomeScript"))

Правильно так:
Neverwinter Script Source


      ExecuteScript( "имя_скрипта", oPC );

Lex
ни.. парнишка спрашивает про запуск скрипта с параметром. Я не знаю, как с этим дело обстоит в НВН2, но в НВН1 так было делать низя (с параметром). Можно только так, как Айв написал.
Но параметрические скрипты там точно есть - диалоговые как минимум.
Aiwan
Если бы еще описание было задачи, тогда другое дело. МОжно и стрингами поиграть, сложить, и прочее.
azathoth
ExecuteScript вызывает скрипт без параметров, "ExecuteScript("SomeScript(10)",oPC);" будет искать скрипт под названием "SomeScript(10)", и запустить его без всяких параметров, Conditional скрипты тоже проверять нельзя. Если же нужно передать какую-то инфу в скрипт, можешь установить куда-нибудь нужные локальные переменные, а в запускаемом скрипте их проверять.
Buzzard
У меня вопрос к начальству. Тут побывал на вашем wiki и наткнулся на статью по созданию плагинов для тулсета (на англиском), если можно то дайте пожалуйста ссылку на источник (там пропушены строки нужного мне кода).
Armor Darks
не помню что именно на вики за статья по плагинам лежит, но по идее ее брали отсюда http://nwvault.ign.com/View.php?view=NWN2P...Detail&id=1
DarkDeivel
Всем респект, левел ап.

Нужна срочно помощ вот народ что у мя такое.

Я как тока моудль начну создавать так я поставил стены, дома, деревья. А как начинаю тестить все стоит но у меня перс проходит через все стены, через дереьвя уороче перс неможет не в чо упереться кроме конца локации ((( срочно нужна помощ ПОМАГИТЕ!!!
Aiwan
Очертить все надо триггерами и бэйк надо делать. В википедии подробно расписано, почитай по ссылке ввреху форума.
DarkDeivel
Скажите пожалуйста как мне сделать чтобы когда я умирал появлялась таблица типа реснуться в городе ну например Локация 1 Вейпоинт 1 и чтобы я потерял либо еси мона 10% опыта либо 500 опыта. Оч нужнл помогите плиз ну мона без потери опыта но тока чтобы я воскрешался в городе smile.gif
Leon PRO
Цитата(DarkDeivel @ Nov 12 2007, 13:37) *
Скажите пожалуйста как мне сделать чтобы когда я умирал появлялась таблица типа реснуться в городе ну например Локация 1 Вейпоинт 1 и чтобы я потерял либо еси мона 10% опыта либо 500 опыта. Оч нужнл помогите плиз ну мона без потери опыта но тока чтобы я воскрешался в городе smile.gif


Атеперьпожалуйстатожесамоетолькосознакамипрепинани
- читатьневозможно=\
DarkDeivel
КАк мне сделать так! чтобы когда персонаж умирает появалалсь окно с кнопкой воскреситься в городе и при нажатии этой кнопки персонаж появляется в городе (имя города например: сity), но за это снималось 500 опыта??? ну можно чтоб опыт не снимался.

Ioann
Есть ли возможность редактировать заклинания? Хотелось вызывать несколько существ (например, поднять мертвеца, а вторым применением закла поднять уже второго , а не заменить первого вызванного). Может скриптами? Или что-то подправить надо?
Lex
Цитата(Ioann @ Nov 21 2007, 11:42) *
Есть ли возможность редактировать заклинания? Хотелось вызывать несколько существ (например, поднять мертвеца, а вторым применением закла поднять уже второго , а не заменить первого вызванного). Может скриптами? Или что-то подправить надо?

скриптами. см spells.2da, ищи там нужный закл и смотри, какой скрипт за него отвечает.
Потом в скриптовом редакторе open - флажок "показать все скрипты" - ищешь нужный скрипт и редактируешь.

\\ с реализацией твоей идеи могут быть проблемы, так как саммонер вроде как только 1 может быть. Может помочь вариант с доминированием, но надо пробовать.
Ioann
2Lex
Спасибо, нашел нужные скрипты, но взникли вопросы scratch_one-s_head.gif
Расковырял архивчик Scripts. Нашел файл nw_s0_crundead.NSS. Насколько понял здесь находится скрипт описывающий заклинания Поднятие нежити. В остальных поднятиях структура та же.
И вопросы по файлу: в скрипте используется 3 метода (функции), это

X2PreSpellCastCode() -- не нашел его объявление в nwscript.NSS и врядли имеет отношение к вопросу, т.к. используется во всех заклах и отменяет их действие при не выполнении (на сколько понял).
effect EffectSummonCreature(string, int, float, int) -- задаются первые два аргумента, остальные по умолчанию, вроде.
void ApplyEffectAtLocation(int, effect, location, float) -- последний аргумент берется по умолчанию.

Последние 2 метода объявлены в nwscript.NSS. Но где их описание? Перерыл весь Scripts и не нашел описания EffectSummonCreature(string, int, float, int). С ApplyEffectAtLocation(int, effect, location, float), наверное, та же история. Где описаны эти функции? Может кто-то знает или предполагает? Вроде эти функции и надо править, т.к. больше и нечего.
Но скорее всего дело в EffectSummonCreature, описание:

// Create a Summon Creature effect. The creature is created and placed into the
// caller's party/faction.
// - sCreatureResref: Identifies the creature to be summoned
// - nVisualEffectId: VFX_*
// - fDelaySeconds: There can be delay between the visual effect being played, and the
// creature being added to the area
// - nUseAppearAnimation: should this creature play it's "appear" animation when it is
// summoned. If zero, it will just fade in somewhere near the target. If the value is 1
// it will use the appear animation, and if it's 2 it will use appear2 (which doesn't exist for most creatures)
effect EffectSummonCreature(string sCreatureResref, int nVisualEffectId=VFX_NONE, float fDelaySeconds=0.0f, int nUseAppearAnimation=0);

Не могу понять за что отвечает последний параметр. Помогите разобраться, пожалуйста.
А что за "вариант с доминированием"? Пробовать готов rolleyes.gif


Теперь что смог найти.
Вот здесь есть что-то подобное.
http://nwn2forums.bioware.com/forums/viewtopic.html?topic=590809&forum=114&highlight=Summoning

Там есть вот этот скрипт, но самому с ним разобраться трудно. И имеются подключаемые библиотеки, созданные автором, а что в них -- загадка. Помогите, пожалуйста, разобраться. В программировании немного разбираюсь, но в NWN2 залез впервые.
Чем лучше занятся: делать с нуля или использовать нижеприведенный скрипт?

CODE
Neverwinter Script Source
#include "x2_inc_itemprop"
#include "x2_i0_spells"
#include "x0_i0_assoc"
#include "x2_inc_switches"
#include "_inc_propertystrings"
#include "_inc_helper_functions"
void DestroyUndead( object oPC ) { // KILLS ALL DOMINATED CREATURES OF A PC
  int nCnt = GetLocalInt( oPC, "UNDEADCOUNT" );
  if ( nCnt==0 ) return;
  object oArea = GetArea( oPC );
  object oMinion = GetFirstObjectInArea( oArea );
  while ( GetIsObjectValid( oMinion )) {
      if ( GetObjectType( oMinion )==OBJECT_TYPE_CREATURE && GetMaster( oMinion )==oPC && GetRacialType( oMinion )==RACIAL_TYPE_UNDEAD ) {
        ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectNWN2SpecialEffectFile( "fx_turn_undead.sef", oMinion ), oMinion );
        DelayCommand( 0.0, DestroyObject( oMinion ));
      }
      oMinion = GetNextObjectInArea( oArea );
  }
  DeleteLocalInt( oPC, "UNDEADCOUNT" );
}
int BuffUndeadItem( object oSum, int nSlot, int nEB, int nDamBonus ) {
  object oItem = GetItemInSlot( nSlot, oSum ); // ENCHANT THE CLAWS
  if ( oItem!=OBJECT_INVALID ) {
      IPSafeAddItemProperty( oItem, ItemPropertyEnhancementBonus( nEB ));
      if ( nDamBonus ){
        IPSafeAddItemProperty( oItem, ItemPropertyDamageBonus( IP_CONST_DAMAGETYPE_NEGATIVE, nDamBonus ));
      } else {
      }
      return TRUE;
  }
  return FALSE;
}
void BoostUndeadSummon( object oPC, object oSum = OBJECT_INVALID ) {
  if ( oSum==OBJECT_INVALID ) oSum = GetAssociate( ASSOCIATE_TYPE_SUMMONED, oPC );
  int nLevel = GetLevelByClass( CLASS_TYPE_PALEMASTER, oPC ); //GetUndeadLevel( oPC );
  int nNecro = GetHasFeat( FEAT_GREATER_SPELL_FOCUS_NECROMANCY, oPC ) ? 2 : ( GetHasFeat( FEAT_SPELL_FOCUS_NECROMANCY, oPC ) ? 1 : 0 );
  if ( GetHasFeat( FEAT_AUGMENT_SUMMONING, oPC )) {
      nNecro++;
      effect eAug = EffectAbilityIncrease( ABILITY_STRENGTH, 4 );
      eAug = EffectLinkEffects( eAug, EffectAbilityIncrease( ABILITY_CONSTITUTION, 4 ));
      ApplyEffectToObject( DURATION_TYPE_INSTANT, ExtraordinaryEffect( eAug ), oSum );
  }
  if ( nNecro ) {
      nNecro++;
      nLevel += nNecro;
      SendMessageToPC( oPC, "Pale Master Necromancy Boost +" + IntToString( nNecro ));
  }
  int nBonus = nLevel / 2; // MAX 6
  if ( !nBonus ) return;
  int nEB = GetMax( 5, nBonus );
  int nDamBonus = 0;
  if      ( nBonus==1 ) nDamBonus = DAMAGE_BONUS_1d4;
  else if ( nBonus==2 ) nDamBonus = DAMAGE_BONUS_1d6;
  else if ( nBonus==3 ) nDamBonus = DAMAGE_BONUS_1d8;
  else if ( nBonus==4 ) nDamBonus = DAMAGE_BONUS_1d10;
  else if ( nBonus==5 ) nDamBonus = DAMAGE_BONUS_2d6;
  else if ( nBonus==6 ) nDamBonus = DAMAGE_BONUS_2d8;
  else if ( nBonus==7 ) nDamBonus = DAMAGE_BONUS_2d10;
  else if ( nBonus==8 ) nDamBonus = DAMAGE_BONUS_2d12;
  SendMessageToPC( oPC, "Pale Master Necromancy Boost applied: +" + IntToString( nBonus ) + " AC / +" +IntToString( nEB ) + " EB / +" + DamageBonusString( nDamBonus ) + " Negative damage." );
  if ( BuffUndeadItem( oSum, INVENTORY_SLOT_RIGHTHAND, nEB, nDamBonus )) BuffUndeadItem( oSum, INVENTORY_SLOT_LEFTHAND, nEB, nDamBonus );
  else if ( BuffUndeadItem( oSum, INVENTORY_SLOT_CWEAPON_R, nEB, nDamBonus )) BuffUndeadItem( oSum, INVENTORY_SLOT_CWEAPON_L, nEB, nDamBonus );
  ApplyEffectToObject( DURATION_TYPE_PERMANENT, EffectACIncrease( nBonus ), oSum );
}
int CountUndead( object oPC ) {
  int nCnt = 0;
  if ( GetAssociate( ASSOCIATE_TYPE_DOMINATED, oPC )==OBJECT_INVALID ) return 0;
  object oArea = GetArea( oPC );
  object oMinion = GetFirstObjectInArea( oArea );
  while ( GetIsObjectValid( oMinion )) {
      if ( GetObjectType( oMinion )==OBJECT_TYPE_CREATURE ) {
        if ( GetMaster( oMinion )==oPC && GetRacialType( oMinion )==RACIAL_TYPE_UNDEAD ) {
            nCnt++;
        }
      }
      oMinion = GetNextObjectInArea( oArea );
  }
  return nCnt;
}
void CreateUndead( object oPC, string sResRef, int nMaxDom = 1, int bRedEyes = FALSE ) {
  int nCount = CountUndead( oPC ) + 1;
  if ( nCount > nMaxDom ) {
      FloatingTextStringOnCreature( "There are too many Undead currently at your service...", oPC, FALSE );
      return;
  }
  location lLocation = GetLocation( oPC );
  SetLocalInt( oPC, "UNDEADCOUNT", nCount );
  object oMinion = CreateObject( OBJECT_TYPE_CREATURE, sResRef, lLocation, FALSE );
  FloatingTextStringOnCreature( "A " + GetName( oMinion ) + " is now at your service.", oPC, FALSE );
  SetLastName( oMinion, "of " + GetName( oPC ));//GetName( oMinion )+
  SetLocalObject( oMinion, "DOMINATED", oPC );
  if ( bRedEyes ) ApplyEffectToObject( DURATION_TYPE_PERMANENT,  EffectNWN2SpecialEffectFile( "red_eyes.sef" ), oMinion );
  ApplyEffectToObject( DURATION_TYPE_TEMPORARY, ExtraordinaryEffect( EffectCutsceneDominated( ) ), oMinion, HoursToSeconds( 24 ));
  ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect( VFX_FNF_SUMMON_UNDEAD ), lLocation );
  BoostUndeadSummon( oPC, oMinion );
  int nDistance = NW_ASC_DISTANCE_6_METERS;
  if ( nCount==1 ) nDistance = NW_ASC_DISTANCE_2_METERS;
  if ( nCount==2 ) nDistance = NW_ASC_DISTANCE_4_METERS;
  SetAssociateState( nDistance, TRUE, oMinion );
  int nSpawnInConditions = GetLocalInt( oMinion, "NW_GENERIC_MASTER" );
  nSpawnInConditions = nSpawnInConditions | NW_FLAG_STEALTH | NW_FLAG_AMBIENT_ANIMATIONS | NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS | NW_FLAG_FAST_BUFF_ENEMY;
  SetLocalInt( oMinion, "NW_GENERIC_MASTER", nSpawnInConditions );
  int nCombatConditions = GetLocalInt( oMinion, "X0_COMBAT_CONDITION" );
  if ( nCount==1 ) nCombatConditions = nCombatConditions | X0_COMBAT_FLAG_AMBUSHER;
  else nCombatConditions = nCombatConditions | X0_COMBAT_FLAG_RANGED;
  SetLocalInt( oMinion, "X0_COMBAT_CONDITION", nCombatConditions );
}
void SummonUndead( ) {
  object oPC = OBJECT_SELF;
  string sResRef = "";
  int bRedEyes = FALSE;
  int nSpellId = GetSpellId( );
  int nLevel = GetLevelByClass( CLASS_TYPE_PALEMASTER, oPC );//GetUndeadLevel( oPC );
  int nConjure = GetHasFeat( FEAT_GREATER_SPELL_FOCUS_CONJURATION, oPC ) ? 2 : ( GetHasFeat( FEAT_SPELL_FOCUS_CONJURATION, oPC ) ? 1 : 0 );
  nConjure += GetHasFeat( FEAT_AUGMENT_SUMMONING, oPC );
  if ( nConjure ) {
      nLevel += nConjure;
      SendMessageToPC( oPC, "
Pale Master Conjuration Boost +" + IntToString( nConjure ));
  }
  if ( nSpellId==SPELLABILITY_PM_ANIMATE_DEAD ) {
      if      ( nLevel < 3 ) sResRef = "
pm_zombie1";
      else if ( nLevel < 5 ) sResRef = "
pm_zombie2";
      else                sResRef = "
pm_zombie3";
  } else if ( nSpellId==SPELLABILITY_PM_SUMMON_UNDEAD ) {
      if      ( nLevel < 5 ) sResRef = "
pm_skeleton1";
      else if ( nLevel < 7 ) sResRef = "
pm_skeleton2";
      else                sResRef = "
pm_skeleton3";
  } else if ( nSpellId==SPELLABILITY_PM_SUMMON_GREATER_UNDEAD ) {
      if      ( nLevel < 10 ) sResRef = "
pm_ghast1";
      else if ( nLevel < 12 ) sResRef = "
pm_ghast2";
      else                  sResRef = "
pm_ghast3";
  }
  bRedEyes = ( GetStringRight( sResRef, 1 )=="
3" );
  CreateUndead( oPC, sResRef, 3, bRedEyes );
}
Leon PRO
Не надо ссылки на офф. форум прятать в спойлер )
Lex
Цитата(Ioann @ Nov 26 2007, 18:10) *
X2PreSpellCastCode() -- не нашел его объявление в nwscript.NSS

Это запуск стандартного спел-хука. Те код который исполняется до любого закла. Через него можно сделать например невозможность колдовства в какой-то локации или по какому-то условию или негативные/позитивные бонусы для кастера при каких-то условиях. В общем штука хорошая.

Цитата(Ioann @ Nov 26 2007, 18:10) *
Но где их описание?

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

Цитата(Ioann @ Nov 26 2007, 18:10) *
Где описаны эти функции? Может кто-то знает или предполагает? Вроде эти функции и надо править, т.к. больше и нечего.

это встроенные (стандартные) функции. На нашем пользовательском уровне их поправить низя. Только если влезть внутрь и там что-то поковырять.

Цитата(Ioann @ Nov 26 2007, 18:10) *
Не могу понять за что отвечает последний параметр. Помогите разобраться, пожалуйста.

дословно - использовать ли анимацию появления (падение с неба) или нет для саммонера. Прикольно смотрится для летающих саммонеров. Но в принципе можно всем ставить.

Цитата(Ioann @ Nov 26 2007, 18:10) *
Теперь что смог найти.
Вот здесь есть что-то подобное.

эта штука - реализация всяких фичей для пэйлмастера. В принципе написано прилично. Из этого всего тебе нужно фактически только CreateUndead. Как я успел по коду пробежаться, автор пошел по варианту доминирования.
Neverwinter Script Source
..ExtraordinaryEffect( EffectCutsceneDominated( ) )..

Так что можно взять ядро функции (все что относится к созданию миньона, эффектам. Выставление спавн-кондишенов по желанию) почистить от кастомных вещей (Boost например) и засунуть в заклинание вызова нежити.
Ioann
2Lex
Большое спасибо за помощь и подробные разъяснения thank_you.gif

Вот начал копаться и на тебе! Не могу скомпилировать содержание файла nw_s0_crundead.NSS! Выдает
ginc_crafting.nss: Search2DA //типа ошибка, но ERROR не пишет и где обнаружена ошибка не ясно
И при повторном нажатии F7 после двоеточия может быть "что угодно" biggrin.gif
В чем проблема? Я файл не модифицировал! Да и ginc_crafting.nss причем!?

CODE
Neverwinter Script Source
#include "x2_inc_spellhook"

void main( )
{

    if ( !X2PreSpellCastCode( ) )
    {
        // If code within the PreSpellCastHook ( i.e. UMD ) reports FALSE, do not run this spell
        return;
    }

    //Declare major variables
    int nMetaMagic = GetMetaMagicFeat( );
    int nCasterLevel = GetCasterLevel( OBJECT_SELF );
    int nDuration = nCasterLevel;
    //nDuration = 24;
    effect eSummon;

    //Check for metamagic extend
    if ( nMetaMagic == METAMAGIC_EXTEND )
    {
        nDuration = nDuration *2;    //Duration is +100%
    }
    //Set the summoned undead to the appropriate template based on the caster level
    if ( nCasterLevel <= 11 )
    {
        eSummon = EffectSummonCreature( "c_ghoul", VFX_HIT_SPELL_SUMMON_CREATURE );
    }
    else if ( (nCasterLevel >= 12 ) && ( nCasterLevel <= 13 ))
    {
        eSummon = EffectSummonCreature( "c_ghast", VFX_HIT_SPELL_SUMMON_CREATURE );
    }
    else if ( (nCasterLevel >= 14 ) && ( nCasterLevel <= 15 ))
    {
        eSummon = EffectSummonCreature( "c_mummy", VFX_HIT_SPELL_SUMMON_CREATURE );
    }
    else if ( (nCasterLevel >= 16 ))
    {
        eSummon = EffectSummonCreature( "c_mummylord", VFX_HIT_SPELL_SUMMON_CREATURE );
    }

    //Apply VFX impact and summon effect
    ApplyEffectAtLocation( DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation( ), HoursToSeconds( nDuration ));
}
Lex
ошибка в библиотеке. Тут удаленно помочь трудно. Попробуй убрать
Neverwinter Script Source
#include "x2_inc_spellhook"

и
Neverwinter Script Source
if ( !X2PreSpellCastCode( ) )
    {
        // If code within the PreSpellCastHook ( i.e. UMD ) reports FALSE, do not run this spell
        return;
    }
Ioann
2Lex
Огромное спасибо! Благодарю! Вышло yahoo.gif Смог поднять более одного мертвеца! Когда доведу скрипт до ума выложу.

Есть еще вопрос: можно убрать тотальную паузу во время обычных диалогов в официальной кампании? Невозможно играть по сети! Где-то читал, что нужно в тулсете открыть кампанию и там, в диалогах, должна быть кнопочка отключения всеобщей паузы.
Это правда? Если да, то как "открыть" оф. кампанию и где может быть эта "кнопочка"?
Lex
Цитата(Ioann @ Nov 27 2007, 19:50) *
Огромное спасибо! Благодарю! Вышло yahoo.gif Смог поднять более одного мертвеца! Когда доведу скрипт до ума выложу.

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

Цитата(Ioann @ Nov 27 2007, 19:50) *
Есть еще вопрос: можно убрать тотальную паузу во время обычных диалогов в официальной кампании?

там что, реально все замирает, когда кто-то разговаривает?? wacko.gif
Ioann
Цитата
там что, реально все замирает, когда кто-то разговаривает??


Играем по сетке, 2 человека, если один с кем-то говорит (появляется диалог), то второй не может сойти с места и вообще ничего не может, только камеру крутить.
Buzzard
У меня такая проблема: написал скрипт который должен снимать с вещей ограничения на использования (такие как мироввозрение, класс и т.д.) и он конечно не работает. Кто-нибудь может сказать где ошибка?
Вот сам скрипт:

void main()
{
itemproperty prop = ItemPropertyLimitUseByAlign(IP_CONST_ALIGNMENTGROU
_ALL);
RemoveItemProperty(OBJECT_SELF, prop);
int i;
for(i=0; i<=8; i++)
{
prop = ItemPropertyLimitUseByClass(i);
RemoveItemProperty(OBJECT_SELF, prop);
}
for(i=0 ;i<=25 ;i++)
{
prop = ItemPropertyLimitUseByRace(i);
RemoveItemProperty(OBJECT_SELF, prop);
}
for(i=0;i<=8 ;i++)
{
prop = ItemPropertyLimitUseBySAlign(i);
RemoveItemProperty(OBJECT_SELF, prop);
}
}
Lex
ну.. собсна грабля очень старая. Есть свойство (оно как бы само по себе, оторвано от предмета. Все что с ним можно сделать - наложить куда-то)
Например вот это:
Neverwinter Script Source
prop = ItemPropertyLimitUseBySAlign( i );

для удаления нужно брать уже наложенные свойства. GetFirstItemProperty, GetNextItemProperty - перебор свойств у предмета, а дальше анализируешь. Если тип свойства - Limit что-то там - удаляешь его.

работа со свойствами абсолютно аналогична работой с эффектами.
Buzzard
Спасибо, оказывается можно боыло сделать проще:

void main()
{
itemproperty prop = GetFirstItemProperty(OBJECT_SELF);
int PropType;
while(GetIsItemPropertyValid(prop))
{
PropType = GetItemPropertyType(prop);
if((PropType>=ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP)&&(PropType>=ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMEN
))
RemoveItemProperty(OBJECT_SELF, prop);
prop = GetNextItemProperty(OBJECT_SELF);
}
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.