2


Суббота-Loredas
16.12.2017 10:17

Летописи Тамриэля

TESmagic


В жизни нет ничего лучше собственного опыта. Вальтер Скотт

Приветствую Вас Путешественник | RSS Главная | Простые скрипты. - Форум | Регистрация | Вход |

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » TES Construction Set (Oblivion) » TES Construction Set (Oblivion) » Простые скрипты. (примеры самых простых скриптов для Обливиона.)
Простые скрипты.
LunaДата: Пятница-Fredas, 20.09.2013, 12:36 | Сообщение # 1
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16777
Награды: 155
Статус: Выехал
Результирующие скрипты в диалогах:

Добавление заклинания игроку (или НПС, если заменить Player на ID НПСа)
Player.addspell aaaSelPriziv

Удаление заклинания  у игрока (или НПС, если заменить Player на ID НПСа)
Player.removespell aaaSelPriziv

Перевести игрока во фракцию кого-то с рангом 1 ( в данном случае это позволит игроку стать другом НПС)
Player.SetFactionRank aaaSelena, 1

Удалить из инвентаря игрока вещь  aaaSelBook в количестве 1
Player.RemoveItem aaaSelBook 1

ДОбавить  игроку вещь  aaaSelBook в количестве 1
Player.AddItem aaaSelBook 1

Старт квеста  и переход на другую стадию квеста (в данном случае  на 10)
startquest aaaSelQuest1
SetStage aaaSelQuest1 10

Проверка суммы денег у игрока ( в данном случае, чтоб было не меньше 100 золотых, тогда деньги у игрока изымаются, а предмет купленный добавляется в инвентарь)
if ( Player.GetGold <100 )
Messagebox "У Вас нет таких денег"
else
Player.RemoveItem gold001 100
Player.AddItem aaaSelBook 1
endif

Заставляет НПС напасть на игрока
startcombat player

Проверка текущего местонахождения НПС и добавление, в зависимости от этого, AI пакета ( в данном случае - НПС будет есть в тавернах городов)
RemoveScriptPackage
if ( GetInCell Bruma == 1 )
AddScriptPackage aaaSelEatBruma
else
if ( GetInCell Bravil == 1 )
AddScriptPackage aaaSelEatBravil
else
if ( GetInCell Anvil == 1 )
AddScriptPackage aaaSelEatAnvil
else
if ( GetInCell Cheydinhal == 1 )
AddScriptPackage aaaSelEatCheyd
else
if ( GetInCell Chorrol == 1 )
AddScriptPackage aaaSelEatCor
else
if ( GetInCell IC == 1 )
AddScriptPackage aaaSelEatIC
else
if ( GetInCell Leyawiin == 1 )
AddScriptPackage aaaSelEatLeyav
else
if ( GetInCell Skingrad == 1 )
AddScriptPackage aaaSelEatSk
else
AddScriptPackage aaaSelEat11
endif
endif
endif
endif
endif
endif
endif
endif

Восстановление здоровья игроку
Player.ResetHealth

Скрипты, которые "вешаются на предметы или квесты

Переход на следующую стадию квеста при добавлении вещи в инвентарь игрока (навешивается на предмет, добавляемый в инвентарь)
ScriptName aaaSelQuest2Scr
Begin OnAdd
if ( GetStage aaaSelQuest2 == 10 )
SetStage aaaSelQuest2 20
endif
End

Переход на следующую стадию квеста после смерти некоего НПС
ScriptName aaaDrem1
Begin OnDeath
if ( GetStage aaaDom == 10 )
SetStage aaaDom 20
endif
End

Скрипт на покупку замка (продает НЕ НПС)
scn aaaZamokProv
Short button
Short activated
begin onActivate
If ( activated == 0 )
MessageBox "Желаешь купить замок за 500000 септимов?","Да","Нет"
Set activated to 1
elseif ( activated > 1)
MessageBox "Замок уже твой."
EndIf
End
Begin GameMode
If ( activated == 1 )
Set button to GetButtonPressed
If ( button == 1 )
MessageBox "Твое дело. Но посмотри, от чего ты отказываешься! Если передумаешь, приходи."
Set activated to 0
elseif ( button == 0 )
if ( Player.GetGold <500000 )
Messagebox "У тебя нет таких денег. Иди подзаработай и приходи позже."
Set activated to 0
else
Messagebox "Поздравляю! Замок твой! Держи ключ!"
Player.RemoveItem gold001 500000
Player.AddItem aaaKey1 1
Set activated to 2
endif
endif
endif
endif
end

