Форум » Записи участника [Multigone]

Результаты поиска
Multigone  Offline  Сообщение №811 | Тема: Вопросы по скриптам Papyrus написано: 14 февраля 2017, 15:01



832
Dsion, тогда это DLC1NPCMonitoringPlayer. Ну, там каждую секунду проверяется, прошел ли игрок за 8 предыдущих секунд 150 юнитов. И да, есть лишние телодвижения, такие, как смещение всего массива на одну ячейку.

Multigone  Offline  Сообщение №812 | Тема: Что слушаем? Тема закрыта, только для просмотра. написано: 16 февраля 2017, 00:36



832

Multigone  Offline  Сообщение №813 | Тема: Вопросы по скриптам Papyrus написано: 19 февраля 2017, 12:22



832
kelamor,

1) По атаке актеров: дать игроку перк apply combat hit spell, при старте его эффекта делаем, что хотим.

2) По анимации: в алиасе игрока регистрируем анимации "weaponSwing", "weaponleftSwing" и используем событие OnPlayerBowShot() для лука.

Multigone  Offline  Сообщение №814 | Тема: Вопросы по скриптам Papyrus написано: 23 февраля 2017, 23:06



832
AlexeyVN, кириллица в СК и в папирусе имеет разную кодировку. Это никак не исправить.

Multigone  Offline  Сообщение №815 | Тема: Что слушаем? Тема закрыта, только для просмотра. написано: 2 мая 2017, 19:58



832


Multigone  Offline  Сообщение №816 | Тема: Что слушаем? Тема закрыта, только для просмотра. написано: 19 июня 2017, 14:47



832


Multigone  Offline  Сообщение №817 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 1 июля 2017, 07:27



832
gangrena1972, а в чем разница? И апдейт, и условие на модном квесте, будут проверять одно и то же - состояние ванильного квеста. Только для апдейта период можно задать произвольный, а для условия квеста он фиксированный (не знаю какой, но в маг. эффектах = 1с, может, и там такой же).

Multigone  Offline  Сообщение №818 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 23 июля 2017, 19:20



832
Lexo, в SKSE есть кое-что (в Actor.psc и ActorBase.psc). А именно:


Код
; returns the face textureset of the actor (Player Only?)
TextureSet Function GetFaceTextureSet() native
Function SetFaceTextureSet(TextureSet textures) native

И, возможно, придется применять это заново при каждой загрузке сохранения.

Multigone  Offline  Сообщение №819 | Тема: Вопросы по скриптам Papyrus написано: 1 августа 2017, 21:08



832
veto, я проверил, призванное существо не входит во фракцию PlayerFaction, его имя не содержит имени игрока (в игре так: Грозовой атронах - Имя игрока; GetDisplayName() возвращает имя только базового актера). Мне тоже интересно, как получить референс владельца существа.

Как я бы сделал, если было очень нужно: при касте заклинания с требуемыми ключ. словами (MagicSummon...) игрок кидает Cast() еще одно заклинание Aimed в точку, куда смотрит (т.е. потенциально рядом с появлением атронаха). Дальше по смыслу: снаряд - взрыв - активатор (с моделью Effects\FXEmptyObject.nif). Активатор ищет ближайший SummonTargetFXActivator, а от него - ближайшее существо IsCommandedActor() и дает ему Misc-предмет. Предмет отмечает актера и позволяет легко отличить в перке Activate.

Достоинства: позволяет реализовать идею.
Недостатки: узнаются только существа, призванные после подключения мода; малый шанс неправильного определения; сложность (и кривизна) реализации.

Multigone  Offline  Сообщение №820 | Тема: Вопросы по скриптам Papyrus написано: 2 августа 2017, 07:37



832
Dsion, не проверял, увы. Зато проверял еще некоторые бредовые идеи, вроде GetEnableParent() или кто является источником / целью маг. эффекта, накладываемого на игрока при вызове.

