Перейти к содержанию

Требуется помощь со скриптами


Рекомендуемые сообщения

Доброго времени суток! Нуждаюсь в помощи сведущих людей, которые скажут что я делаю не так и как надо. В скриптинге я, мягко говоря, дилетант, так что за нубские вопросы заранее пардоньте. Сначала что попроще: 

 

1. Скрипт походной палатки, в комплекте с которой идет "поющий ветер". При сворачивании палатки звук должен исчезать, но он остается. Что нужно изменить чтобы звук переставал проигрываться сразу после того как палатка убрана?

 

begin tent2_pickup_test
 
short button
short state
 
if ( MenuMode == 1 )
return
endif
 
if ( state == 0 )
if ( OnActivate == 1 )
set button to 3
set state to 1
else
Return
endif
endif
 
if ( state == 1 )
messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"
set state to 10
endif
 
if ( state == 10 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
return
set state to 0
elseif ( button == 1 )
Disable
PlaceAtMe "ashfall_tent_ashl_misc" 1 0 0
StopSound "chimes wood"
set state to 0
endif
endif
endif
 
end
 
 
2. Скрипт, вешающийся на предмет, чтобы по прошествии определенного времени этот предмет исчезал из инвентаря. Но он не работает. Что тут не так? 
 
begin bound_cuirass_test_scr
 
float timer
 
set timer to ( timer + GetSecondsPassed)
 
if timer >= 10 
if ( Player->GetItemCount bound_cuirass >= 1 )
player->removeitem "bound_cuirass" 1 
endif
endif
 
end
 
 
3. И напоследок самое заковыристое. Скрипт, висящий на активаторе - при наличии в инвентаре фрагментов кристаллов любой разновидности (всего их 12) из них можно изготовить камень душ (любого типа, в зависимости от количества имеющихся фрагментов - крохотный, большой и.т.д.). Одно использование активатора стоит 25 септимов. Результат должен быть одинаковым вне зависимости от того какая разновидность фрагментов есть у игрока - т.е. камень душ должен выдаваться в обмен на любое сочетание разновидностей фрагментов, значение имеет только их количество. Скрипт был собран мной на основе двух других похожих, ибо самостоятельно написать что-то подобное знаний у меня недостаточно, так что меня совсем не удивляет что в итоге это поделие не работает. При активации высвечивается меню выбора с вопросом про "какой тип камней душ вы хотите изготовить?", и после нажатия на одну из кнопок больше ничего не происходит. Как заставить это работать?
 
begin Soul_gem_infuser
 
short control
short button
short type
 
If ( MenuMode == 1 )
Return
Endif
 
if ( OnActivate == 1 )
if ( control == 0 )
     if ( Player->GetItemCount Gold_001 >= 25 )
MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"
set control to 1
else
MessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."
set control to 0
endif
endif
endif
 
if ( control == 0 )
return
endif 
 
if ( control == 1 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0)
player->removeitem "gold_001" 25
set control to 2
 
elseif ( button == 1)
player->removeitem "gold_001" 25
set control to 4
 
elseif ( button == 2)
player->removeitem "gold_001" 25
set control to 6
 
elseif ( button == 3)
player->removeitem "gold_001" 25
set control to 8
 
elseif ( button == 4)
player->removeitem "gold_001" 25
set control to 10
 
elseif ( button == 5)
player->removeitem "gold_001" 25
set control to 0
endif
 
elseif ( control == 2 )
if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control )
     elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control )
     set control to 3
else
player->RemoveItem _GN_Shard_Rock_4_B, 2
          else
player->RemoveItem _GN_Shard_Rock_4_g, 2
          else
player->RemoveItem _GN_Shard_Rock_4_o, 2
          else
player->RemoveItem _GN_Shard_Rock_4_p, 2
          else
player->RemoveItem _GN_Shard_Rock_4_r, 2
          else
player->RemoveItem _GN_Shard_Rock_4_w, 2
          else
               player->RemoveItem _GN_Shard_Rock_5_B, 2
          else
player->RemoveItem _GN_Shard_Rock_5_g, 2
          else
player->RemoveItem _GN_Shard_Rock_5_o, 2
          else
player->RemoveItem _GN_Shard_Rock_5_p, 2
          else
player->RemoveItem _GN_Shard_Rock_5_r, 2
          else
player->RemoveItem _GN_Shard_Rock_5_w, 2
          set control to 7
set type to 2
endif
 
elseif ( control == 4 )
if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control )
     elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control )
set control to 3
else
player->RemoveItem _GN_Shard_Rock_4_B, 4
          else
player->RemoveItem _GN_Shard_Rock_4_g, 4
          else
player->RemoveItem _GN_Shard_Rock_4_o, 4
          else
player->RemoveItem _GN_Shard_Rock_4_p, 4
          else
player->RemoveItem _GN_Shard_Rock_4_r, 4
          else
player->RemoveItem _GN_Shard_Rock_4_w, 4
          else
               player->RemoveItem _GN_Shard_Rock_5_B, 4
          else
player->RemoveItem _GN_Shard_Rock_5_g, 4
          else
player->RemoveItem _GN_Shard_Rock_5_o, 4
          else
player->RemoveItem _GN_Shard_Rock_5_p, 4
          else
player->RemoveItem _GN_Shard_Rock_5_r, 4
          else
player->RemoveItem _GN_Shard_Rock_5_w, 4
               set control to 7
set type to 4
endif
 
elseif ( control == 6 )
if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control )
     elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control )
          set control to 3
else
player->RemoveItem _GN_Shard_Rock_4_B, 6
          else
player->RemoveItem _GN_Shard_Rock_4_g, 6
          else
player->RemoveItem _GN_Shard_Rock_4_o, 6
          else
player->RemoveItem _GN_Shard_Rock_4_p, 6
          else
player->RemoveItem _GN_Shard_Rock_4_r, 6
          else
player->RemoveItem _GN_Shard_Rock_4_w, 6
          else
               player->RemoveItem _GN_Shard_Rock_5_B, 6
          else
