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

Результаты поиска
Multigone  Offline  Сообщение №751 | Тема: Вопросы по скриптам Papyrus написано: 29 июля 2016, 20:45



832
nepewka, формально да. Но маркер, создающий заклинание, располагается высоко в небе. В подземельях он будет выше потолка, в результате метеорит никуда не прилетит. Ну, мне так кажется.

Multigone  Offline  Сообщение №752 | Тема: Вопросы по скриптам Papyrus написано: 30 июля 2016, 15:47 | Отредактировано: Multigone - 23 апреля 2020, 15:12



832
Нарада, попробуй перк Activate. В последнее время что-то все через него делается. Там в Fragments что-то такое будет:

Код
Flora Property Brevno Auto
Weapon Property Topor Auto

IF akTargetRef.GetBaseObject() != Brevno || akActor.GetItemCount(Topor)
    akTargetRef.Activate(akActor)
ELSE
    Debug.Notification("Бери топор, руби хардкор!11")
ENDIF

Оба флага в Entry отметить.

Multigone  Offline  Сообщение №753 | Тема: Вопросы по скриптам Papyrus написано: 31 июля 2016, 09:51



832
nepewka, в одной точке не может стоять несколько актеров, насколько я знаю. Значит, нет.

Multigone  Offline  Сообщение №754 | Тема: Вопросы по скриптам Papyrus написано: 31 июля 2016, 12:49



832
Нарада, если перк только для игрока, то можно выдать через маг. эффект (Perk to apply), можно скриптом в любом месте (Game.GetPlayer().AddPerk(MyPerk)).

Multigone  Offline  Сообщение №755 | Тема: Вопросы по скриптам Papyrus написано: 31 июля 2016, 22:04



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

Multigone  Offline  Сообщение №756 | Тема: Вопросы по скриптам Papyrus написано: 1 августа 2016, 10:11 | Отредактировано: Multigone - 1 августа 2016, 10:18



832
Цитата nepewka

взрыв ведь вызвать можно через placeatme, а заклинание ?

Не понял вопрос - заклинание что? Взрыв может существовать сам по себе, а заклинание может только накладываться на актеров. Способ, которым оно будет доставлено актеру, зависит от его типа. Как частный случай, можно выбрать снаряд.

lumistart, попробуй:


Код
Scriptname _KM_ActivatorOreScript extends ObjectReference

Import Utility
Import Math

idle property IdlePickup_ground auto
miscobject property IgnotGold auto
int property count = 8 auto
int property myresourceCount = 8 auto
bool property dayly = true auto
int property multiRes = 8 auto
int property multHour = 24 auto
String property String01="Вы забрали" auto
String property String02=" золотых слитков. Готово к отправке еще " auto
String property Warning="Шахтеры еще не добыли достаточно руды для переплавки, вернитесь позже." auto
int count01
int hours

event onload()
    Hours = floor(GetCurrentGameTime()*24)
    count01=count
endevent

Event OnActivate(ObjectReference akActionRef)
    BlockActivation(true)
    if (hours)+multHour <= (floor(GetCurrentGameTime()*24)) && (Count01<count)
        count01=count01+multiRes*(floor(GetCurrentGameTime()*24)-hours)
        hours=floor(GetCurrentGameTime()*24)
    endif
    ;debug.Messagebox(count01+" "+hours+" "+(floor(GetCurrentGameTime())*24))
    if count01>0
        if count01>count
            count01=count
        endif
        dayly=true
        if (akActionRef==game.getPLayer()) && dayly && (count01>=myResourceCount)
            game.getplayer().PlayIdle(IdlePickup_ground)
            wait(2)
            game.getPLayer().additem(IgnotGold, myResourceCount)
            count01 = count01 - myResourcecount
            debug.messagebox(String01+" "+myResourceCount+" "+String02+count01)
        endif
    elseif (count01<=0)||(count01<=myResourceCount)
        dayly=false
        debug.messagebox(Warning)
    endif
    BlockActivation(false)
endevent

Multigone  Offline  Сообщение №757 | Тема: Вопросы по скриптам Papyrus написано: 1 августа 2016, 11:46 | Отредактировано: Multigone - 1 августа 2016, 11:51