Скрипт на активацию бани, появление пара и восстановление здоровья игрока
scn aaaBanya
Short button
Short activated
begin onActivate
If ( activated == 0 )
MessageBox "Попаримся?","Да","Нет"
Set activated to 1
elseif ( activated >= 2)
MessageBox "С легким паром!"
AAALunaMistRef.Disable
EndIf
End
Begin GameMode
If ( activated == 1 )
Set button to GetButtonPressed
If ( button == 1 )
AAALunaMistRef.Disable
MessageBox "Передумаешь, поддай парку."
Set activated to 0
elseif ( button == 0 )
Messagebox "Легкого пара! Сейчас ты будешь, как новенький."
AAALunaMistRef.Enable
Player.ResetHealth
Set activated to 2
endif
endif
endif
end

Скрипт для заклинания телепортации
1) телепортация после кастования заклинания (тип Magic, вешается на заклинание)

ScriptName 17
Begin ScriptEffectStart
Player.MoveTo 155245555
End

2) добавление заклинания телепортации игроку после прочтения книги

scn aaaBashna
short read
Begin OnActivate
if(read == 0)
set read to 1
Player.AddSpell 154422222
endif
activate
end

Открывание двери при наличии необходимых вещей в инвентаре игрока
scn aaaLuk
Begin OnActivate
if ( player.getitemcount 458796 > 0 )&&( player.getitemcount 45896547 > 0 )&&( player.getitemcount 458878 > 0 )
SetStage aaaPodval 20
endif
if ( GetStage aaaPodval< 20 )
MessageBox "Вы не можете открыть этот люк. У Вас нет всех необходимых вещей"
return
elseif ( GetStage aaaPodval >= 20 )
Activate
endif
End

Скрипт, который заставляет  НПС атаковать игрока, если квест находится на определенной стадии
scn aaaDremSCRIPT
begin gamemode
if ( GetStage aaaDom >= 10 )
StartCombat player
endif
endif
end

Скрипт на общение с домашними животными (шуточный)
scn aaaDreug
short button
short doonce
begin onactivate player
if ( doonce == 0 )
StopCombat player
messagebox "Что собираетесь делать?"  "Кормить" "Снова кормить" "Гладить"
set doonce to 1
endif
end
begin gamemode
if ( doonce == 1 )
set button to getbuttonpressed
if ( button == 0 )
if ( player.getitemcount HumanHeart > 0 )
player.removeitem HumanHeart 1
elseif ( player.getitemcount HumanHeart <= 0 )
messagebox "Вам нечем кормить дреуга"
endif
set doonce to 0
elseif ( button == 1 )
messagebox "Осторожно! Дреуг уже поел и его может стошнить."
set doonce to 0
elseif ( button == 2 )
messagebox "Вы уверены? Надеюсь, у Вас хороший личный хирург."
StartCombat player
set doonce to 0
endif
endif
end

Ну вот пока все))) Попозже добавлю другие скрипты, в том числе, с использованием ОБСЕ


Чем больше я сплю, тем меньше от меня вреда......
 
ProfessorSeverusДата: Пятница-Fredas, 20.09.2013, 13:13 | Сообщение # 2
Партурнакс Георгиевич
Группа: Главный администратор
Сообщений: 17609
Награды: 157
Статус: Выехал
Luna,  очень полезная информация, для тех кто хочет познать скрипты - очень пригодится!
Надо её в Статьи выложить! Сделать там категорию, может, соответствующую?


О! Эльберет Гильтониэль!
Где бы не были бестолковые животные, хищники всегда неподалеку... Янус Гассилдор



Моя главная проблема в жизни — это равнодушие к внешнему миру. ©Карл Лагерфельд
 
LunaДата: Пятница-Fredas, 20.09.2013, 13:16 | Сообщение # 3
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16777
Награды: 155
Статус: Выехал
насчет статей - не знаю. не уверена, что это там к месту будет.

Чем больше я сплю, тем меньше от меня вреда......
 
ProfessorSeverusДата: Пятница-Fredas, 20.09.2013, 13:25 | Сообщение # 4
Партурнакс Георгиевич
Группа: Главный администратор
Сообщений: 17609
Награды: 157
Статус: Выехал
Luna,  а почему нет?
Если у нас есть Мастер по скриптам, то надо, наверное, этим пользоваться!)))


