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

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

Опубликовано

Подскажите пожалуйста, как поймать событие, когда игрок садиться на лошадь - хочу сделать так, чтобы  fast travel работал только тогда, когда персонаж на лошади

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

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

Опубликовано
25.07.2019 13:21:41, dimanjs сказал(-а):
Подскажите пожалуйста, как поймать событие, когда игрок садиться на лошадь - хочу сделать так, чтобы  fast travel работал только тогда, когда персонаж на лошади

 

События такого нет.
Но есть кондишн IsOnMount

И для СК есть IsRidingMount

 

Можно сделать так: пилишь пассивную способность. В нее пихаешь эффект, на котором скрипт. В скрипте будет прописано включение фаст-тревела, когда эффект включается (OnEffectStart), и отключение фаст-тревела, когда эффект отключается (OnEffectFinish).

В кондишнах этого эффекта внутри заклинания (не в записи самого MagicEffect'a, а именно в заклинании) ставишь IsRidingMount == 1.

Все.

Игрок садится на лошадь, включается эффект, скрипт на нем включает фаст-тревел.

Игрок слезает с лошади, эффект отключается, скрипт на нем отключает фаст-тревел.

  • Нравится 1
Опубликовано
25.07.2019 14:06:17, Azazellz сказал(-а):

События такого нет.
Но есть кондишн IsOnMount

И для СК есть IsRidingMount

 

Можно сделать так: пилишь пассивную способность. В нее пихаешь эффект, на котором скрипт. В скрипте будет прописано включение фаст-тревела, когда эффект включается (OnEffectStart), и отключение фаст-тревела, когда эффект отключается (OnEffectFinish).

В кондишнах этого эффекта внутри заклинания (не в записи самого MagicEffect'a, а именно в заклинании) ставишь IsRidingMount == 1.

Все.

Игрок садится на лошадь, включается эффект, скрипт на нем включает фаст-тревел.

Игрок слезает с лошади, эффект отключается, скрипт на нем отключает фаст-тревел.

Спасибо огромное, я собирался запилить через loop с проверкой раз в секунду, но так, конечно, в 100 раз лучше, тк нет задержки по проверке и не давит на проц, когда просто бегаешь на двоих, сейчас запилю - спасибо большое за быстрый ответ ;)

Опубликовано (изменено)

Доброго времени суток! Есть квест1, в нем на 30ой стадии должен запускаться квест2 со стадии 0. Этим кодом запускал квест: 

code
Game.SetPlayerAIDriven(false)

Game.EnablePlayerControls()
MQuest2.Start()

MQuest2.SetObjectiveDisplayed(0)

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

Изменено пользователем Rh4eg4n
Опубликовано
26.07.2019 17:11:12, Rh4eg4n сказал(-а):

Доброго времени суток! Есть квест1, в нем на 30ой стадии должен запускаться квест2 со стадии 0. Этим кодом запускал квест: 

code
Game.SetPlayerAIDriven(false)
Game.EnablePlayerControls()
MQuest2.Start()
MQuest2.SetObjectiveDisplayed(0)

Первые две строчки срабатывают а вот квест не хочет запускаться. В чем может быть проблема?
В том что Start() не работает с квестами (во всяком случае разрабы на старом беседковском форуме не советовали так его запускать)? В том, что элиасы не заполнены? В том, что сделал квест неправильно?

Выбирай тот вариант, который больше по душе. Без информации о квесте (развернуто, по вкладкам) о самом квесте ничего дельного не сказать.
Опубликовано (изменено)
27.07.2019 06:55:50, werr сказал(-а):

В том что Start() не работает с квестами (во всяком случае разрабы на старом беседковском форуме не советовали так его запускать)? В том, что элиасы не заполнены? В том, что сделал квест неправильно?

Выбирай тот вариант, который больше по душе. Без информации о квесте (развернуто, по вкладкам) о самом квесте ничего дельного не сказать.

Извиняюсь. В следующий раз максимально информативно напишу). По поводу моей проблемы, я ее решил так: добавил строчку MQuest2.SetStage(0) и вуаля, квест запустился.

Изменено пользователем Rh4eg4n
Опубликовано (изменено)