veto, это как? Если в SummonCreature поставить своего актера, ничего не изменится, т.к. НПС пользуются теми же заклинаниями, что и игрок (они тоже будут призывать твоих существ).
Если при вызове убирать дефолтное существо и на его место помещать твое, то нужно сперва получить его референс, а это опять сложности и шанс провала, если рядом стоит другой призванный НПС-ом атронах (или призывается в этот момент). Плюс дефолтный актер и маг. эффект в меню связаны, с этим что делать?

Multigone  Offline  Сообщение №821 | Тема: Вопросы по скриптам Papyrus написано: 2 августа 2017, 17:20



832
veto, перк не нужен, достаточно условия "ID Цели == Игрок".

И описанный способ - как по мне, так себе. Как призвать несколько одинаковых актеров? Как быть со смертностью актера? Как наложить эффект-таймер, снимающийся при смерти актера (наподобие ванильного)? Banish / Command работать не будут. Прощайте, остальные моды на призыв. Затрагивание заклинаний.

То, что я предложил в начале - оптимально. Позволяет получить референс сразу, не требуя активации кнопкой. Вместо выдачи предмета можно, к примеру, поместить актера в алиас или дать Ability с кучей скриптов. Все зависит от того, какая задача поставлена.

Dsion, теперь проверил, да, none.

Multigone  Offline  Сообщение №822 | Тема: Вопросы по скриптам Papyrus написано: 2 августа 2017, 19:27 | Отредактировано: Multigone - 2 августа 2017, 19:33



832
Dsion, так заклинание поднятия нежити накладывается прямиком на мертвого актера. Там есть доп. эффект "если игроком взят перк, Value Mod +100 AV Health + флаг Recover".

Кстати, интересное наблюдение - шкала здоровья НПС привязана к базовому максимуму AV Health, а не текущему максимуму AV Health (которое с модификаторами). Это означает, что если модификатором удвоить здоровье, то урон не будет виден, пока расчетное здоровье не станет меньше половины; если снизить вдвое - то начальное положение полоски здоровья будет таково, как будто ему уже сняли половину ХП.

Multigone  Offline  Сообщение №823 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 3 августа 2017, 16:57



832
MeloManGame, разбери этот мод и посмотри.

xRg, убрать мастер - прогой TES5Edit. Для начала - удалить все связи с формами, присущими только Update.esm (если твой мод использует что-то, что есть в Skyrim.esm, но перезаписывается в Update.esm, то это не считается связью с Update.esm). Затем ПКМ на названии твоего мода -> CleanMasters.

Проверить, экипировано ли оружие:

В обычных условиях СК:

(S) (HasBoundWeaponEquipped) (Left) == 1.0 (OR)
(S) (HasBoundWeaponEquipped) (Right) == 1.0 (AND)

В скриптах: есть много способов.

Multigone  Offline  Сообщение №824 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 4 августа 2017, 18:47



832
xRg, попробуй это:

EPMagic_SpellHasKeyword
SpellHasKeyword

Но я думаю, нет.

Multigone  Offline  Сообщение №825 | Тема: Вопросы по скриптам Papyrus написано: 10 августа 2017, 16:37



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

Multigone  Offline  Сообщение №826 | Тема: Вопросы по скриптам Papyrus написано: 10 августа 2017, 21:28



832
Miter, я больше скажу - нет никакой возможности нацелить Aimed-заклинание, исходящее от актера, в произвольном направлении. Этого сделать просто нельзя. Т.е. огненный шар никогда не полетит от актера вправо, скажем. Только туда, куда смотрит его башня. Это касается и игрока. Даже определив, что враг находится в секторе обзора (или в конусе Х градусов от прицела), нельзя направить заклинание-снаряд от игрока к нему. Правда, можно поставить впереди маркер, и кастовать от него (объекты не-актеры могут творить заклинания куда хотят), но это уже совсем другая история.

Multigone  Offline  Сообщение №827 | Тема: Вопросы по скриптам Papyrus написано: 13 августа 2017, 16:32



832
Dsion, я имел в виду обычное заклинание. Снаряд как отдельный референс не даст информации о заклинателе (поскольку его нет). Следовательно, пользоваться таким способом может только игрок.

