• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.

Автор Тема: Скрипты  (Прочитано 51657 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dx117

  • *
  • Сообщений: 117
  • Репутация: -0.1
    • ICQ клиент - 57892603
    • Просмотр профиля
    • http://dx117.rumor.ru
Скрипты
« : 26 Декабрь, 2004, 16:10:28 »
0
Извечная головная боль модостроителя - ошибок нет, а скрипт не идет! Да и вообще, как правильно их писать? Вот здесь и поговорим:)
...те кто нас любят смотрят нам вслед
морровинд мертв а мы ...
Награды Награждаются форумчане, заставшие зарождение Румора

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #1 : 27 Декабрь, 2004, 16:31:24 »
0
Такс :) Есть специ? Вопрос простой :) : Будут ли работать следующие скрипты:

******************************************************
Этот должен призывать воина, но только когда игрок в режиме боя со здоровьм менее 50%. По окончании боя воин должен изчезнуть :) (хотя и не строго обязятельно, т.к. продублировал в гритинге,, т.е. при попытке поговорить с воином, тот говорит асталависта и "уходит" :)

Begin _GL_Amma_Ring_scr
; Summon an _GL_Amma_Warior when player activite the Amulet
;
; script location: should be placed upon an object _GL_c_Amulet_Amma

; variables
short OnPCHitMe
Short OnPCEquip
short done

if ( MenuMode )
   Return
endif

if ( OnPCEquip == 1 )
   if ( OnPCHitMe ==1 )
      if (GetHealthGetRatio < .5 )
         if ( done == 1 )
            return
         else
            Set done to 1
            PlaceAtPC "_GL_Amma_Warior" 1 256 2
            PlaySound3D "mysticism cast"
            MessageBox "Amma послал Вам на помощь своего воина."
            ;1 of them, 256 units away, in Right (2) of the player
            Cast "Restore Attributes" Player                     ;restore eight attributes
            Cast "Restore Fighter" Player               ;restore eight fighter skills
            Cast "Restore Mage" Player               ;restore eight mage skills
            Cast "Restore Stealth" Player               ;restore eight stealth skills
            Cast "Restore Other" Player               ;restore three other skills
            Cast "divine aid", Player
            Cast "rapid regenerate", Player
            MessageBox "В минуту опасности Амма послал Вам свое благословение."
         endif
      endif
   endif
endif

elseif ( done == 1 )
   if ( OnPCHitMe == 0 )
         Set done to 0
         Disable "_GL_Amma_Warior"
      endif
   endif
endif

End _GL_Amma_Ring_scr_02

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Этот скрипт даже не уверен, что нужен... Он на том же "призванном" воине (это не полноценный компаньон, а типа вызванного дреморы и пр., только человек, почти :))

Begin _GL_Amma_Warrior_comp_scr

;local script

short followNow
short isdead
float warptimer
float myx
float myy
float myz

short f_speed
short f_athletics

if ( MenuMode == 1 )
   return
endif

if ( isdead == 1 )
   return
endif

if ( ondeath == 1 )
   return
endif

if ( GetHealth <= 0 )
   set isdead to 1
   MessageBox, "Воин Амма, посланный Вам на помощь, погиб."
endif

; FOLLOW MODE.

if ( GetCurrentAiPackage == 3 )

   Set followNow to 1
   SetHello 0

   if ( GetHealthGetRatio < .3 )
      SetFlee, 1000
      elseif ( GetHealthGetRatio > .3 )
          SetFlee, 30
          set f_speed to ( ( Player->GetSpeed ) + 100 )
          set f_athletics to ( ( Player->GetAthletics ) + 100 )
          SetSpeed, f_speed
          SetAthletics, f_athletics
      endif
   endif
endif

; WANDER MODE

if ( GetCurrentAiPackage == 0 )
   Set followNow to 0
   SetHello 30
endif

; WARPING TO PLAYER

if ( GetCurrentAiPackage == 3 )
   if ( GetWeaponDrawn )
   elseif ( GetSpellReadied )

   elseif ( GetDistance Player > 800 )
       if ( GetFlee < 1000 )
             set warptimer to ( warptimer + GetSecondsPassed )
             if ( warptimer > 8 )
                   set warptimer to 0
               set myx to ( Player->GetPos x )
               set myy to ( Player->GetPos y )
               set myz to ( Player->GetPos z )
               SetPos x myx
               SetPos y myy
               SetPos z myz
             endif
        endif
   endif
endif


End _GL_Amma_Warrior_comp_scr

**********************************

Есть и другие...  Все это в моде, который уже почти готов. Потому ответ нужен весьма  срочный :) Ежели нет - потрите пост :)
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #2 : 28 Декабрь, 2004, 11:36:35 »
0
Доброго времени суток, Galib!

После тщательного просмотра первого скрипта, у меня возникли некоторые вопросы...

Я так понимаю, что скрипт "_GL_Amma_Ring_scr" "висит" на амулете? Если это так, то не все моменты в Вашем скрипте правильно использованы... А именно:

- Функция "OnPCHitMe" неприменима к объектам.
- Функцией "GetHealthGetRatio" Вы проверяете здоровье амулета, что не совсем корректно...
- Не уверен в правильности использования "< .5"... Думаю, будет надежнее, если Вы напишете "< 0.5".
- Функция "Cast" не может быть применена к предметам (амулет, кольцо и т.д.), которые "надеты" на игрока, так как они пропадают из мира Морровинд, что не позволит данным объектам выполнить вышеупомянутую функцию.

Жду Вашего ответа.
С уважением, Romualdo.

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #3 : 28 Декабрь, 2004, 16:07:57 »
0
Romualdo Спасибо за отклик. Все логично и понятно :) И куды мои глаза смотрели, и о ком голова думала? :) Сейчас попробую поправить, как раззумею, а  потом с, т.е. без позволения, но напишу письмо с просьбой и другие глянуть :).
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #4 : 28 Декабрь, 2004, 21:56:59 »
0
Сранно, но не могу отредактировать предыдущий пост :o
Если я правильно понял, то лучше, ежели я зам вопросы прямо в теле форума?  Дабы другие могли что-то для себя из примеров почерпнуть? Хорошо, конечно, я двумя руками "ЗА"
Потому вот:
   Вопрос конечно в скриптах. Я не спец, не программер. Написал по своему разумению. В игре ещё не успел проверить. Сегодня - завтра закончу (так думается :)) мод и буду смотреть уже в игре. В конструкторе они все "компилируются", но..
   Просьба в том, чтобы просмотреть и поравить, ежели что не так :)

Все из мода с подружкой, Дакой зовут. У неё есть свои скрипты, но там все нормально.. более-менее работало (с GFM только и с WGI9 были какие-то нестыковки при поднятии уровня, но оно и понятно, почему), потому их я не шлю.

№№№№№№
Вот этот размещается: один на черепке-активаторе, а ещё, такой же, на черепке-контейнере :). Потрешь/откроешь - должен возникнуть дух и говорить, либо драться (просто убьет)


Begin _GL_Yurugu_Script_scr_01
; Summon an Sririt of Yurugu when player activite the skull
;
; script location: should be placed upon an object _GL_act_skull00_Yurugu

; variables
short done

if ( OnActivate == 1 )
   if ( done == 1 )
      Activate
      return
   else
      Set done to 1
      PlaceAtPC "_GL_cr_Spirit_Yurugu" 1 256 1
      ;1 of them, 256 units away, in back (1) of the player
      PlaySound3D "mysticism cast"
      Activate
   endif
endif

End _GL_Yurugu_Script_scr_01

%%%%%%%%%%%%%%%%%%%%%%
Этот на самом духе (креатюра) - активирует разговор, либо бой, ежеи игрок преждевременно его потревожил

Begin _GL_Yurugu_Script_scr_02

if ( menumode == 1 )
   return
endif

; talk to player if story has not been told
if ( GetDistance, Player <= 182 )
   if ( GetJournalIndex "_GL_Yurugu" >= 15 )
      ForceGreeting
      else
         ModDisposition -80
         SetFight 100
         StartCombat, player
      endif
   endif
endif


if ( GetJournalIndex "_GL_Yurugu" >= 100 )
   if ( GetDisabled == 0 )
      Disable
   endif
endif

End _GL_Yurugu_Script_scr_02

***********************************
Этот скрипт - "чужой", слегка переделанный мной, он на оригинальном клинке (ручка с двумя лезвиями), который заменяет, по мере роста персонажа, клинки (натупательный и блокировочный) на более мощные

Begin _GL_w_Yurugu_01_Scr

short doOnce
short OnPCEquip

if ( menumode == 1 )
   return
endif

if ( doOnce > 1 )
   return
endif


If ( player->GetItemCount "_GL_w_Blade_of_Yurugu_01" == 1 )
      If ( Player->GetLevel > 1 )
         If ( player->GetLongblade > 29 )
            Playsound "skillraise"
            MessageBox "Дух Йуругу, покровителя разрушения и владыки царства мертвых, посетил тебя, и лезвия изменились"
            Player->AddItem "_GL_w_Blade_of_Yurugu_02" 1
            Player->AddItem "_GL_a_shield_Yurugu_02" 1
            Set doOnce to 2
         endif
      endif   
endif

End _GL_w_Yurugu_01_Scr

Второй:
Begin _GL_w_Yurugu_02_Scr

short doOnce
 
if ( menumode == 1 )
   return
endif

if ( doOnce > 1 )
   return
endif

if ( Player-> GetItemCount, "_GL_w_Blade_of_Yurugu_01" == 1 )
   Player->RemoveItem, "_GL_w_Blade_of_Yurugu_01", 1
   RemoveItem, "_GL_a_shield_Yurugu_02", 1
endif

if ( player->GetItemCount, "_GL_w_Blade_of_Yurugu_02" == 1 )
   If ( Player->GetLevel > 3 )
      If ( player->GetLongblade > 39 )
         Playsound "skillraise"
         MessageBox "Дух Йуругу, владыки царства мертвых и покровителя разрушения, посетил тебя, и изменил лезвия"
         Player->AddItem, "_GL_w_Blade_of_Yurugu_03", 1
         Player->AddItem, "_GL_a_shield_Yurugu_03", 1
         Set doOnce to 2
      endif
   endif   
endif

End _GL_w_Yurugu_02_Scr

И так до десятого, который на десятом варианте "Лезвий":