832
nepewka, а что нужно-то? Чтобы объект творил заклинание?
Если в Cast() не указать цель, объект-не-актер должен стрелять заклинанием Aimed куда-то в одну точку (думаю, по направлению одной из его осей).
Чтобы указать цель, нужно знать ее референс. В маг. эффекте это может быть Caster \ Target, в др. скрипте - по обстоятельствам, смотря, какие задачи требуются от объекта. Цель можно найти через Find(), GetCombatTarget(), ну и через прочие функции, способные вернуть Actor или ObjectReference.

Multigone  Offline  Сообщение №758 | Тема: Вопросы по скриптам Papyrus написано: 1 августа 2016, 16:25



832
nepewka, кому, как не тебе, знать, что требуется от твоего мода. Но раз просишь подсказать "что-нибудь", вот эти идеи реализовывал в тестовом "фейерверке":

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

Одновременно снаряды не могут вылетать, для обработки каждого следующего направления требуется время порядка 0.1 с.

Multigone  Offline  Сообщение №759 | Тема: Вопросы по скриптам Papyrus написано: 1 августа 2016, 19:18



832
nepewka, подозреваю, частично это зависит от вычислительной мощности процессора. Если создать одновременно много объектов с тяжелыми скриптами на них, обработка каждой копии должна быть замедлена. Я не знаю, короче. Умозрительные выводы бывают ошибочны.

Multigone  Offline  Сообщение №760 | Тема: Вопросы по скриптам Papyrus написано: 2 августа 2016, 11:12 | Отредактировано: Multigone - 3 августа 2016, 07:03



832
nepewka, а ну так попробуй:


Код
Scriptname _MySCRIPT6 extends ObjectReference

Import Math

Activator Property FXEmptyActivator Auto
Spell property Fireball auto

Event OnLoad()
    Actor xRef = Game.GetPlayer()
;    SetAngle(0, 0, xRef.GetAnglez()) ; Зачем это?
    ObjectReference xEnd = placeAtMe(FXEmptyActivator)
    ObjectReference xStart = placeAtMe(FXEmptyActivator)
    xStart.moveTo(self, 0, 0, 10)
    Int WorkTime = 20
    WHILE WorkTime
        Float pX = -xRef.GetAngleX()
        Float pZ = 90 - xRef.GetAngleZ()
        xEnd.moveTo(xStart, 200 * Cos(pX) * Cos(pZ), 200 * Cos(pX) * Sin(pZ), 200 * Sin(pX))
;        Fireball.RemoteCast(xStart, xRef, xEnd)
        Fireball.Cast(xStart, xEnd)
        Utility.Wait(1.5)
        WorkTime -= 1
    ENDWHILE
    xStart.delete()
    xEnd.delete()
    disable()
    delete()
EndEvent

Multigone  Offline  Сообщение №761 | Тема: Вопросы по скриптам Papyrus написано: 4 августа 2016, 16:55



832
nepewka, тут другой вопрос - как не давать творить заклинание, если оно в этот момент перезаряжается? Я знаю следующие варианты:

- повысить цену заклинания для актера (перк, скрипт, сложно).
- удалить заклинание из списка изученных (скрипт, легко).
- предотвращать экипирование заклинания (скрипт, легко).
- отменять функцией interruptCast() (скрипт, только тип Concentration).
- неизвестный способ.

Multigone  Offline  Сообщение №762 | Тема: Вопросы по скриптам Papyrus написано: 24 августа 2016, 18:45 | Отредактировано: Multigone - 24 августа 2016, 19:30



832
Цитата MaxwellDemon

