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

Neverwinter Script Source

object oNpc = OBJECT_SELF;
SetIsDestroyable( FALSE, FALSE, FALSE );
ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDeath( TRUE, TRUE ), oNpc );


скриптом, который стоит на OnAppear (ну или на OnDeath)?
Lex
Neverwinter Script Source
void main( )
{
SetIsDestroyable( TRUE, FALSE, FALSE );
DestroyObject( OBJECT_SELF );
}

на строке диалога
Shadenuat
Это если трупик говорящий?
А можно применить действие SetIsDestroyable к тегу трупа?
azathoth
Цитата
А можно применить действие SetIsDestroyable к тегу трупа?

вот так можно променять объект для функции по умолчанию работающие с OBJECT_SELF.
Neverwinter Script Source
AssignCommand( GetObjectByTag( "TAG" ), SetIsDestroyable( TRUE ));
Shadenuat
Второй день мучаюсь, наконец получилось что надо. Спасибо Lex, огромное спасибо Azathoth.
Белатрис
Я вот думал, думал... как сделать, чтобы анимация проигрывалась постоянно? Пока условие не станет ложным.
И, правильно ли это:
Neverwinter Script Source

i = GetTimeHour( ); // Типа, если время между 11 вечера и семи утра, то выполняется то-то и то-то.
if( i > 23 && i < 7 )
{
      ......
}

Заранее спасибо!

П.С. Ах, еще забыл. Как засечь время. К примеру, мне нужно, чтобы строка диалога появлялась каждые три дня. На heartbeat ставить проверку? Ну, допустим, прошел час - прибавили к переменной единицу. А потом, когда в диалоге строка была использована, переменная обнуляется... unsure.gif А как определить, прошел ли час? prankster2.gif
Lex
Цитата(Белатрис @ Oct 17 2007, 14:36) *
if( i > 23 && i < 7 )

у тебя не может быть число одновременно больше 23 и меньше 7. Ты бы проверил чтоли сам для начала biggrin.gif

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

Цитата(Белатрис @ Oct 17 2007, 14:36) *
П.С. Ах, еще забыл. Как засечь время. К примеру, мне нужно, чтобы строка диалога появлялась каждые три дня. На heartbeat ставить проверку? Ну, допустим, прошел час - прибавили к переменной единицу. А потом, когда в диалоге строка была использована, переменная обнуляется... unsure.gif А как определить, прошел ли час? prankster2.gif

лучше всего юзать старый (хз кем запатентованный) способ: переводить все в часы. Вплоть до года. Соотв. в начальный момент запоминаешь это мега число. Сравниваешь в ХБ, как только разница между текущей датой (переведенной в часы) станет ровна или превысит 72 - значит прошло ровно 3 суток с момента запоминания. Выполняй действие, а момент запоминания ставь текущий и все начнется по новой. Осилишь написать скрипт по такому описанию? Это всего лишь 3 строки кода.
azathoth
можно вообще без хб, и без часов...
Neverwinter Script Source
// Appears when...
int StartingConditional( ) {
    int nLastDay = GetLocalInt( OBJECT_SELF, "last_randompostfix" );
    return ( GetCalendarDay( ) - nLastDay ) >= 2; // ecли прошло два дня
}


Neverwinter Script Source
// Action
void main( ) {
    SetLocalInt( OBJECT_SELF, "last_randompostfix", GetCalendarDay( ) ); // устанавливаешь день последнего использования
}
gennady
Цитата(Белатрис @ Oct 17 2007, 14:36) *
П.С. Ах, еще забыл. Как засечь время. К примеру, мне нужно, чтобы строка диалога появлялась каждые три дня. На heartbeat ставить проверку?

На строку диалога, слот появления…
azathoth, немного не так... Нужно еще учесть переход между началом и концом месяца...

Neverwinter Script Source