В целом ты одновременно прав и не совсем. Дело в том, что на projectile физический импульс никак не воздействует. Я провел серию опытов - вне зависимости от указанной модели (имеет ли она инфу о физ. свойствах или нет), а также от флагов, снаряд всегда летит по заданной траектории. Другое дело, если снаряд делать как MovableStatic, тогда он сможет наносить урон столкновением, однако взрыв и прочие плюшки projectile будут ему недоступны.

Но! Можно управлять полетом projectile, используя SetAngle. Там, правда, довольно большие объемы расчетов, но как факт. А референс снаряда получаем триггером, помещаемым под носом игрока (встречные снаряды можно отсеять проверкой углов снаряда и триггера).

К примеру, таким образом мне удалось реализовать ручное управление (примерно как ракетой в Half-Life 2). Правда, те, что летят быстро, не успевают среагировать на большой угол.

Все желающие могут забирать сырье :D. Вешается на триггер, который помещаем перед игроком заклинанием или чем-нибудь еще (можно через OnSpellCast в алиасе).


Код
ScriptName _TESTProjSetAngleSCPTREFR Extends ObjectReference ; Multigone.

Float Property MaxDist = 10000.0 Auto ; Макс. дистанция снаряда от игрока.
Float Property MaxAim = 2000.0 Auto ; Расстояние управляющей точки от игрока.
Float Property MaxAngle = 9.0 Auto ; Макс. угол реакции снаряда за 0.05 сек.

EVENT OnTriggerEnter(ObjectReference xC)
    IF xC.GetBaseObject() AS Projectile
        GoToState("S")
        ObjectReference xT = Game.GetPlayer()
        WHILE xC.Is3DLoaded() && xC.GetDistance(xT) < MaxDist
            Float fX = -xT.GetAngleX()
            Float fZ = 90.0 - xT.GetAngleZ()
            Float fDX = MaxAim * Math.Cos(fZ) * Math.Cos(fX) + xT.X - xC.X
            Float fDY = MaxAim * Math.Cos(fX) * Math.Sin(fZ) + xT.Y - xC.Y
            Float fDZ = MaxAim * Math.Sin(fX) + xT.Z + 90.0 - xC.Z
            fX = xC.GetAngleX()
            fZ = xC.GetAngleZ()
            Float fDAZ = 90.0 - Math.Atan(fDY / fDX) - fZ
            IF fDX < 0.0
                fDAZ += 180.0
            ENDIF
            IF fDAZ > 180.0
                fDAZ -= 360.0
            ELSEIF fDAZ < -180.0
                fDAZ += 360.0
            ENDIF
            xC.SetAngle(fInt(fX + fInt(-Math.Atan(fDZ / Math.Sqrt(fDX * fDX + fDY * fDY)) - fX, MaxAngle, -MaxAngle), 90.0, -90.0), 0.0, fZ + fInt(fDAZ, MaxAngle, -MaxAngle))
            Utility.Wait(0.05)
        ENDWHILE
        GoToState("")
    ENDIF
ENDEVENT

Float FUNCTION fInt(Float A, Float B = 1.0, Float C = 0.0)
    IF B > C
        IF A >= B
            RETURN B
        ELSEIF A < C
            RETURN C
        ENDIF
    ELSEIF A <= B
        RETURN B
    ELSEIF A > C
        RETURN C
    ENDIF
    RETURN A
ENDFUNCTION

STATE S
    EVENT OnTriggerEnter(ObjectReference xR)
    ENDEVENT
ENDSTATE

Lexo, лучший способ раздать заклинание - вовсе не плащ, а эффект с Area. И нагрузка будет меньше, как мне кажется.

Multigone  Offline  Сообщение №828 | Тема: Вопросы по скриптам Papyrus написано: 13 августа 2017, 17:30



832
Dsion, так я управляю любым снарядом, выпущенным игроком. А триггер нужен как самый простой способ получить его реф. А ты предлагаешь спавнить MovableStatic (?), не умеющий втыкаться в актеров, как ледяная стрела, или взрываться с наложением маг. эффекта, не оставляющий попаданий в поверхность. А если не статик, то что?

