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

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

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


Level 11
***

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



Спасибо, теперь я понял, наконец. (IMG:style_emoticons/kolobok_light/rolleyes.gif)

Сообщение отредактировал Белатрис - Sep 29 2007, 15:29
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Sep 30 2007, 03:54
Сообщение #2792


Level 11
***

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



Собственно, я хочу, чтобы туман увеличивался постепенно. А он сразу - БАХ и много =( и дождь вместе с ним сразу начинает лить... А звук задерживается... вот...
Neverwinter Script Source
void main()
{
    int i;
    object oArea = GetArea(GetFirstPC());
    // Цвет тумана
    SetFogColor(FOG_TYPE_ALL, FOG_COLOR_GREY, oArea);
    // Постепенное увеличение тумана
    for( i = 5; i < 91; i++ )
    {
        SetFogAmount(FOG_TYPE_SUN, i, oArea);
            ActionWait(0.5);
    }
    // Сейчас пойдет дождик =)
    ActionWait(5.0);
    SetWeather(oArea, WEATHER_RAIN);
}


Сообщение отредактировал Белатрис - Sep 30 2007, 04:39
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Sep 30 2007, 11:38
Сообщение #2793


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

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



мдя... ессно он сразу и много.
через DelayCommand делать нужно. Да и даже если бы работало, полсекунды - мало.

зы: Actions идут в стек и выполняются по очереди и имеют некую длительность, а команды (в тч и SetColorFog) исполняются почти сразу и все.
зыы: и грузить акшн-лист игрока для переключения тумана - не фонтан (IMG:style_emoticons/kolobok_light/smile.gif)

Neverwinter Script Source
void main()
{
    int i;
    object oArea = GetArea(GetFirstPC());
    // Цвет тумана
    SetFogColor(FOG_TYPE_ALL, FOG_COLOR_GREY, oArea);
    // задержка
    float fDelay = 0.0;
    // Постепенное увеличение тумана
    for( i = 5; i < 91; i++ )
    {
        DelayCommand(fDelay,SetFogAmount(FOG_TYPE_SUN, i, oArea));
        fDelay = fDelay + 1.0;
    }
    // Сейчас пойдет дождик
    DelayCommand(fDelay,SetWeather(oArea, WEATHER_RAIN));
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Sep 30 2007, 12:08
Сообщение #2794


Level 11
***

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



Хм... Извини, я немного подкорректировал. Выглядит довольно реалистично. (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Neverwinter Script Source
void main()
{
    int i;
    object oArea = GetArea(GetFirstPC());
    // Цвет тумана
    SetFogColor(FOG_TYPE_ALL, FOG_COLOR_GREY, oArea);
    // задержка
    float fDelay = 0.0;
    // Постепенное увеличение тумана
    for( i = 5; i < 61; i++ )
    {
        DelayCommand(fDelay,SetFogAmount(FOG_TYPE_SUN, i, oArea));
        fDelay = fDelay + 0.2;
        if( i == 18 )
        {
            // Сейчас пойдет дождик
            DelayCommand(fDelay,SetWeather(oArea, WEATHER_RAIN));
        }
    }
}

Из-за большого значения туман мигает. Т.е. пропадает, появляется(больше на единицу), пропадает, появляет и т.д.

П.С. А как перевести из float в int и наоборот?

Сообщение отредактировал Белатрис - Sep 30 2007, 12:09
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Sep 30 2007, 12:52
Сообщение #2795


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

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



Цитата(Белатрис @ Sep 30 2007, 13:08) *
Хм... Извини, я немного подкорректировал. Выглядит довольно реалистично.

да мне пофиг, я твой скрипт поменял чтобы он работал, а "красиво выглядит" это уже не моя забота, а твоя.
Цитата(Белатрис @ Sep 30 2007, 13:08) *
как перевести из float в int и наоборот?

IntToFloat, FloatToInt. Порабы знать.

зы: и начинай уже сам пользоваться фильтром функций для поиска нужных функций по ключевым словам.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение 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 );
    }

}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 3rd May 2025 - 06:48