О! Эльберет Гильтониэль!
Где бы не были бестолковые животные, хищники всегда неподалеку... Янус Гассилдор



Моя главная проблема в жизни — это равнодушие к внешнему миру. ©Карл Лагерфельд
 
LunaДата: Пятница-Fredas, 20.09.2013, 13:27 | Сообщение # 5
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16777
Награды: 155
Статус: Выехал
ну уж про Мастера ты загнул конечно, профессор) Но все равно приятно)))

Тогда давай сделаем, пусть там будет))


Чем больше я сплю, тем меньше от меня вреда......
 
ProfessorSeverusДата: Пятница-Fredas, 20.09.2013, 13:55 | Сообщение # 6
Партурнакс Георгиевич
Группа: Главный администратор
Сообщений: 17609
Награды: 157
Статус: Выехал
Luna,  не загибал, а сказал Правду!))

О! Эльберет Гильтониэль!
Где бы не были бестолковые животные, хищники всегда неподалеку... Янус Гассилдор



Моя главная проблема в жизни — это равнодушие к внешнему миру. ©Карл Лагерфельд
 
LunaДата: Пятница-Fredas, 20.09.2013, 14:00 | Сообщение # 7
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16777
Награды: 155
Статус: Выехал
Мастер  - это Алекс Тирекс. smile

Чем больше я сплю, тем меньше от меня вреда......
 
LunaДата: Суббота-Loredas, 21.09.2013, 09:51 | Сообщение # 8
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16777
Награды: 155
Статус: Выехал
Продолжаю выкладывать примеры скриптов:

Скрипт на появление надписи при активации объекта
scn 012yhyhyhyhy
begin onActivate
if isActionRef player == 1
messagebox "Скройся в ужасе, двери нет"
endif
End

Оживание противника после смерти (со спецэффектами)
scn AaaBloodScript 
begin OnDeath 
   PlayMagicShaderVisuals effectSummonMythicDawn 5 
   PlaySound AMBThunder 
   Resurrect 1 
end

Появление НПС при воздействии на некий активатор, начало разговора, инициируемое НПС
ScriptName aaaBoyScr
Short activ
begin onActivate 
If Activ == 0         
aaaBoyRef.Enable
aaaBoyRef.StartConversation player, Greeting
Set activ to 1
endif
end

Отслеживание выбора  только одного  предмета  из предложенных нескольких вариантов )навешивается на ВСЕ предлагаемые для выбора предметы с небольшими различиями по IP)
ScriptName aaaChmot1Scr
begin onAdd Player
MessageBox "Вы можете выбрать только одну вещь из шести"
If ( Player.GetItemCount aaSmot2 == 1)
Player.RemoveItem aaSmot2 1
aaaChost15Ref.AddItem aaSmot2 1
else
If ( Player.GetItemCount aaaSmot3 == 1)
Player.RemoveItem aaaSmot3 1
aaaChost14Ref.AddItem aaaSmot3 1
else
If ( Player.GetItemCount aaaaSmot4 == 1)
Player.RemoveItem aaaaSmot4 1
aaaChost13Ref.AddItem aaaaSmot4 1
else
If ( Player.GetItemCount aaaaaSmot5 == 1)
Player.RemoveItem aaaaaSmot5 1
aaaChost12Ref.AddItem aaaaaSmot5 1
else
If ( Player.GetItemCount aaaaaaSmot6 == 1)
Player.RemoveItem aaaaaaSmot6 1
aaaChost11Ref.AddItem aaaaaaSmot6 1
endif
endif
endif
endif
endif

При взятии вещи из контейнера ( в данном случае, гроба) рядом с гробом с ревом появляется мертвец и нападает на игрока,  происходит переход на следующую стадию квеста
Scn aaaDosp1Scr
Begin onAdd Player
SetStage aaaSklep 50
aaaZombi1Ref.Enable
playsound npczombieattack
aaaZombi1Ref.StartCombat Player
End

При воздействии на активатор любым из магических или простых ударов происходит переход на следующую стадию квеста и перемещение игрока в следующую локацию к маркеру
Scn aaaIslandScr
begin onMagicEffectHit FIDG
  Player.MoveTo aaaDeadIslandMarker
  SetStage aaaSklep 125
