я создал заклинания телепорты к торговцу(в пещеру) и на улицу(надоело постоянно ходить туда-сюда), но всё сделал по туториалу, но не знаю как добавить заклинание в инвертарь... может кто нить помочь? сори за мультипост, но тему хотелось поднять..
Сообщение отредактировал LoRDdeHitMan: 22 января 2011 - 19:22
AddSpell
________________________________________ Синтаксис:
[ActorID.]AddSpell SpellID Пример:
AddSpell AbWeaknessNormalWeapons
Добавляет заклинание вызывающему актеру. Заклинаниями также считаются болезни, дополнительные способности, благословения (powers). Когда добавляется способность или болезнь, отображается соответствующий магический эффект. Когда добавляется заклинание или благословение, показывается скастованное заклинание\благословение. Есть и другие важные отличия, смотрите Spell, чтобы узнать подробности. Примечания:
• Addspell работает только с типами заклинаний, указанными в секции заклинаний редактора. Её нельзя использовать для заклинаний, добавленных с помощью скриптов. Для динамического добавления заклинания, основываясь на его уровне, используйте следующий скрипт в качестве руководства:
if ( Player.GetLevel >= 25 )
player.addspell InnerFire25
elseif ( player.Getlevel >= 20 )
player.addspell InnerFire20
elseif ( player.Getlevel >= 15 )
player.addspell InnerFire15
elseif ( player.Getlevel >= 10 )
player.addspell InnerFire10
elseif ( player.Getlevel >= 5 )
player.addspell InnerFire05
else
player.addspell InnerFire01
endif
• Будьте осторожны при использовании данной функции на неуникальных актерах. Добавление способности или заклинания на актёра изменит базовый объект, и все актёры, созданные из данного базового объекта, также подвергнуться изменению.
• Как и большинство функций, эта также имеет отличия при использовании в консоли - вместо SpellID надо указывать FormID.
• Обратите внимание, что большинство заклинаний не работают как способности, включая "Перо", "Бремя" и "Дезинтеграцию", так же как и любые заклинания, заставляющие цель реагировать на заклинателя, например "Поднять мёртвого", "Очаровать" или "Деморализовать".
Нужно создать новый квест (Object Window => Actor Data => Quest => ПКМ по любому из существующих квестов => New, заполнить поля ID (пусть будет TeleportQuest), Priority (ставь 100) и поставить галочку Start Game Enabled) и на него повесить скрипт:
scn TeleportQuestSCRIPT
Begin GameMode
Player.AddSpell Spell01 ; добавление заклинания Spell01
StopQuest TeleportQuest
End
Важно! В поле Script Type, при написании скрипта, нужно выбрать Quest.
Вместо Spell01 вписываешь id заклинания из редактора (не из игры).
неее, ну нафиг обливионский скриптинг.. я думал будет легко, что то типа хтмл(как нить отдалённо будет напоминать его), но я не ожидал ТАКОГО бреда.. :sm121:
Создал заклинание телепортации в пространстве. Реализованно оно так: игрок кастует на себя спел, появляются поочередно три MessageBox'а где выбираешь на сколько ты хочешь переместиться на запад - восток, север - юг, вверх - вниз соответственно. Вот скрипт:
Скрытый текст
scn ah01spell04spt
short a1
short a3
short a2
float x1
float y1
float z1
begin ScriptEffectStart
if ah01a.b1 == 0
messagebox "Перемещение на восток, в футах:", "-300", "-150", "-50","0","50","150","300"
set ah01a.b1 to 1
endif
end
begin gamemode
if ah01a.b1== 1
set a2 to getbuttonpressed
if a2 == 6
set x1 to 3000
set ah01a.b1 to 2
elseif a2 == 1
set x1 to -1500
set ah01a.b1 to 2
elseif a2 == 2
set x1 to -500
set ah01a.b1 to 2
elseif a2 == 3
set x1 to 0
set ah01a.b1 to 2
elseif a2 == 4
set x1 to 500
set ah01a.b1 to 2
elseif a2 == 5
set x1 to 1500
set ah01a.b1 to 2
elseif a2 == 0
set x1 to -3000
set ah01a.b1 to 2
endif
endif
if ah01a.b1== 3
set a2 to getbuttonpressed
if a2 == 6
set y1 to 3000
set ah01a.b1 to 4
elseif a2 == 1
set y1 to -1500
set ah01a.b1 to 4
elseif a2 == 2
set y1 to -500
set ah01a.b1 to 4
elseif a2 == 3
set y1 to 0
set ah01a.b1 to 4
elseif a2 == 4
set y1 to 500
set ah01a.b1 to 4
elseif a2 == 5
set y1 to 1500
set ah01a.b1 to 4
elseif a2 == 0
set y1 to -3000
set ah01a.b1 to 4
endif
endif
if ah01a.b1== 5
set a2 to getbuttonpressed
if a2 == 6
set z1 to 3000
set ah01a.b1 to 6
elseif a2 == 1
set z1 to -1500
set ah01a.b1 to 6
elseif a2 == 2
set z1 to -500
set ah01a.b1 to 6
elseif a2 == 3
set z1 to 0
set ah01a.b1 to 6
elseif a2 == 4
set z1 to 500
set ah01a.b1 to 6
elseif a2 == 5
set z1 to 1500
set ah01a.b1 to 6
elseif a2 == 0
set z1 to -3000
set ah01a.b1 to 6
endif
endif
if ah01a.b1 == 6
aah01ateleport01mar.moveto player x1 y1 z1
set ah01a.b1 to 0
endif
end
begin scripteffectfinish
player.moveto aah01ateleport01mar
end
begin ScriptEffectUpdate
if ah01a.b1 == 2
messagebox "Перемещение на север, в футах:", "-300", "-150", "-50","0","50","150","300"
set ah01a.b1 to 3
endif
if ah01a.b1 == 4
messagebox "Перемещение вверх, в футах:", "-300", "-150", "-50","0","50","150","300"
set ah01a.b1 to 5
endif
end
Все работает, но есть проблема - можно переместиться в стену или иной статик, а в интерьерах так вообще...
Есть идеи как это обойти?
Все работает, но есть проблема - можно переместиться в стену или иной статик, а в интерьерах так вообще...
Есть идеи как это обойти?
Можно воспользоваться свойством команды PlaceAtMe, она ставит вызываемый объект в "безопасное место". Можно ввести это в существующий скрипт, но есть проблемка, удалить потом созданный маркер не получается. В экстерьерах это спасает, в стене не окажешься, в интерьерах тоже, если не слишком сильно промазал.
Вот пример этого скрипта, он работает (сделан на основе твоего)
Скрытый текст
scn ah01spell04spt
short a1
short a3
short a2
short ah01ab1
float x1
float y1
float z1
ref myrefName
begin ScriptEffectStart
if ah01ab1 == 0
messagebox "Перемещение на восток, в футах:", "-300", "-150", "-50", "0", "50", "150", "300"
set ah01ab1 to 1
endif
end
begin gameMode
if ah01ab1 == 1
set a2 to getbuttonpressed
if a2 == 6
set x1 to 3000
set ah01ab1 to 2
elseif a2 == 1
set x1 to -1500
set ah01ab1 to 2
elseif a2 == 2
set x1 to -500
set ah01ab1 to 2
elseif a2 == 3
set x1 to 0
set ah01ab1 to 2
elseif a2 == 4
set x1 to 500
set ah01ab1 to 2
elseif a2 == 5
set x1 to 1500
set ah01ab1 to 2
elseif a2 == 0
set x1 to -3000
set ah01ab1 to 2
endif
endif
if ah01ab1 == 2
messagebox "Перемещение на север, в футах:", "-300", "-150", "-50", "0", "50", "150", "300"
set ah01ab1 to 3
endif
if ah01ab1== 3
set a2 to getbuttonpressed
if a2 == 6
set y1 to 3000
set ah01ab1 to 4
elseif a2 == 1
set y1 to -1500
set ah01ab1 to 4
elseif a2 == 2
set y1 to -500
set ah01ab1 to 4
elseif a2 == 3
set y1 to 0
set ah01ab1 to 4
elseif a2 == 4
set y1 to 500
set ah01ab1 to 4
elseif a2 == 5
set y1 to 1500
set ah01ab1 to 4
elseif a2 == 0
set y1 to -3000
set ah01ab1 to 4
endif
endif
if ah01ab1 == 4
messagebox "Перемещение вверх, в футах:", "-300", "-150", "-50", "0", "50", "150", "300"
set ah01ab1 to 5
endif
if ah01ab1== 5
set a2 to getbuttonpressed
if a2 == 6
set z1 to 3000
set ah01ab1 to 6
elseif a2 == 1
set z1 to -1500
set ah01ab1 to 6
elseif a2 == 2
set z1 to -500
set ah01ab1 to 6
elseif a2 == 3
set z1 to 0
set ah01ab1 to 6
elseif a2 == 4
set z1 to 500
set ah01ab1 to 6
elseif a2 == 5
set z1 to 1500
set ah01ab1 to 6
elseif a2 == 0
set z1 to -3000
set ah01ab1 to 6
endif
endif
if ah01ab1 == 6
aah01ateleport01mar.moveto player x1 y1 z1
set ah01ab1 to 7
player.moveto aah01ateleport01mar
return
endif
if ah01ab1 >= 7 && ah01ab1 < 10 && MenuMode == 0
set ah01ab1 to ah01ab1 + 1
return
endif
if ah01ab1 == 10
set ah01ab1 to ah01ab1 + 1
set myrefName to player.PlaceAtMe XMarker 0, 0, 0
player.moveto myrefName
return
endif
end
begin scripteffectfinish
end
Можно сделать, что и вновь созданный маркер будет удаляться, но для этого надо ввести какой-нибудь предмет (MiscItem) и повесить на него небольшой скрипт.
Принцип, основным спелом добавляется игроку этот предмет, а после отработки скрипта на нём, он удаляется вместе с новым маркером.
Вот пример этих скриптов (тоже работают)
Скрытый текст
scn ah01spell04spt
short a1
short a3
short a2
short ah01ab1
float x1
float y1
float z1
begin ScriptEffectStart
if ah01ab1 == 0
messagebox "Перемещение на восток, в футах:", "-300", "-150", "-50", "0", "50", "150", "300"
set ah01ab1 to 1
endif
end
begin gameMode
if ah01ab1 == 1
set a2 to getbuttonpressed
if a2 == 6
set x1 to 3000
set ah01ab1 to 2
elseif a2 == 1
set x1 to -1500
set ah01ab1 to 2
elseif a2 == 2
set x1 to -500
set ah01ab1 to 2
elseif a2 == 3
set x1 to 0
set ah01ab1 to 2
elseif a2 == 4
set x1 to 500
set ah01ab1 to 2
elseif a2 == 5
set x1 to 1500
set ah01ab1 to 2
elseif a2 == 0
set x1 to -3000
set ah01ab1 to 2
endif
endif
if ah01ab1 == 2
messagebox "Перемещение на север, в футах:", "-300", "-150", "-50", "0", "50", "150", "300"
set ah01ab1 to 3
endif
if ah01ab1== 3
set a2 to getbuttonpressed
if a2 == 6
set y1 to 3000
set ah01ab1 to 4
elseif a2 == 1
set y1 to -1500
set ah01ab1 to 4
elseif a2 == 2
set y1 to -500
set ah01ab1 to 4
elseif a2 == 3
set y1 to 0
set ah01ab1 to 4
elseif a2 == 4
set y1 to 500
set ah01ab1 to 4
elseif a2 == 5
set y1 to 1500
set ah01ab1 to 4
elseif a2 == 0
set y1 to -3000
set ah01ab1 to 4
endif
endif
if ah01ab1 == 4
messagebox "Перемещение вверх, в футах:", "-300", "-150", "-50", "0", "50", "150", "300"
set ah01ab1 to 5
endif
if ah01ab1== 5
set a2 to getbuttonpressed
if a2 == 6
set z1 to 3000
set ah01ab1 to 6
elseif a2 == 1
set z1 to -1500
set ah01ab1 to 6
elseif a2 == 2
set z1 to -500
set ah01ab1 to 6
elseif a2 == 3
set z1 to 0
set ah01ab1 to 6
elseif a2 == 4
set z1 to 500
set ah01ab1 to 6
elseif a2 == 5
set z1 to 1500
set ah01ab1 to 6
elseif a2 == 0
set z1 to -3000
set ah01ab1 to 6
endif
endif
if ah01ab1 == 6
aah01ateleport01mar.moveto player x1 y1 z1
set ah01ab1 to 7
player.moveto aah01ateleport01mar
return
endif
if ah01ab1 = 7
set ah01ab1 to 0
message " "
message " "
player.additem ID_Misc 2 1
endif
end
begin scripteffectfinish
end
===============================================
scn ID_MiscScript
short flag
ref refName
begin gameMode
If MenuMode == 0 && player.GetItemCount ID_Misc == 1 && flag < 5
set flag to flag + 1
return
elseif flag == 5
set refName to player.PlaceAtMe XMarker 0, 0, 0
set flag to flag + 1
player.moveto refName
return
elseif flag == 6
set flag to flag + 1
refName.disable
message " "
message " "
player.removeitem ID_Misc 2
endif
end
Возможно, есть ещё какие способы, или нечто подобное в OBSE, я не знаю.
Сообщение отредактировал Tirex: 28 февраля 2011 - 16:02
Сделал ну оочень тупого перса(компаньона),но не хотят работать результирующие скрипты в диалоге.Посмотрите пожалуйста всё ли верно в написании:
Чтобы следовал-OgrRockMavrNPCRef.RemoveScriptPackage ;-тут ставил пробел между скриптами-OgrRockMavrNPCRef.AddScriptpackage OgrRockMavrFollow;
Стоял-OgrRockMavrNPCRef.RemoveScriptPackage ;
Погулял-OgrRockMavrNPCRef.RemoveScriptPackage ;-опять пробел и-OgrRockMavrNPCRef.AddScriptpackage OgrRockMavrWander;
П.С. пакеты были сделаны с одноимённым написанием и правильно.Могу кинуть есп-файл-Может кто шарит в К.С. посмотрит и поможед.
Сообщение отредактировал Banshee: 15 апреля 2011 - 04:30
Там по идее надо забивать -вешать эти пакеты с условиями,
т.е. они уже должны быть, а скриптом менять условия,
так в одном популярном моде такая же проблема с вновь созданными-клонами,
пакеты повешанные скриптом типа травел-не исполняются должно,
т.е. стоит выйти из селла где непись и он начинает тупить - не идет.
Люди помогите все я сдох короче 5 день бьюсь над тем тчо хочу сделать начало квеста после того как ГГ прочитает книгу закрыв ее а не положив в инвентарь. Пока получается только если ГГ положит ее в инвентарь ( :( :padre:
Все уже на 6 день разобрался вполучилось даже лучше чем я мог мечтать вот скриптик:
Scriptname HouseMavrickQuestScript
Begin onActivate
setstage MavrickQuest 10
Activate
end
:groupwave1:
Сообщение отредактировал Rayne3: 18 июля 2011 - 00:25
Подскажите есть ли скрипт позволяющий магическим эффектам(одинаковым) стакаться?
К примеру есть 3 эффекта
1) Урон Огнём 33 единицы
2) Урон Огнём 33 единицы
3) Урон Огнём 33 единицы.
Работает только один.
Кто поможет обойти это, вышлю 100р виртуальными деньгами.
Заранее благодарю.
Сообщение отредактировал nepejke: 25 августа 2011 - 18:20