Calling the PlayIdle function on the same actor, with the same idle again, will have the actor stop playing it (if it's a looped animation).


Multigone  Offline  Сообщение №763 | Тема: Что слушаем? Тема закрыта, только для просмотра. написано: 25 августа 2016, 12:00



832

Multigone  Offline  Сообщение №764 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 30 августа 2016, 18:04 | Отредактировано: Multigone - 30 августа 2016, 18:33



832
Myprism, ничего не произойдет. По-моему, даже рецепт не появится в списке. Я пробовал.

DarkVetal, вот примерная версия для присоединения к фальшивому misc-объекту, который указать в качестве результата крафта по рецепту. Для каждого рецепта, дающего несколько предметов, нужно делать новый misc. Их можно называть "разбор такого-то предмета" или как-нибудь еще.

 
Код
Scriptname _TESTTEST14 extends ObjectReference
    ; Крафт нескольких разных предметов. Заполняются только нужные переменные.

MiscObject Property myBase Auto ; Базовая форма, к которой прикреплен этот скрипт. Заполняется всегда.

Potion Property ToAddPotion1  Auto ; Получаемые зелья.
Potion Property ToAddPotion2  Auto
Potion Property ToAddPotion3  Auto

Ingredient Property ToAddIngredient1  Auto ; Получаемые ингредиенты.
Ingredient Property ToAddIngredient2  Auto
Ingredient Property ToAddIngredient3  Auto

MiscObject Property ToAddMisc1 Auto ; Получаемое барахло.
MiscObject Property ToAddMisc2 Auto
MiscObject Property ToAddMisc3 Auto

Int Property PotionCount1 Auto ; Кол-во получаемых зелий.
Int Property PotionCount2 Auto
Int Property PotionCount3 Auto

Int Property IngredientCount1 Auto ; Кол-во получаемых ингредиентов.
Int Property IngredientCount2 Auto
Int Property IngredientCount3 Auto

Int Property MiscCount1 Auto ; Кол-во получаемого барахла.
Int Property MiscCount2 Auto
Int Property MiscCount3 Auto

Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
    If akNewContainer != Game.GetPlayer() || akOldContainer
        return
    endif
    akNewContainer.AddItem(ToAddPotion1, PotionCount1, true)
    akNewContainer.AddItem(ToAddPotion2, PotionCount2, true)
    akNewContainer.AddItem(ToAddPotion3, PotionCount3, true)
    akNewContainer.AddItem(ToAddIngredient1, IngredientCount1, true)
    akNewContainer.AddItem(ToAddIngredient2, IngredientCount2, true)
    akNewContainer.AddItem(ToAddIngredient3, IngredientCount3, true)
    akNewContainer.AddItem(ToAddMisc1, MiscCount1, true)
    akNewContainer.AddItem(ToAddMisc2, MiscCount2, true)
    akNewContainer.AddItem(ToAddMisc3, MiscCount3, true)
    akNewContainer.RemoveItem(myBase, 999, true)
EndEvent

Multigone  Offline  Сообщение №765 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 13 сентября 2016, 18:51



832
evil_spirit, еще можно настроить Combat Style актера. Махание руками - это, наверное, какая-то из анимаций расы (Gameplay -> Animations -> Actors/TrollBehavior/ActionIdleWarn). Если снизить вероятность ее проигрывания, то это применится ко всем троллям вообще.

Multigone  Offline  Сообщение №766 | Тема: Что слушаем? Тема закрыта, только для просмотра. написано: 22 сентября 2016, 06:15



832

Multigone  Offline  Сообщение №767 | Тема: Вопросы по скриптам Papyrus написано: 22 сентября 2016, 13:04 | Отредактировано: Multigone - 22 сентября 2016, 13:04



832
AlexeyVN, что должен делать этот скрипт? Желательно подробнее.

Multigone  Offline  Сообщение №768 | Тема: Вопросы по скриптам Papyrus написано: 22 сентября 2016, 14:47



832
AlexeyVN, я правильно понимаю, что при активации алтаря должно появляться меню, где игрок может подарить зачарованный предмет? Вот только кому, самому себе, что ли? Непонятно. Я же просил описать подробности.

Ладно, предположим, нам нужно, чтобы игрок мог перемещать только зачарованный(-ые) предмет(-ы) из своего инвентаря в некий контейнер при активации алтаря через GiftMenu. Нам понадобится: любой актер как посредник (кому будем отдавать предметы через меню, спрятан в любом месте), скрипт на алтаре. При активации алтаря перебираем все до единого предмета в инвентаре игрока и формируем лист из подходящих предметов, открываем меню подарков с НПС. После закрытия меню отправляем все предметы из инвентаря НПС в конечный контейнер.

Если я угадал, могу написать.

Multigone  Offline  Сообщение №769 | Тема: Вопросы по скриптам Papyrus написано: 22 сентября 2016, 16:39



832
AlexeyVN, не совсем понял, что происходит с предметом после того, как будет помещен в меню подарков. Меню закрывается, он возвращается (?) игроку, и...?

Вот примерные версии (названия другие, т.к. тестировал на компиляцию). См. комменты:


Код
Scriptname _TESTTEST15 extends ObjectReference ; Алтарь.

_TESTTEST16 Property L Auto
            ; Важно! Вместо _TESTTEST16 указать реальное название скрипта, который прикреплен к алиасу игрока, иначе не будет компилировать.
            ;В СК заполнить эту переменную прикрепленным скриптом из алиаса!
FormList Property DisenchantList Auto

Event OnActivate(ObjectReference akActivator)
    GoToState("S") ; Пока не будет обработан текущая активация, все следующие пропускаются.
    If akActivator == Game.GetPlayer()
        DisenchantList.Revert()
        Int iC = akActivator.GetNumItems() - 1
        WHILE iC >= 0
            Form xF = akActivator.GetNthForm(iC)
            if (xF as Weapon && (xF as Weapon).GetEnchantment()) || (xF as Armor && (xF as Armor).GetEnchantment())
                DisenchantList.AddForm(xF)
            endIf
            iC -= 1
        ENDWHILE
        IF DisenchantList.GetAt(0)
            L.bL = true
            (akActivator AS Actor).ShowGiftMenu(True, DisenchantList)
        ELSE
            Debug.Notification("Игрок не имеет зачарованных предметов!")
        ENDIF
    EndIf
    GoToState("")
EndEvent

STATE S
    Event OnActivate(ObjectReference akActivator)
    EndEvent
ENDSTATE


Код
Scriptname _TESTTEST16 extends ReferenceAlias ; Алиас игрока.

ObjectReference Property DisenchantAltar Auto
Message Property AlexDisenchantMessage Auto
Bool Property bL Auto Hidden ; Упрощает проверку и предупреждает срабатывание скрипта при любом открытом меню подарков.

Event OnInit()
    RegisterForMenu("GiftMenu")
endEvent

Event OnItemRemoved(Form akBaseItem, Int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer)
    if bL ; Определяем, был ли активирован алтарь, ибо меню подарков может быть открыто во многих случаях.
        akItemReference = akDestContainer.DropObject(akBaseItem, 1) ; Используем имеющуюся переменную вместо создания новой.
        if !AlexDisenchantMessage.Show(1, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000)
            input.TapKey(1)
            akItemReference.SetMotionType(akItemReference.Motion_Keyframed)
            akItemReference.SetAngle(DisenchantAltar.GetAngleX() + 80.0, DisenchantAltar.GetAngleY(), DisenchantAltar.GetAngleZ())
        Else
            Game.GetPlayer().AddItem(akBaseItem, 1, true) ; ?
        endIf
    endIf
endEvent

Event OnMenuClose(string menuName)
    bL = false
endEvent

Multigone  Offline  Сообщение №770 | Тема: Вопросы по скриптам Papyrus написано: 6 октября 2016, 15:52



832
Lexo, проблема в том, что 1) в инвентаре предметы не имеют референсов, 2)сворованные и "чистые" предметы складываются как попало в один стек, 3) никак нельзя определить, что предмет, уже находящийся в инвентаре, сворован.

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