end
begin onMagicEffectHit FRDG
  Player.MoveTo aaaDeadIslandMarker
  SetStage aaaSklep 125
end
begin onMagicEffectHit SHDG
  Player.MoveTo aaaDeadIslandMarker
  SetStage aaaSklep 125
end
begin OnHitWith
  Player.MoveTo aaaDeadIslandMarker
  SetStage aaaSklep 125
end

При прикосновении к активатору игрок получает выбор - умереть или отдать силу
ScriptName aaaKolyaskaScr
short Button
short Var
begin onActivate
if ( Var == 0 )  
           MessageBox "Это Призрачная Инвалидная Коляска. Прикоснувшийся к ней умрет, если не отдаст Коляске свою силу." "Отдать силу" "Не отдавать силу"  
Set Var to 1
endif
end onActivate
begin GameMode
    if ( Var == 1 )         
Set Button to GetButtonPressed
        if ( Button == 0 )
           Cast SE05HerdirTortureSpell1 Player           
            player.ModActorValue Strength -20
            Message  " Сила в обмен на душу. Выгодная сделка!"
            Set Var to 0
            elseif ( Button == 1 )
            player.kill
                endif
        endif
   endif
end 

При взаимодействии с триггером гаснет свет
Scn aaaLampCavScr
begin OnTrigger Player
aaaLamp2Ref.Disable
aaaLamp1Ref.Disable
End

При надевании определенного предмета гардероба игрок переносится в другую локацию
Scn aaaLYUK1Scr
short shmot
begin onActivate 
If shmot < 7 
If ( Player.GetEquipped aSmot1 ==1 ) 
  Player.moveto aaaMarkerLocation1Ref, 0, 0, 0 
 Autosave 
Set shmot to 1
elseIf ( Player.GetEquipped aaSmot2 ==1 ) 
  Player.moveto aaaMarkerLokation2Ref, 0, 0, 0 
 Autosave 
Set shmot to 2
elseIf ( Player.GetEquipped aaaSmot3 ==1) 
 Player.moveto aaaLokation3Ref, 0, 0, 0 
 Autosave
Set shmot to 3
elseIf ( Player.GetEquipped aaaaSmot4 ==1 ) 
 Player.moveto aaaMarkerPustotaRef, 0, 0, 0 
 Autosave
Set shmot to 4
elseIf ( Player.GetEquipped aaaaaSmot5 ==1 ) 
  Player.moveto aaaMarkerLokation5Ref, 0, 0, 0 
Autosave 
 Set shmot to 5
elseIf ( Player.GetEquipped aaaaaaSmot6 ==1 ) 
 Player.moveto aaaLocation6MarkerRef, 0, 0, 0 
Autosave
Set shmot to 6
else 
    MessageBox "Вы не можете открыть этот люк, наденьте амулет или кольцо" 
elseif (shmot >= 7)
    MessageBox "Люк больше не откроется" 
endif 
endif 
endif 
endif 
endif 
endif 
endif 
endif 
end 

ТИПО замаскировался))))) Если на игроке не надет полный комплект костюмчика, дверь его не пропустит))
Scn aaaPPPPPP1Scr
short shmot 
begin onActivate 
If ( Player.GetEquipped aa11245432 ==1 ) && ( Player.GetEquipped aa11545123 == 1)&& ( Player.GetEquipped aa14421213 == 1)&& ( Player.GetEquipped aa21556363455 == 1)&& ( Player.GetEquipped aa44565578531 == 1)&& ( Player.GetEquipped aaaWeapEbonyClaymore == 1) 
MessageBox " Хозяин! Простите, не признала! Проходите!" 
set shmot to 1 
Player.moveto aaaIslandMarkerRef, 0, 0, 0 
else 
MessageBox " Ты не Властитель душ! " 
Cast SE05HerdirTortureSpell1 Player
return 
endif 
end 

Изъятие у игрока читерского оружия на выходе из локации))
Scn aaaPPPPPP2Scr
Short Door
begin onActivate 
If ( Player.GetItemCount aaaWeapEbonyClaymore == 1) 
MessageBox " Меч Властителя Душ должен остаться на острове!" 
Set Door to 0
return
else
activate
Set Door to 1
endif 
end 