player->RemoveItem _GN_Shard_Rock_5_g, 6
          else
player->RemoveItem _GN_Shard_Rock_5_o, 6
          else
player->RemoveItem _GN_Shard_Rock_5_p, 6
          else
player->RemoveItem _GN_Shard_Rock_5_r, 6
          else
player->RemoveItem _GN_Shard_Rock_5_w, 6
          set control to 7
set type to 6
endif
 
elseif ( control == 8 )
if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control )
     elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control )
set control to 3
else
player->RemoveItem _GN_Shard_Rock_4_B, 8
          else
player->RemoveItem _GN_Shard_Rock_4_g, 8
          else
player->RemoveItem _GN_Shard_Rock_4_o, 8
          else
player->RemoveItem _GN_Shard_Rock_4_p, 8
          else
player->RemoveItem _GN_Shard_Rock_4_r, 8
          else
player->RemoveItem _GN_Shard_Rock_4_w, 8
          else
               player->RemoveItem _GN_Shard_Rock_5_B, 8
          else
player->RemoveItem _GN_Shard_Rock_5_g, 8
          else
player->RemoveItem _GN_Shard_Rock_5_o, 8
          else
player->RemoveItem _GN_Shard_Rock_5_p, 8
          else
player->RemoveItem _GN_Shard_Rock_5_r, 8
          else
player->RemoveItem _GN_Shard_Rock_5_w, 8
set control to 7
set type to 8
endif
 
elseif ( control == 10 )
if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < control )
     elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < control )
          elseif ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < control )
    set control to 3
else
player->RemoveItem _GN_Shard_Rock_4_B, 10
          else
player->RemoveItem _GN_Shard_Rock_4_g, 10
          else
player->RemoveItem _GN_Shard_Rock_4_o, 10
          else
player->RemoveItem _GN_Shard_Rock_4_p, 10
          else
player->RemoveItem _GN_Shard_Rock_4_r, 10
          else
player->RemoveItem _GN_Shard_Rock_4_w, 10
          else
               player->RemoveItem _GN_Shard_Rock_5_B, 10
          else
player->RemoveItem _GN_Shard_Rock_5_g, 10
          else
player->RemoveItem _GN_Shard_Rock_5_o, 10
          else
player->RemoveItem _GN_Shard_Rock_5_p, 10
          else
player->RemoveItem _GN_Shard_Rock_5_r, 10
          else
player->RemoveItem _GN_Shard_Rock_5_w, 10
          set control to 7
set type to 10
endif
 
elseif ( control == 3 )
;if they do not have enough fragments
MessageBox "У вас недостаточно фрагментов кристаллов чтобы изготовить камень душ.", "OK"
set control to 0
 
elseif ( control == 7 )
set control to 11
endif
 
elseif ( control == 11 )
;Success
MessageBox "Вы успешно изготовили камень душ.", "OK"
if ( type == 2 )
player->AddItem Misc_SoulGem_Petty, 1
               player->removeitem "gold_001" 25
elseif ( type == 4 )
player->AddItem Misc_SoulGem_Lesser, 1
               player->removeitem "gold_001" 25
elseif ( type == 6 )
player->AddItem Misc_SoulGem_Common, 1
               player->removeitem "gold_001" 25
elseif ( type == 8 )
player->AddItem Misc_SoulGem_Greater, 1
               player->removeitem "gold_001" 25
elseif ( type == 10 )
player->AddItem Misc_SoulGem_Grand, 1
               player->removeitem "gold_001" 25
endif
;Play a successful sound here
PlaySound "enchant success"
set control to 0
          endif
End
 
 
Спасибо за внимание, очень надеюсь на вашу помощь.

 

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 117
  • Создана
  • Последний ответ

Топ авторов темы

А где собственно проигрывается звук, playSound "chimes wood"?

 

В большом скрипте куча else подряд, это не работает, только первый сработает. Там вообще не понятно чего хотели.

Button == 5 это кнопка отмены, а деньги все равно забирает.

 

В каждом блоке

"_GN_Shard_Rock_5_w" ) < control )

 

set control to

Нужно между этими двумя командами вставить else.

 

Там где < control нужно заменить control на нормальное число соответственно ( 2 4 6 8 )

Там видно будет.

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

А где собственно проигрывается звук, playSound "chimes wood"?

Там отдельный скрипт на установку палатки, и в нем проигрывается звук, видимо дело в этом. Но иначе тут сделать не выйдет, дело в том что палатка, которую устанавливаешь, и палатка, которую сворачиваешь, это два разных объекта: первая - миск-айтем (свернутый тюк, который дисейблится и на его месте появляется активатор), вторая - собственно этот активатор, с которым все происходит аналогичным образом - disable и PlaceAtMe. Вот скрипт установки:

 

begin tent2_setup_test
 
short button
short state
 
if ( MenuMode == 1 )
return
endif
 
if ( state == 0 )
if ( OnActivate == 1 )
set button to 3
set state to 1
else
Return
endif
endif
 
if ( state == 1 )
messagebox "Что вы хотите сделать?" "Установить тент" "Поднять"
set state to 10
endif
 
if ( state == 10 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
Disable
PlaceAtMe "Ashfall_tent_ashl_active" 1 0 0
if ( CellChanged == 0 )
PlayLoopSound3DVP "chimes wood", 1.0, 1.0
set state to 0
elseif ( button == 1 )
activate
set state to 0
endif
endif
endif
 
end

 

В большом скрипте куча else подряд, это не работает, только первый сработает. Там вообще не понятно чего хотели.

Button == 5 это кнопка отмены, а деньги все равно забирает.

 

В каждом блоке

"_GN_Shard_Rock_5_w" ) < control )

 

set control to

Нужно между этими двумя командами вставить else.

 

Там где < control нужно заменить control на нормальное число соответственно ( 2 4 6 8 )

Там видно будет.

Охх, ну попробую разобраться, спасибо. Отпишу позже по этому скрипту.

