The Elder Scrolls & Fallout 3 Modding

на главную страницу сайта

Форум Oblivion, Skyrim & Fallout 3/4 Modding

Объявление

У нас есть свой сервер Дискорда. Заходите, пообщаемся.
Господа, те кто пользуются фотохостингом https://uploads.ru/ для размещения изображений. Рекомендую воспользоваться для упрощения загрузки вот этой программой.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » Скрипты » 1. Getbuttonpressed 2.Невидимые НПС, как у даэдрических статуй


1. Getbuttonpressed 2.Невидимые НПС, как у даэдрических статуй

Сообщений 1 страница 9 из 9

1

Два вопроса:

1. Приведите пример хоть одного скрипта из модов, где функция Getbuttonpressed работает с большим количеством кнопок в мессажбоксе - попробую понять. как нужно формировать скрипт, чтобы он работал.

2. Как сделать, чтобы при активации активатора появилось меню диалога, как с НПС - типа как в квестах даэдрических статуй?

0

2

1.  вот
wiki.rumor.ru/Oblivion:Scripting_Tutorial:_My_Second_Script
про GetButtunPressed

2. через MessageBox

Отредактировано Luna (2011-10-10 18:07:46)

0

3

Luna написал(а):

2. через MessageBox

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

В Фоллауте то же самое есть, но там есть опция "говорящий активатор".

0

4

СКРИПТ БОЭТИИ

ScriptName DABoethiaStatueScript

short BoethiaSpeech
short button
short messageOn
float timer

;This section will control what happens when the player activates the statue

Begin OnActivate

if isActionRef player == 1

if ( GetStage DABoethia < 20 ) && ( Player.GetLevel >= 20 )
if ( player.getitemcount DaedraHeart == 0 )
    MessageBox "You do not have the proper offering Boethia requires."
elseif ( player.getitemcount DaedraHeart > 0 )
    MessageBox "Do you wish to offer Daedra Heart to the altar of Boethia?" "Yes" "No"
    set messageOn to 1
endif
elseif ( GetStage DABoethia == 30 ) && ( Player.GetLevel >= 20 )
set BoethiaSpeech to 6
elseif ( Player.GetLevel < 20 )
MessageBox "Boethia demands a more powerful champion to begin this quest."
endif

endif

End

;This section will control the audio files played when the statue is activated

Begin GameMode

if ( messageOn == 1 )

set button to GetButtonPressed

if ( button >= 0 )
    set messageOn to 0
endif

if ( button == 0 ) && ( BoethiaSpeech == 0 )
    Player.RemoveItem DaedraHeart 1
    ;MessageBox "Your offering is accepted."
    set button to 0
    set BoethiaSpeech to 1
else
    set button to 0
endif
endif

set timer to ( timer - GetSecondsPassed )

if ( timer <= 0 )
if ( GetStage DABoethia <= 10 )
    if ( BoethiaSpeech == 1 )
    ;PLAY AUDIO
    DisablePlayerControls
    set timer to DABoethiaShrineRef.say DABoethiaSpeech 1 DABoethiaVoice 1
    set BoethiaSpeech to 2
    elseif ( BoethiaSpeech == 2 )
    ;PLAY AUDIO2
    set timer to DABoethiaShrineRef.say DABoethiaSpeech 1 DABoethiaVoice 1
    set BoethiaSpeech to 3
    elseif ( BoethiaSpeech == 3 )
    ;PLAY AUDIO3
    set timer to DABoethiaShrineRef.say DABoethiaSpeech 1 DABoethiaVoice 1
    set BoethiaSpeech to 4
    elseif ( BoethiaSpeech == 4 )
    ;PLAY AUDIO4
    set timer to DABoethiaShrineRef.say DABoethiaSpeech 1 DABoethiaVoice 1
    set BoethiaSpeech to 5
    elseif ( BoethiaSpeech == 5 )
    SetStage DABoethia 20
    EnablePlayerControls
    DABoethiaPortalRef.enable
    Set DABoethia.warriorvar to 1
    endif
elseif ( GetStage DABoethia == 30 )
    if ( BoethiaSpeech == 6 )
    ;PLAY AUDIO5
    DisablePlayerControls
    set timer to DABoethiaShrineRef.say DABoethiaSpeech 1 DABoethiaVoice 1
    set BoethiaSpeech to 7
    elseif ( BoethiaSpeech == 7 )
    ;PLAY AUDIO6
    set timer to DABoethiaShrineRef.say DABoethiaSpeech 1 DABoethiaVoice 1
    set BoethiaSpeech to 8
    elseif ( BoethiaSpeech == 8 )
    EnablePlayerControls
    SetStage DABoethia 100
    Player.AddItem DAGoldBrand 1
    ModPCFame 1
    endif
endif
endif

End

Отредактировано Luna (2011-10-10 21:36:28)

0

5

В общем, наворотил вот такой скрипт и повесил на активатор:

ScriptName aaarakatacomputer02script
short button
short toggle
short toggle1
short toggle2
short toggle3
short toggle4
begin OnActivate
if toggle == 0
if getstage rakatadungeons <= 3
messagebox "Из-за недостатка питания компьютер в ждущем режиме. Для включения подайте питание на компьютер"
elseif getstage rakatadungeons == 4
messagebox "Компьютер включается. Задачи: " "Включить сервер" "Управление дроидами" "Управление туррелью" "Управление дверями" "Выйти из меню"
set button to getbuttonpressed
set toggle to 1
elseif getstage rakatadungeons >= 5
messagebox "Компьютер выключен"
endif
endif
end