////////////////// Текущий день //////////////////////////
int Day( int nYear=1 )
{
int nDay = GetCalendarDay( );
int nMes = 28*GetCalendarMonth( );
int iDay = 336*nYear+nMes+nDay;
return iDay;
}
/////////////////////////////////////////////////////
int StartingConditional( )
{
  if( GetLocalInt( GetPCSpeaker( ), "day_3" ) <= Day( ) )
    {SetLocalInt( GetPCSpeaker( ), "day_3", Day( )+3 ); return TRUE;}
  else
    {
    SpeakString( "Приходи через "+IntToString( GetLocalInt( GetPCSpeaker( ), "day_3" )-Day( ) ) + " ДНЯ" );
    return FALSE;
    }
}
azathoth
о, а ведь был в полной уверености, что функция отсчитывает от "рождества христова". буду знать.
Lex
чтобы банально уменьшить число, можно запомнить год начала игры и считать от него (те из текущего года вычитать год игры). Но в целом Гена то самое и написал. Только я хотел чтобы это Белатрис сделал. Эх, не судьба.
Белатрис
Не выполняется сий скрипт:
Neverwinter Script Source

//:: //////////////////////////////////
//:: Автор: Lex
//:: //////////////////////////////////
void ANIMATION( object oD )
{
    int A1=0;
    float T1, S1;
      switch ( Random( 5 )+1 )
      {
      case 1: A1=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD;T1=5.0;S1=2.0;break;
      case 2: A1=ANIMATION_FIREFORGET_TAUNT;T1=5.0;S1=2.0;break;
      case 3: A1=ANIMATION_FIREFORGET_PAUSE_BORED;S1=2.0;break;
      case 4: A1=ANIMATION_FIREFORGET_DRINK;T1=6.0;S1=3.0;break;
      case 5: A1=ANIMATION_LOOPING_PAUSE_TIRED;T1=5.0;S1=2.0;break;
      }
    if ( A1==0 ) return;
    AssignCommand( oD, PlayAnimation( A1, S1, T1 ));
}
//:: //////////////////////////////////
//:: Автор: тут уже ЙА!
//:: //////////////////////////////////
void main( )
{
    object FERGUS = GetObjectByTag( "fergus" );
    object wp1 = GetObjectByTag( "FERGUS_RASP_WP1" ); // ТОЧКА РЫНКА
    object wp2 = GetObjectByTag( "FERGUS_RASP_WP2" ); // ТОЧКА У КОСТРА РОЙГА
    object wp3 = GetObjectByTag( "FERGUS_RASP_WP3" ); // ТОЧКА У ДОМА
    object wp4 = GetObjectByTag( "FERGUS_RASP_WP4" ); // ТОЧКА У КОСТРА НА РЫНКЕ
    // object wp5 = GetObjectByTag( "FERGUS_RASP_WP5" ); // ТОЧКА ЗАПАСНАЯ

    int i = GetTimeHour( );
    while( i > 1 && i < 13 )
    {
        AssignCommand( FERGUS, ActionForceMoveToObject( wp1, FALSE, 1.0, 25.0 ));
        ANIMATION( FERGUS );
    }
    while( i > 14 && i < 15 )
    {
        AssignCommand( FERGUS, ActionForceMoveToObject( wp2, FALSE, 1.0, 25.0 ));
        ANIMATION( FERGUS );
    }
    while( i > 15 && i < 18 )
    {
        AssignCommand( FERGUS, ActionForceMoveToObject( wp3, FALSE, 1.0, 25.0 ));
        ANIMATION( FERGUS );
    }
  while( i > 18 && i < 24 )
    {
        AssignCommand( FERGUS, ActionForceMoveToObject( wp4, FALSE, 1.0, 25.0 ));
        ANIMATION( FERGUS );
    }

}
gennady
Цитата(Белатрис @ Oct 18 2007, 13:14) *
Не выполняется сий скрипт:

Чет не верится, что это Лекс писал… Я бы записал так… Объяснять не буду… все тут: cкрипты

