• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Назрела задача реализовать такую фишку: ограбление ГГ при поражении в бою.
Конкретнее: если во время боя здоровье ГГ падает ниже отметки 10% то бой прекращается, гг вырубается и его шмот отбирает тот НПС, хит которого был последним.
Не могу понять каким способом отловить момент падения здоровья ниже заданной планки? За какие события цепляться и на что их вешать? ОнХит не универсальный вариант ибо не учитывает урона от магов (вроде бы).
m4mk203, OnHit срабатывает и от магии тоже. Больше ничего и нету. Разве что каждую секунду проверять ХП. А не хочешь сделать игрока неубиваемым? Тогда можно будет попробовать подцепиться к событию OnEnterBleedout()
Изменение репутации для пользователя m4mk203
m4mk203Offline
Сообщение №2553
написано: 8 ноября 2017, 17:27
| Отредактировано: m4mk203 - 8 ноября 2017, 17:27
Dsion, неубиваемым? Да. Это вариант. Как пилить в таком случае?
Все, про OnBleedOut понял. Дальше знаю что делать.
Добавлено (08 Ноября 2017, 20:27) --------------------------------------------- Как в скрипте получить список референсов активных в данный момент фоловеров ГГ ?
m4mk203, а хрен как Если фолловеры управляются только ванильными квестами, то можно, а модовым ничего так просто не сделаешь. Хотя, по-моему, это не основная проблема. Вот в Скайриме есть места, где за игроком закрывается дверь и он не может выйти, пока не победит противников. А что будет, если игрока победят с твоим модом? Без оружия-то у него шансов будет еще меньше. И выйти не сможет.
Изменение репутации для пользователя m4mk203
m4mk203Offline
Сообщение №2555
написано: 9 ноября 2017, 00:50
| Отредактировано: m4mk203 - 9 ноября 2017, 01:01
Dsion, ну... А если их (нпс) отсканить по радиусу вокруг ГГ на свойство isTeammate? Какимнить скриптом с 20-ю заранее вбитыми пустыми алиасами и эти самые алиасы заполнить.
Цитата Dsion
А что будет, если игрока победят с твоим модом?
А ничего страшного не будет. Он же после поражения и ограбления телепортится на рандомный маркер в какую-нить глушь. Так что в закрытой локации он не залипнет. Другое дело, что с квестом и этой дверью можей выйти лажа... Надо будет обдумать такую ситуацию.
Изменение репутации для пользователя Lexo
LexoOffline
Сообщение №2556
написано: 9 ноября 2017, 11:13
| Отредактировано: Lexo - 9 ноября 2017, 11:16
У меня странный вопрос... делаю скрипт на проверку цены предмета - если цена слишком мала, то она считается неподходящей и возвращается обратно игроку... но проблема - проверка срабатывает неверно: я поставил проверку цены >= 30, а он принимает вещи только 3000+... и то не все... не пойму, что не так... не подскажете, может, эта функция работает иначе?
Код
GlobalVariable property _LEXO_Global auto Actor PlayerRef int property Price = 30 auto Message property _LEXO_Message auto
Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
PlayerRef = Game.GetPlayer()
If akItemReference.GetGoldValue() >= Price _LEXO_Global.SetValue(1) self.removeallitems() else self.removeallitems(PlayerRef) _LEXO_Message.Show(1) EndIf
EndEvent
Никаких фильтров, ничего, вроде бы, нету... что не так?
Lexo, проблема в переменной akItemReference, которая не передает корректно данные, когда они есть (предмет обладает постоянным референсом / находится в алиасе / референс создан движком при крафте). Еще, GetGoldValue() возвращает только стоимость базового предмета.
Добавлено (13 Ноября 2017, 09:12) --------------------------------------------- m4mk203, по поводу того, что бы спутники разбегались... тебя же, по-идее, должны грабить только вне города, правильно? В городе либо стражники тебя в тюрягу ведут, либо защищают от нападающих и никто тебя не выкинет за город... можно сделать проверку IsHostileToActor, т.е. любой, кто тебе не враг, будет бежать во время твоего поражения...
Lexo, да, логика правильная, но есть нюансы: мне нужен список референсов текущих фоловеров, находящихся рядом с игроком, по ряду причин:
1. Не все активные фоловеры могут быть со мной в этот момент. Может я некоторых дома оставил. 2. Их всех при поражении гг нужно вывести из боя иначе они будут продолжать рубилово (вроде бы) 3. Часть из них будет уходить в момент поражения от гг (аналог освобождения фоловера через диалог), а часть будет оставаться. По вероятностной схеме. 4. Ну и тех, кто остался с гг тоже должны бы грабануть.
Так что референсы нужны однозначно. Вешать на ГГ заклинание-плащ с детектом таргетов на хостайл тиммейт пока единственное, что придумывается.
Еще один вопрос (меня это поставило в тупик): а есть ли способ определить на уровне скрипта на алиасе игрока момент, когда ГГ уходит в сник или выходит из сника? Имеено как событие, а не маркер isSneaking.
m4mk203, ну получишь ты референсы и что дальше? Как ты их "отпустишь"? Фолловеры управляются пакетами на квестах. Ванильного спутника или наемника отпустить - запросто. Серану - тоже. Но если установлены какие-то моды, но хрен ты им чо сделаешь.
Изменение репутации для пользователя m4mk203
m4mk203Offline
Сообщение №2561
написано: 15 ноября 2017, 18:42
| Отредактировано: m4mk203 - 15 ноября 2017, 19:24
Dsion, как отпускать еще не знаю, но имея референсы я хотя бы смогу включить фоловеров в события сценария и отработать с ними те же действия, что и с гг. В крайнем случае можно будет пнуть фоловеров в дом гг и заставить их ждать там или в рандомной таверне.
Так стоп... А в чем пробьема отпустить фоловера? Есть же строка диалога на отпускание. Провернуть по актору тотже кусок скрипта да ыоловер и отпущен. И на сколько я помню там идет жонглирование фракциями, а не пакетами. Имеется в виду FollowerDialog
Всем здрасте! Есть скрипт, который при активации контейнера выводит Message, в котором 3 кнопки, первая - просто открыть контейнер, вторая - подобрать контейнер, третья - отмена, которая тоже приводит к простому открыванию контейнера. Вооот, ближе к телу, хочу добавить 4 кнопку, "Пометка", которая при активации вешает плавающий маркер над контейнером, а при повторной активации этот маркер убирала. Но ни как не могу понять как это сделать, это конечно из-за того что я жесткий нуб в этих вопросах, но все же, может кто подскажет?
К сожалению без вас, Гуру-скриптеры, я никак... очередной вопрос:
Можно добавить новое зачарование прямиком в изученные? Хочу создать зачарования, которые нигде в мире нельзя было найти... если нет, то придётся просто добавлять новые зачарованные предметы в возможность создания...
Ребят, нужна помощь. Теоретически - простая штука: перенос референса (не актера) с помощь moveTo. В одной локации стоит стул, в другой ГГ в режме мастерской кладет на пол коврик - стул должен перенестись на этот коврик.
objStul.Disable() objStul.moveTo(akReference, abMatchRotation = true) ; на каком-то англоязычном форуме советовали такую форму при проблемах objStul.Enable()
EndEvent
Ну не работает же! Консолью прекрасно переносится, скриптом - нет. Думал, дело в unloaded cell, дал референсу стула имя, пусть будет "персистент" (потом еще скрипт-заглушку на него повесил - чтобы еще персистентнее был) - ни фига. Более того, референс уникального актора (который, вроде, стопудовый персистент) тоже не переносится (это я уже пробовал разное-всякое). Что за беда с этим moveTo? Спасайт-помогайт, а?
ЗЫ. Само событие срабатывает: я в него msg.show() запихал - показывает.
Добавлено (07 Декабря 2017, 09:41) --------------------------------------------- refusepit, не знаю, как в фоллауте, но в скайриме нельзя функцией moveto перемещать статические объекты, созданные в редакторе. Можно перемещать те, что были созданы уже во время игры функицей placeatme и у которых id начинается с ff. Если твой стул в редакторе поставлен, можешь поробовать создать перемещаемого клона.
Lexo, это Фоллаут 4. Классный ивент - срабатывает, когда в режиме мастерской ты установил какой-то объект (нажал "Е"). Есть еще ивент на "я таскаю объект туда-сюда, выбирая, куда поставить" и "я уничтожил уже установленный объект потому что люблю разрушееееение". Удобные ивенты.
Dsion, спасибо за ответ. Беда в том, что я тоже не знаю, как в Фоллауте. За прошедший год в русскоязычном интернете инфы кот наплакал, английского я не знаю, но, похоже, там тоже не так много. В принципе, интуитивно я полагаю, что ты прав. Меня смущает только, что через консоль этот moveTo работает на ура. Не знаешь, в Скайриме тоже через консоль работает? Это как бы контрольный замер на схожесть ситуации.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2570
написано: 7 декабря 2017, 09:29
| Отредактировано: Dsion - 7 декабря 2017, 09:32
refusepit, не, в Скайриме в консоли тоже не работает, если id не c FF начинается. Попробуй еще вывести id форм перед moveto. В скайример это делается как-то так: Debug.MessageBox(objStul); Debug.MessageBox(akReference); Вдруг ты забыл заполнить objStul и там NULL.
Ну и без disable|enable можно попробовать. Должно работать... Ошибка явно в какой-то мелочи.
Dsion, попробую. Я, правда, уже все поудалял, смирившись с поражением, но попробую написать заново. Мне кажется, тут глюк какой-то самого движка - ну никаким мелочам тут появляться негде, "программа"-то по сути из одной строки: moveTo(стул), все остальное - костыли для "вдруг так получится". В англоязычном инете тоже есть такая проблема, но решения, кажется, не нашли общего - или я не понял. Кто-то советует делать так:
moveTo(x) Utility.Wait(2.0) moveTo(x)
Типа после первого moveTo ячейка прогрузится (2 сек даем ей на это) и вторая moveTo сработает. У меня не работает все равно... В общем, спасибо за участие, буду пробовать - действительно, надо убедиться, что он этот стул вообще видит.
Я-то понял, что это из фоллаута... просто мне интересно, почему это написано в теме про Скайрим?
А вообще, у меня вопрос всё тот же - можно как-то "выучить" новое зачарование? Т.е. предмета такого не существует, но игроку добавляет новое зачарование, которое он может накладывать...
; Sets whether the player knows this form ; Should only be used for Magic Effects, ; Words of Power, and Enchantments Function SetPlayerKnows(bool knows) native
Ну а мне кто-то сможет помочь? Папирус мой самый жуткий кошмар...
Есть предмет, который при выкидывании из инвентаря и последующей активации становится контейнером.
Есть скрипт, который при активации контейнера выводит Message, в котором 3 кнопки, первая - просто открыть контейнер, вторая - подобрать контейнер обратно в инвентарь, третья - отмена, которая тоже приводит к простому открыванию контейнера. Вооот, ближе к телу, хочу добавить 4 кнопку, "Пометка", которая при активации вешает плавающий маркер над контейнером, а при повторной активации этот маркер убирала. Но ни как не могу понять как это сделать, это конечно из-за того что я жесткий нуб в этих вопросах, но все же, может кто подскажет?
Уважаемый Dsion подсказал, что нужен квест, в квесте Objective с маркером, а далее уже при помощи SetObjectiveDisplayed делать вкл/выкл. Но я на столько туп в квесто-папирусной теме, что просто не смог понять как это всё построить и связать друг с другом. Пожалуйста, кто-нибудь, помогите...
Вот, кстати, этот мод. В нем уже есть квест, в котором, как я понял прописан Alias с фракцией игрока для создаваемых контейнеров (наверно). Можно ли к этому квесту прикрутить возможность создания маркера?
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2575
написано: 8 декабря 2017, 10:28
| Отредактировано: Dsion - 8 декабря 2017, 10:30
Князь_Далик, 1. Создаешь новый квест. Прописываешь ему ID и имя. Сохраняешь. 2. Открываешь снова квест, переходишь во вкладку Quest Aliases. 3. Создаешь новый Reference Alias. Прописываешь имя. Fill type изменяешь на Specific Reference, ставишь галочку Optional. Сохраняешь. 4. Переходишь во вкладку Quest Objectives. Создаешь новую Objective. В Target Ref добавляешь свой алиас. Запомнинаешь Index Objective. Сохраняешь.
5. В любом другом скрипте в любом другом месте создаешь Property типа Quest. Заполняешь своим квестом. Создаешь проперти типа ReferenceAlias заполняешь своим алиасом из своего квеста. 6. В любом месте этого скрипта пишешь: myAlias.ForceRefTo(myTarget); myQuest.SetObjectiveDisplayed(0, true); Заменив myAlias и myQuest на имена, которые ты дал пропертям. myTarget - на цель (твой сундук). А ноль на id обджективы.
Если сундук есть и может быть только один, то можно сразу в алиасе указать конкретный объект. Тогда проперти алиаса и ForceRefTo не нужны.
Ну конечно же я не мог так просто отстать... Сейчас маркер может отображаться только над одним контейнером. Как сделать так что бы можно было вешать маркер над несколькими контейнерами (Н-р: 100 контейнеров-100 маркеров)?
И еще вопрос, как все-таки реализовать систему "вкл-выкл маркер". Я написал так, но, естественно, ни чего не работает.
Добрый вечер. Пытаюсь скомпилировать скрипт на получение предмета в виде LeveledItem при завершении квеста и компилятор выдает ошибку:
Код
Starting 1 compile threads for 1 files...Compiling "F01FalmerTamer"...F:\Games\Steam\steamapps\common\skyrim\Data\Scripts\Source\F01FTamerQuestScript.psc(11,9): missing ID at '(' No output generated for F01FalmerTamer, compilation failed.Batch compile of 1 files finished. 0 succeeded, 1 failed. Failed on F01FalmerTamer
Скрипт:
Код
Scriptname F01FTamerQuestScript extends Quest
ConditionalLeveledItem Property p1FalmerFWolf Auto LeveledItem Property p1FalmerFSpider Auto LeveledItem Property p1FalmerFCorus Auto LeveledItem Property p1FalmerFCorusZhnets Auto LeveledItem Property p1FalmerFTroll Auto Quest Property p01Falmer1F Auto GlobalVariable Property pF01FalmerTamerG
делаю скрипт на основе с квеста Морвена Страуда из Каирна Душ, только у меня награда из LItem дается на определенных уровнях квеста. В квесте Морвена Страуда в настройках скрипта Global Variable, а в моем случае вообще нужен Global Variable? https://cdn1.savepice.ru/uploads....ull.jpg
И так, намутил систему "вкл/выкл маркер", за что низкий поклон Dsion. Но теперь проблема в другом И их две как обычно.
1. При выборе пункта "стереть маркер" отключаются все активные маркеры, ну это и из кода видно, как бы так замутить, что бы отключался только тот маркер который нужен? Придется доп меседж боксы мутить под каждый маркер или можно что-то лучше сделать?
2. При нажатии кнопки "отмена" в окне "пометка" открывается меседж бокс, но он не активен. Можно ли как-то сделать так, что бы при нажатии "отмены" происходил возврат к меню?
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)