Есть сцена, на 13 фазе присутствует action22 пакет на каст спелла(скрин1), когда фаза закончится должен сработать скрипт на телепорт персонажей(скрин2) все работало как надо, а потом перестало(точнее нпс кастует спелл, после каста никто не телепортируется, а нпс начинаются вести себя так, как вели себя до начала сцены(как-будто сцена закончилась)) и не могу понять в чем проблема(последнее что делал это просто перекомпилировал все скрипты(на вкладке quest data кнопочка recompile all papyrus scripts))

скрин1
jGgQioM.jpg.jpeg

скрин2
RbsyC6G.jpg.jpeg
Изменено пользователем Rh4eg4n
Опубликовано

Всем привет! (ЗАРАНЕЕ ПАРДОНТЕ ЗА ПОВТОР ВОПРОСА) В игре Серана наделена  множеством реплик - среди которых существует "Как тут красиво! Я рада что ты со мной". Вопрос как заставить её произносить эту реплику при прогрузке на определенную локацию - или от касания триггера - я понимаю что нужно писать какой то скрипт - но не понимаю что писать.

  • 2 недели спустя...
Опубликовано (изменено)

Доброе время суток. А не знаете кто может по мочь по моду Order Flaming Rose

 

Тут как получается, я пишу автору а он не отвечает много месяцов. Мод предназначен только для мужских тел. Но я встречал массу модов на мужские тела но они одевались и на женские хоть и без половых изменений, а этот на мужских как на скриншотах а на жанских как обычная коженая броня. Можно как то сделать под женских (даже без половых изменений)   :blush2:

 

Напишите в личку, плиз))))

 

http://modgames.net/load/tes_v_skyrim/bronja/orden_flaming_rose_skryto/249-1-0-22890

Изменено пользователем Крикар
  • 1 месяц спустя...
Опубликовано