Begin _GL_w_Yurugu_10_Scr

if ( menumode == 1 )
   return
endif

if ( Player-> GetItemCount, "_GL_w_Blade_of_Yurugu_09" == 1 )
   Player->RemoveItem, "_GL_w_Blade_of_Yurugu_09", 1
   RemoveItem, "_GL_a_shield_Yurugu_08", 1
endif

End _GL_w_Yurugu_10_Scr

Защитных лезвий я предусмотрел  чуть меньше
.
**********************************
Этот был в первом посте. Он на амулете. Вызывает "скорую помощь" (типа "Таинственного незнакомца" в Fallou'е)  Тут мне пока не понятно еще и то, а будет ли этот воин вообще сражаться за игрока?  И как остальное поправить? каккой переменной, т.е. как проверить здоровье игрока скриптом на амулете? Я написал, тогда, вот так:

Begin _GL_Amma_Amulet_scr
; Summon an _GL_Amma_Warior when player activite the Amulet
;
; script location: should be placed upon an object _GL_c_Amulet_Amma

; variables
short OnPCHitMe
Short OnPCEquip
short done

if ( MenuMode )
   Return
endif

if ( OnPCEquip == 1 )
   if ( OnPCHitMe ==1 )
      if ( Player GetHealthGetRatio < 0.5 )
         if ( done == 1 )
            return
         else
            Set done to 1
            PlaceAtPC "_GL_Amma_Warior" 1 256 2
            PlaySound3D "mysticism cast"
            MessageBox "Amma послал Вам на помощь своего воина."
            ;1 of them, 256 units away, in Right (2) of the player
            AiFollow Player, "_GL_Amma_Warior", 0 0 0 0
            "_GL_Amma_Warior"->Cast "Restore Attributes" Player      ;restore eight attributes
            "_GL_Amma_Warior"->Cast "Restore Fighter" Player         ;restore eight fighter skills
            "_GL_Amma_Warior"->Cast "Restore Mage" Player      ;restore eight mage skills
            "_GL_Amma_Warior"->Cast "Restore Stealth" Player      ;restore eight stealth skills
            "_GL_Amma_Warior"->Cast "Restore Other" Player      ;restore three other skills
            "_GL_Amma_Warior"->Cast "divine aid", Player
            "_GL_Amma_Warior"->Cast "rapid regenerate", Player
            MessageBox "В минуту опасности Амма через своего воина послал Вам свое благословение."
         endif
      endif
   endif
endif

elseif ( done == 1 )
   if ( OnPCHitMe == 0 )
         Set done to 0
         Disable "_GL_Amma_Warior"
      endif
   endif
endif

End _GL_Amma_Amulet_scr

***********************************
Этот тоже был на форуме. Он на самом "призванном" воине. Не уверен, что он вообще нужен, т.к.

вряд ли во время боя игрок будет передвигаться на большие растояния.. Это "кусок", т.е.

"вырезки" из одного "чужого" "компаньонского" скрипта.

Begin _GL_Amma_Warrior_comp_scr

;local script

short followNow
short isdead
float warptimer
float myx
float myy
float myz

short f_speed
short f_athletics

if ( MenuMode == 1 )
   return
endif

if ( isdead == 1 )
   return
endif

if ( ondeath == 1 )
   return
endif

if ( GetHealth <= 0 )
   set isdead to 1
   MessageBox, "Воин Амма, посланный Вам на помощь, погиб."
endif

; FOLLOW MODE.

if ( GetCurrentAiPackage == 3 )

   Set followNow to 1
   SetHello 0

   if ( GetHealthGetRatio < .3 )
      SetFlee, 1000
      elseif ( GetHealthGetRatio > .3 )
          SetFlee, 30
          set f_speed to ( ( Player->GetSpeed ) + 100 )
          set f_athletics to ( ( Player->GetAthletics ) + 100 )
          SetSpeed, f_speed
          SetAthletics, f_athletics
      endif
   endif
endif


; WANDER MODE

if ( GetCurrentAiPackage == 0 )
   Set followNow to 0
   SetHello 30
endif


; WARPING TO PLAYER

if ( GetCurrentAiPackage == 3 )
   if ( GetWeaponDrawn )
   elseif ( GetSpellReadied )

   elseif ( GetDistance Player > 800 )
       if ( GetFlee < 1000 )
             set warptimer to ( warptimer + GetSecondsPassed )
             if ( warptimer > 8 )
                   set warptimer to 0
               set myx to ( Player->GetPos x )
               set myy to ( Player->GetPos y )
               set myz to ( Player->GetPos z )
               SetPos x myx
               SetPos y myy
               SetPos z myz
             endif
        endif
   endif
endif


End _GL_Amma_Warrior_comp_scr

Но теперь не компилит, потому как не может найти объект - воина, в строчках 27-32, тогда как скастовать заклы на игрока? Или сделать методом Player->mod ... to ??? Прошу подсказки

*********************************************
Этот запускается другим скриптом (на колечке, или в диалоге), когда потеряно/утрачено колечко и оно возвращается. Сделан для "наказания" игрока за потерю/продажу,  стоит всего 1000 монет,  колечка телепортации Даки. В первый раз чуть (несколько болезней) - в третий придет злой Йуругу (см. мифологию Дагонов) и
порешит :)...

Begin _GL_Amma_revenge_scr

Short doRev

if ( MenuMode )
   Return
endif

if ( GetItemCount, "_GL_c_Dacka_telepathy_ring" >= 1 )
   return
endif

if ( GetItemCount, "_GL_c_Dacka_telepathy_ring" < 1 )
   player-> AddSpell "greenspore"
   player-> AddSpell "chills"
   player-> AddSpell "brown rot"
   player-> AddSpell "helljoint"
   player-> AddSpell "serpiginous dementia"
   MessageBox "У Вас нет кольца Даки, и это не понравилось Амма"
      set doRev to 1
endif

elseif ( GetItemCount, "_GL_c_Dacka_telepathy_ring" < 1 )
   if ( doRev == 1 )
      player-> AddSpell "weakness magicka_50"
      player-> AddSpell "ash woe blight"
      player-> AddSpell "ash-chancre"
      player-> AddSpell "black-heart blight"
      player-> AddSpell "chanthrax blight"
      player-> AddSpell "weakness fire_50"
      player-> AddSpell "weakness frost_60"
      player-> AddSpell "weakness shock_25"
      player-> AddSpell "weakness poison_50"
      MessageBox "Во второй раз у Вас нет кольца Даки, Амма прогневался и наслал на Вас местный мор и проклятия"
      set doRev to 2
   endif
endif

elseif ( GetItemCount, "_GL_c_Dacka_telepathy_ring" < 1 )
   if ( doRev == 2 )
      PlaceAtPC "_GL_cr_Spirit_Yurugu" 1 182 1
      ;1 of them, 256 units away, in back (1) of the player
      PlaySound3D "mysticism cast"
      "_GL_cr_Spirit_Yurugu"->ModDisposition -80
      "_GL_cr_Spirit_Yurugu"->SetFight 100
      "_GL_cr_Spirit_Yurugu"->StartCombat, player
      MessageBox "Дух Йуругу, покровителя разрушения и владыки царства мертвых, был послан Амма, дабы наказать за третью потерю кольца"
   endif
endif

End _GL_Amma_revenge_scr

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Вот, пока все.
   Заранее благодарен.
Теперь можно постить ответы :)

P.S.Таки,  Если это удобно, то можно на ты :)
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #5 : 28 Декабрь, 2004, 22:50:29 »
0
Доброго времени суток, Galib.

Все  нижеописанные  мною  нюансы основаны на теоретической работе скрипта. Так что, если какой-либо  скрипт  не  будет работать на практике, обращайтесь, я попытаюсь Вам помочь.

Думаю, что со скриптом "_GL_Yurugu_Script_scr_01" проблем возникнуть не должно.

Скрипт "_GL_Yurugu_Script_scr_02". Один нюанс данного скрипта отличается от предыдущего, что  явно свидетельствует об ошибке. Мне кажется, что один "endif" нужно убрать, так как он является лишним. Функция "else" его не требует.

Скрипт  "_GL_w_Yurugu_01_Scr"  добавляет  player'у  два  новых  предмета,  но не убирает "старые",  что  должно,  по  идее, выполняться, если задумана замена "старого" оружия на новое. Так и должно быть?

Не совсем понятно назначение скрипта "_GL_w_Yurugu_10_Scr". Можете пояснить?

Скрипт   "_GL_Amma_Amulet_scr".   Данный   вариант  скрипта  отслеживает  изменение  (в отрицательную  сторону)  в  состоянии  здоровья  player'а.  Если  амулет  будет "одет" и здоровье уменьшится, то произойдет "вызов" НПС'а - защитника.

--------

Begin _GL_Amma_Amulet_scr

Short OnPCEquip
short doOnce
short phealth

if ( MenuMode = 1 )
   Return
endif

if ( OnPCEquip == 0 )
   set doOnce to 0
endif

if ( OnPCEquip == 1 )
   if ( doOnce == 0 )
      set phealth to player->GetHealth
      set doOnce to 1
   endif
   if ( phealth > player->GetHealth )
      set doOnce to 0
   endif  
   if ( phealth < player->GetHealth )
      if ( doOnce == 1 )
         PlaceAtPC "_GL_Amma_Warior" 1 256 2
         PlaySound3D "mysticism cast"
         MessageBox "Amma послал Вам на помощь своего воина."
         set amma_warrior_cast to 10 ; изменение глобальной переменной
         set OnPCEquip to 0
      endif
   endif
endif

End _GL_Amma_Amulet_scr

--------

Прежде чем использовать данный скрипт, создайте глобальную переменную amma_warrior_cast.

Но  я  не  представляю,  как  можно  отследить, сражается ли player с каким-либо НПС или нет... Таким образом, можно использовать и Ваш вариант:

" т.е. при попытке поговорить с воином, тот говорит асталависта и "уходит"

Скрипт  "_GL_Amma_Warrior_comp_scr",  в  принципе,  не  нужен.  Проставить  определенные значения  характеристик  НПС'а  Вы  можете  в  соответствующем  меню. И как Вы правильно заметили:

"вряд ли во время боя игрок будет передвигаться на большие растояния.."

Единственное,  для  чего  можно  использовать  данный  скрипт  -  для  функций  "Cast" и "AiFollow":

--------