Neverwinter Script Source
//:: //////////////////////////////////
//:: Афтор: Gennady
//:: //////////////////////////////////
void ANIMATION( object oD, float Speed=1.0, float Time=0.0 )
{
int A1;
switch ( Random( 5 )+1 )
  {
   case 1: A1=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD; break;
   case 2: A1=ANIMATION_FIREFORGET_TAUNT; break;
   case 3: A1=ANIMATION_FIREFORGET_PAUSE_BORED; break;
   case 4: A1=ANIMATION_FIREFORGET_DRINK; break;
   case 5: A1=ANIMATION_LOOPING_PAUSE_TIRED; if( Time==0.0 )Time=6.0; break;
  }
  AssignCommand( oD, ActionPlayAnimation( A1, Speed, Time ) );
}
void main( )
{
    object FERGUS = GetObjectByTag( "fergus" );
  if ( GetLocalInt( FERGUS, "ACTION" )==1 ) return; // Задежка цикла, если скриптт ДЛЯ ХБ
    object wp1 = GetObjectByTag( "FERGUS_RASP_WP1" ); // ТОЧКА РЫНКА
    object wp2 = GetObjectByTag( "FERGUS_RASP_WP2" ); // ТОЧКА У КОСТРА РОЙГА
    object wp3 = GetObjectByTag( "FERGUS_RASP_WP3" ); // ТОЧКА У ДОМА
    object wp4 = GetObjectByTag( "FERGUS_RASP_WP4" ); // ТОЧКА У КОСТРА НА РЫНКЕ
    int i = GetTimeHour( );
    float fTime = 17.0; // Новый цикл ХБ=18 секундам
    // object wp5 = GetObjectByTag( "FERGUS_RASP_WP5" ); // ТОЧКА ЗАПАСНАЯ

  if ( i > 1 && i < 13 )
    {
     if( GetDistanceBetween( FERGUS, wp1 ) > 1.0 )
     AssignCommand( FERGUS, ActionForceMoveToObject( wp1, FALSE, 1.0, 25.0 ) );
     ANIMATION( FERGUS );
     SetLocalInt( FERGUS, "ACTION", 1 ); // ДЛЯ ХБ
     DelayCommand( fTime, SetLocalInt( FERGUS, "ACTION", 0 ) ); // ДЛЯ ХБ
    }
    // и т.д. ...
}
Lex
Цитата(gennady @ Oct 18 2007, 14:04) *
Чет не верится, что это Лекс писал… Я бы записал так… Объяснять не буду… все тут

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

Добавлено через 40

Цитата(Белатрис @ Oct 18 2007, 13:14) *
Не выполняется сий скрипт:

на будущее: пиши что именно не работает.
gennady
Цитата(Lex @ Oct 18 2007, 14:22) *
Смысл был именно в том, чтобы каждой анимации поставить адекватное время и скорость.

Это ж как??? А кто тут все учил, что FIREFORGET имеет только скорость? Как раз таки я и пытался вынести эти параметры, но первый блин комом biggrin.gif.
Белатрис, скрипт я поправил, должно работать… Наверно, это писалось для ХБ плейса управления? И циклы тут уж точно не нужны…
Lex
Цитата(gennady @ Oct 18 2007, 19:08) *
то ж как??? А кто тут все учил, что FIREFORGET имеет только скорость?

там от балды цифры стоят, это скрипт-шаблон, настраивать нужно уже самому smile.gif
Белатрис
Не ходит, только проигрывает анимацию... unsure.gif
Neverwinter Script Source
void main( )
{
    object KLIFF = GetObjectByTag( "kliff" );
    object wp1 = GetObjectByTag( "GRASS_WP1" );
    object wp2 = GetObjectByTag( "GRASS_WP2" );
    object wp3 = GetObjectByTag( "GRASS_WP3" );
    object wp4 = GetObjectByTag( "GRASS_WP4" );
    object wp5 = GetObjectByTag( "GRASS_WP5" );
    object wp6 = GetObjectByTag( "GRASS_WP6" );
    object wp7 = GetObjectByTag( "GRASS_WP7" );
    object wp8 = GetObjectByTag( "GRASS_WP8" );
    object wp9 = GetObjectByTag( "GRASS_WP9" );
    object wp10 = GetObjectByTag( "GRASS_WP10" );
    int i = GetTimeHour( );
    float fTime = 17.0;

    if ( i > 10 && i < 18 ) // РАБОТАЕМ В ПОЛЕ
    {
    if( GetDistanceBetween( KLIFF, wp1 ) > 1.0 )
    switch( Random( 10 )+1 )
    {
                        case 1: AssignCommand( KLIFF, ActionForceMoveToObject( wp1, FALSE, 1.0, 25.0 ) );
                break;
                        case 2: AssignCommand( KLIFF, ActionForceMoveToObject( wp2, FALSE, 1.0, 25.0 ) );
                break;
                        case 3: AssignCommand( KLIFF, ActionForceMoveToObject( wp3, FALSE, 1.0, 25.0 ) );
                break;
                        case 4: AssignCommand( KLIFF, ActionForceMoveToObject( wp4, FALSE, 1.0, 25.0 ) );
                break;
                        case 5: AssignCommand( KLIFF, ActionForceMoveToObject( wp5, FALSE, 1.0, 25.0 ) );
                break;
                        case 6: AssignCommand( KLIFF, ActionForceMoveToObject( wp6, FALSE, 1.0, 25.0 ) );
                break;
                        case 7: AssignCommand( KLIFF, ActionForceMoveToObject( wp7, FALSE, 1.0, 25.0 ) );
                break;
                        case 8: AssignCommand( KLIFF, ActionForceMoveToObject( wp8, FALSE, 1.0, 25.0 ) );
                break;
                        case 9: AssignCommand( KLIFF, ActionForceMoveToObject( wp9, FALSE, 1.0, 25.0 ) );
                break;
                        case 10: AssignCommand( KLIFF, ActionForceMoveToObject( wp10, FALSE, 1.0, 25.0 ) );
                break;
    }
    AssignCommand( KLIFF, PlayAnimation( ANIMATION_LOOPING_GET_LOW, 1.0, 5.0 ) );
    ActionWait( 3.0 );
    SetLocalInt( KLIFF, "ACTION", 1 ); // ДЛЯ ХБ
    DelayCommand( fTime, SetLocalInt( KLIFF, "ACTION", 0 ) ); // ДЛЯ ХБ
    }
}
gennady
Цитата(Белатрис)
Не ходит, только проигрывает анимацию...