Добавлено (13 Августа 2017, 20:30)
---------------------------------------------
Dsion, когда спавнишь, по умолчанию применяется matchRotation, как для объекта-источника спавна. На какой угол он повернут, туда и полетит. Наверное. Во всяком случае, реф. снаряда применимы некоторые (если не большинство) функции ObjectReference - Disable, Delete, MoveTo и пр.


Multigone  Offline  Сообщение №829 | Тема: Вопросы по скриптам Papyrus написано: 13 августа 2017, 19:29



832
Dsion, а что не так с триггером? Он находится в своей локации, перемещается по требованию и уезжает в закат, когда необходимость отпадает. Есть что-то, чего я не знаю?

Цитата Dsion

попробовать прицепить скрипт

А что там вообще можно сделать? Единственное, получить Self. А если реф. известен извне, не проще запихнуть в алиас.

Multigone  Offline  Сообщение №830 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 25 августа 2017, 05:37



832
1Game, заполни Property скрипта. Заклинание должно быть Ability.

Multigone  Offline  Сообщение №831 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 26 августа 2017, 14:53



832
xRg, за силу отвечает параметр Settings - fMagicDualCastingEffectivenessBase, за расход маны - fMagicDualCastingCostMult. Просто в фильтре "Dual", будут показаны все подходящие настройки.

Multigone  Offline  Сообщение №832 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 30 августа 2017, 21:23 | Отредактировано: Multigone - 30 августа 2017, 21:25



832
Stacie, обнаружение нежити работает на актерах, имеющих ключ. слово "ActorTypeUndead". Все расы вампиров имеют ключ. слово "Vampire". Значит, нужно добавить ему эти ключ. слова - в ActorBase или через алиас квеста.

Multigone  Offline  Сообщение №833 | Тема: Вопросы по скриптам Papyrus написано: 6 сентября 2017, 21:55



832
sansuli


Код
Scriptname _TESTTEST35 extends activemagiceffect ; SKSE

ObjectReference Property MindXMarkerREF Auto ; Маркер локации.

 ; Автозаполнение.
Static Property XMarker Auto
Spell Property GhostAbility Auto
Spell Property MG08ParalysisAbility Auto

Event OnEffectStart(Actor xT, Actor xC)
    xT.SetGhost()
    xT.BlockActivation()
    xT.EnableAI(false)
    xC = Game.GetPlayer()
    ObjectReference XPlayPos = xC.PlaceAtMe(XMarker)
    Actor xA = MindXMarkerREF.PlaceAtMe(xT.GetBaseObject()) AS Actor
    xA.BlockActivation()
    xA.RemoveAllItems()
    xA.RemoveFromAllFactions()
    Int iC = xT.GetNumItems()
    WHILE iC
        Form xF = xT.GetNthForm(iC)
        IF xT.IsEquipped(xF)
            xA.AddItem(xF, 99)
            xA.EquipItem(xF, true)
        ENDIF
        iC -= 1
    ENDWHILE
    xC.MoveTo(MindXMarkerREF)
    xA.AddSpell(GhostAbility)
    xC.AddSpell(GhostAbility, false)
    xA.StartCombat(xC)
    WHILE !xA.IsDead() && iC < 60 ; Минута на бой.
        Utility.Wait(1.0)
        iC += 1
    ENDWHILE
    iC = xA.IsDead() AS Int
    xC.RemoveSpell(GhostAbility)
    xC.MoveTo(XPlayPos)
    XPlayPos.Delete()
    xA.Disable()
    xA.Delete()
    xT.SetGhost(false)
    xT.BlockActivation(false)
    xT.EnableAI()
    xT.PushActorAway(xT, 0.0)
    IF iC
        Utility.Wait(0.5)
        xT.AddSpell(MG08ParalysisAbility)
            ; для НПС - после выгрузки локации маг. эффект добавленных заклинаний типа Ability перестает работать (и его скрипт тоже), но само заклинание остается.
    ENDIF
ENDEVENT

Multigone  Offline  Сообщение №834 | Тема: Что слушаем? Тема закрыта, только для просмотра. написано: 19 сентября 2017, 18:16