Вот примерная версия (на алиас игрока, не проверял, нужен СКСЕ):


Код
Scriptname _TESTTEST17 extends ReferenceAlias

Bool bD

Event OnInit()
    RegisterForCrosshairRef()
endEvent

Event OnCrosshairRefChange(ObjectReference ref)
    IF ref.GetActorOwner() || ref.GetFactionOwner()
        bD = true
    ELSE
        bD = false
    ENDIF
EndEvent

Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
    IF akSourceContainer AS Actor
        IF (akSourceContainer AS Actor).IsDead() || !ui.IsMenuOpen("ContainerMenu")
            RETURN
        ENDIF
    ELSEIF !bD
        RETURN
    endIf
    Actor xA = GetActorRef()
    Int iC = xA.GetItemCount(akBaseItem)
    xA.RemoveItem(akBaseItem, iC, true)
    xA.AddItem(akBaseItem, iC, true)
endEvent

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

Multigone  Offline  Сообщение №771 | Тема: Что слушаем? Тема закрыта, только для просмотра. написано: 7 октября 2016, 14:25



832

Multigone  Offline  Сообщение №772 | Тема: Вопросы по скриптам Papyrus написано: 8 октября 2016, 07:01



832
Myprism, похоже, что никак. Только заменой актера.

Multigone  Offline  Сообщение №773 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 10 октября 2016, 07:53 | Отредактировано: Multigone - 10 октября 2016, 07:58



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