Если скрипт стоит на ХБ, то нужно еще учесть кучу моментов… Вот тебе для примера скрипт на заданную тему, писал давно, может что и глючит (т.к. писался не под стандартный ХБ скрипт), но идея была такая:

Neverwinter Script Source
//::///////////////////////////////////////////////////////////
//:: NPC ходит по стандартным точкам и эмитирует работу на поле
//::///////////////////////////////////////////////////////////
void StringKrest( object oNPC )
{
  string sStr;
  switch ( Random( 5 )+1 )
  {
  case 1: sStr = "Мне нужен отдых!"; break;
  case 2: sStr = "Эх! Прополка, ты прополка!"; break;
  case 3: sStr = "Скорей бы зима!"; break;
  case 4: sStr = "Любо братцы, любо! Любо братцы жить!"; break;
  case 5: sStr = "Сколько можно прорывать? Сил моих нет!"; break;
  }
AssignCommand( oNPC, SpeakString( sStr ));
}
void main( )
{
object oSelf = OBJECT_SELF;
if( GetArea( GetFirstPC( ) ) != GetArea( oSelf )) // если ПС нет в локе
{
  AssignCommand( oSelf, ClearAllActions( TRUE ));
  SetLocalInt( oSelf, "WPOIN_GO", 0 );
  return;
}
if ( GetIsInCombat( oSelf ))
{
  ExecuteScript( "nw_c2_default1", oSelf );
  SetLocalInt( oSelf, "WPOIN_GO", 0 );
  return;
}
if ( IsInConversation( oSelf ))
{SetLocalInt( oSelf, "WPOIN_GO", 0 ); return;}
if ( GetLocalInt( oSelf, "WPOIN_GO" ) == 1 ) return;
object oWay = GetNearestObjectByTag( "WP_"+GetTag( oSelf )+"_01" );
int i =1;
string sPoint = IntToString( i );
if ( GetIsObjectValid( oWay ))
{
  ClearAllActions( );
  SetLocalInt( oSelf, "WPOIN_GO", 1 );
}
else {ExecuteScript( "de_sleep", oSelf );  return;}
while ( GetIsObjectValid( oWay )) // Цикл на возрастание точек
{
  ActionForceMoveToObject( oWay, FALSE, 0.0, 30.0 );
  ActionPlayAnimation( ANIMATION_LOOPING_GET_LOW, 1.0, 3.0 );
  ActionWait( 1.0*Random( 4 )+1 );
  if ( Random( 10 )>5 )
  ActionPlayAnimation( ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD );
  if ( Random( 10 )>5 )
  {
    ActionDoCommand( StringKrest( oSelf ));
    ActionPlayAnimation( ANIMATION_FIREFORGET_TAUNT );
  }
  i++;
  sPoint = IntToString( i );
  oWay = GetNearestObjectByTag( "WP_"+GetTag( oSelf )+"_0"+sPoint );
}
ActionDoCommand( SetLocalInt( oSelf, "WPOIN_GO", 0 ));
}
// Если нет точек для ходьбы, то запустится скрипт сна  de_sleep
Белатрис
ээээ...... много не понятно. А какой тег точкам присваивать? prankster2.gif
gennady
NPC ходит по стандартным точкам... Хем... Это те точки, которые редактор задает сам при выборе NPC, и клике правой кнопкой: "Создать Точку Маршрута"...
ПС Школа по чтению скриптов простаивает, как у Айва, так и у Мамука. Стоит вам ее посетить! biggrin.gif
Белатрис
Всем доброго времени суток!
Как проиграть на строчке диалога 3D звук, находящийся в хак-паке? rolleyes.gif
Заранее спасибо!
Белатрис
Э... неужели никто не знает?...
shadowdweller
Цитата(gennady @ Sep 29 2007, 07:00) *
Neverwinter Script Source
void main( )
{
object oPC = GetFirstPC( );
int iGold = GetGold( oPC );
effect eSTR = EffectAbilityIncrease( ABILITY_STRENGTH, 1 );
}