832

Multigone  Offline  Сообщение №835 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 22 октября 2017, 09:58



832
xRg, активаторы - в фильтре "Shrine". Там же скрипт "TempleBlessingScript". Заклинания - в фильтре "altar". Открывай каждое и смотри его эффект. Предыдущее снимается потому, что в эффектах: при наложении этого эффекта снять другие (Dispel effects with these keywords), имеющие ключ. слово "MagicBlessing".

Multigone  Offline  Сообщение №836 | Тема: Вопросы по скриптам Papyrus написано: 22 октября 2017, 17:36



832
Dsion, если забивать массив одновременно несколькими переменными, половину можно потерять по пути. Вот что есть в Cell:


Код
; SKSE additions built 2015-05-24 00:46:48.937000 UTC
; Returns the number of refs in the cell
int Function GetNumRefs(int formTypeFilter = 0) native

; returns the ref at the specified index
ObjectReference Function GetNthRef(int n, int formTypeFilter = 0) native

Multigone  Offline  Сообщение №837 | Тема: Вопросы по скриптам Papyrus написано: 22 октября 2017, 21:30



832
Dsion, нужно ведь запоминать референсы предметов где-то, чтобы их потом когда-нибудь возвращать обратно из локации, так? Вместо этого можно просто "узнавать" их RefID с помощью SKSE. Я это хотел сказать.

Multigone  Offline  Сообщение №838 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 4 ноября 2017, 13:28 | Отредактировано: Multigone - 4 ноября 2017, 13:31



832
Nuclearpulse, тебе потребуются SKSE и MCM.

Вот этим выбираем нужную кнопку в настройках мода (см. SKI_ConfigBase.psc):


Код
; Добавить опцию.
int function AddKeyMapOption(string a_text, int a_keyCode, int a_flags = 0)
function AddKeyMapOptionST(string a_stateName, string a_text, int a_keyCode, int a_flags = 0)

; Отобразить новое значение опции.
function SetKeyMapOptionValue(int a_option, int a_keyCode, bool a_noUpdate = false)
function SetKeyMapOptionValueST(int a_keyCode, bool a_noUpdate = false, string a_stateName = "")

; Событие выбора опции.
event OnOptionKeyMapChange(int a_option, int a_keyCode, string a_conflictControl, string a_conflictName)
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)

; a_keyCode - число, определяющее клавишу. Шестнадцатеричные значения можно посмотреть в interface.bsa\controls\pc\controlmap.txt

Вот этим откликаемся на нажание клавиши (см. Form.psc):

Код
; Регистрация клавиши.
Function RegisterForKey(int keyCode) native
Function UnregisterForKey(int keyCode) native
Function UnregisterForAllKeys() native

; Событие нажатия клавиши. Творим заклинания (Cast() без анимации и ограничений), используем умения (более актуально) и т.д.
; Условиями нужно исключить срабатывание в неподходящих условиях - в меню, в диалогах, под водой и т.д.
Event OnKeyDown(int keyCode)
Event OnKeyUp(int keyCode, float holdTime)

Живые примеры можно посмотреть, раскурочив какой-нибудь мод, где это используется. Frostfall, к примеру.

Multigone  Offline  Сообщение №839 | Тема: Вопросы по скриптам Papyrus написано: 9 ноября 2017, 15:37



832
Lexo, проблема в переменной akItemReference, которая не передает корректно данные, когда они есть (предмет обладает постоянным референсом / находится в алиасе / референс создан движком при крафте). Еще, GetGoldValue() возвращает только стоимость базового предмета.


Код
IF akBaseItem.GetGoldValue() >= Price

Multigone  Offline  Сообщение №840 | Тема: Вопросы по скриптам Papyrus написано: 7 декабря 2017, 19:28



832
Lexo, может, это (Form):


Код
; Sets whether the player knows this form
; Should only be used for Magic Effects,
; Words of Power, and Enchantments
Function SetPlayerKnows(bool knows) native

Форум » Записи участника [Multigone]
Поиск:





Ответ на жалобу смотрите в разделе жалоб