Общение с ведьмой-креатуром и результат разговора в зависимости от его начала
ScriptName aaaSpaiderScr
short Button
short Var
begin onActivate
if ( Var == 0 )  
           MessageBox "Ведьма! Мне нужен проход на остров Горестей. " "Красавица, дай пройти" "Убирайся с дороги!"  "Возьми мою силу" "Я заплачу тебе 1000  монет"  
Set Var to 1
endif
end onActivate
begin GameMode
    if ( Var == 1 )         
Set Button to GetButtonPressed
        if ( Button == 0 )
            Player.AddSpell aaaSpiderSpell1
            SetStage aaaSklep 30           
            Set Var to 2
        elseif ( Button == 1 )
           StartCombat player
            Set Var to 2
        elseif ( Button == 2 )
            player.ModActorValue Strength -30
            Message  " У Вас взята сила"
            SetStage aaaSklep 30
            Set Var to 2
        elseif ( Button == 3 )
            if (Player.getGold < 1000)
              MessageBox " У вас нет таких денег!"
              Set Var to 0
              Return
            else            
               Player.RemoveItem Gold001 1000
               Set Var to 2
               SetStage aaaSklep 30
            Endif
        endif
        endif
        endif
        endif
   endif
end 
Begin OnDeath 
SetStage aaaSklep 40
End

Раздача "новогодних подарков")))))))   Отдать  правильный предмет стражу-креатуру
ScriptName aaaStrazhBezumiaScr
short Button
short MyVar
begin onActivate 
               MessageBox "Страж!" "Возьми эту вещь!" "Ничего"
         Set MyVar to 1 
end onActivate
begin GameMode
    if ( MyVar == 1 )
        Set Button to GetButtonPressed
        if ( Button == 0 )
            aaaStrazhBezumiaChestRef.Activate player 1
       Set MyVar to -1
       Return
        elseif ( Button == 1 )
            AddScriptPackage aaaStrazhWander
            Set MyVar to -1
            Return
        endif
    endif

Переход стадии квеста на следующую при активации предмета в инвентаре (надеть, рассмотреть)
Scn aaaTGAscript003 
begin onequip 
setstage aaaTGAquest001 25 
end

При активации предмета рядом с игроком появляется его точная копия и атакует его
Scn Stone1Scr
begin onActivate 
short Stone
Ref New
If Stone == 0
Set New to player.CreateFullActorCopy  
Set Stone to 1 
new.StartCombat player
Endif
End
Begin GameMode
If New.GetDead == 1
New.RemoveItem aaSmot2 1
Endif
End


Чем больше я сплю, тем меньше от меня вреда......
 
LunaДата: Понедельник-Morndas, 18.11.2013, 23:07 | Сообщение # 9
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16777
Награды: 155
Статус: Выехал
Продолжу.. Еще немного свежих скриптов.

Скрипт на кодовый замок. Открывается при наборе правильной комбинации из 4 цифр (2914).

Scn aaaaMaormerSeyfOnScript

Short Popitka
Short Button1
Short Button2
Short Button3
Short Button4
Short CombiRight
Short ChestOpen
Short DoOnce

Begin OnActivate
if ( ChestOpen == 2 )
Activate
else
Set chestopen to 1
set Popitka to 0
set CombiRight to 0
endIf
end

Begin GameMode
if (ChestOpen == 1)
if (Popitka == 0)
MessageBox,"Введите первую цифру кода","0","1","2","3","4","5","6","7","8","9"
Set Popitka to 1
endif
endif

if (Popitka == 1)
set button1 to Getbuttonpressed
if button1 == -1
return
else
Set Popitka to 2
endif
endif

if (Popitka == 2)
MessageBox,"Введите вторую цифру кода","0","1","2","3","4","5","6","7","8","9"
Set Popitka to 3
endif

if (Popitka == 3)
set button2 to Getbuttonpressed
if button2 == -1
return
else
Set Popitka to 4
endif
endif

if (Popitka == 4)
MessageBox,"Введите третью цифру кода","0","1","2","3","4","5","6","7","8","9"
Set Popitka to 5
endif

if (Popitka == 5)
set button3 to Getbuttonpressed
if button3 == -1
return
else
Set Popitka to 6
endif
endif

if (Popitka == 6)
MessageBox,"Введите четвертую цифру кода","0","1","2","3","4","5","6","7","8","9"
Set Popitka to 7
endif

if (Popitka == 7)
set button4 to Getbuttonpressed
if button4 == -1
return
else
Set Popitka to 8
endif
endif