Begin _GL_Amma_Warrior_comp_scr

;local script

float timer
short doOnce

if ( MenuMode == 1 )
   return
endif

if ( amma_warrior_cast == 0 )
   set timer to 0
   set doOnce to 0
   Disable
endif

if ( amma_warrior_cast == 10 )
   set timer to ( timer + GetSecondsPassed )
   if ( timer < 30 )
      if ( doOnce == 0 )
         AiFollow, player, 0, 0, 0, 0
         Cast "Restore Attributes", player
         Cast "Restore Fighter", player
         Cast "Restore Mage", player
         Cast "Restore Stealth", player
         Cast "Restore Other", player
         Cast "divine aid", player
         Cast "rapid regenerate", player
         MessageBox "В минуту опасности Амма через своего воина послал Вам свое благословение."
         set doOnce to 1
      endif
   endif
   if ( timer > 30 )
       set amma_warrior_cast to 0
   endif
endif

End _GL_Amma_Warrior_comp_scr

--------

В  данном скрипте я ввел переменную "timer" для ограничения пребывания НПС'а - защитника в  мире Морровинд. Это для того, чтобы player не мог насоздавать себе кучу помощников... Если  Вы  будете  использовать  данный скрипт в таком виде, то в диалоге вызываемого НПС удалите сообщение, в результате которого НПС исчезает, во избежания ошибок.

Скрипт  "_GL_Amma_revenge_scr".  Не  совсем правильная расстановка условий... Если так и будет,  то из результата одного условия пойдет результат следующего условия, так как оно уже  будет  соответствовать требованиям. Тут нужно определиться, когда будет проверяться условие.  На  каком объекте "висит" скрипт? Если данный скрипт будет "висеть" на кольце, то  возможны неполадки в игре... Да и скрипт перестанет работать, если player отойдет на большое  расстояние  или  покинет  ячейку,  в котором находится кольцо. Для решения этой проблемы  я  предлагаю  данный скрипт сделать глобальным. Таким образом, он всегда может отследить,  имеется  ли  колько  у  player'а или нет. Дальше следует определиться, каким образом  будут  проверяться  условия.  Я  предлагаю  дать player'у определенное время на поиски  кольца  (если  оно  было  утеряно).  Например,  один  день. Если кольцо так и не вернулось к player'у, то следует второе наказание, после чего снова дается один день.

Для реализации данной идеи предлагаю использовать два скрипта.

Первый скрипт:

--------

Begin _GL_Amma_revenge_scr_01

; данный скрипт должен "висеть" на кольце

short doOnce

if ( doOnce == 0 )
   if ( player->GetItemCount, "_GL_c_Dacka_telepathy_ring" >= 1 )
      startscript _GL_Amma_revenge_scr_02
      set doOnce to 1
   endif
endif

end

--------

Второй скрипт:

--------

Begin _GL_Amma_revenge_scr_02

Short doOnce
short Amma_Day

if ( MenuMode == 1 )
   Return
endif

if ( player->GetItemCount, "_GL_c_Dacka_telepathy_ring" >= 1 )
   return
endif

if ( player->GetItemCount, "_GL_c_Dacka_telepathy_ring" < 1 )
   player->AddSpell "greenspore"
   player->AddSpell "chills"
   player->AddSpell "brown rot"
   player->AddSpell "helljoint"
   player->AddSpell "serpiginous dementia"
   MessageBox "У Вас нет кольца Даки, и это не понравилось Амма. Она дает Вам один день на его поиски."
   set doOnce to 1
endif

if ( doOnce == 1 )
   set Amma_Day to Day
   set doOnce to 2
endif

if ( doOnce == 2 )
   if ( Amma_Day != Day )
      if ( player->GetItemCount, "_GL_c_Dacka_telepathy_ring" < 1 )
         player-> AddSpell "weakness magicka_50"
         player-> AddSpell "ash woe blight"
         player-> AddSpell "ash-chancre"
         player-> AddSpell "black-heart blight"
         player-> AddSpell "chanthrax blight"
         player-> AddSpell "weakness fire_50"
         player-> AddSpell "weakness frost_60"
         player-> AddSpell "weakness shock_25"
         player-> AddSpell "weakness poison_50"
         MessageBox "Во второй раз у Вас нет кольца Даки, Амма прогневался и наслал на Вас местный мор и проклятия. Если на следующий день у Вас снова не окажется кольца, последует следующее наказание."
         set doOnce to 3
      endif
   endif
endif

if ( doOnce == 3 )
   set Amma_Day to Day
   set doOnce to 4
endif

if ( doOnce == 4 )
   if ( Amma_Day != Day )
      if ( player->GetItemCount, "_GL_c_Dacka_telepathy_ring" < 1 )
         PlaceAtPC "_GL_cr_Spirit_Yurugu" 1 182 1
         PlaySound3D "mysticism cast"
         "_GL_cr_Spirit_Yurugu"->ModDisposition -80
         "_GL_cr_Spirit_Yurugu"->SetFight 100
         "_GL_cr_Spirit_Yurugu"->StartCombat, player
         MessageBox "Дух Йуругу, покровителя разрушения и владыки царства мертвых, был послан Амма, дабы наказать за третью потерю кольца"
         set doOnce to 5
      endif
   endif
endif

End _GL_Amma_revenge_scr

--------

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

Успехов!
С уважением, Romualdo.

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #6 : 29 Декабрь, 2004, 03:37:13 »
0
Romualdo Спасибо. Но не все так, как хотелось бы, и не все мне понятно. Потому, по порядку:
1."_GL_Yurugu_Script_scr_01" -  Хорошо, что все должно работать. А как ввести затемнение экрана в момент появления духа с использованием FadeIn и Fadeout ?
2. "_GL_Yurugu_Script_scr_02" - я, понятно, поравил, спасибо :)
3. "_GL_w_Yurugu_01_Scr" - я выше запостил "_GL_w_Yurugu_02_Scr" - т.е. следующий,скрипт, который "висит" на "новом", добавленном оружии. Он и "устраняет" предыдущее оружие и защитные/блокировочные "Лезвия", т.к. скрипт на предмете может глюкнуть при его же (этого предмета) удалении, если не так, тогда прошу поправить. Иначе - скрипт на предмете, при поднятии уровня и навыка игрока, добавляет новый предмет, а скрипт на новом - удаляет старый и добавит следующий, при поднятии следующего уровня.
4. "_GL_w_Yurugu_10_Scr" - это заключительный скрипт из обсуждаемых выше, т.е. он просто удаляет рудименты :).. Можно, конечно что-то дописать в подарок плейеру за "долготерпение" и ношение этого оружия :)..получится что-то типа:
Begin _GL_w_Yurugu_10_Scr

short OnPCEquip
short doOnce

if ( menumode == 1 )
   return
endif

if ( Player-> GetItemCount, "_GL_w_Blade_of_Yurugu_09" == 1 )
   Player->RemoveItem, "_GL_w_Blade_of_Yurugu_09", 1
   RemoveItem, "_GL_a_shield_Yurugu_08", 1
endif

if ( OnPCEquip == 1 )
   if ( doOnce == 0 )
      Player->ModStrength 5
      Player->ModWillpower 5
      Player->ModEndurance 5
      Player->ModLongBlade 5
      Player->ModBlock 5
      set doOnce to 1
      MessageBox "Дух Йуругу в его Лезвиях делает Вас сильнее выносливее и ловчее"
   endif
elseif ( OnPCEquip == 0 )
   if ( doOnce == 1 )
      Player->ModStrength -5
      Player->ModWillpower -5
      Player->ModEndurance -5
      Player->ModLongBlade -5
      Player->ModBlock -5
      set doOnce to 0
      MessageBox "Дух Йуругу покинул Вас вместе с его Лезвиями"
   endif
endif

End _GL_w_Yurugu_10_Scr

Думаю, что после более пятнадцати уровней - это позволительная награда ?

5. "_GL_Amma_Amulet_scr" - а вот не все так, как хотелось бы. Предлагаю решить этот вопрос в комплексе, так сказать.
    Ипользуя этот скипт  я хотел сделать так, чтобы амулет срабатывал, т.е. вызывал воина Амма только в режиме боя, и  если игроку уже совсем несладко, т.е. даже, наверное не 0,5, а 1/3 здоровья (с учетом того, что достанется амулет игроку на уровне не меньше .. десятого, в лучшем случае, а скорее от 15-20-го, т.к. препятствия до получения непросты).
   А почему не будет работать на определение боя "short OnPCHitMe" ?
 Но, Вивек с ним, т.е. с режимом боя... если будет плохо игроку - пусть сможет и так вызвать "скорую помошь" и "передвижное святилище" в виде Воина Амма, и тот (та?)  его излечит :) , но и поможет,надеюсь,  если таки игрок в бою?
И почему не использовать GetHealthGetRatio для определения конкретного состояния здоровья игрока?
И если уж вводить глобальную переменную, то может ее и можно использовать, чтобы игрок не смог расплодить хэповиков? А раз уж пошла такая пьянка, то может предусмотреть больший интерес игрока, когда, его уровень будет более, скажем, чем 33-й? Тогда пошлем ему ещё одного воина. Пусть первый будет она и будет лечить и драться, а второй будет только драться, но зато как! (Думаю, это будет оправдано появлением массы сверхмощных и чрезвычайно сильных противников)
Потому, нельзя ли сделать вот так так:

Begin _GL_Amma_Amulet_scr
; Summon an _GL_Amma_Warior when player activite the Amulet
; Else summon an _GL_Amma_Warior2 when player activite the Amulet and when PCLevel > 33
; script location: should be placed upon an object _GL_c_Amulet_Amma

; variables
Short OnPCEquip

if ( MenuMode )
   Return
endif

if ( amma_warrior > 0 )
   return
endif

if ( amma_warrior <= 0 )
   if ( Player->GetHealthGetRatio < 0.3 )
      if ( OnPCEquip == 1 )
         if ( Player->GetLevel < 33 )
         PlaceAtPC "_GL_Amma_Warior" 1 256 2
         ;1 of them, 256 units away, in Left (2) of the player
         PlaySound3D "mysticism cast"
         MessageBox "Amma послал Вам на помощь своего воина."      
            elseif ( Player->GetLevel > 33 )
            PlaceAtPC "_GL_Amma_Warior" 1 256 2
            PlaceAtPC "_GL_Amma_Warior2" 1 256 3
            PlaySound3D "mysticism cast"
            MessageBox "Amma послал Вам на помощь двух своих воинов."   
            Set amma_warrior to 1
            endif
         endif
      endif
   endif