Здорово! Сама недавно искала такой скрипт. Но в связи с этим возникает вопрос: это увеличение способности накладывается насовсем или на какое-то время? Вроде, временной промежуток не задается, но это же базовая способность, все-таки.
Lex
тут пока еще ниче не накладывается.
В ApplyEffect есть параметр duration. Ставь там DURATION_TYPE_INSTANT - будет постоянный бонус (или PERMANENT.. я за много лет так и не понял какой когда правильнее использовать smile.gif ). Однако есть пара моментов:
- бонус можно отдиспелить
- бонус можно снять отдыхом
чтобы этого избежать, надо использовать EffectSupernatural и EffectExtraordinary (ну или как-то так, по памяти пишу).
shadowdweller
Эээ... Все бы ничего, да вот только этих EffectSupernatural и EffectExtraordinary в тулсете нет ни в функциях, ни в константах, а у функции EffectAbilityIncrease только два параметра - (int nAbilityToIncrease, int nModifyBy). scratch_one-s_head.gif
Неужели шкурку придется делать? Я не смогу... sad.gif
Lex
перестановка слов даст офигенный результат: SupernaturalEffect, ExtraordinaryEffect.

зы: могли бы сами искать не тупо по полному названию, а по ключевой части smile.gif
shadowdweller
Цитата(Lex @ Dec 2 2007, 02:07) *
перестановка слов даст офигенный результат: SupernaturalEffect, ExtraordinaryEffect.

зы: могли бы сами искать не тупо по полному названию, а по ключевой части smile.gif

Если тебе интересно, о остроумнейший, искала по слову Effect. Извини, что побеспокоила.
Lex
Цитата(shadowdweller @ Dec 3 2007, 13:02) *
Если тебе интересно, о остроумнейший, искала по слову Effect. Извини, что побеспокоила.

эффектов куча, искать надо по более уникальной части. Ну это совет на будущее smile.gif
нашла хотяб? smile.gif
Aiwan
Сделай сейв и загрузи его. Проверь сохранится или нет.
gennady
Ну, раз и меня подключили к этому скрипту, то хочу немного добавить. Вам нужно выбрать что-то одно, т.к. это разные эффекты…
Как уже неоднократно писалось, да и в WIKI тема эффектов разобрана по полочкам, да и я тут тоже типа обучалки скриптингу написал, можно посмотреть и там о наложение эффектов: http://remmgen.narod.ru/tscript2.html
Neverwinter Script
void main( )
{
object oPC = GetFirstPC( );
effect eSTR = EffectAbilityIncrease( ABILITY_STRENGTH, 3 );
// Экстраординарные ( Extraordinary ) – не могут быть сняты с помощью заклинания, автоматически снимаются в конце отдыха.
effect eExt = ExtraordinaryEffect( eSTR );
// Сверхъестественные ( Supernatural ) – не могут быть сняты ни заклинанием, ни с помощью отдыха.
effect eSup = SupernaturalEffect( eSTR );

// Накладываем эффекты
ApplyEffectToObject( DURATION_TYPE_PERMANENT, eExt, oPC );
// или чтобы не снимался
ApplyEffectToObject( DURATION_TYPE_PERMANENT, eSup, oPC );
}