if (Popitka == 8)
if button1 == 2
Set CombiRight to CombiRight + 1
endif
if button2 == 9
Set CombiRight to CombiRight + 1
endif
if button3 == 1
Set CombiRight to CombiRight + 1
endif
if button4 == 4
Set CombiRight to CombiRight + 1
endif

if (Popitka == 8) && (CombiRight == 4)
Set ChestOpen to 2
set Popitka to 0
return
endif

if (Popitka == 8) && (CombiRight <= 3)
MessageBox"Код неверен."
Set Popitka to 0
Set ChestOpen to 0
endif

elseif (chestopen == 0)
return
elseif (chestopen == 2)
if Doonce == 0
set doonce to 1
Activate
return
endif
else
return
endif
end

Ларчик, выдающий деньги. (карманный банкомат biggrin )

Scn aaaMRLarecScr

Short Var
Short Button
Short Alarm
Short Maxim

Begin OnEquip
If aaaMRDreamMercyChestRef.Summa == 100000
Set aaaMRDreamMercyChestRef.Larchik to 1
Set Var to -1
else
MessageBox "Постарайтесь не жадничать. Какая сумма Вам нужна?", "1 септим", "10 септимов", "100 септимов", "1000 септимов", "10000 септимов", "100000 септимов"
Set Var to 1
endif
end

Begin GameMode
If Var == 1
Set Button to GetButtonPressed
if ( Button == 0 )
If aaaMRDreamMercyChestRef.Summa+1<=100000
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+1
Player.AddItem gold001 1
else
Set Maxim to 100000-aaaMRDreamMercyChestRef.Summa
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+Maxim
Player.AddItem gold001 Maxim
Set Var to -1
endif
elseif ( Button == 1 )
If aaaMRDreamMercyChestRef.Summa+10<=100000
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+10
Player.AddItem gold001 10
else
Set Maxim to 100000-aaaMRDreamMercyChestRef.Summa
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+Maxim
Player.AddItem gold001 Maxim
Set Var to -1
endif
elseif ( Button == 2 )
If aaaMRDreamMercyChestRef.Summa+100<=100000
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+100
Player.AddItem gold001 100
else
Set Maxim to 100000-aaaMRDreamMercyChestRef.Summa
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+Maxim
Player.AddItem gold001 Maxim
Set Var to -1
endif
elseif ( Button == 3 )
If aaaMRDreamMercyChestRef.Summa+1000<=100000
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+1000
Player.AddItem gold001 1000
else
Set Maxim to 100000-aaaMRDreamMercyChestRef.Summa
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+Maxim
Player.AddItem gold001 Maxim
Set Var to -1
endif
elseif ( Button == 4 )
If aaaMRDreamMercyChestRef.Summa+10000<=100000
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+10000
Player.AddItem gold001 10000
else
Set Maxim to 100000-aaaMRDreamMercyChestRef.Summa
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+Maxim
Player.AddItem gold001 Maxim
Set Var to -1
endif
elseif ( Button == 5 )
If aaaMRDreamMercyChestRef.Summa+100000<=100000
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+100000
Player.AddItem gold001 100000
else
Set Maxim to 100000-aaaMRDreamMercyChestRef.Summa
Set aaaMRDreamMercyChestRef.Summa to aaaMRDreamMercyChestRef.Summa+Maxim
Player.AddItem gold001 Maxim
Set Var to -1
endif
Endif
Endif

Интересный и полезный прием - создание скрипта, содержащего одни переменные. Скрипт - объектный, объявленные в нем переменные могут использоваться в других скриптах. (что-то вроде глобальной переменной, но менее капризно)

Скрипт переменных. Навешан, например, на сундук с ID REF aaaMRDreamMercyChestRef
Scn aaaMRVarScr

Short doonce
Short Da
Short HitVar
Short Larchik
Short Summa

При необходимости использовать переменную из этого скрипта, в нужном месте другого скрипта эта переменная запишется как, например, aaaMRDreamMercyChestRef.doonce


Чем больше я сплю, тем меньше от меня вреда......
 
LunaДата: Понедельник-Morndas, 10.02.2014, 20:17 | Сообщение # 10
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16777
Награды: 155
Статус: Выехал
Еще немного скриптов:

Скрипт на переименование таверны ( с использованием ОБСЕ не ниже 19 версии)

Scn TavernScr