Наверное, СК при своей загрузке просто сбрасывает значение в этом поле на первое по списку. Пока не нажата кнопка "Ок" в перке, это не должно отражаться на действительных данных, которые были указаны ранее. Еще можно посмотреть в списке "Perk Entries" в столбце "Data 3", скорее всего, там будет показана настоящая характеристика.

PS: Проверил, у меня такой проблемы нет.

Multigone  Offline  Сообщение №774 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 12 октября 2016, 14:47 | Отредактировано: Multigone - 21 апреля 2020, 17:20



832
AksyonovCondition Functions. Для проверки, надета ли на актере осн. одежда, думаю, подойдет WornHasKeyword.

Проверка раздетости:

(S) (WornHasKeyword) (ArmorCuirass) (==) (0.0) (AND)
(S) (WornHasKeyword) (ClothingBody) (==) (0.0) (AND)

Проверка одетости:

(S) (WornHasKeyword) (ArmorCuirass) (==) (1.0) (OR)
(S) (WornHasKeyword) (ClothingBody) (==) (1.0) (AND)

Multigone  Offline  Сообщение №775 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 12 октября 2016, 20:02



832
Artem13, в квесте WICommentNaked это прокатывает.

Multigone  Offline  Сообщение №776 | Тема: Скриншоты из любых игр написано: 16 октября 2016, 19:52



832


Sonra, что за игра?

Multigone  Offline  Сообщение №777 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 16 октября 2016, 21:39 | Отредактировано: Multigone - 16 октября 2016, 21:42



832
grumpos,


Код
GlobalVariable Property MyGlobal Auto
FormList Property MyAllActorsList Auto ; Заполняется нужными актерами (не ActorBase).
FormList Property MyEmptyList Auto ; Изначально пустой.

IF MyAllActorsList.HasForm(akSpeakerRef) && !MyEmptyList.HasForm(akSpeakerRef)
    MyEmptyList.AddForm(akSpeakerRef)
    MyGlobal.Value += 1.0
ENDIF

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



832
SoulDiablo, если заклинание FF - Self, то добавить в маг. эффект:


Код
Scriptname _TESTTEST18 Extends ActiveMagicEffect

EVENT OnEffectStart(Actor xT, Actor xC)
    Float fP = xT.GetAVPercentage("Health")
    IF fP > 0.01
        xT.DamageAV("Health", xT.GetAV("Health") * (1.0 - 0.01 / fP))
    ENDIF
    fP = xT.GetAVPercentage("Magicka")
    IF fP > 0.01
        xT.DamageAV("Magicka", xT.GetAV("Magicka") * (1.0 - 0.01 / fP))
    ENDIF
ENDEVENT

Если заклинание FF - Aimed, чуть сложнее:

1) Создать алиас игрока в постоянно работающем квесте.
2) Добавить алиасу:


Код
Scriptname _TESTTEST19 extends ReferenceAlias

Spell Property MySpell Auto ; Модное заклинание, заполнить.

EVENT OnSpellCast(Form xS)
    IF xS == MySpell
        Actor xT = GetActorRef()
        Float fP = xT.GetAVPercentage("Health")
        IF fP > 0.01
            xT.DamageAV("Health", xT.GetAV("Health") * (1.0 - 0.01 / fP))
        ENDIF
        fP = xT.GetAVPercentage("Magicka")
        IF fP > 0.01
            xT.DamageAV("Magicka", xT.GetAV("Magicka") * (1.0 - 0.01 / fP))
        ENDIF
    ENDIF
ENDEVENT

Multigone  Offline  Сообщение №779 | Тема: Вопросы по скриптам Papyrus написано: 18 октября 2016, 15:30



832
AlexeyVN, думаю, что с текущей редакцией SKSE - нет. И вот почему.

Multigone  Offline  Сообщение №780 | Тема: Вопросы по скриптам Papyrus написано: 18 октября 2016, 17:20



832
Dsion, там перед тем, как дать подарок, создается лист из зачарованных вещей, находящихся в инвентаре игрока. Проблема в том, что при переборе вещей те из них, что зачарованы самостоятельно, не могут определиться как имеющие чары через GetEnchantment().

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





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