Цитата(shadowdweller @ Dec 2 2007, 00:32) *
а у функции EffectAbilityIncrease только два параметра - (int nAbilityToIncrease, int nModifyBy).

Тут все просто… меняем константы:
ABILITY_CHARISMA
ABILITY_CONSTITUTION
ABILITY_DEXTERITY
ABILITY_INTELLIGENCE
ABILITY_STRENGTH
ABILITY_WISDOM
и величину int nModifyBy т.е. на сколько хотим добавить тот или иной бонус к характеристики. Если не ошибаюсь, то max= 176… Неужели этого недостаточно?!
Lex
Цитата(gennady @ Dec 3 2007, 17:51) *
Неужели этого недостаточно?!

неа ph34r.gif
это не совсем корректно, точнее совсем не корректно.
Твоим скриптом мы получим 2х кратный бонус, часть которого снимется после отдыха, а часть после диспела. Задача же базово совсем в другом.

зы: влезание в тему, это похвально, но надо внимательнее читать пост про поставленную задачу. smile.gif


Цитата(Aiwan @ Dec 3 2007, 16:48) *
Сделай сейв и загрузи его. Проверь сохранится или нет.

это не то. Нужно проверять отдыхом и диспелом. Сэйв/Лоад сохраняет временные эффекты, что уж говорить об Инстант или Перманент

Я Шад уже все в приват написал, но там что-то не работает. Приеду домой, сам посмотрю.


зы: самый надежный способ - шкуркой.
Aiwan
Цитата(Lex @ Dec 3 2007, 20:08) *
зы: самый надежный способ - шкуркой.

Но самый муторный. Самое надежное забить на это и жить длаьше. Игрок вашего геммора даже не заметит, не то что бы оценить! declare.gif
Lex
Цитата(Aiwan @ Dec 4 2007, 06:35) *
Но самый муторный.

да ладно? дать свойство на шкурку - 2 строки. Шкурку надо одевать вообще в начале модуля smile.gif так что не вводи людей в заблуждение, шкурка форевар smile.gif

зы: легкий гимор есть при отслеживании перезаходов.
Aiwan
Если шкурка одна то да. А если всякие системы шкурок то великое тра та та... Типа наборы доспехов в монете судьбы.
Lex
Цитата(Aiwan @ Dec 4 2007, 17:40) *
Если шкурка одна то да. А если всякие системы шкурок то великое тра та та... Типа наборы доспехов в монете судьбы.

ты просто не умеешь их готовить. "Системы шкурок". 1 шкурка и свойства на нее вешать. И удалять если нада. Всего делов то smile.gif
Белатрис
лЕКС, не мог бы объяснить мне, как одеть и и "нацепить" способности на эту шкурку?
Заранее спасибо.
Lex
одеть - EquipItem. Слот *_MARMOR. (Monster Armor).
свойство дать - AddProperty
Белатрис
Почему в результате(вроде нормально работающего) этого скрипта, туман, который должен появится в дождь, появляется, а потом мигает при смены ракурса камеры? Если мне не показалось, он также уменьшается, а потом увеличивается(снова и снова), когда я хожу по локации...
П.С. Не показалось, перепроверил. Получается, цикл повторяется... по почему? Я же специально для этого переменные ввел...
Кто-нибудь может помочь?
Neverwinter Script Source
int i, o, k;
void main( )
{
   
    object oArea = GetArea( GetFirstPC( ) );
    if( GetWeather( oArea ) == WEATHER_RAIN )
    {
            k = 0;
            if( o == 0 )
            {
            SetSkyBox( SKYBOX_GRASS_STORM, oArea );
            // Цвет тумана
            SetFogColor( FOG_TYPE_ALL, 0x9F9F9D, oArea );
            // задержка
            float fDelay = 0.0;
            // Постепенное увеличение тумана
            for( i = 5; i < 51; i++ )
            {
                DelayCommand( fDelay, SetFogAmount( FOG_TYPE_SUN, i, oArea ) );
                fDelay = fDelay + 0.2;
                if( i == 25 )
                {
                    // Сейчас пойдет дождик
                    DelayCommand( fDelay, SetWeather( oArea, WEATHER_RAIN ) );
                }
            }
            o = 1;
            }
            else
            {
                return;
            }
    }
    else if ( GetWeather( oArea ) == WEATHER_CLEAR )
    {
            o = 0;
            if( k == 0 )
            {
            SetSkyBox( SKYBOX_GRASS_CLEAR, oArea );
            // Цвет тумана
            float fDelay = 0.0;
            for( i = 61; i != 1; i-- ) // Постепенное уменьшение тумана
            {
                DelayCommand( fDelay, SetFogAmount( FOG_TYPE_SUN, i, oArea ) );
                fDelay = fDelay + 0.2;
                if( i == 48 )
                {
                        // Сейчас выползет солнышко
                        DelayCommand( fDelay, SetWeather( oArea, WEATHER_CLEAR ) );
                }
            }
            DelayCommand( fDelay, SetFogColor( FOG_TYPE_ALL, 0x6AC7FC, oArea ) );
            }
            k = 1;
            }
            else
            {
                return;
            }
}