Всем доброго времени суток!
Вопрос вот в чем - есть скрипт, увеличивающий добычу руды из рудных жил. Хочу увеличить шанс выпадения драгоценных камней (знаю, что ванильный шанс составляет 10%). Но вот какие именно строки менять - не понимаю((

Содержимое psc-файла после декомпиляции
;/ Decompiled by Champollion V1.0.0

Source : MineOreScript.psc
Modified : 2012-02-08 08:35:55
Compiled : 2012-02-08 08:35:59
User : administrador
Computer : THIAGO-PC
/;
scriptName MineOreScript extends objectReference

;-- Properties --------------------------------------
Int property StrikesBeforeCollection = 1 auto
{how many times this is struck before giving a resource}
sound property DrScOreOpen auto
{sound played when Ore is acquired}
objectReference property CidhnaMinePlayerBedREF auto
Int property ResourceCountCurrent = -1 auto hidden
{Used to track the current remaining resources}
Int property ResourceCountTotal = 10000000 auto
{how many resources this has before it is depleted}
message property FailureMessage auto
{Message to say why you can't use this without RequiredWeapon}
miscobject property Ore auto
{what you get from this Ore Vein}
Int property ResourceCount = 1 auto
{how many resources you get per drop}
quest property DialogueCidhnaMine auto
objectReference property objSelf auto hidden
{objectReference to self}
leveleditem property lItemGems10 auto
{Optional: Gems that may be mined along with ore}
achievementsscript property AchievementsQuest auto
formlist property mineOreToolsList auto
{Optional: Player must have at least one item from this formlist to interact}
quest property MS02 auto
Int property AttackStrikesCurrent = -1 auto hidden
{Current number of attack strikes}
Int property StrikesCurrent = -1 auto hidden
{Current number of strikes}
location property CidhnaMineLocation auto
mineorefurniturescript property myFurniture auto hidden
{the furniture for this piece of ore, set in script}
message property DepletedMessage auto
{Message to say that this vein is depleted}
Int property AttackStrikesBeforeCollection = 1 auto
{how many times this is struck by attacks before giving a resource}

;-- Variables ---------------------------------------

;-- Functions ---------------------------------------

function depleteOreDueToFailure()

self.damageObject(50 as Float)
self.setDestroyed(true)
ResourceCountCurrent = 0
endFunction

; Skipped compiler generated GotoState

function OnHit(objectReference akAggressor, form akSource, Projectile akProjectile, Bool abPowerAttack, Bool abSneakAttack, Bool abBashAttack, Bool abHitBlocked)

if akAggressor == game.getPlayer() as objectReference
if mineOreToolsList.hasForm(akSource)
self.proccessAttackStrikes()
endIf
endIf
endFunction

function onActivate(objectReference akActivator)

if akActivator as actor
if akActivator == game.getPlayer() as objectReference
if ResourceCountCurrent == 0
DepletedMessage.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000)
elseIf self.playerHasTools() == false
FailureMessage.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000)
else
if game.getPlayer().GetCurrentLocation() == CidhnaMineLocation && MS02.ISRunning() == false
CidhnaMinePlayerBedREF.Activate(game.getPlayer() as objectReference, false)
DialogueCidhnaMine.SetStage(45)
return
endIf
if self.getLinkedRef(none)
myFurniture = self.getLinkedRef(none) as mineorefurniturescript
myFurniture.lastActivateRef = objSelf
self.getLinkedRef(none).Activate(akActivator, false)
AchievementsQuest.incHardworker(2)
endIf
endIf
elseIf self.getLinkedRef(none)
self.getLinkedRef(none).Activate(akActivator, false)
endIf
elseIf akActivator == self.getLinkedRef(none)
self.proccessStrikes()
endIf
endFunction

function proccessStrikes()

if StrikesCurrent <= -1
StrikesCurrent = StrikesBeforeCollection
endIf
StrikesCurrent -= 1
if StrikesCurrent == 0
StrikesCurrent = StrikesBeforeCollection
self.giveOre()
endIf
endFunction

function onCellAttach()

self.blockActivation(true)
self.SetNoFavorAllowed(true)
objSelf = self as objectReference
if !self.getLinkedRef(none)
self.depleteOreDueToFailure()
endIf
endFunction

function giveOre()

if ResourceCountCurrent == -1
ResourceCountCurrent = ResourceCountTotal
endIf
if ResourceCountCurrent > 0
ResourceCountCurrent -= 1
if ResourceCountCurrent == 0
self.damageObject(50 as Float)
self.getLinkedRef(none).Activate(objSelf, false)
DrScOreOpen.play(self as objectReference)
self.setDestroyed(true)
if Ore
game.getPlayer().addItem(Ore as form, ResourceCount, false)
endIf
if lItemGems10
game.getPlayer().addItem(lItemGems10 as form, 1, false)
endIf
DepletedMessage.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000)
else
DrScOreOpen.play(self as objectReference)
if Ore
game.getPlayer().addItem(Ore as form, ResourceCount, false)
endIf
if lItemGems10
game.getPlayer().addItem(lItemGems10 as form, 1, false)
endIf
endIf
elseIf ResourceCountCurrent == 0
self.getLinkedRef(none).Activate(objSelf, false)
(self.getLinkedRef(none) as mineorefurniturescript).goToDepletedState()
DepletedMessage.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000)
endIf
endFunction

; Skipped compiler generated GetState

function proccessAttackStrikes()

if AttackStrikesCurrent <= -1
AttackStrikesCurrent = AttackStrikesBeforeCollection
endIf
AttackStrikesCurrent -= 1
if AttackStrikesCurrent == 0
AttackStrikesCurrent = AttackStrikesBeforeCollection
self.giveOre()
endIf
endFunction

function onReset()

self.Reset(none)
self.clearDestruction()
self.setDestroyed(false)
ResourceCountCurrent = -1
endFunction

Bool function playerHasTools()

if game.getPlayer().GetItemCount(mineOreToolsList as form) > 0
return true
else
return false
endIf
endFunction