endif


End _GL_Amma_Amulet_scr
   Перед этим я ввел глобальную  переменную amma_warrior, Short,  равную "0"
А на самих воинов тогда действитьльно "повесить" скриптик, который управлял бы только их "поведением" и изменением переменной в "0"
Т.е. вот так:
Begin _GL_Amma_Warrior_scr

;local script on NPC - halper

float timer

if ( MenuMode == 1 )
   return
endif

if ( amma_warrior == 0 )
   set timer to 0
   Disable
   return
endif

if ( amma_warrior >= 1 )
   set timer to ( timer + GetSecondsPassed )
   if ( timer < 99 )
      AiFollow, player, 0, 0, 0, 0
      Cast "Restore Attributes", player
      Cast "Restore Fighter", player
      Cast "Restore Mage", player
      Cast "Restore Stealth", player
      Cast "Restore Other", player
      Cast "divine aid", player
      Cast "rapid regenerate", player
      MessageBox "В минуту опасности Амма послал Вам благословение через своего воина."
      elseif ( timer > 99 )
      set amma_warrior to 0

      endif
   endif
endif

End _GL_Amma_Warrior_scr

Тут я не понял надобности ввода переменной short doOnce , если у нас есть глобальная, которая показывает вызван NPC или нет, и я убрал её. Но ввел    return в начале, дабы не грузить далее процессор, если это не требуется, и увеличил "срок пребывания" NPC до 99 секунд (и так, мне кажется, маловато может быть но, ежели надо будет - ещё раз вызовутся).
   А на второго воина тоже самое, только без кастования заклов.. или можно их поделить.. Нее, Первая "воинша" будет восстанавливать всё, а второй только драться :)

6. И с кольцом не все понятно.
I. A надо ли "вешать" скрипт на кольцо, если:
а) Если я (игрок) продал/потерял кольцо, и телепортанулся в другую локацию, то оно и задетектить не успеет, что я его "потерял"?
б) Можно (есть топик) в режиме диалога запускать скрип в случае потери игроком кольца, или же сразу, при получении (когда Дака становится компаньеном)
в) На кольце и так немаленький скрипт уже "висит" (это кольцо телепатической связи и команд через него на любом  расстоянии)
II.  Не понятно с переменной Day и с системой. Т.е. получается, как я понял, что если игрок потерял кольцо, и не нашел за день, то натупает второе наказание? Этто крутто слишком. Предполагалось,что при потере в первый раз игрок получает букет болезней (как серьезное предупреждение), и кольцо без поисков. А уж если во второй раз потеряет - и в третий - вот тогда стоит принять более.. крутые меры :)
Пока я не разобрался, как этого достигнуть :(

7. И ещё вопросик "по ходу" развития мода (оххх, не закончить мне его так скоро, как хочется :o) . Я хочу сделать активатором моглку (надгробие) семьи Даки, и там тоже нужен скрипт. я его могу "содрать" с алтаря маски Вивека, к примеру. Учесть условия наличия у игрока, скажем ритуальной маски, цветочков и пр - это можно, как я понимаю, а вот заставить при этом еще Даку танцевать ритуальный танец :D - это тоже глобальную переменную вводить? Жалко процессор игрока, честно говоря. А иначе никак? Как дойду - приведу и этот скрипт, если позволительно, для проверки :)
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #7 : 29 Декабрь, 2004, 10:53:57 »
0
Вот еще пара скриптиков, которые не уверен, что работать будут так, как хочется. Но оба компилируются.
Этот на "маске"/шлеме. Дабы не заставлять Даку.. По идее те, кого он помещает вокруг должны исполнять ритуальный танец с факелами :) Но.. буду пробовать в игре, конечно

Begin _GL_a_Yurugu_mask_scr

; Summon an Three Redguard RitualDancing Gerl when player Equipped the Ritual Mask.
; script location: should be placed upon an object _GL_a_Yyrugu_mask

Short OnPCEquip
short Equipped

if ( MenuMode )
   Return
endif

if ( OnPCEquip == 1 )
      PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 1
      PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 2
      PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 3
      set equipped to 1
elseif (OnPCEquip == 0 )
   if ( equipped == 1 )
      Disable "_GL_Yurugu_Ritualdancer" 3
      set equipped to 0
   endif
endif

End _GL_a_Yurugu_mask_scr


&&&&&&&&&&&&&&&&&&&&&&&&&&&
А этот помещается на "могилке"/надгробии (весьма красивом :)) Должен организвать собственно ритуал, со всем антуражем :)

Begin _GL_Dackas_Family_tomb_scr

short button
short questionState
Short OnPCEquip

if ( OnActivate == 1 )
   Set questionState to 1
   Return
endif

if ( questionState == 0 )
   Return
endif

if ( questionState == 3 )
   StopScript _GL_Dackas_Family_tomb_scr
   Return
endif

if ( questionState == 1 )

   if ( Player->GetItemCount "_GL_misc_skull_Yurugu_00" > 0 )
      if ( Player->GetItemCount "ingred_gold_kanet_01" > 1 )
         if ( "_GL_a_Yyrugu_mask", OnPCEquip == 1 )
            if ( GameHour >= 23 )
               if ( GameHour <= 01 )
                  MessageBox "Вы готовы совершить ритуал вызова Бину?" "Да" "Нет"
                  Set questionState to 2
               else
                  MessageBox "Для совершения ритуала вызова Бину Вам необходимо надеть маску Йуругу, иметь ритуальныq предмет и цветы."
                  Set questionState to 0
               endif
            endif
         endif
      endif
   endif
endif

if ( questionState == 2 )
   set button to GetButtonPressed

   if ( button == 0 )
      Player->RemoveItem "ingred_gold_kanet_01" 2
      Player->RemoveItem "_GL_misc_skull_Yurugu_00" 2
      PlaceAtPC "ingred_gold_kanet_01" 2 128 0
      PlaceAtPC "_GL_misc_skull_Yurugu_00" 1 160 0
      PlaceAtPC "light_pitfire00" 1 512 0
      PlaceAtPC "light_pitfire00" 1 512 1
      PlaceAtPC "light_pitfire00" 1 512 2
      PlaceAtPC "light_pitfire00" 1 512 3
      PlaceAtPC "_GL_Binu_Agel" 1 256 2
      PlaceAtPC "_GL_Binu_Romualdo" 1 256 3
      Cast "_GL_Binu_sp", "_GL_Binu_Agel"
      Cast "_GL_Binu_sp", "_GL_Binu_Romualdo"
      PlaySound3D "mysticism cast"
      MessageBox "Вы совершили ритуал и вызвали Бину. Тепеь можете спрашивать у них то, что хотели"
      Journal _GL_Yurugu 80
      Set questionState to 3
   endif

   if ( button == 1 )
      MessageBox "Для совершения ритуала вызова Бину Вам необходимо надеть маску Йуругу, иметь ритуальные предметы и цветы."
      Set questionState to 0
   endif

endif
   
End _GL_Dackas_Family_tomb_scr

Прошу поправить, ежели чего не так.
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #8 : 29 Декабрь, 2004, 12:23:21 »
0
Доброго времени суток, Galib.

Постараюсь ответить на Ваши вопросы.

Цитировать (выделенное)
1."_GL_Yurugu_Script_scr_01" -  Хорошо, что все должно работать. А как ввести затемнение экрана в момент появления духа с использованием FadeIn и Fadeout ?
Попробуйте вставить в тело скрипта следующий фрагмент:

-------

FadeOut 1.0
FadeIn 1.0

-------

Можете поэкспериментировать со значениями "1.0", поставив другие значения.

Цитировать (выделенное)
if ( Player-> GetItemCount, "_GL_w_Blade_of_Yurugu_09" == 1 )
   Player->RemoveItem, "_GL_w_Blade_of_Yurugu_09", 1
   RemoveItem, "_GL_a_shield_Yurugu_08", 1
endif

Наверное, Вы забыли дописать "player->":

-------

if ( Player-> GetItemCount, "_GL_w_Blade_of_Yurugu_09" == 1 )
   Player->RemoveItem, "_GL_w_Blade_of_Yurugu_09", 1
   player->RemoveItem, "_GL_a_shield_Yurugu_08", 1
endif

-------

Цитировать (выделенное)
Думаю, что после более пятнадцати уровней - это позволительная награда ?

Да, конечно.

Цитировать (выделенное)
Скрипт "_GL_Amma_Amulet_scr"  Ипользуя этот скипт  я хотел сделать так, чтобы амулет срабатывал, т.е. вызывал воина Амма только в режиме боя, и  если игроку уже совсем несладко, т.е. даже, наверное не 0,5, а 1/3 здоровья
Давайте порассуждаем. Допустим, игрок потерял половину жизни в бою и к нему на помощь приходит воин (-ы). После его (их) исчезновения (по прошествию 99 секунд), переменная "amma_warrior" принимает значение "0". Следовательно первое условие скрипта "_GL_Amma_Amulet_scr" выполняется:

-------

if ( amma_warrior <= 0 )

-------

Но после этого очень вероятно, что и выполнится следующее условие:

-------

if ( Player->GetHealthGetRatio < 0.3 )

-------

Так как player после боя мог еще и не восстановить свое здоровье. И если у player'a постоянно будет значение здоровья соответствовать условию, будут вызываться войны на помощь, хотя и боя уже давно нет... Так что тут нужно раздумывать, как построить алгоритм правильным образом, чтобы учесть все нюансы...

Цитировать (выделенное)
А почему не будет работать на определение боя "short OnPCHitMe" ?
Функция "OnPCHitMe" может быть применена к НПС'ам для определения, ударит ли player их или нет. Яркий пример: Алмалексия в Храме Трибунала. Вокруг нее стоят несколько "рук". Она относится к Вам доброжелательно, но как только Вы нанесете ей урон, она вместе с ее "руками" будут атаковать Вас. То есть фукнция "OnPCHitMe" служит для того, чтобы определить дальнейшие действия НПС'а, которого player ударил.

Цитировать (выделенное)
Тут я не понял надобности ввода переменной short doOnce, и я убрал её.
Видите ли, переменная "doOnce" служила для того, чтобы предотвратить повторение цикла:

-------

AiFollow, player, 0, 0, 0, 0
Cast "Restore Attributes", player
Cast "Restore Fighter", player
Cast "Restore Mage", player
Cast "Restore Stealth", player
Cast "Restore Other", player
Cast "divine aid", player
Cast "rapid regenerate", player
MessageBox "В минуту опасности Амма послал Вам благословение через своего воина."

-------

Видите ли, скрипт часто обновляется, и поэтому без переменной "doOnce" данный цикл будет повторяться все 99 секунд. То есть вызванный воин уже не будет защищать player'a, а будет только направлять на него заклинания.

Цитировать (выделенное)
И с кольцом не все понятно.
I. A надо ли "вешать" скрипт на кольцо, если:
а) Если я (игрок) продал/потерял кольцо, и телепортанулся в другую локацию, то оно и задетектить не успеет, что я его "потерял"?
б) Можно (есть топик) в режиме диалога запускать скрип в случае потери игроком кольца, или же сразу, при получении (когда Дака становится компаньеном)
в) На кольце и так немаленький скрипт уже "висит" (это кольцо телепатической связи и команд через него на любом  расстоянии)
Если на кольце уже "висит" достаточно объемный скрипт, то дополнительные строки в теле скрипта могут негативно отразится на его дальнейшей работе.

Еще раз повторюсь, что нужно четко определить, когда будет происходить проверка условия потери кольца. Если это будет глобальный скрипт, то проверка будет происходить постоянно. Но ведь можно и проверять наличие кольца у player'a при разговоре с Дакой...

Цитировать (выделенное)
Не понятно с переменной Day и с системой. Т.е. получается, как я понял, что если игрок потерял кольцо, и не нашел за день, то натупает второе наказание? Этто крутто слишком. Предполагалось,что при потере в первый раз игрок получает букет болезней (как серьезное предупреждение), и кольцо без поисков.
Если проверка будет выполняться с помощью глобального скрипта, то это будет выглядеть следующим образом:

-------

Begin _GL_Amma_revenge_scr_02

Short doOnce

if ( MenuMode == 1 )
   Return
endif

if ( player->GetItemCount, "_GL_c_Dacka_telepathy_ring" >= 1 )
   return
endif

if ( player->GetItemCount, "_GL_c_Dacka_telepathy_ring" < 1 )
   if ( doOnce == 0 )
     player->AddSpell "greenspore"
     player->AddSpell "chills"
     player->AddSpell "brown rot"
     player->AddSpell "helljoint"
     player->AddSpell "serpiginous dementia"
     MessageBox "У Вас нет кольца Даки, и это не понравилось Амма."
     player->additem "_GL_c_Dacka_telepathy_ring" 1
     set doOnce to 1
     return
   endif
   if ( doOnce == 1 )
         player-> AddSpell "weakness magicka_50"
         player-> AddSpell "ash woe blight"
         player-> AddSpell "ash-chancre"
         player-> AddSpell "black-heart blight"
         player-> AddSpell "chanthrax blight"
         player-> AddSpell "weakness fire_50"
         player-> AddSpell "weakness frost_60"
         player-> AddSpell "weakness shock_25"
         player-> AddSpell "weakness poison_50"
         MessageBox "Во второй раз у Вас нет кольца Даки, Амма прогневался и наслал на Вас местный мор и проклятия."
     player->additem "_GL_c_Dacka_telepathy_ring" 1
         set doOnce to 2
        return
     endif
     if ( doOnce == 2 )
         PlaceAtPC "_GL_cr_Spirit_Yurugu" 1 182 1
         PlaySound3D "mysticism cast"
         "_GL_cr_Spirit_Yurugu"->ModDisposition -80
         "_GL_cr_Spirit_Yurugu"->SetFight 100
         "_GL_cr_Spirit_Yurugu"->StartCombat, player
         MessageBox "Дух Йуругу, покровителя разрушения и владыки царства мертвых, был послан Амма, дабы наказать за третью потерю кольца"
         player->additem "_GL_c_Dacka_telepathy_ring" 1
         set doOnce to 3
        return
   endif
endif

End _GL_Amma_revenge_scr_02

-------

Цитировать (выделенное)
Учесть условия наличия у игрока, скажем ритуальной маски, цветочков и пр - это можно, как я понимаю, а вот заставить при этом еще Даку танцевать ритуальный танец :D - это тоже глобальную переменную вводить?
Я только видел единственный вариант танца НПС'а... Это можно сделать при помощи файла "anim_dancinggirl" (+ "xanim_dancinggirl"). Далее этот файл присоединяется к НПС'у и запускается в нужное время с помощью скрипта. К сожалению, я не знаю автора данного творения.

Работу скрипта "_GL_a_Yurugu_mask_scr" нужно смотреть в игре.

Позволю себе внести некоторые изменения в скрипт "_GL_Dackas_Family_tomb_scr":

-------

Begin _GL_Dackas_Family_tomb_scr

short button
short questionState
Short OnPCEquip

if ( OnActivate == 1 )
    if ( questionState == 0 )
   if ( Player->GetItemCount "_GL_misc_skull_Yurugu_00" > 0 )
      if ( Player->GetItemCount "ingred_gold_kanet_01" > 1 )
         if ( "_GL_a_Yyrugu_mask", OnPCEquip == 1 )
            if ( GameHour >= 23 )
               if ( GameHour <= 24 )
                  MessageBox "Вы готовы совершить ритуал вызова Бину?" "Да" "Нет"
                  Set questionState to 2
               endif
            endif
            if ( GameHour >= 0 )
               if ( GameHour <= 1 )
                  MessageBox "Вы готовы совершить ритуал вызова Бину?" "Да" "Нет"
                  Set questionState to 2
               else
                  MessageBox "Неподходящее время для совершения ритуала вызова Бину."
                  Set questionState to 0
                  return
               endif
            endif
         else
            MessageBox "Для совершения ритуала вызова Бину Вам необходимо надеть маску Йуругу."
            Set questionState to 0
            return
         endif
      else
         MessageBox "Для совершения ритуала вызова Бину Вам необходимо иметь ритуальные цветы."
         Set questionState to 0
         return
      endif
   else
      MessageBox "Для совершения ритуала вызова Бину Вам необходимо иметь ритуальный предмет."
      Set questionState to 0
      return
   endif
   endif
endif

if ( questionState == 2 )
   set button to GetButtonPressed
   if ( button == 0 )
      Player->RemoveItem "ingred_gold_kanet_01" 2
      Player->RemoveItem "_GL_misc_skull_Yurugu_00" 2
      PlaceAtPC "ingred_gold_kanet_01" 2 128 0
      PlaceAtPC "_GL_misc_skull_Yurugu_00" 1 160 0
      PlaceAtPC "light_pitfire00" 1 512 0
      PlaceAtPC "light_pitfire00" 1 512 1
      PlaceAtPC "light_pitfire00" 1 512 2
      PlaceAtPC "light_pitfire00" 1 512 3
      PlaceAtPC "_GL_Binu_Agel" 1 256 2
      PlaceAtPC "_GL_Binu_Romualdo" 1 256 3
      Cast "_GL_Binu_sp", "_GL_Binu_Agel"
      Cast "_GL_Binu_sp", "_GL_Binu_Romualdo"
      PlaySound3D "mysticism cast"
      MessageBox "Вы совершили ритуал и вызвали Бину. Теперь можете спрашивать у них то, что хотели"
      Journal _GL_Yurugu 80
      StopScript _GL_Dackas_Family_tomb_scr
   endif
   if ( button == 1 )
      Set questionState to 0
      return
   endif
endif

End _GL_Dackas_Family_tomb_scr

-------

Не уверен, что все моменты данного скрипта будут правильно работать... Но это нужно проверять на практике.

Не уверен в правильности использования фукнции "OnPCEquip":

-------

if ( "_GL_a_Yyrugu_mask", OnPCEquip == 1 )

-------

Честно признаюсь, что подобное использование функции "OnPCEquip" я встречаю первый раз. Вы проверяли правильность выполнения данного условия на практике?

Всего доброго!
С уважением, Romualdo.

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #9 : 29 Декабрь, 2004, 13:47:26 »
0
Спасибо за поправки и комменты:)
Сечас не готов , навероне, "на ходу" переписывать, но:

Цитировать (выделенное)
Попробуйте вставить в тело скрипта следующий фрагмент:...
FadeOut 1.0, FadeIn 1.0...Можете поэкспериментировать со значениями "1.0", поставив другие значения.
А как?..Как они работают? Если брать не 1.0, а 0,5, то будет в половину темнее? А на какое время? Хорошо, попробую..

Цитировать (выделенное)
Наверное, Вы забыли дописать "player->":
Ну да, конечно! Забыл! Спасибо!

С функцией ""OnPCHitMe" - все понятно :(. А тем, что условия могут выполняться и после боя - не страшно. Ну явится ещё одна тетя, скастует заклов,"попроавит" несчастного игрока, да и ладно, через 99 секунд растворится, а в гритинге я просто поставлю в "результ" AiWander 0 0 0 0 0 0 0 0 0 1 0 0  и "гуляй вася".. Пусть так и останется.

Цитировать (выделенное)
Видите ли, переменная "doOnce" служила для того, чтобы предотвратить повторение цикла:
Ага, понял! Поправлю обратно :)

Цитировать (выделенное)
Еще раз повторюсь, что нужно четко определить, когда будет происходить проверка условия потери кольца. Если это будет глобальный скрипт, то проверка будет происходить постоянно. Но ведь можно и проверять наличие кольца у player'a при разговоре с Дакой...
Ну да. я так и сделал. Т.е. при первой потере кольца это выяснится в диалоге, и в результе я пишу Startscript "_GL_Amma_revenge_scr_02" и все. Дальше пойдет работа скрипта  но, я так и не понял, как работает "day", однако идея была хорошая, и таймер надо вернуть :) Только как правильно?


Цитировать (выделенное)
Я только видел единственный вариант танца НПС'а... Это можно сделать при помощи файла "anim_dancinggirl"...
Ну я та и сделал :) В другом моде все пляшут после результа в диалоговом меню:
set dance to 1
AiWander 0 0 0 0 0 0 0 0 0 0 0 100
А не станут - ну и .. Йугугу с ними.