Заранее спасибо!
Lex
вроде он мигает при смене настроек (туман).
По поводу зацикленности - надо смотреть, как меняется weather. Она может у тебя поменяться пока туман увеличивается для дождя и начнутся 2 противоречивых процесса.

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

и непонятен смысл
Neverwinter Script Source
DelayCommand( fDelay, SetWeather( oArea, WEATHER_CLEAR ) );

ты же выше проверил, чтоп огода у тебя
Neverwinter Script Source
if ( GetWeather( oArea ) == WEATHER_CLEAR )

те эта команда ничего не сделает
Белатрис
Цитата
DelayCommand( fDelay, SetWeather( oArea, WEATHER_CLEAR ) );

Просто сюда вошли два скрипта и, видимо, я пропустил этот момент.
Цитата
По поводу зацикленности - надо смотреть, как меняется weather. Она может у тебя поменяться пока туман увеличивается для дождя и начнутся 2 противоречивых процесса.

Я даже специально поставил 100% дождя. Все равно мигает... vava.gif Блин, а ведь так прикольно получается... неужели придется сносить этот эффект? unsure.gif
Lex
хм.. тады возможно эти 100% сбивают все
Vego
2Белатрис: Здравствуйте, проблема во временных переменных. Насколько я понял, вы вешаете этот скрипт как OnHeartbeat, который выполняется каждые шесть секунд. Но действие вашего скрипта больше шести секунд. Во второй части скрипта вы к fDelay(вначале 0) в цикле добавляете по 0.2 секунды, что за 60 итераций составляет 12 секунд (а второй раз этот скрипт запускается через 6), соответственно у вас начинают одновременно выполняться два скрипта, которые поочередно меняют насыщенность тумана.
Белатрис
Даже это не помогает... Ладно, уберу нафиг эту идею из головы.
Тут еще один вопрос:
Neverwinter Script Source
void main( )
{
    object DAG = GetObjectByTag( "dag" );
    object wp1 = GetObjectByTag( "DAG_RASP_WP1" ); // ТОЧКА РЫНКА
    object wp2 = GetObjectByTag( "DAG_RASP_WP2" ); // ТОЧКА НА ПЛОЩАДИ
    int i = GetTimeHour( );
    float fTime = 17.0;
    if ( IsInConversation( DAG ) )
    { return; }
    else
    {
    if ( i > 7 && i < 19 )
    {
        SetLocalInt( DAG, "DAG_BRETT_DIALOG", 0 );
        if( GetDistanceBetween( DAG, wp1 ) > 1.0 )
        AssignCommand( DAG, ActionForceMoveToObject( wp1, FALSE, 1.0, 25.0 ) );
        ActionWait( 5.0 );
        SetLocalInt( DAG, "ACTION", 1 ); // ДЛЯ ХБ
        DelayCommand( fTime, SetLocalInt( DAG, "ACTION", 0 ) ); // ДЛЯ ХБ
    }
    if ( i > 19 && i < 24 )
    {
        SetLocalInt( DAG, "DAG_BRETT_DIALOG", 1 );
        if( GetDistanceBetween( DAG, wp1 ) > 1.0 )
        AssignCommand( DAG, ActionForceMoveToObject( wp2, FALSE, 1.0, 25.0 ) );
        ActionWait( 5.0 );
        SetLocalInt( DAG, "ACTION", 1 ); // ДЛЯ ХБ
        DelayCommand( fTime, SetLocalInt( DAG, "ACTION", 0 ) ); // ДЛЯ ХБ
    }
    if ( i > 0 && i < 7 )
    {
        SetLocalInt( DAG, "DAG_BRETT_DIALOG", 1 );
        if( GetDistanceBetween( DAG, wp1 ) > 1.0 )
        AssignCommand( DAG, ActionForceMoveToObject( wp2, FALSE, 1.0, 25.0 ) );
        ActionWait( 5.0 );
        SetLocalInt( DAG, "ACTION", 1 ); // ДЛЯ ХБ
        DelayCommand( fTime, SetLocalInt( DAG, "ACTION", 0 ) ); // ДЛЯ ХБ
    }
    }
}