Пытался заменить gems10 на gems50, но нужного результата не дало (наоборот - добыча камней пропала). Мне явно мешает какое-то условие, но какое - не могу понять (в скриптах и программировании не силен, поэтому прошу прощения, если вопрос нубский)
[color=#000080
Ордена и награды[/color]']pre_1491657309__kubok_kogvartsa-85.png.webp.pngdoctor4ehov.png.pngLoveFlower014.png.png
Опубликовано
15.09.2019 11:47:24, Berserk1989 сказал(-а):
Но вот какие именно строки менять

Никакие.

Шанс на выпадение камней записан в левел листе с ними. Как раз тот самый ItemGems10 (ID 0010E992).

Условное "ничего" выпадает в 90% случаев, остальное (какой именно камень все-таки выпадет) зависит от уровня персонажа.

Правь этот левел лист.

  • Нравится 1
Опубликовано
15.09.2019 12:10:11, Azazellz сказал(-а):

Никакие.

Шанс на выпадение камней записан в левел листе с ними. Как раз тот самый ItemGems10 (ID 0010E992).

Условное "ничего" выпадает в 90% случаев, остальное (какой именно камень все-таки выпадет) зависит от уровня персонажа.

Правь этот левел лист.

Спасибо за оперативный ответ, буду пробовать!

[color=#000080
Ордена и награды[/color]']pre_1491657309__kubok_kogvartsa-85.png.webp.pngdoctor4ehov.png.pngLoveFlower014.png.png
  • 1 месяц спустя...
Опубликовано (изменено)

Такая проблемка. При создании скрипта

Event OnLocationChange(Location akOldLoc, Location akNewLoc)
  if MQ104.GetStage() >= 160
    (pWICourier as WICourierScript).addItemToContainer(LetterQst, 1)
    AliasPlayer.Clear()
    GetOwningQuest().SetStage(200)
    GetOwningQuest().Stop()
  endIf
endEvent

Картинка

6734074409f7.png.webp.png

выдает ошибку, что переменная MQ104 - undefined? насколько я понял, она не объявлена. Но каким образом? Skyrim.esm то подгружен. В общем мне надо, чтобы курьер после определенного события принес мне письмо.

И еще такой вопрос, как задать условие, чтобы курьер пришел после взятия лвл? И надо ли вообще какое-то условие, чтобы этот долбанный курьер уже приперся?


15.09.2019 12:10:11, Azazellz сказал(-а):

 

Может ты можешь помочь?

_______________

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

Вот тут:

6abd1ec2fc63t.jpg.jpeg

Изменено пользователем Leadaire
Опубликовано
09.11.2019 01:04:01, Leadaire сказал(-а):
выдает ошибку, что переменная MQ104 - undefined? насколько я понял, она не объявлена. Но каким образом? Skyrim.esm то подгружен. В общем мне надо, чтобы курьер после определенного события принес мне письмо.

Ну так она и не объявлена нигде. Скрипт не знает, что эти буковки обозначают.

Проперти типа "квест" для нее задай, и в СК свяжи с нужным квестом.

 

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

Кондишны по центру используй. GetLevel, игрок, число, тип AND.

  • Нравится 1
Опубликовано
09.11.2019 13:45:58, Azazellz сказал(-а):

Ну так она и не объявлена нигде. Скрипт не знает, что эти буковки обозначают.

Проперти типа "квест" для нее задай, и в СК свяжи с нужным квестом.

 

Кондишны по центру используй. GetLevel, игрок, число, тип AND.

и еще такой вопрос, при таком условии if MQ104.GetStage() >= 160, скрипт стартанет именно после прохождения данного квеста? или можно условно мой мод загрузить на старый сейв и скрипт запустится? Как сделать запуск второго квеста, после завершения первого квеста (моих), через определенный промежуток времени (игрового)?

Опубликовано
10.11.2019 14:00:27, Leadaire сказал(-а):

и еще такой вопрос, при таком условии if MQ104.GetStage() >= 160, скрипт стартанет именно после прохождения данного квеста? или можно условно мой мод загрузить на старый сейв и скрипт запустится? Как сделать запуск второго квеста, после завершения первого квеста (моих), через определенный промежуток времени (игрового)?

Это зависит от стадии на момент завершения квеста.

На всякий случай добавь условие "или" на проверку завершения. Типа

if (MQ104.GetStage() >= 160) || (MQ104.IsCompleted())

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

Так что чтоб твой скрипт начал получать ивенты (OnLocationChanged) и делать код в этих ивентах - он должен быть куда-то прикреплен. Например, к алиасу игрока в активном квесте.

 

На завершающей стадии квеста даешь команду "ждать игровое время", и потом - команду на запуск следующего квеста. Или скрытно запускаешь квест сразу, но с неотображаемой в журнале первой стадией. Потом уже в этом квесте по прошествии времени переводишь стадию на отображаемую (хз, можно так, или нет).

  • Нравится 1
Опубликовано
10.11.2019 16:53:43, Azazellz сказал(-а):

Это зависит от стадии на момент завершения квеста.

На всякий случай добавь условие "или" на проверку завершения. Типа

if (MQ104.GetStage() >= 160) || (MQ104.IsCompleted())

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

Так что чтоб твой скрипт начал получать ивенты (OnLocationChanged) и делать код в этих ивентах - он должен быть куда-то прикреплен. Например, к алиасу игрока в активном квесте.

 

На завершающей стадии квеста даешь команду "ждать игровое время", и потом - команду на запуск следующего квеста. Или скрытно запускаешь квест сразу, но с неотображаемой в журнале первой стадией. Потом уже в этом квесте по прошествии времени переводишь стадию на отображаемую (хз, можно так, или нет).

Что прописывать для команды ожидания игрового времени?

  • 4 недели спустя...
Опубликовано
08.12.2019 21:04:23, Leadaire сказал(-а):

Такой вопрос, как в creation kit изменить время обновлений подземелий?

Gameplay-Settings.

Там ищи по Respawn или как-то так.

  • 2 недели спустя...
Опубликовано

Подскажите пожалуйста, как сделать скрипт отслеживания времени? То есть, к примеру, что бы нпс по скрипту появлялся в нужном месте, скажем в 12 часов и находился там два часа?

  • 2 недели спустя...
Опубликовано

Господа, нужна помощь. По задумке после окончания диалога игрока должно сразу телепортировать на маркер. Вопрос - как это сделать? Я не могу подобрать соответствующий ивент, потому что ничего не происходит, а если просто вписать в фрагмент папируса в окошке "end" Game.GetPlayer().MoveTo("имя маркера") КК ругается: variable "имя маркера" is undefined. Хелп плиз. У меня как новичка уже мозг плавится.

Опубликовано
31.12.2019 19:47:06, mantik903 сказал(-а):

Господа, нужна помощь. По задумке после окончания диалога игрока должно сразу телепортировать на маркер. Вопрос - как это сделать? Я не могу подобрать соответствующий ивент, потому что ничего не происходит, а если просто вписать в фрагмент папируса в окошке "end" Game.GetPlayer().MoveTo("имя маркера") КК ругается: variable "имя маркера" is undefined. Хелп плиз. У меня как новичка уже мозг плавится.

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

Опубликовано
31.12.2019 19:47:06, mantik903 сказал(-а):
КК ругается: variable "имя маркера" is undefined.

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

 

Не помню, можно там из окна диалога напрямую его скрипт редачить, или нет.

Вроде можно - компилишь что-нибудь, чтоб скрипт создался, потом редактируешь - вроде должно сработать.

Опубликовано (изменено)
31.12.2019 21:29:21, mr Jyggalag сказал(-а):

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

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

 

01.01.2020 08:10:48, Azazellz сказал(-а):

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

 

Не помню, можно там из окна диалога напрямую его скрипт редачить, или нет.

Вроде можно - компилишь что-нибудь, чтоб скрипт создался, потом редактируешь - вроде должно сработать.

Опять же, функция без ивента работать не хочет. Впихнуть строку проблемы нет, и проперти задать тоже, но нужен блин ивент.

 

UPD: чуть-чуть покопавшись смог-таки изменить фрагмент, чтобы телепорт сработал. Но вскрылась другая проблема - на нпс висит скрипт на СellDetach(Attach, Detached/AttachedFrom), то есть по задумке он должен отводить игрока в другое место. И при телепорте игрока нпс должен телепортироваться следом. Но почему-то остается на месте при любой вариации этого скрипта. Выглядит это так:

ObjectReference Property aaaHTFTGroom  Auto 
Event OnCellDetach (Actor aaaHappyTogetherGroom)
aaaHappyTogetherGroom.MoveTo(aaaHTFTGroom)
EndEvent

Причем скрипт скомпилировался, все нормально. Но нпс все равно не портуется.

 

И еще небольшой вопрос. Как заставить forcegreet адекватно работать? Единственный вариант который нашел я - это сделать сцену, и в самого нпс вшить скрипт через OnCellAttach. Но я не уверен, что это самый корректный из возможных.

Изменено пользователем mantik903

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

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

Создать аккаунт

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

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

Войти

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

Войти
×
×
  • Создать...