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

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


Ioann
Отправлено: Nov 27 2007, 21:50


Level 1


Группа: Newbie
Сообщений: 6
Регистрация: 21.11.2007
Пользователь №: 4,887


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


Играем по сетке, 2 человека, если один с кем-то говорит (появляется диалог), то второй не может сойти с места и вообще ничего не может, только камеру крутить.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #116080 · Ответов: 829 · Просмотров: 445,288

Ioann
Отправлено: Nov 27 2007, 19:50


Level 1


Группа: Newbie
Сообщений: 6
Регистрация: 21.11.2007
Пользователь №: 4,887


2Lex
Огромное спасибо! Благодарю! Вышло (IMG:style_emoticons/kolobok_light/yahoo.gif) Смог поднять более одного мертвеца! Когда доведу скрипт до ума выложу.

Есть еще вопрос: можно убрать тотальную паузу во время обычных диалогов в официальной кампании? Невозможно играть по сети! Где-то читал, что нужно в тулсете открыть кампанию и там, в диалогах, должна быть кнопочка отключения всеобщей паузы.
Это правда? Если да, то как "открыть" оф. кампанию и где может быть эта "кнопочка"?
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #116076 · Ответов: 829 · Просмотров: 445,288

Ioann
Отправлено: Nov 27 2007, 17:26


Level 1


Группа: Newbie
Сообщений: 6
Регистрация: 21.11.2007
Пользователь №: 4,887


2Lex
Большое спасибо за помощь и подробные разъяснения (IMG:style_emoticons/kolobok_light/thank_you.gif)

Вот начал копаться и на тебе! Не могу скомпилировать содержание файла nw_s0_crundead.NSS! Выдает
ginc_crafting.nss: Search2DA //типа ошибка, но ERROR не пишет и где обнаружена ошибка не ясно
И при повторном нажатии F7 после двоеточия может быть "что угодно" (IMG:style_emoticons/kolobok_light/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 ));
}
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #116072 · Ответов: 829 · Просмотров: 445,288

Ioann
Отправлено: Nov 26 2007, 18:10


Level 1


Группа: Newbie
Сообщений: 6
Регистрация: 21.11.2007
Пользователь №: 4,887


2Lex
Спасибо, нашел нужные скрипты, но взникли вопросы (IMG:style_emoticons/kolobok_light/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);

Не могу понять за что отвечает последний параметр. Помогите разобраться, пожалуйста.
А что за "вариант с доминированием"? Пробовать готов (IMG:style_emoticons/kolobok_light/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 );
}
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #116041 · Ответов: 829 · Просмотров: 445,288

Ioann
Отправлено: Nov 21 2007, 16:12


Level 1


Группа: Newbie
Сообщений: 6
Регистрация: 21.11.2007
Пользователь №: 4,887


Может кто-нибудь дать ссылку на скрипт (или что там) по поводу "Лежащие на земле трупы". А то ссылка в первом посту устарела.
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #116033 · Ответов: 104 · Просмотров: 174,405

Ioann
Отправлено: Nov 21 2007, 11:42


Level 1


Группа: Newbie
Сообщений: 6
Регистрация: 21.11.2007
Пользователь №: 4,887


Есть ли возможность редактировать заклинания? Хотелось вызывать несколько существ (например, поднять мертвеца, а вторым применением закла поднять уже второго , а не заменить первого вызванного). Может скриптами? Или что-то подправить надо?
  Форум: Neverwinter Nights 2 Obsidian Toolset · Просмотр сообщения: #116027 · Ответов: 829 · Просмотров: 445,288


Есть новые сообщения  Открытая тема (есть новые ответы)
Нет новых сообщений  Открытая тема (нет новых ответов)
Горячая тема (есть новые сообщения)  Горячая тема (есть новые ответы)
Горячая тема (нет новых сообщений)  Горячая тема (нет новых ответов)
Опрос (есть новые голоса)  Опрос (есть новые голоса)
Опрос (нет новых голосов)  Опрос (нет новых голосов)
Тема закрыта  Закрытая тема
Тема перемещена  Тема перемещена
 

Текстовая версия Сейчас: 16th May 2024 - 10:41