Почему чел, как стоял на точке 1, так и продолжает в независимости от времени суток? unsure.gif
П.С. Никто не знает, как проверить, открыл ли ПС дверь?(скрипт на OnHeatbat

П.П.С. И еще, как при создании NPC сделать так, чтобы он сверху спускался? Как пауки в ХОТУ.

П.П.П.С. Чуть не забыл:
Neverwinter Script Source
AddItemProperty( int nDurationType, itemproperty ipProperty, object oItem, float fDuration=0.0f )

Все, кроме третьего параметра, мне не понятны... Объясните кто-нибудь...
Заранее спасибо!
Milfes
Если я правильно понял, то когда проверяются промежутки времени между 19 и 24 часами и между 0 и 7 у тебя строку
Neverwinter Script Source
if( GetDistanceBetween( DAG, wp1 ) > 1.0 )

надо заменить на
Neverwinter Script Source
if( GetDistanceBetween( DAG, wp2 ) > 1.0 )


Цитата
П.П.П.С. Чуть не забыл:

Neverwinter Script Source
AddItemProperty( int nDurationType, itemproperty ipProperty, object oItem, float fDuration=0.0f )


Все, кроме третьего параметра, мне не понятны... Объясните кто-нибудь...


nDurationType - тип продолжительности(DURATION_TYPE_PERMANENT-постоянный или DURATION_TYPE_TEMPORARY-временный)
ipProperty - свойство добавляемое на предмет
fDuration-время на которое добавится свойство
Белатрис
Спасибо огромное! Но тут еще один вопрос вытекает...
Почему это:
Neverwinter Script Source
    AddItemProperty( DURATION_TYPE_PERMANENT, ABILITY_DEXTERITY, GetObjectByTag( "SKURKA" ), DURATION_TYPE_PERMANENT );

И это:
Neverwinter Script Source
    AddItemProperty( DURATION_TYPE_PERMANENT, ABILITY_DEXTERITY, GetObjectByTag( "SKURKA" ), 100.0 );

Считаются неправильными?
Dik Morris
Давно я сюда уже не забегал...
Впрочем и не тянет уже... Откровенно говоря.
Помните? Былые времена? Заходишь... "Новые сообщения"...
...А там...
Пардон.

2 Белатрис, последний защитник тулсета? Удачи (но помни, дело это довольно гиблое).
Я конечно не знаю, что у тебя там не так, а что так, но, попробуем разобраться.

Первая строка: имеется переменная: "DURATION_TYPE_PERMANENT", причем последнее слово из её название означает грубо говоря, "постоянный". Так? Так. Значит, во-втором случае, значение: "100.0" совсе не нужно. Константа делает этот эффект постоянным.

Так же рекомендую прочитать описание самой функции: "AddItemProperty", поверь там очень, много полезного и думаю, после этой маленькой операции, вопрос разрешится.
Белатрис
А где именно почитать? Те две строчки на английском и есть описание? prankster2.gif
Даже если и так:
Neverwinter Script Source
AddItemProperty( DURATION_TYPE_PERMANENT, ABILITY_DEXTERITY, GetObjectByTag( "SKURKA" ) );

Все равно: ОШИБКА: ДЕКЛАРАЦИЯ НЕ СООТВЕТСТВУЕТ ПАРАМЕТРАМ shok.gif
Цитата
2 Белатрис, последний защитник тулсета? Удачи (но помни, дело это довольно гиблое).

Хех...
А вот еще пара вопросов:
Цитата
П.С. Никто не знает, как проверить, открыл ли ПС дверь?(скрипт на OnHeatbat)

П.П.С. И еще, как при создании NPC сделать так, чтобы он сверху спускался? Как пауки в ХОТУ.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.