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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 111 112 113 114 115 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Белатрис
сообщение Sep 30 2007, 13:24
Сообщение #2796


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Не сердись. Спасибо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 2 2007, 11:42
Сообщение #2797


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Млин, помогайте. Я уже запарился. Как сделать, чтобы в три часа, к примеру, выполнялись действия. Как проверить время?... (IMG:style_emoticons/kolobok_light/unsure.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 2 2007, 13:29
Сообщение #2798


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Neverwinter Script Source
int GetTimeHour()


в любой периодическии исполняемый скрипт (например heartbeat модуля) ставишь проверку на время и нужные действия

зы: поиск функций по слову "Time"
зыы: функции работы с днем/месяцем/годом находятся по слову "calendar"
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 2 2007, 14:04
Сообщение #2799


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Так?
Neverwinter Script Source
........
int i;
i = GetTimeHour();
if( i == 12 )
{
    /* действия */
}
........
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 2 2007, 14:49
Сообщение #2800


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



почти.
2 момента:
- у тебя исполняться будет в течении игрового часа каждые 6 секунд
- у тебя это исполняться будет каждый игровой день в это время
решается просто (если день не важен. Если важен, надо заюзать проверку дня)
Neverwinter Script Source
int i;
i = GetTimeHour();
if( i == 12 ) && (!GetLocalInt(OBJECT_SELF,"do_once_12_hours"))
{
    SetLocalInt(OBJECT_SELF,"do_once_12_hours",TRUE);
    /* действия */
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 2 2007, 14:59
Сообщение #2801


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



мне надо, чтобы каждый день повторялось. спасибо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 5 2007, 12:28
Сообщение #2802


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



А для животных есть какая-нибудь анимация? Я что-то не нашел...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 5 2007, 12:38
Сообщение #2803


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



есть. Где-то четверть от анимационных констант работают для животных. Лечь, головой вертеть.. не помню какие еще.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Shadenuat
сообщение Oct 16 2007, 15:00
Сообщение #2804


Level 5
**

Класс: Друид
Характер: True Neutral
Раса: Человек



Как уничтожить "декоративный трупик" скриптом (например через опцию в диалоге), созданный

Neverwinter Script Source

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


скриптом, который стоит на OnAppear (ну или на OnDeath)?

Сообщение отредактировал Shadenuat - Oct 16 2007, 15:01
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 16 2007, 15:47
Сообщение #2805


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Neverwinter Script Source
void main( )
{
SetIsDestroyable( TRUE, FALSE, FALSE );
DestroyObject( OBJECT_SELF );
}

на строке диалога
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Shadenuat
сообщение Oct 16 2007, 18:06
Сообщение #2806


Level 5
**

Класс: Друид
Характер: True Neutral
Раса: Человек



Это если трупик говорящий?
А можно применить действие SetIsDestroyable к тегу трупа?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Oct 16 2007, 19:54
Сообщение #2807


Level 12
Иконки Групп

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



Цитата
А можно применить действие SetIsDestroyable к тегу трупа?

вот так можно променять объект для функции по умолчанию работающие с OBJECT_SELF.
Neverwinter Script Source
AssignCommand( GetObjectByTag( "TAG" ), SetIsDestroyable( TRUE ));
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Shadenuat
сообщение Oct 17 2007, 12:20
Сообщение #2808


Level 5
**

Класс: Друид
Характер: True Neutral
Раса: Человек



Второй день мучаюсь, наконец получилось что надо. Спасибо Lex, огромное спасибо Azathoth.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 17 2007, 13:36
Сообщение #2809


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Я вот думал, думал... как сделать, чтобы анимация проигрывалась постоянно? Пока условие не станет ложным.
И, правильно ли это:
Neverwinter Script Source

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

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

П.С. Ах, еще забыл. Как засечь время. К примеру, мне нужно, чтобы строка диалога появлялась каждые три дня. На heartbeat ставить проверку? Ну, допустим, прошел час - прибавили к переменной единицу. А потом, когда в диалоге строка была использована, переменная обнуляется... (IMG:style_emoticons/kolobok_light/unsure.gif) А как определить, прошел ли час? (IMG:style_emoticons/kolobok_light/prankster2.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 17 2007, 14:06
Сообщение #2810


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Белатрис @ Oct 17 2007, 14:36) *
if( i > 23 && i < 7 )

у тебя не может быть число одновременно больше 23 и меньше 7. Ты бы проверил чтоли сам для начала (IMG:style_emoticons/kolobok_light/biggrin.gif)

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

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

лучше всего юзать старый (хз кем запатентованный) способ: переводить все в часы. Вплоть до года. Соотв. в начальный момент запоминаешь это мега число. Сравниваешь в ХБ, как только разница между текущей датой (переведенной в часы) станет ровна или превысит 72 - значит прошло ровно 3 суток с момента запоминания. Выполняй действие, а момент запоминания ставь текущий и все начнется по новой. Осилишь написать скрипт по такому описанию? Это всего лишь 3 строки кода.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Oct 17 2007, 14:22
Сообщение #2811


Level 12
Иконки Групп

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



можно вообще без хб, и без часов...
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, 15:00
Сообщение #2812


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Цитата(Белатрис @ 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
сообщение Oct 17 2007, 15:39
Сообщение #2813


Level 12
Иконки Групп

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



о, а ведь был в полной уверености, что функция отсчитывает от "рождества христова". буду знать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 17 2007, 17:08
Сообщение #2814


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



чтобы банально уменьшить число, можно запомнить год начала игры и считать от него (те из текущего года вычитать год игры). Но в целом Гена то самое и написал. Только я хотел чтобы это Белатрис сделал. Эх, не судьба.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 18 2007, 12:14
Сообщение #2815


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Не выполняется сий скрипт:
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:04
Сообщение #2816


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Цитата(Белатрис @ 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 ) ); // ДЛЯ ХБ
    }
    // и т.д. ...
}


Сообщение отредактировал gennady - Nov 28 2007, 05:24
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 18 2007, 13:22
Сообщение #2817


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(gennady @ Oct 18 2007, 14:04) *
Чет не верится, что это Лекс писал… Я бы записал так… Объяснять не буду… все тут

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

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

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

на будущее: пиши что именно не работает.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Oct 18 2007, 18:08
Сообщение #2818


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



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

Это ж как??? А кто тут все учил, что FIREFORGET имеет только скорость? Как раз таки я и пытался вынести эти параметры, но первый блин комом (IMG:style_emoticons/kolobok_light/biggrin.gif) .
Белатрис, скрипт я поправил, должно работать… Наверно, это писалось для ХБ плейса управления? И циклы тут уж точно не нужны…
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 18 2007, 19:15
Сообщение #2819


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(gennady @ Oct 18 2007, 19:08) *
то ж как??? А кто тут все учил, что FIREFORGET имеет только скорость?

там от балды цифры стоят, это скрипт-шаблон, настраивать нужно уже самому (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 23 2007, 06:20
Сообщение #2820


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Не ходит, только проигрывает анимацию... (IMG:style_emoticons/kolobok_light/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 ) ); // ДЛЯ ХБ
    }
}


Сообщение отредактировал Белатрис - Oct 23 2007, 06:21
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 111 112 113 114 115 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28th July 2025 - 11:16