Ссылка на комментарий
Поделиться на другие сайты

Эту штуку перенести в скрипт палатки

if ( CellChanged == 0 )

If ( getsoundplaying "chimes wood" == 0 )

PlayLoopSound3DVP "chimes wood", 1.0, 1.0

Endif

Endif

Из других мест убрать и stopsound тоже.

Палатки и миски у вас размножаются и остаются в игре. Их надо удалить командой

If ( getdisabled )

Setdelete 1

Return

Endif

 

Второй скрипт не понятен. Там лучше суммировать имеющиеся осколки.

Ссылка на комментарий
Поделиться на другие сайты

1.Скрипт для камней заработал после некоторой перестановки, но есть одна проблема - команда срабатывает только для первого в списке типа осколков, другие алтарь в инвентаре не видит и выводит сообщение про "у вас недостаточно фрагментов камней". Попробовала разбить на отдельные блоки, энивей не работает:

 

  elseif ( control == 2 )
if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < 2 )
          set control to 3
     else
player->RemoveItem _GN_Shard_Rock_4_B, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_4_g" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_4_g, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_4_o" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_4_o, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_4_p" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_4_p, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_4_r" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_4_r, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_4_w" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_4_w, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_5_B" ) < 2 )
          set control to 3
          else
          player->RemoveItem _GN_Shard_Rock_5_B, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_5_g" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_5_g, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_5_o" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_5_o, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_5_p" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_5_p, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_5_r" ) < 2 )
          set control to 3
          else
player->RemoveItem _GN_Shard_Rock_5_r, 2
          set control to 7
set type to 2
endif
          
elseif ( control == 2 )
          if ( ( player->GetItemCount "_GN_Shard_Rock_5_w" ) < 2 )
          set control to 3
          else
     player->RemoveItem _GN_Shard_Rock_5_w, 2
          set control to 7
set type to 2
endif

 

 

 

Второй скрипт не понятен. Там лучше суммировать имеющиеся осколки.

В идеале хотелось бы именно суммировать, т.е. чтобы алтарь реагировал только на количество осколков, независимо от их комбинаций, и выдавал камень душ в обмен не только на сочетания вида b+b, но также и например b+g. Есть ли возможность провернуть подобное, не перекраивая скрипт с ног до головы?

 

2. По скрипту палаток. Звук теперь вообще не проигрывается. Скорее всего из-за того что я какой-то из блоков пихаю куда-то не в то место:

 

begin tent2_pickup_test
 
short button
short state
 
if ( MenuMode == 1 )
return
endif
 
if ( CellChanged == 0 )
If ( GetSoundPlaying "chimes wood" == 0 )
PlayLoopSound3DVP "chimes wood", 1.0, 1.0
endif
endif
 
if ( state == 0 )
if ( OnActivate == 1 )
set button to 3
set state to 1
else
Return
endif
endif
 
if ( state == 1 )
messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"
set state to 10
endif
 