short button
string_var NewName ; текстовая переменная

begin OnAdd aaaaaAZJRef
OpenTextInput "Введите название %r | Принять | Не менять название" 0 1000
end

begin MenuMode 1001
UpdateTextInput; чтоб меню не закрывалось
end

begin GameMode
set button to GetButtonPressed
if ( button == 0 )
set NewName to GetInputText ; присвоение таверне введенного названия
SetCellFullName AAAAPlayerInn $NewName ; переименование ячейки таверны, чтоб новое название отображалось при входе в локацию
MessageEX "Новое название таверны %z" NewName
Player.RemoveItem gold001 800  ; игрок инвестирует 800 золотых в таверну ( по условию диалога)
aaaaViveskaRef.Enable  ; добавляется вывеска возле таверны
aaaaaAZJRef.SetInvestmentGold 800 ; деньги игрока инвестируются торговцу в таверне
Player.SetFactionRank aaaaTavernHoz, 1 ; игрок становится членом фракции "хозяин таверны"
SetStage aaaaDohodQuest 10  ; переход на следующую стадию квеста
CloseTextInput
elseif ( button == 1 )  ; условие, если игрок название не хочет менять, но хочет быть совладельцем таверны
CloseTextInput
Player.RemoveItem gold001 800
aaaaViveskaRef.Enable
aaaaaAZJRef.SetInvestmentGold 800
Player.SetFactionRank aaaaTavernHoz, 1
SetStage aaaaDohodQuest 10
endif
end

Скрипт,чтобы можно было залезать в инвентарь компаньона или любого  другого созданного НПС. Составлен на основе скрипта из туториала
Руководство по созданию компаньонов-NPC v2.01 Надеюсь, автор меня простит)))

Столкнулась с небольшой проблемой по поводу НПС, вернее, их инвентаря. Делала для обычных НПС, не компаньонов, возможность обменяться с ними вещами. По накатанной дорожке взяла скрипт на инвентарь компаньона, который Evil привел для примера в своем туториале о создании компаньонов. НО у обычных НПС инвентарь не открывался.
Когда начала разбираться, оказалось, что у тех НПС, у которых есть уже свои АИ пакеты, добавленные пакеты, как это сделано для компаньонов, не срабатывают. Заменила добавление АИ пакетов следования Follow и удаление его на скриптовую переменную:
1 Выбрала статичный объект, присвоила ему Ref ID: aaampmVariableRef

2 Навесила на него скрипт переменных
Scn aaampmVariableScr
Short Inv1

3 В диалогах с НПС после нужной фразы, которая должна запускать открытие инвентаря добавила:
Set aaampmVariableRef.Inv1 to 1

4 Скрипт, который навешивается на НПС, изменила таким образом:

scn aaaMPMGerl1InvScr
short inventory
short invactiv
ref chest
Begin GameMode
if aaampmVariableRef.Inv1 == 1
set inventory to 1
endif
if inventory == 1
if invactiv == 0
set chest to aaaMPMDungNecroChest01Ref
chest.setOwnership
set invactiv to 1
endif
if invactiv == 1
toggleActorsAI
RemoveAllItems aaaMPMDungNecroChest01Ref
aaaMPMDungNecroChest01Ref.Activate Player
set invactiv to 2
endif
if invactiv == 2 && MenuMode == 0
set invactiv to 3
aaaMPMDungNecroChest01Ref.RemoveAllItems aaaMPMNPC8Gerl1Ref
endif
if invactiv == 3
set invactiv to 0
aaaMPMNPC8Gerl1Ref.AddItem Torch02 1
aaaMPMNPC8Gerl1Ref.Equipitem Torch02
aaaMPMNPC8Gerl1Ref.RemoveItem Torch02 1
toggleActorsAI
set inventory to 0
Set aaampmVariableRef.Inv1 to 0
endif
endif
End

Теперь инвентарь открывается в любом случае, невзирая на то, постоянные АИ пакеты у НПС или добавленные.


Чем больше я сплю, тем меньше от меня вреда......
 
Форум » TES Construction Set (Oblivion) » TES Construction Set (Oblivion) » Простые скрипты. (примеры самых простых скриптов для Обливиона.)
Страница 1 из 11
Поиск:

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


Copyright ImperialCity ©2009-2017 При копировании материалов - ссылка на сайт  обязательна!

free counters Rambler's Top100