Цитировать (выделенное)
Позволю себе внести некоторые изменения в скрипт "_GL_Dackas_Family_tomb_scr":
Угу, изменения мне не совсем  понятны - раскласть все на детали проверки и дать игроку боле точные меседжи?
А я старался как можно более сократить размер пробега скрипта. А так получится, что он будет целиком пробегать, пока не дойдет до журнальной записи, т.е. конца!  Ну, если, конечно, иначе нельзя.. А иначе нельзя? :)

Цитировать (выделенное)
Честно признаюсь, что подобное использование функции "OnPCEquip" я встречаю первый раз. Вы проверяли правильность выполнения данного условия на практике?
Если честно, совсем. то это я на ходу так написал.. :o  И как оно работать будет, или не будет - не знаю!
   Пока все. Надо выспаться, и закончить все. К завтрашнему вечеру обязательно должен закончить :)
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #10 : 29 Декабрь, 2004, 16:36:26 »
0
Доброго времени суток, Galib.

Отвечаю на Ваши вопросы.

Цитировать (выделенное)
А как?..Как они работают? Если брать не 1.0, а 0,5, то будет в половину темнее? А на какое время?
Эти значения указывают за сколько секунд произойдет затемнение\осветление экрана.

Цитировать (выделенное)
Ну да. я так и сделал. Т.е. при первой потере кольца это выяснится в диалоге, и в результе я пишу Startscript "_GL_Amma_revenge_scr_02" и все. Дальше пойдет работа скрипта  но, я так и не понял, как работает "day", однако идея была хорошая, и таймер надо вернуть :) Только как правильно?
Если после наказания кольцо возвращается player'у, то использовать таймер не нужно, так как он будет лишним.

Цитировать (выделенное)
Угу, изменения мне не совсем  понятны - раскласть все на детали проверки и дать игроку боле точные меседжи? А я старался как можно более сократить размер пробега скрипта. А так получится, что он будет целиком пробегать, пока не дойдет до журнальной записи, т.е. конца!  Ну, если, конечно, иначе нельзя.. А иначе нельзя?
Видите ли, таким образом player будет точно знать, что ему не хватает. Но если Вас это по каким-либо причинам не устраивает, Вы можете удалить сообщения о не правильности исполнения ритуала. Но если потом при активации "могилки" не будут соблюдены все условия правильного выполнения ритуала, то в игре не появится никаких сообщений, а скрипт перестанет работать, что вызовет растерянность у игрока.

Цитировать (выделенное)
Если честно, совсем. то это я на ходу так написал.. :o  И как оно работать будет, или не будет - не знаю!
Я думаю, лучше было бы использовать глобальную переменную для этого случая. То есть в скрипте, который "висит" на маске, при "одевании" данного предмета нужно изменить значение глобальной переменной, а в скрипте ритуала это отследить.

Также есть и другой способ, но я не уверен в его работоспособности. Но если Вы решите его опробовать, то в теле скрипта "_GL_Dackas_Family_tomb_scr" вместо строки:

-------

if ( "_GL_a_Yyrugu_mask", OnPCEquip == 1 )

-------

Вставьте следующую строку:

-------

if ( _GL_a_Yyrugu_mask.equipped == 1 )

-------

Повторю, что я не уверен в работоспособности данного метода.

Удачи!
С уважением, Romualdo.

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #11 : 30 Декабрь, 2004, 00:07:02 »
0
Romualdo  Спасибо за такое внимание и оперативность, и вообще :)
Тогда, продолжим?
   С FadeOut 1.0, FadeIn 1.0, т.е. со светом я разбирусь. Есть у меня перевод MSFD8 от Gwathlobala очень полезная вещь, фундаментальная.

Цитировать (выделенное)
Если после наказания кольцо возвращается player'у, то использовать таймер не нужно, так как он будет лишним.
Ну, наверное Ваша правда :) Наверное не стоит заставлялть игрока искать кольцо (большинство точно будут знать где его искать ;)) А наказать стоит,положительно.. Только, после третьего раза колечко плейеру не понадобится...:P
Однако, с переменной "Day" я пока не.. разбирусь потом :)

С "_GL_Dackas_Family_tomb_scr" -
Цитировать (выделенное)
Видите ли, таким образом player будет точно знать, что ему не хватает
Да и хорошо, пусть так. Наверное пусть будет понятнее и надежнее :) Хотя, не указывая, какой именно цветок нужен я и так весьма заморачиваю игрока

А вот дальше (без позволения, правда, но надеюсь простит) хочу привести цитату из письма ко мне Gwathlobala:
Цитировать (выделенное)
могу сказать следующее - скрипт
_GL_a_Yurugu_mask_scr, строки -

if ( equipped == 1 )
  Disable "_GL_Yurugu_Ritualdancer" 3 <- Не верно
  set equipped to 0
endif

не прокатят. Disable относится к предмету, на котором он вызван, более
того, вызывается он без параметров. Так что данная строка отключит маску,
на которой скрипт висит.

Дальше
if ( "_GL_a_Yyrugu_mask", OnPCEquip == 1 ) <- тоже не пройдет.
Вызвать переменную можно через точку, то есть
if ( "_GL_a_Yyrugu_mask".OnPCEquip == 1 ), но все равно меня терзают
смутные сомнения по поводу возможности данной операции. Лучше использовать

if ( Player->GetItemEquipped "_GL_a_Yyrugu_mask"== 1 )
это должно работать.
Вот что я могу сказать, бегло глянув.
Вот уже три варианта есть. Не знаю почему, но лишний раз объявлять глобальные переменные у мен.. рука не поднимается :) (И так, если я ставлю у себя все свои модики, то таких переменных нберётся не одна дюжина!!!)
   Потому склонюсь попробовать
if ( Player->GetItemEquipped "_GL_a_Yyrugu_mask"== 1 )

   А в скрипте на маске убираю Дисабл, но прописываю махонький скриптик танцовщицам, чтобы потанцевали, но не долго :).. Щас, наверное вот так:
Begin _GL_Yurugu_Ritualdancer_scr

float timer
short noLore
short dancing

if ( dancing == 2 )
   Set dancing to 0
   Set timer to 0
   Disable
   Return
endif

if ( dancing != 1 )
   set timer to ( timer + GetSecondsPassed )
   if ( timer < 60 )
      Set dancing to 1
      AiWander 0 0 0 0 0 0 0 0 0 0 0 100
      MessageBox "По зову маски Йуругу жрицы-танцовщицы явились для исполнения ритуального танца."
      StreamMusic "special\sherwood.mp3"
      elseif ( timer > 60 )
      Set dancing to 2
      endif
   endif
endif

End _GL_Yurugu_Ritualdancer_scr

Я тут ещё музычку вроде как запускаю, но поставил то, что подвернулось, пока, да и не уверен, что так это должно быть прописано... Найду что-ть короткое из африканского фолкы (с тамтамами :)) - стоит тогда поставить наверное...
   Прошу снова поправить, если что не так :)
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #12 : 30 Декабрь, 2004, 11:45:38 »
0
Доброго времени суток, Galib.

Отвечу на Ваши вопросы и внесу некоторые коррективы.

Цитировать (выделенное)
Однако, с переменной "Day" я пока не..
Хорошо, давайте разберем следующий кусочек скрипта:

-------

short Amma_Day

if ( doOnce == 0 )
set Amma_Day to Day
set doOnce to 1
endif

if ( doOnce == 1 )
if ( Amma_Day != Day )
.....
set doOnce to 2
endif
endif

if ( doOnce == 2 )
set Amma_Day to Day
set doOnce to 3
endif

if ( doOnce == 3 )
if ( Amma_Day != Day )
.....
endif
endif

end

-------

Переменная "Day" является глобальной, и ее значение соответствует идущему дню в игре. Например, если в игре идет 25-ый день, то и значение данной переменной будет "25".

В вышеприведенном кусочке скрипта назначается локальная переменная "Amma_Day", которая потом используется, чтобы скопировать значение переменной "Day" и далее отследить, когда "Amma_Day" не будет равняться "Day", то есть когда настанет следующий день.

Цитировать (выделенное)
Потому склонюсь попробовать
if ( Player->GetItemEquipped "_GL_a_Yyrugu_mask"== 1 )
С функцией "GetItemEquipped" я не знаком. Не уверен в его правильности. Думаю, имелась ввиду функция "HasItemEquipped", которая позволяет определить, "надет" ли на каком-либо акторе определенный предмет. По идее, это то, что Вам нужно, но данную функцию нельзя использовать в "чистом" Морровинде, так как она появляется только в Трибунале, что не совсем подходит для Вас...

Скрипт "_GL_Yurugu_Ritualdancer_scr" нужно проверять на практике.

Всего доброго!
С уважением, Romualdo.

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #13 : 30 Декабрь, 2004, 13:31:01 »
0
Доброго времени суток, Romualdo!
Спасибо за толковое разъяснение :)
С Днями оказывается все просто!

А вот if ( Player->GetItemEquipped "_GL_a_Yyrugu_mask"== 1 ) - эта беда не компилится, и "с точкой", т.е. if ( OnPCEquipt. "_GL_a_Yyrugu_mask"== 1 ) - то же, не компилируется, ругается, что нету такого :o

А в "_GL_Yurugu_Ritualdancer_scr" будет зацикливание, наверное.. Тутвот какая непонятка:
1.их (девы) сразу три, т.е. три одинаковых скрипта будут выполняться?
2. Я не учел, что при каждом прогоне скрипта будут заводится музыка...
Т.е. вот это:
 StreamMusic "special\sherwood.mp3" - это (в другом моде) запускается из резюма диалога, и играет, пока следующим резюмом не останавливается.
   А, я нашел нужный фрагмент в формате wav, и длинной (продолжительностью) всего 2 сек. и, соответсвенно, малюсенького размера, что очень положительно скажется на объеме архива :), а подходит,  потому как там всего пар ударов в там-там (как раз то, что нужно для африкано-редгадского ритуала :D).
Вопрос, как построить тогда скрип? Т.е. чтобы этот фрагмент, т.е. файл из мапки "Music" проигрывался постоянно в течении  60 секунд, но не начинался каждый прогон скрипта?