Begin Gamemode
if toggle == 1
if (button == 0) && (toggle1 == 0)
rakataserverref.setdestroyed 0
message "Сервер включен"
set toggle1 to 1
elseif (button == 1) && (toggle2 == 0)
rakatadroidsequrity1.setdestroyed 0
message "Охранный дроид включен"
set toggle2 to 1
elseif (button == 2) && (toggle3 == 0)
rakataturret01ref.setdestroyed 0
message "Охранная туррель включена"
set toggle3 to 1
elseif (button == 3) && (toggle4 == 0)
mainliftref.lock 100
message "Главный лифт заблокирован"
set toggle4 to 1
elseif (button == 0) && (toggle1 == 1)
rakataserverref.setdestroyed 1
message "Сервер выключен"
set toggle1 to 0
elseif (button == 1) && (toggle2 == 1)
rakatadroidsequrity1.setdestroyed 1
message "Охранный дроид выключен"
set toggle2 to 0
elseif (button == 2) && (toggle3 == 1)
rakataturret01ref.setdestroyed 1
message "Охранная туррель выключена"
set toggle3 to 0
elseif (button == 3) && (toggle4 == 1)
mainliftref.unlock
message "Главный лифт открыт"
set toggle4 to 0
elseif button == 4
Message " "
endif 
set toggle to 0
endif
end

Проблемы в том, что при активации не происходит никаких изменений ни с туррелью, ни с дроидом, ни с сервером (сервер изначально деактивирован функциец setdestroyed 1 после определенной стадии квеста, аналогично - туррель, а дроид - наоборот изначально активен).

Вопрос - где  накосячил?

0

6

я обычно set button to getbuttonpressed    в блоке Gamemode ставлю..

0

7

Благодарю за подсказки. Работающий скрипт теперь выглядит вот так:

ScriptName aaarakatacomputer02script
short button
short toggle
short toggle1
short toggle2
short toggle3
short toggle4
begin OnActivate player
if (toggle == 0)
if (getstage rakatadungeons <= 3)
messagebox "Из-за недостатка питания компьютер в ждущем режиме. Для включения подайте питание на компьютер"
elseif (getstage rakatadungeons == 4)
messagebox "Компьютер включается. Задачи: " "Включить сервер" "Управление дроидами" "Управление туррелью" "Управление дверями" "Выйти из меню"
set toggle to 1
elseif (getstage rakatadungeons >= 5)
messagebox "Компьютер выключен"
endif
endif
end
Begin Gamemode
if (toggle == 1)
set button to getbuttonpressed
endif
if (button == 0) && (toggle1 == 0)
rakataserverref.setdestroyed 0
message "Сервер включен"
set toggle1 to 1
elseif (button == 1) && (toggle2 == 0)
rakatadroidsequrity1.resurrect 1 
message "Охранный дроид включен"
set toggle2 to 1
elseif (button == 2) && (toggle3 == 0)
rakataturret01ref.setdestroyed 0
message "Охранная туррель включена"
set toggle3 to 1
elseif (button == 3) && (toggle4 == 0)
mainliftref.lock 100
message "Главный лифт заблокирован"
set toggle4 to 1
elseif (button == 0) && (toggle1 == 1)
rakataserverref.setdestroyed 1
message "Сервер выключен"
set toggle1 to 0
elseif (button == 1) && (toggle2 == 1)
rakatadroidsequrity1.kill
message "Охранный дроид выключен"
set toggle2 to 0
elseif (button == 2) && (toggle3 == 1)
rakataturret01ref.setdestroyed 1
message "Охранная туррель выключена"
set toggle3 to 0
elseif (button == 3) && (toggle4 == 1)
mainliftref.unlock
message "Главный лифт открыт"
set toggle4 to 0
elseif (button == 4)
Message " "
endif 
if (toggle == 1) && (button != -1)
set toggle to 0
set button to -1
endif
end

Только почему-то функция setdestroyed срабатывала на активаторах, а на дроиде (тварь) - нет ,поэтому он не вырубался. Я заменил ее на kill - resurrect

0

8

Вовочка написал(а):

Я заменил ее на kill - resurrect

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

elseif (button == 1) && (toggle2 == 0)
rakatadroidsequrity1.resurrect 1 
message "Охранный дроид включен"

тогда это будет выглядеть так  (rakatadroidsequrity11 - модель дроида-статик):

elseif (button == 1) && (toggle2 == 0)
rakatadroidsequrity1.Enable
rakatadroidsequrity11.Disable
message "Охранный дроид включен"

а

elseif (button == 1) && (toggle2 == 1)
rakatadroidsequrity1.kill
message "Охранный дроид выключен"

будет выглядеть так:

elseif (button == 1) && (toggle2 == 0)
rakatadroidsequrity1.Disable
rakatadroidsequrity11.Enable
message "Охранный дроид включен"

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

Отредактировано Luna (2011-10-11 07:54:25)

0

9

Luna написал(а):

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

Слушай, здорово, что у тебя мыслЯ заработала в ответ на скрипт. Значит, в нем есть что-то интересное;)

0


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » Скрипты » 1. Getbuttonpressed 2.Невидимые НПС, как у даэдрических статуй