if ( state == 10 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
return
set state to 0
elseif ( button == 1 )
Disable
PlaceAtMe "ashfall_tent_ashl_misc" 1 0 0
StopSound "chimes wood"
set state to 0
endif
endif
endif
 
If ( GetDisabled )
SetDelete 1
Return
endif
 
end
Изменено пользователем La Sombra del Mar
Ссылка на комментарий
Поделиться на другие сайты

2

блок if ( getdisabled в самый верх

Потом if ( celchanged

 

Скрипт с предметом. А какой предмет отнимается и на каком висит?

 

С большим скриптом я пока не могу понять, что там и зачем.

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

1. Так?

 

begin tent2_pickup_test

 
short button
short state
 
if ( MenuMode == 1 )
return
endif
 
If ( GetDisabled )
SetDelete 1
Return
endif
 
if ( CellChanged == 0 )
If ( GetSoundPlaying "chimes wood" == 0 )
PlayLoopSound3DVP "chimes wood", 1.0, 1.0
endif
endif
 
if ( state == 0 )
if ( OnActivate == 1 )
set button to 3
set state to 1
else
Return
endif
endif
 
if ( state == 1 )
messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"
set state to 10
endif
 
if ( state == 10 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
return
set state to 0
elseif ( button == 1 )
Disable
PlaceAtMe "ashfall_tent_ashl_misc" 1 0 0
if ( GetSoundPlaying "chimes wood" == 1 )
StopSound "chimes wood"
set state to 0
endif
endif
endif
endif
 
end
 
Повесила этот скрипт на активатор, который появляется после дисейбла миска. Звука нет.
 
2.

Скрипт с предметом. А какой предмет отнимается и на каком висит?

На призванной броне и призванном оружии, отнимаются они же. С целью предотвращения багоюзинга с остающимися в инвентаре призванными предметами.

 

3. В общем, имеется 12 типов осколков, отличающихся цветом и алхимическими свойствами (поэтому важно сохранить индивидуальный id для каждого типа). И есть приспособление, которому можно скормить эти осколки и получить взамен цельный камень душ любого типа, в зависимости от количества осколков - крохотный за 2, обычный за 4 и.т.д. по возрастающей. Сейчас это срабатывает только для одного типа осколков, остальные разновидности скриптом игнорируются - даже если в инвентаре лежит куча осколков всех типов. Забираются только те, что стоят первыми в списке.

 

 elseif ( control == 2 )
if ( ( player->GetItemCount "_GN_Shard_Rock_4_B" ) < 2 )
          set control to 3
     else
player->RemoveItem _GN_Shard_Rock_4_B, 2
          set control to 7
set type to 2

endif 

 

Вот на этот блок есть реакция. В ответ на 2 отданных осколка _GN_Shard_Rock_4_B выдается камень душ. А в ответ на _GN_Shard_Rock_4_g и дальше - игнор и сообщение про "у вас нет достаточного кол-ва осколков", хотя по факту они есть.

 

В идеале хотелось бы чтобы камень душ выдавался при наличии требуемого количества ЛЮБЫХ осколков, независимо от их конфигурации. Если такое не потребует полного переписывания скрипта. На крайняк пусть группирует по типам, но чтобы это работало для ВСЕХ типов, а не только для одного.

Надеюсь, получилось хоть немного прояснить. А не запутать еще сильнее.)

Изменено пользователем La Sombra del Mar
Ссылка на комментарий
Поделиться на другие сайты

1 скрипт должен висеть на самом тенте

if ( CellChanged == 0 )

If ( GetSoundPlaying "chimes wood" == 0 )

PlayLoopSound3DVP "chimes wood", 1.0, 1.0

endif

endi

Это в самый верх.

 

2 чето не пойму почему не работает.

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

Я бы суммировал все осколки.

Set state to ( player->getitemcount ##1 )

Set state to ( state + player->getitemcount "###" )

....

Messagebox "oskolkov u teba %g", state

 

Потом проверил количество

If ( state < control )

Messahebox "ne hvataet"

Set control to 0

Return

Else

 

А потом запустил бы забирание осколков по одному в каждом кадре

Set controlvar to control

Endif

 

В начало

Забираем один осколок

If ( controlvar > 0 )

Set controlvar to ( controlvar - 1 )

If ( player-> getitemcount "##1"

Plauer->removeitem ##1 1

Elseif ( player-> getitemcount "##2"

Player->removeitem ##2 1

 

...

Endif

Потом когда забрали все что надо, даем че хотим

If ( controlvar == 0 )

If ( control > 0 )

If control == 2 датьтмаленький

ElseIf control == 4 дать небольшой

Elseif...

Set control to 0

Endif

Endif

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

Возникли непонятки с парой моментов.

Set state to ( player->getitemcount ##1 )
Set state to ( state + player->getitemcount "###" )

##1 это, как я понимаю, id одного из типов осколков. А что есть ###? И что в таком случае делать с остальными типами осколков чтобы они тоже суммировались?

 

 

А потом запустил бы забирание осколков по одному в каждом кадре
Set controlvar to control
Endif

В начало
Забираем один осколок
If ( controlvar > 0 )
Set controlvar to ( controlvar - 1 )
If ( player-> getitemcount "##1"
Plauer->removeitem ##1 1
Elseif ( player-> getitemcount "##2"
Player->removeitem ##2 1

Почему именно по одному? 

Ссылка на комментарий
Поделиться на другие сайты

Возникли непонятки с парой моментов.

 

##1 это, как я понимаю, id одного из типов осколков. А что есть ###? И что в таком случае делать с остальными типами осколков чтобы они тоже суммировались?

 

 

 

Почему именно по одному?

 

Другой осколок, все надо перебрать по порядку.

Копировать строку.

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

Ссылка на комментарий
Поделиться на другие сайты

А единственный забирать не требуется, там же расчет идет начиная с двух. Просто не могу понять как он тогда будет забирать 4, 6 и.т.п, не вижу чтобы это было где-то прописано. 

Ссылка на комментарий
Поделиться на другие сайты

А единственный забирать не требуется, там же расчет идет начиная с двух. Просто не могу понять как он тогда будет забирать 4, 6 и.т.п, не вижу чтобы это было где-то прописано.

 

Если у игрока один осколок + пять других. Я так понял, хотите, чтобы это считалось как шесть пригодных.

Осколки забираются по одному каждый кадр, пока не заберут сколько надо.

Ссылка на комментарий
Поделиться на другие сайты

1. Вот что получилось: 

 

begin Soul_gem_infuser
 
short control
short button
short type
short state
short controlvar
 
If ( MenuMode == 1 )
Return
Endif
 
if ( OnActivate == 1 )
if ( control == 0 )
     if ( Player->GetItemCount Gold_001 >= 25 )
MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"
set control to 1
else
MessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."
set control to 0
endif
endif
endif
 
if ( control == 0 )
return
endif 
 
if ( control == 1 )
set button to GetButtonPressed
if ( button == -1 )
return
endif
 
elseif ( button == 0)
player->removeitem "gold_001" 25
set control to 2
 
elseif ( button == 1)
player->removeitem "gold_001" 25
set control to 4
 
elseif ( button == 2)
player->removeitem "gold_001" 25
set control to 6
 
elseif ( button == 3)
player->removeitem "gold_001" 25
set control to 8
 
elseif ( button == 4)
player->removeitem "gold_001" 25
set control to 10
 
elseif ( button == 5)
set control to 0
endif
 
Set state to ( player->getitemcount "_GN_Shard_Rock_4_B" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_g" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_o" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_p" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_r" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_w" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_B" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_g" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_o" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_p" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_r" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_w" )
          
If ( state < control )
MessageBox "У вас недостаточно осколков кристаллов для изготовления камня душ"
Set control to 0
Return
Else
Set controlvar to control
Endif
 
If ( controlvar > 0 )
Set controlvar to ( controlvar - 1 )
If ( player->getitemcount "_GN_Shard_Rock_4_B" )
Player->removeitem _GN_Shard_Rock_4_B 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_g" )
Player->removeitem _GN_Shard_Rock_4_g 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_o" )
Player->removeitem _GN_Shard_Rock_4_o 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_p" )
Player->removeitem _GN_Shard_Rock_4_p 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_r" )
Player->removeitem _GN_Shard_Rock_4_r 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_w" )
Player->removeitem _GN_Shard_Rock_4_w 1
If ( player-> getitemcount "_GN_Shard_Rock_5_B" )
Player->removeitem _GN_Shard_Rock_5_B 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_g" )
Player->removeitem _GN_Shard_Rock_5_g 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_o" )
Player->removeitem _GN_Shard_Rock_5_o 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_p" )
Player->removeitem _GN_Shard_Rock_5_p 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_r" )
Player->removeitem _GN_Shard_Rock_5_r 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_w" )
Player->removeitem _GN_Shard_Rock_5_w 1
endif
endif
endif
 
If ( controlvar == 0 )
If ( control > 0 )
If control == 2 
player->AddItem Misc_SoulGem_Petty, 1
ElseIf control == 4 
player->AddItem Misc_SoulGem_Lesser, 1
ElseIf control == 6 
player->AddItem Misc_SoulGem_Common, 1
ElseIf control == 8 
player->AddItem Misc_SoulGem_Greater, 1
ElseIf control == 10 
player->AddItem Misc_SoulGem_Grand, 1
MessageBox "Вы успешно изготовили камень душ."
PlaySound "enchant success"
Set control to 0
Endif
Endif
endif
 
End
 
В ответ на запрос о великом камне душ (10 фрагментов) забирается один осколок, первого типа, затем алтарь перестает реагировать на попытки активации вообще. Видимо, выпилила из скрипта чего-то лишнего. 
 
2. По палатке:
 
begin tent2_pickup_test
 
short button
short state
 
if ( CellChanged == 0 )
If ( GetSoundPlaying "chimes wood" == 0 )
PlayLoopSound3DVP "chimes wood", 1.0, 1.0
endif
endif
 
If ( GetDisabled )
SetDelete 1
Return
endif
 
if ( MenuMode == 1 )
return
endif
 
if ( state == 0 )
if ( OnActivate == 1 )
set button to 3
set state to 1
else
Return
endif
endif
 
if ( state == 1 )
messagebox "Что вы хотите сделать?" "Ничего" "Свернуть тент"
set state to 10
endif
 
if ( state == 10 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
return
set state to 0
elseif ( button == 1 )
Disable
PlaceAtMe "ashfall_tent_ashl_misc" 1 0 0
if ( GetSoundPlaying "chimes wood" == 1 )
StopSound "chimes wood"
set state to 0
endif
endif
endif
endif
 
end
 
Звука нет. Появляется он только если повесить скрипт на миск-айтем (то бишь не палатку, а свернутый тюк). Загвоздка в том, что после установки тента миск дисейблится и StopSound привязать к нему, как я понимаю, уже не выйдет. Есть вариант ставить вместе с тентом активатор со звуком и дисейблить его когда дисейблится тент. Жизнеспособна ли вообще конструкция вида 
"if ( "id объекта"->GetDisabled == 1 )
disable

endif" ?

Изменено пользователем La Sombra del Mar
Ссылка на комментарий
Поделиться на другие сайты

1 блок

If ( controlvar > 0 в самый верх.

 

if ( button == -1 )

return

endif

Ендиф не нужен.

 

elseif ( button == 5)

set control to 0

endif

Сюда еще один ендиф.

 

If ( controlvar == 0 )

If ( control > 0 )

If ( control == 2 )

Первые две строчки убрать. В конце убрать два endif.

 

 

If ( player-> getitemcount "_GN_Shard_Rock_5_B" )

Player->removeitem _GN_Shard_Rock_5_B 1

Тут почему if, нужно elseif. В конце один endif убрать.

 

2 попробуйте скопировать скрипт беседки с активатора, который специально звук проигрывает. И его помещайте командой placeatme "id" 1 1 1

Конструкция работает.

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

Ну теперь вообще какой-то трэш начался.. Не возражаете если продолжим в лс? Чувствую, с правками мне еще долго предстоит возиться.
Ссылка на комментарий
Поделиться на другие сайты

Не работает, ни так как сказали, ни с переносом Set state to наверх. Точнее, работает только с великим камнем душ - в обмен на 10 осколков он выдается. А в ответ на запрос о других камнях забираются ВСЕ осколки, что есть в инвентаре, сколько бы их там ни было, но ничего не выдается. Что еще нужно исправить? Желательно сразу, а не по частям.

 

begin Soul_gem_infuser
 
short control
short button
short type
short state
short controlvar
 
Set state to ( player->getitemcount "_GN_Shard_Rock_4_B" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_g" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_o" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_p" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_r" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_w" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_B" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_g" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_o" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_p" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_r" )
Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_w" )
 
If ( controlvar > 0 )
Set controlvar to ( controlvar - 1 )
If ( player->getitemcount "_GN_Shard_Rock_4_B" )
Player->removeitem _GN_Shard_Rock_4_B 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_g" )
Player->removeitem _GN_Shard_Rock_4_g 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_o" )
Player->removeitem _GN_Shard_Rock_4_o 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_p" )
Player->removeitem _GN_Shard_Rock_4_p 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_r" )
Player->removeitem _GN_Shard_Rock_4_r 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_4_w" )
Player->removeitem _GN_Shard_Rock_4_w 1
elseif ( player-> getitemcount "_GN_Shard_Rock_5_B" )
Player->removeitem _GN_Shard_Rock_5_B 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_g" )
Player->removeitem _GN_Shard_Rock_5_g 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_o" )
Player->removeitem _GN_Shard_Rock_5_o 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_p" )
Player->removeitem _GN_Shard_Rock_5_p 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_r" )
Player->removeitem _GN_Shard_Rock_5_r 1
Elseif ( player-> getitemcount "_GN_Shard_Rock_5_w" )
Player->removeitem _GN_Shard_Rock_5_w 1
endif
endif
 
If ( MenuMode == 1 )
Return
Endif
endif
 
if ( OnActivate == 1 )
if ( control == 0 )
     if ( Player->GetItemCount Gold_001 >= 25 )
MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"
set control to 1
else
MessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."
set control to 0
endif
endif
endif
 
if ( control == 0 )
return
endif 
 
if ( control == 1 )
set button to GetButtonPressed
if ( button == -1 )
return
 
elseif ( button == 0)
player->removeitem "gold_001" 25
set control to 2
 
elseif ( button == 1)
player->removeitem "gold_001" 25
set control to 4
 
elseif ( button == 2)
player->removeitem "gold_001" 25
set control to 6
 
elseif ( button == 3)
player->removeitem "gold_001" 25
set control to 8
 
elseif ( button == 4)
player->removeitem "gold_001" 25
set control to 10
 
elseif ( button == 5)
set control to 0
endif
endif
 
If ( state < control )
MessageBox "У вас недостаточно осколков кристаллов для изготовления камня душ"
Set control to 0
Return
Else
Set controlvar to control
Endif
 
If control == 2 
player->AddItem Misc_SoulGem_Petty, 1
ElseIf control == 4 
player->AddItem Misc_SoulGem_Lesser, 1
ElseIf control == 6 
player->AddItem Misc_SoulGem_Common, 1
ElseIf control == 8 
player->AddItem Misc_SoulGem_Greater, 1
ElseIf control == 10 
player->AddItem Misc_SoulGem_Grand, 1
MessageBox "Вы успешно изготовили камень душ."
PlaySound "enchant success"
Set control to 0
endif
 
End
Ссылка на комментарий
Поделиться на другие сайты

begin Soul_gem_infuser

 

short control

short button

short type

short state

short controlvar

 

if ( controlvar > 0 )

Set controlvar to ( controlvar - 1 )

if ( player->getitemcount "_GN_Shard_Rock_4_B" )

Player->removeitem _GN_Shard_Rock_4_B 1

elseif ( player-> getitemcount "_GN_Shard_Rock_4_g" )

Player->removeitem _GN_Shard_Rock_4_g 1

elseif ( player-> getitemcount "_GN_Shard_Rock_4_o" )

Player->removeitem _GN_Shard_Rock_4_o 1

elseif ( player-> getitemcount "_GN_Shard_Rock_4_p" )

Player->removeitem _GN_Shard_Rock_4_p 1

elseif ( player-> getitemcount "_GN_Shard_Rock_4_r" )

Player->removeitem _GN_Shard_Rock_4_r 1

elseif ( player-> getitemcount "_GN_Shard_Rock_4_w" )

Player->removeitem _GN_Shard_Rock_4_w 1

elseif ( player-> getitemcount "_GN_Shard_Rock_5_B" )

Player->removeitem _GN_Shard_Rock_5_B 1

elseif ( player-> getitemcount "_GN_Shard_Rock_5_g" )

Player->removeitem _GN_Shard_Rock_5_g 1

elseif ( player-> getitemcount "_GN_Shard_Rock_5_o" )

Player->removeitem _GN_Shard_Rock_5_o 1

elseif ( player-> getitemcount "_GN_Shard_Rock_5_p" )

Player->removeitem _GN_Shard_Rock_5_p 1

elseif ( player-> getitemcount "_GN_Shard_Rock_5_r" )

Player->removeitem _GN_Shard_Rock_5_r 1

elseif ( player-> getitemcount "_GN_Shard_Rock_5_w" )

Player->removeitem _GN_Shard_Rock_5_w 1

endif

return

endif

 

if ( MenuMode == 1 )

Return

endif

 

if ( OnActivate == 1 )

if ( control == 0 )

if ( Player->GetItemCount Gold_001 >= 25 )

MessageBox "Этот аппарат позволяет фокусировать потоки метафизических энергий для изготовления цельных камней душ из отдельных фрагментов кристаллических морфолитов. Какой тип камня душ вы хотите изготовить? (Цена одного использования алтаря - 25 септимов.)", "Крохотный (2 фрагмента)", "Маленький (4 фрагмента)", "Обычный (6 фрагментов)", "Большой (8 фрагментов)", "Великий (10 фрагментов)", "Отмена"

set control to 1

else

MessageBox "У вас недостаточно золота чтобы воспользоваться алтарем. Цена одного использования - 25 септимов."

set control to 0

endif

endif

endif

 

if ( control == 0 )

return

endif

 

if ( control == 1 )

set button to GetButtonPressed

if ( button == -1 )

return

elseif ( button == 0)

player->removeitem "gold_001" 25

set control to 2

elseif ( button == 1)

player->removeitem "gold_001" 25

set control to 4

elseif ( button == 2)

player->removeitem "gold_001" 25

set control to 6

elseif ( button == 3)

player->removeitem "gold_001" 25

set control to 8

elseif ( button == 4)

player->removeitem "gold_001" 25

set control to 10

elseif ( button == 5)

set control to 0

return

endif

 

Set state to ( player->getitemcount "_GN_Shard_Rock_4_B" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_g" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_o" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_p" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_r" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_4_w" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_B" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_g" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_o" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_p" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_r" )

Set state to ( state + player->getitemcount "_GN_Shard_Rock_5_w" )

 

if ( state < control )

MessageBox "У вас недостаточно осколков кристаллов для изготовления камня душ"

Set control to 0

Return

Else

Set controlvar to control

endif

 

if ( control == 2 )

player->AddItem Misc_SoulGem_Petty, 1

elseif ( control == 4 )

player->AddItem Misc_SoulGem_Lesser, 1

elseif ( control == 6 )

player->AddItem Misc_SoulGem_Common, 1

elseif ( control == 8 )

player->AddItem Misc_SoulGem_Greater, 1

elseif ( control == 10 )

player->AddItem Misc_SoulGem_Grand, 1

endif

 

MessageBox "Вы успешно изготовили камень душ."

PlaySound "enchant success"

Set control to 0

End

Ссылка на комментарий
Поделиться на другие сайты

Еще несколько вопросов по скриптам, над которыми я уже довольно долго мучаюсь.

 

1. Этот висит на двери, которая открывается только при условии того, что охраняющие ее мобы (2 штуки) мертвы. Если живы оба, или только один, при попытке активировать дверь на игрока кастуется заклинание. Когда моб только один, никаких проблем не возникает, но когда их 2 или больше, реакция есть только на одного. Пробовала уже по-всякому, в том числе через else - также не работает.

 

begin door_script
 
short doonce
 
if ( doonce == 0 )
if ( OnActivate == 1 )
if ( GetLocked == 0 )
if ( "mob1"->GetHealth <= 0 )
if ( "mob2"->GetHealth <= 0 )
Activate
Player->removeitem "key_pk" 1
Set doonce to 1
elseif ( "mob1"->GetHealth > 0 )
elseif ( "mob2"->GetHealth > 0 )
cast "shock_weary" player
MessageBox "Закрыто"
endif
endif
endif
endif
endif
 
End
 
2. Измененный скрипт изучения рецептов из книг плагина "Необходимости Морровинда". Нужно чтобы изучение становилось возможным только при наличии в инвентаре чистого листа бумаги и появлялось собщение про "вам нужна бумага", но при этом книга открывалась при активации. Эта часть работает. Но сам рецепт при этом не изучается даже при наличии в инвентаре бумаги. Что где исправить?
 
begin NOM_book_adv
 
short PCSkipEquip
short pickedup
 
if ( pickedup == 1 )
set pickedup to 0
if ( NOM_cook_adv == 0 )
if ( player->GetItemCount "NoM_list_book_02" < 1 )
if ( player->GetItemCount "sc_paper plain" > 0 )
player->RemoveItem "sc_paper plain" 1
player->AddItem "NoM_list_book_02" 1
PlaySound "scroll"
messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."
PlaySound "skillraise"
messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."
set NOM_cook_adv to 1
Set doOnce to 1
Activate
if ( pickedup == 1 )
set pickedup to 0
if ( NOM_cook_adv == 0 )
if ( player->GetItemCount "NoM_list_book_02" < 1 )
if ( player->GetItemCount "sc_paper plain" < 1 )
PlaySound "NoM_BadButton"
messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов."   
Activate
endif
endif
endif
endif
endif
endif
endif
endif
 
if ( PCSkipEquip == 1 ) ;did the player open the book in inventory?
set pickedup to 1
set PCSkipEquip to 0
return
endif
 
if ( MenuMode == 1 )
return
endif
 
end
 
3. В этом скрипте проблема со звуком эффекта - он не прекращается пока не выйдешь из ячейки. Как починить? Этот висит на самой трубке скуума:
 
Begin _skooma_pipe
 
float timer
short button
short pickup
short status
 
if ( pickup == 1 )
Set pickup to 0
activate
return
endif
 
if ( OnActivate == 1 ) 
if ( MenuMode == 1 )
Set pickup to 1
return
endif
     if ( GetPCSneaking )
        Set pickup to 1
        return
    endif
if ( player->GetItemCount, ingred_moon_sugar_01 > 0 )
MessageBox "Что вы хотите сделать?" , "Курить трубку скуума", "Взять"
Set status to 1
else 
Set pickup to 1
return
endif
endif
 
If ( status == 1 ) 
set button to GetButtonPressed
if ( button == -1 ) 
return
elseif ( button == 0 ) 
player->RemoveItem, "ingred_moon_sugar_01", 1
PlaceAtPC, "wh_skooma_spell_activator", 1, 0, 0
Set status to 0
elseif ( button == 1 )
Set status to 0
Set pickup to 1
endif
endif
 
End
 
А этот на активаторе, кастующем на игрока эффект:
 
Begin _skooma_smoke
 
float timer
short state
short doOnce
 
if ( state == 0 ) ; play smoke sound, fade out, make player fall
Playsound, "Blackoutin"
FadeOut 2
Set state to 1
elseif ( state == 1 ) ; smoking in progress
Set timer to ( timer + GetSecondsPassed )
if ( timer > 2 ) ; player is already lying and screen is black - cast skooma smoke effect once
if ( doOnce == 0 )
Set doOnce to 1
Cast, "wh_skooma_smoke_effect", Player
endif
endif
if ( timer > 2 ) ; fade in, make player stand up
FadeIn 1.5
Set timer to 0
Set state to 2
endif
else ; get rid of this object
if ( timer == 0 )
disable
endif
if ( timer < 5 )
Set timer to ( timer + GetSecondsPassed )
endif
if ( timer >= 5 )
setdelete 1
endif
return
endif
 
End
 
4. Скрипт, висящий на оружии, которое, будучи убранным из рук, вешается за спину в слот наплечника. Работает некорректно от слова совсем. Ткните пжлст носом в ошибки.
 
begin Moon_reiver_sh
 
Short DoOnce
    
if ( GetDisabled )
SetDelete 1
return
endif
    
If ( Player -> HasItemEquipped "moon_reiver_sheathed"  )
If ( Player -> GetWeaponDrawn )
If ( DoOnce == 0 )
player->removeitem "moon_reiver_sheath", 1
set DoOnce to 1
endif
elseif ( DoOnce == 1 )
player->additem "moon_reiver_sheath", 1
player->equip "moon_reiver_sheath", 1
set DoOnce to 0
endif
endif
endif
 
End
 
 
 
 
 
 
 
 
Изменено пользователем La Sombra del Mar
Ссылка на комментарий
Поделиться на другие сайты

1 а мобы то какие? Если не уникальные, то ничего не будет работать. Doonce и ключ убрать.

2 if ( NOM_cook_adv == 0 ) это что за проверка? Заменить на doonce.

 

if ( pickedup == 1 ) с первой этой строчки выставить это

set pickedup to 0

if ( NOM_cook_adv == 0 )

if ( player->GetItemCount "NoM_list_book_02" < 1 )

if ( player->GetItemCount "sc_paper plain" < 1 )

PlaySound "NoM_BadButton"

messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов."

Activate

Else

player->RemoveItem "sc_paper plain" 1

player->AddItem "NoM_list_book_02" 1

PlaySound "scroll"

messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."

PlaySound "skillraise"

messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."

set NOM_cook_adv to 1

Set doOnce to 1

Activate

endif

endif

endif

endif

 

3 в самый верх

 

if ( timer < 5 )

Set timer to ( timer + GetSecondsPassed )

endif

if ( timer >= 5 )

disable

setdelete 1

Return

endif

 

4 не понятны id вещей.

Ссылка на комментарий
Поделиться на другие сайты

1. Мобы уникальные. Что самое интересное, реакция есть только на одного, который mob1. Если он убит, а mob2 жив - получаем удар током. Если наоборот - никакой реакции. И если живы оба, реакции тоже нет.

 

begin door_script
 
if ( OnActivate == 1 )
if ( GetLocked == 0 )
if ( "mob1"->GetHealth <= 0 )
if ( "mob2"->GetHealth <= 0 )
Activate
elseif ( "mob1"->GetHealth > 0 )
elseif ( "mob2"->GetHealth > 0 )
cast "shock_weary" player
MessageBox "Закрыто"
endif
endif
endif
endif
 
End
 
2. 

2 if ( NOM_cook_adv == 0 ) это что за проверка? Заменить на doonce.
 

Это проверка знает ли уже игрок этот рецепт. Думаю, сойдет вместо doonce. Но в таком виде вообще все перестало работать - ни сообщения про "нужна бумага" нет, ни рецепт не выучивается из книги. Я так понимаю, else учитывает только что-то одно, а тут нужно проверить и наличие бумаги и знает ли игрок этот рецепт.

 

begin NOM_book_adv
 
short PCSkipEquip
short pickedup
 
if ( pickedup == 1 )
set pickedup to 0
if ( NOM_cook_adv == 0 )
if ( player->GetItemCount "NoM_list_book_02" < 1 )
if ( player->GetItemCount "sc_paper plain" < 1 )
PlaySound "NoM_BadButton"
messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов."   
Activate
else
player->RemoveItem "sc_paper plain" 1
player->AddItem "NoM_list_book_02" 1
PlaySound "scroll"
messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."
PlaySound "skillraise"
messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."
set NOM_cook_adv to 1
Activate
endif
endif
endif
endif
 
if ( PCSkipEquip == 1 ) ;did the player open the book in inventory?
set pickedup to 1
set PCSkipEquip to 0
return
endif
 
if ( MenuMode == 1 )
return
endif
 
end
 
3. Теперь все нормально со звуком, премного благодарна.
 
4. 

4 не понятны id вещей.

moon_reiver_sheathed это непосредственно само оружие. moon_reiver_sheath это "типа ножны", которые по факту та же модель оружия, только висящая за спиной (технически - наплечник).

Изменено пользователем La Sombra del Mar
Ссылка на комментарий
Поделиться на другие сайты

1 заменить с седьмой строки на

Activate

Return

Endif

Endif

cast "shock_weary" player

MessageBox "Закрыто"

endif

endif

2 уберите NOM_cook_adv, это название скрипта. Замените.

4 попробуйте перекинуть с оружия на любой активатор

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

1 заменить с седьмой строки на

Activate

Return

Endif

Endif

cast "shock_weary" player

MessageBox "Закрыто"

endif

endif

А ларчик-то просто открывался.. Заработало, спасибо.

 

2 уберите NOM_cook_adv, это название скрипта. Замените.

Название скрипта NOM_book_adv. А NOM_cook_adv это переменная. Попробовала еще вот так, но тоже ничего не работает. Что я делаю не так?

 

begin NOM_book_adv
 
short PCSkipEquip
short pickedup
short NOM_cook_adv
 
if ( pickedup == 1 )
set pickedup to 0
if ( NOM_cook_adv == 0 )
if ( player->GetItemCount "NoM_list_book_02" < 1 )
if ( player->GetItemCount "sc_paper plain" < 1 )
PlaySound "NoM_BadButton"
messagebox "Вам нужен чистый лист бумаги, чтобы выписать список использованных в этой книге ингредиентов."   
Activate
elseif ( NOM_cook_adv == 0 )
if ( player->GetItemCount "NoM_list_book_02" < 1 )
if ( player->GetItemCount "sc_paper plain" > 0 )
player->RemoveItem "sc_paper plain" 1
player->AddItem "NoM_list_book_02" 1
PlaySound "scroll"
messagebox "Вы выписываете список использованных в этой книге ингредиентов на чистый лист бумаги. Он вам пригодится в процессе готовки."
PlaySound "skillraise"
messagebox "Вы узнали новые рецепты из книги 'Пища Богов'."
set NOM_cook_adv to 1
Activate
endif
endif
endif
endif
endif
endif
 
if ( PCSkipEquip == 1 ) ;did the player open the book in inventory?
set pickedup to 1
set PCSkipEquip to 0
return
endif
 
if ( MenuMode == 1 )
return
endif

 

4 попробуйте перекинуть с оружия на любой активатор

Есть еще один скрипт наподобие, там все работает и без активаторов. Но есть одна проблема - после того как персонаж убрал оружие, ножны все равно остаются пустыми, хотя в скрипте прописано добавление и экипировка версии ножен с оружием. Причем работать это перестало после добавления последнего блока. Можете что-нибудь тут подсказать?

 

begin ebonyClaymore_sheathescript
    
Short DoOnce
    
    if ( GetDisabled )
        SetDelete 1
        return
    endif
 
If ( Player -> HasItemEquipped "k7_sme_arena_claymore" )
If ( Player -> GetWeaponDrawn )
If ( DoOnce == 0 )                
                player->additem "k7_sme_quiver_ebony_ush_3", 1
                player->equip "k7_sme_quiver_ebony_ush_3", 1
player->removeitem "k7_sme_quiver_ebony_sh_3",  1
                set DoOnce to 1
endif
endif
elseif ( DoOnce == 1 )           
player->additem "k7_sme_quiver_ebony_sh_3", 1
            player->equip "k7_sme_quiver_ebony_sh_3", 1
  player->removeitem "k7_sme_quiver_ebony_ush_3", 1
            set DoOnce to 0
        endif
    endif
endif
 
if ( Player->GetItemCount "k7_sme_arena_claymore" < 1 )    
player->removeitem "k7_sme_quiver_ebony_sh_3",  1    
endif
 
End
Изменено пользователем La Sombra del Mar
Ссылка на комментарий
Поделиться на другие сайты

1 не понятно на чем этот скрипт висит и что nom list book 02.

После строки set pickedup to 1

Еще добавьте messagebox "чтение книги?"

 

2 сами ножны в инвентарь добавляются?

Последний блок удалить. И до него два еndif лишние.

Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...