P.S.  Да, как не пытался но, наверное, не удасться закончить мне с этим модом  ни сегодня ни, возможно, и завтра :( И, конечно, не только из-за скриптов, просто, по ходу переписывания диалогов возникли новые завороты сюжетика, новую пещерку сделал и помещение для культистов (так и фракцию, в добавок, придется делать =)),  новые детали экипировки, и оружие  решил добавить - трезубец для гладиатора (жаль, нет модели и анимации для сети вместо щита) т.д., и так всега :)).. Это лирическое отступление.
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #14 : 30 Декабрь, 2004, 14:47:11 »
0
Доброго времени суток, Galib.

Отвечу на Ваши вопросы.

Цитировать (выделенное)
А вот if ( Player->GetItemEquipped "_GL_a_Yyrugu_mask"== 1 ) - эта беда не компилится, и "с точкой", т.е. if ( OnPCEquipt. "_GL_a_Yyrugu_mask"== 1 ) - то же, не компилируется, ругается, что нету такого
Попробуйте проверить уже вышеупомянутыми методами:

Первый метод:

-------

if ( Player->HasItemEquipped "_GL_a_Yyrugu_mask" == 1 ) ; Но данная функция "HasItemEquipped" используется ТОЛЬКО вместе с Трибуналом!

-------

Второй метод:

-------

if ( _GL_a_Yyrugu_mask.equipped == 1 ) ; для правильной работы данного условия, необходимо, чтобы на объекте "_GL_a_Yyrugu_mask" "висел" скрипт "_GL_a_Yurugu_mask_scr"

-------

Если по каким-либо причинам скрипт работать не будет, значит, придется создавать специальную для этого глобальную переменную.

Цитировать (выделенное)
А в "_GL_Yurugu_Ritualdancer_scr" будет зацикливание, наверное.. Тутвот какая непонятка:
1.их (девы) сразу три, т.е. три одинаковых скрипта будут выполняться?
2. Я не учел, что при каждом прогоне скрипта будут заводится музыка...
А, я нашел нужный фрагмент в формате wav, и длинной (продолжительностью) всего 2 сек. и, соответсвенно, малюсенького размера, что очень положительно скажется на объеме архива :), а подходит,  потому как там всего пар ударов в там-там (как раз то, что нужно для африкано-редгадского ритуала Вопрос, как построить тогда скрип? Т.е. чтобы этот фрагмент, т.е. файл из мапки "Music" проигрывался постоянно в течении  60 секунд, но не начинался каждый прогон скрипта?
Думаю, стоит создать два варианта скрипта "_GL_Yurugu_Ritualdancer_scr". В одном, помимо обычных действий, будет происходить проигрыш музыки и показ сообщений. А в другом (который будет "висеть" на двух других девицах) будут происходить только обычные действия.

Первый скрипт будет выглядеть таким образом:

-------

Begin _GL_Yurugu_Ritualdancer_scr_01

float timer_01
float timer_02
short noLore
short dancing
short doOnce

if ( dancing == 2 )
set doOnce to 0
Set dancing to 0
Set timer to 0
Disable
Return
endif

if ( dancing != 1 )
set timer_01 to ( timer_01 + GetSecondsPassed )
set timer_02 to ( timer_02 + GetSecondsPassed )
if ( timer_01 < 60 )
if ( doOnce == 0 )
Set dancing to 1
AiWander 0 0 0 0 0 0 0 0 0 0 0 100
MessageBox "По зову маски Йуругу жрицы-танцовщицы явились для исполнения ритуального танца."
set doOnce to 1
endif
if ( timer_02 < 5 ) ; значение "5" указывает продолжительность музыки в секундах
StreamMusic "special\sherwood.mp3"
else
set timer_02 to 0
endif
elseif ( timer_01 > 60 )
Set dancing to 2
endif
endif

End _GL_Yurugu_Ritualdancer_scr_01

-------

Но данный скрипт нужно тщательно проверять на практике.

Ежели Вы будете использовать Sound в формате wav, то можно будет вставить следующий фрагмент в тело какого-либо скрипта:

-------

if ( GetSoundPlaying "ID_Sound" == 0 )
PlayLoopSound3DVP "ID_Sound", 1.0, 1.0
endif

-------

Таким образом, Sound будет постоянно проигрываться, пока не будет использоваться StopSound.

Всего доброго!
С уважением, Romualdo.

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #15 : 30 Декабрь, 2004, 16:15:25 »
0
Спасибо Romualdo /
Теперь вроде как и все понятно.. хотя щас что-то голов уже "не варит".. так и не выспался :) Нее, не в силах пока. ...Потом, буду проверять, ежели чего - обращусь еще :)...
Об одном я только сразу не подумал - танцовщици, музыка, огонь и пр. - это для антуражу только, и нужны реально только один раз - перед, и во время "ритуала" вызова Бину. Так и надо было, наверное их вызывать с "надгробного скриптика", и музычку от туда же играть? а маска - пусть будет просто маской-шлемом, который .. да.. не важно..:)
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #16 : 31 Декабрь, 2004, 01:32:43 »
0
Вот чего получается, т.е. не получается только одно (не комплится скрипт с музыкой, потому как не находит её как таковой файл! :o
Привожу результаты нашего обсуждения:
******************************************
Этот вызывает (единожды) когда надо доброго, а в остальном злого аватара..
Begin _GL_Yurugu_Summon_scr_01
; Summon an Sririt of Yurugu when player activite the skull
; script location: should be placed upon an object _GL_act_skull00_Yurugu

Short done

if (MenuMode == 1)
   return
endif

if ( OnActivate == 1 )
   if ( done == 1 )
      Activate
      return
   else
      PlaceAtPC "_GL_cr_Spirit_Yurugu" 1 256 1
      ;1 of them, 256 units away, in back (1) of the player
      PlaySound3D "mysticism cast"
      Set done to 1
      Activate
   endif
endif

End _GL_Yurugu_Summon_scr_01
******************************************
Этот на самом этом воплощении
Begin _GL_Yurugu_scr_02

if ( menumode == 1 )
   return
endif

; talk to player if story has not been told
if ( GetDistance, Player <= 182 )
   if ( GetJournalIndex "_GL_Yurugu" >= 15 )
      ForceGreeting
      else
         ModDisposition -100
         SetFight 100
         StartCombat, player
      endif
   endif
endif


if ( GetJournalIndex "_GL_Yurugu" >= 100 )
   if ( GetDisabled == 0 )
      Disable
      StopScript _GL_Yurugu_Script_scr_02
   endif
endif

End _GL_Yurugu_scr_02
*****************************************
Этот на танцовщицах
Begin _GL_Yurugu_Ritualdancer_scr

Float timer
Short noLore
Short dancing

if ( dancing == 2 )
   Set dancing to 0
   Set timer to 0
   Disable
   StopScript "_GL_Yurugu_Ritualdancer_scr"
   Return
endif

if ( dancing == 0 )
   Set timer to ( timer + GetSecondsPassed )
   if ( timer < 30 )
      Set dancing to 1
      AiWander 0 0 0 0 0 0 0 0 0 0 0 100
      MessageBox "По зову маски Йуругу жрицы-танцовщицы явились для исполнения ритуального танца."
      elseif ( timer > 30 )
      Set dancing to 2
      endif
   endif
endif

End _GL_Yurugu_Ritualdancer_scr
**********************************
Этот не компилится из-за звука - не может найти!
Begin _GL_Dackas_Family_tomb_scr

short button
short questionState
Short RitualOn
Float timer

if (MenuMode == 1)
   return
endif

if ( GetDistance, Player > 1500 )
   return
endif

if ( OnActivate == 1 )
   if ( questionState == 0 )
      if ( Player->GetItemCount "_GL_misc_skull_Yurugu_00" > 0 )
         if ( Player->GetItemCount "ingred_bc_coda_flower" > 1 )
            if ( Player->HasItemEquipped "_GL_a_Yurugu_mask" == 1 )
               if ( GameHour >= 23 )
                  if ( GameHour <= 24 )
                     MessageBox "Вы готовы совершить ритуал вызова Бину?" "Да" "Нет"
                     Set questionState to 2
                  endif
               endif
               if ( GameHour >= 0 )
                  if ( GameHour <= 1 )
                     MessageBox "Вы готовы совершить ритуал вызова Бину?" "Да" "Нет"
                     Set questionState to 2
                  else
                     MessageBox "Неподходящее время для совершения ритуала вызова Бину."
                     Set questionState to 0
                     return
                  endif
               endif
            else
               MessageBox "Для совершения ритуала вызова Бину Вам необходимо надеть маску Йуругу."
               Set questionState to 0
               return
            endif
         else
            MessageBox "Для совершения ритуала вызова Бину Вам необходимы ритуальные цветы."
            Set questionState to 0
            return
         endif
      else
         MessageBox "Для совершения ритуала вызова Бину нужен ритуальный предмет."
         Set questionState to 0
         return
      endif
   endif
endif

if ( questionState == 2 )
   set button to GetButtonPressed
   if ( button == 0 )
      Set RitualOn to 1
      Player->RemoveItem "ingred_bc_coda_flower" 2
      Player->RemoveItem "_GL_misc_skull_Yurugu_00" 1
      PlaceAtPC "ingred_bc_coda_flower" 1 128 0
      PlaceAtPC "ingred_bc_coda_flower" 1 96 0
      PlaceAtPC "_GL_misc_skull_Yurugu_00" 1 160 0
      PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 0
      PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 1
      PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 2
      PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 3
      PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 1
      PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 2
      PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 3
      PlaySound3D "mysticism cast"
   if ( button == 1 )
      Set questionState to 0
      return
   endif
endif

if ( RitualOn == 1 )
   PlayLoopSound3DVP "\GL\Tam-tam.wav", 1.0, 1.0
   Set RitualOn to 2
   Elseif ( RitualOn == 2 )
      set timer to timer + getsecondspassed
      if ( timer > 30 )
         StopSound "\GL\Tam-tam.wav"
         set RitualOn to 3
         PlaceAtPC "_GL_Binu_Agel" 1 256 2
         PlaceAtPC "_GL_Binu_Romualdo" 1 256 3
         PlaySound3D "mysticism cast"
         Cast "_GL_Binu_sp", "_GL_Binu_Agel"
         Cast "_GL_Binu_sp", "_GL_Binu_Romualdo"
         PlaySound3D "mysticism cast"
         MessageBox "Вы совершили ритуал и вызвали Бину. Теперь можете спрашивать у них то, что хотели"
         Journal _GL_Yurugu 80
         StopScript _GL_Dackas_Family_tomb_scr
      endif
   return
endif

endif

End _GL_Dackas_Family_tomb_scr
 Объясните-поправте, плиз :) Как его обозвать и куда поместить? пока я его писал так:
 StreamMusic "\GL\Tam-tam.wav"
то он не возмущался!
************************************
Этот на амулете после ритуала получаемом (или не получаемомом - как себя вести и что  решить в дмалоге с Бину :))
Begin _GL_Amma_Amulet_scr
; Summon an _GL_Amma_Warior when player activite the Amulet
; Else summon an _GL_Amma_Warior2 when player activite the Amulet and when PCLevel > 33
; script location: should be placed upon an object _GL_c_Amulet_Amma

Short OnPCEquip

if ( MenuMode )
   Return
endif

if ( amma_warrior > 0 )
   return
endif

if ( amma_warrior <= 0 )
   if ( Player->GetHealthGetRatio < 0.3 )
      if ( OnPCEquip == 1 )
         if ( Player->GetLevel < 33 )
         PlaceAtPC "_GL_Amma_Warior" 1 256 2
         ;1 of them, 256 units away, in Left (2) of the player
         PlaySound3D "mysticism cast"
         MessageBox "Amma послал Вам на помощь своего воина."      
            elseif ( Player->GetLevel > 33 )
            PlaceAtPC "_GL_Amma_Warior" 1 256 2
            PlaceAtPC "_GL_Amma_Warior2" 1 256 3
            PlaySound3D "mysticism cast"
            MessageBox "Amma послал Вам на помощь двух своих воинов."   
            Set amma_warrior to 1
            endif
         endif
      endif
   endif
endif
************************************
Этот на первом воине
Begin _GL_Amma_Warrior_scr

;local script on NPC - halper

float timer
Short doOnce

if ( MenuMode == 1 )
   return
endif

if ( amma_warrior == 0 )
   set timer to 0
   Set doOnce to 0
   Disable
   return
endif

if ( amma_warrior >= 1 )
   set timer to ( timer + GetSecondsPassed )
   if ( timer < 99 )
      if ( doOnce == 0 )
         AiFollow, player, 0, 0, 0, 0
         Cast "Restore Attributes", player
         Cast "Restore Fighter", player
         Cast "Restore Mage", player
         Cast "Restore Stealth", player
         Cast "Restore Other", player
         Cast "divine aid", player
         Cast "rapid regenerate", player
         MessageBox "В минуту опасности Амма послал Вам благословение через своего воина."
         Set doOnce to 1
            elseif ( timer > 99 )
            set amma_warrior to 0
         endif
      endif
   endif
endif

End _GL_Amma_Warrior_scr

********************************
Этот на втором воине:
Begin _GL_Amma_Warrior2_scr

;local script on NPC - halper

float timer

if ( MenuMode == 1 )
   return
endif

if ( amma_warrior == 0 )
   set timer to 0
   Disable
   return
endif

if ( amma_warrior >= 1 )
   set timer to ( timer + GetSecondsPassed )
   if ( timer < 99 )
      AiFollow, player, 0, 0, 0, 0
      elseif ( timer > 99 )
      set amma_warrior to 0
      endif
   endif
endif

End _GL_Amma_Warrior2_scr
*****************************************
Вот так пока получается. Прошу ещё разик меня проконсультить, ежели чего не так ещё  :) И, может что-то можно оптимизировать ещё? Чемь меньше скриптов и чем реже они вызываются и чаще стопятся - тем ведь лучше? :)
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #17 : 31 Декабрь, 2004, 10:23:19 »
0
Доброго времени суток, Galib.

Цитировать (выделенное)
PlayLoopSound3DVP "\GL\Tam-tam.wav", 1.0, 1.0
StopSound "\GL\Tam-tam.wav"
В редакторе войдите в меню "Gameplay\Sounds...". Нажмите кнопку "New", напишите ID Вашего звука и нажмите "Ок". Далее нажмите "Sound Filename" и пропишите путь к Вашему файлу.

А далее Вам нужно вставлять ID Вашего звука, а не прописывать к нему путь. Например:

-------

PlayLoopSound3DVP "Tam-tam", 1.0, 1.0
StopSound "Tam-tam"

-------

Мне не совсем понятно использование следующих команд:

-------

if ( RitualOn == 1 )
   PlayLoopSound3DVP "\GL\Tam-tam.wav", 1.0, 1.0
   Set RitualOn to 2
   Elseif ( RitualOn == 2 )
      set timer to timer + getsecondspassed
      if ( timer > 30 )
         StopSound "\GL\Tam-tam.wav"
         set RitualOn to 3
         PlaceAtPC "_GL_Binu_Agel" 1 256 2
         PlaceAtPC "_GL_Binu_Romualdo" 1 256 3
         PlaySound3D "mysticism cast"
         Cast "_GL_Binu_sp", "_GL_Binu_Agel"
         Cast "_GL_Binu_sp", "_GL_Binu_Romualdo"
         PlaySound3D "mysticism cast"
         MessageBox "Вы совершили ритуал и вызвали Бину. Теперь можете спрашивать у них то, что хотели"
         Journal _GL_Yurugu 80
         StopScript _GL_Dackas_Family_tomb_scr
      endif
   return
endif

endif

-------

Зачем вводить команду "set RitualOn to 3", когда Вы уже написали "StopScript _GL_Dackas_Family_tomb_scr"? А "return", я думаю, нужно убрать...

Остальные скрипты нужно проверять на практике.

Всего доброго!
С уважением, Romualdo.

Оффлайн Galib

  • WhiteUglyGuar
  • *
  • Сообщений: 1261
  • Репутация: 15.3
  • Пол: Мужской
  • WhiteUglyGuar
    • Просмотр профиля
    • Galib Morrowind
    • Email
Скрипты
« Ответ #18 : 31 Декабрь, 2004, 13:47:10 »
0
Доброго времени суток Romualdo ! И с Наступающим!
Спасибо за прояснение с саундом! А я.. чего-то не сообразил сразу. Высыпаться надо :) :D
"set RitualOn to 3" - я это для того, чтобы просто её поменять.. т.к. скрипт то вроде сразу не тормозится после команды, а будет ещё один прогон..
а ретурн тот - он на условии, если таймер ещё пока меньше "30", тогда и "ретурн" :) Но посмотрю всё ещё раз внимательно. А может выделить заключительную часть - с заплейсом Бину в одельный блок с одним только условием RitualOn ?
А вообще - спасибо огромное за такие полезные и поучительные консультации :) Самое маленькое, чем смогу ответить - это благодарность в "ридмах" к плагу :) (кстати, а Вы не против того, что Бину зовут Ромуальдо и Энджел? :) Бину - это вернувшиеся из царства мертвых по мифологи Дагонов предки, а по сюжету они должны стать воинами Амма - эдакими полубогами, вроде младших даэдра,, которые и будут приходить на помощь игроку (если все сделает как надо и заслужит) :))
De gustibus et coloribus non disputandum est
Награды За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд Награждаются форумчане, заставшие зарождение Румора

Оффлайн Romualdo

  • *
  • Сообщений: 11
  • Репутация: 0
    • Просмотр профиля
    • http://
Скрипты
« Ответ #19 : 31 Декабрь, 2004, 14:23:38 »
0
Доброго времени суток, Galib.

Цитировать (выделенное)
Доброго времени суток Romualdo ! И с Наступающим!
Спасибо. Я Вас тоже поздравляю с Наступающим Новым Годом!

Цитировать (выделенное)
А может выделить заключительную часть - с заплейсом Бину в одельный блок с одним только условием RitualOn?
Думаю, незачем создавать отдельный скрипт, если будет работать имеющийся.

Кстати, фрагмент скрипта "_GL_Dackas_Family_tomb_scr" нужно изменить (изменения отображены красным цветом):

-------

if ( questionState == 2 )
set button to GetButtonPressed
if ( button == 0 )
Set RitualOn to 1
Player->RemoveItem "ingred_bc_coda_flower" 2
Player->RemoveItem "_GL_misc_skull_Yurugu_00" 1
PlaceAtPC "ingred_bc_coda_flower" 1 128 0
PlaceAtPC "ingred_bc_coda_flower" 1 96 0
PlaceAtPC "_GL_misc_skull_Yurugu_00" 1 160 0
PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 0
PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 1
PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 2
PlaceAtPC "Light_Fire_NoSmoke_400" 1 512 3
PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 1
PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 2
PlaceAtPC "_GL_Yurugu_Ritualdancer" 1 382 3
PlaySound3D "mysticism cast"
set questionState to 0
if ( button == 1 )
Set questionState to 0
return
endif
endif

-------

Это необходимо для того, чтобы данный фрагмент не повторялся вновь и вновь...


Цитировать (выделенное)
кстати, а Вы не против того, что Бину зовут Ромуальдо и Энджел?
Конечно, мы с Ангелом не против.

Всего доброго!
С уважением, Romualdo.

Теги:
 

TES 4: Oblivion. Скрипты - Анимация и Al

Автор GarinРаздел Туториалы по анимации

Ответов: 1
Просмотров: 10157
Последний ответ 21 Май, 2006, 02:47:59
от Garin
Tes 3 Morrowind. Скрипты - Анимация И Al

Автор GarinРаздел Туториалы по анимации

Ответов: 1
Просмотров: 8005
Последний ответ 21 Май, 2006, 00:03:55
от Garin
Скрипты в TES 4: Oblivion

Автор GarinРаздел Скриптинг под TES IV

Ответов: 8
Просмотров: 10474
Последний ответ 05 Май, 2008, 19:48:48
от Necromage
Анимация и скрипты - очень важный вопрос! Пожалуйста помогите

Автор @NAVI@Раздел Анимация в TES: Morrowind, Oblivion, Skyrim

Ответов: 2
Просмотров: 5562
Последний ответ 12 Июль, 2008, 20:30:27
от @NAVI@
Небольшие скрипты ^_^

Автор DeMoN-MAXРаздел Мастерская TES IV

Ответов: 14
Просмотров: 4062
Последний ответ 10 Июль, 2008, 20:27:03
от DeMoN-MAX
Скрипты и скриптовые функции в игре Скайрим.

Автор GarinРаздел Скриптинг под TES V

Ответов: 4
Просмотров: 20644
Последний ответ 08 Декабрь, 2011, 12:36:25
от Garin

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal