持续魔法重生 - 保持你的法术持续生效

创作者: nwGary54
已更新:2026-04-06 18:21:43
15KB

前置 MOD

使用 持续魔法重生 - 保持你的法术持续生效 时将自动安装

关于此 MOD

通过牺牲一部分最大魔法值来维持法术效果,而无需每分钟重新施放。让法师护甲持续整场战斗,使你的召唤物成为永久同伴,或用烛光术一路照亮前路
这是我之前作品的翻新版。 持续魔法 模组,包含脚本改进并降低复杂度,使开发和打补丁更易于管理。如果你当前正在使用旧版本,请在升级前进行一次干净存档,并驱散所有法术。

我对《天际》魔法系统最大的不满之一,就是大多数法术的持续时间不超过一两分钟。这使得使用像法师护甲或召唤系里几乎所有法术都变得异常繁琐。这个模组通过让法术变为永久生效来解决这一问题——但使用它们会降低你的最大法力值。

例如,我在这里召唤一个魔宠。我的最大法力值被削减,以维持召唤永久生效(由于 TrueHUD 的“缩放条”选项,最大法力值条会变小)


而在这里,狼被驱散,我的法力也恢复了:

你看到的右下角用于快速施法的快捷栏来自 法术快捷栏

确切费用取决于法术和你的天赋。例如,你可以永久召唤一个火焰元素,但这样做会使你的法力值减少80点。如果你拥有“学徒级召唤”天赋,这一费用将降至40点。若该元素在战斗中阵亡,或你自行驱散它,法力值将返还给你。
该系统适用于几乎所有召唤系法术(包括黎明守卫和龙裔的法术),但那些已是永久召唤的法术(如“亡灵奴役”)除外。
其他学派的法术以开关形式运作。如果你施放了像烛光术这样的法术,它将消耗15点法力值(若拥有新手级变化系技能则消耗7点)。此效果将持续生效,直到你再次施放该法术将其驱散,届时法力值将返还。


兼容性/补丁
任何添加新法术的模组都不会受到影响,但如果你希望其法术使用新系统,则需要一个补丁。

我正在为我自用的魔法模组制作补丁。补丁完成后我会在这里放出链接。如果你也制作了补丁,欢迎私信我,我也会一并添加到这里。

当前可用的补丁有:
制作自己补丁的指南已提供 在这里

常见问题解答:

持续魔法会在战斗中使用法术和/或受到攻击时给予你经验值,具体取决于法术本身。如果你使用 静态技能等级重制,你需要按照模组页面上的技能上限解除变通方法说明,确保这些经验值增益被抵消——请参阅标有“[因Papyrus限制,Sunhelm用户必须阅读]”的部分。

问:这个能用吗? 执刑者? 
A:在此处查看剧透:
剧透:  
显示


本mod中的法术消耗由原版减耗perk控制。尽管Ordinator将其从技能树中移除,但原版perk仍保留在游戏中。因此,使用Ordinator时,受本mod影响的法术将永远无法获得半价perk的加成。不过,你可以通过控制台将perk重新添加给角色来绕过这一限制。这不会影响其他法术的消耗,因为它们只遵循Ordinator的新perk系统。

你甚至可以用我最喜欢的模组之一更进一步, 令人期待的技能等级

此选项可在你的技能达到相应等级后,自动添加相关的费用专长。由于这些专长将由脚本添加,因此它们是否在技能树中被隐藏并不重要。实际上,此模组将通过控制台为你完成添加专长的工作,并在适当的等级进行,以维持你游戏的平衡性。虽然这并不能让我的模组与Ordinator完美兼容,因为它仍无法提供Ordinator专长树所具备的更精细的费用削减效果,但总体上会保持相对平衡。 

为Ordinator制作一个合适的补丁需要更新每一个法术,以使用Ordinator提供的多种不同的减耗perk,这将是一个相当大的时间投入。我个人并不使用Ordinator,也不太愿意为此花费那么多时间。如果其他人想自己制作补丁,我可以提供更新后的脚本以及如何应用它的说明,如有需要即可索取。


问:我在左手施放束缚之剑时游戏崩溃了!
A:如果您的物品栏因未正确卸载某些模组而出错,可能会发生这种情况。以下是修复指南: https://steamcommunity.com/sharedfiles/filedetails/?id=138175181

技术细节

此概念基于NineInchNall出色的“投入魔法”模组(你可以查看旧版《上古卷轴:天际》版本) 这里),其在《天际》特别版/周年纪念版上没有什么好用的端口。 
如果你想了解这个模组的工作机制及其参考来源,请点击此处阅读剧透内容:

剧透:  
显示

持续魔法采用了不同的方式,以避免意外错误地修改你的最大魔法值,这在极少数情况下可能会发生在投入魔法中。

原始的“持续法术”在技术上汲取了灵感 ToggleSpells 作者:ErikRedbeard,这会为你的每次施法应用自定义全局变量和减益法术,以管理魔法值削减。此策略万无一失——即使你的法术意外失效,减益效果也会被移除,你的魔法值也不会被永久改变。不过,设置起来十分繁琐,因为每个法术都需要独立的全局变量和减益法术形态。

这项新实现采用了旧版投入魔法与法术切换模组之间的混合方案。你的法力值现在由脚本直接扣除,而非通过惩罚性法术,同时全局变量会被动态分配(无需提前定义),用于存储你施放法术时所支付的法力消耗。一旦法术被驱散或失效(例如召唤物被击杀时),系统便会引用该全局变量,将你最初支付的法力消耗返还给你。

这是完整的脚本,若你有意的话:

剧透:  
显示

Scriptname togglespellV2 extends activemagiceffect  
;https://ck.uesp.net/wiki/Category:Papyrus - 因为我总是记不住维基在哪里
;https://papyrus.bellcube.dev/skyrimse/

;需要 https://www.nexusmods.com/skyrimspecialedition/mods/115164

bool applyxp = false
int function getMaxCasts()
    if allowDualCast || (allowDualCastPerk != None && Game.GetPlayer().HasPerk(allowDualCastPerk))
        返回2
    endif
    返回 1
endfunction

int targetGlobalIndex = -1
int maxGlobals = 15
int function getTargetGlobalIndex()
    如果targetGlobalIndex > -1
        返回目标全局索引
    endif
    int i = maxGlobals
    int instances = getMaxCasts()
    int emptySlot = 1
    浮点编号
    当 i 大于 0 时
        id = SPE_GlobalVariable.GetGlobal("toggleSpellActiveID" + i).GetValue()
        如果id等于spellUniqueID
            如果实例数量大于1
                instances -= 1
            否则
                targetGlobalIndex = i
                返回 i
            endif
        endif
        if id == 0 
            emptySlot = i
        endif
        i -= 1
    结束循环
    SPE_GlobalVariable.GetGlobal("toggleSpellActiveID" + emptySlot).SetValue(spellUniqueID)
    targetGlobalIndex = emptySlot
    返回空槽位
endfunction

Event OnEffectStart(Actor akTarget, Actor akCaster)
    调试.开始脚本分析("togglespellv2")
    if Game.GetPlayer() == akCaster
        ; debug.notification(spellUniqueID + ", " + spellmagnitude)
        int index = getTargetGlobalIndex()
        GlobalVariable idGlobal = SPE_GlobalVariable.GetGlobal("toggleSpellActiveID" + index)
        GlobalVariable valueGlobal = SPE_GlobalVariable.GetGlobal("toggleSpellActiveValue" + index)

            ; debug.notification("索引:" + targetGlobalIndex + ",ID:值 - " + idGlobal.GetValue() + ", " + valueGlobal.GetValue())
           如果valueGlobal.GetValue() != 0
                ;法术已存在
                ; debug.notification("驱散,返还 " + valueGlobal.GetValue() + " 点法力")
                akCaster.ModAv("Magicka", valueGlobal.GetValue())
                valueGlobal.SetValue(0)
                self.dispel();同时触发效果结束
            否则
                ;第一次施法
            int spellPenalty = (int)spellmagnitude
            if halfCostPerk != none && akCaster.HasPerk(halfCostPerk)
                    spellPenalty = Math.Ceiling(spellPenalty/2)
                endif
                如果 游戏.获取玩家().获取角色属性值("magicka") 大于 法术惩罚
                    ; debug.notification("施法消耗: " + spellPenalty)
                    valueGlobal.SetValue(spellPenalty)
                    Game.Getplayer().ModAv("Magicka", (-1 * spellPenalty))
                否则
                不足的魔能
                self.dispel();同时触发效果结束
                EndIf
            endif
        endif
结束事件
Event OnEffectFinish(Actor akTarget, Actor akCaster)
     如果Game.GetPlayer() == akCaster 
        int index = getTargetGlobalIndex()
        GlobalVariable idGlobal = SPE_GlobalVariable.GetGlobal("toggleSpellActiveID" + index)
        GlobalVariable valueGlobal = SPE_GlobalVariable.GetGlobal("toggleSpellActiveValue" + index)
        Utility.Wait(0.5);如果是切换施法,给新法术处理留出时间
        ; debug.notification(valueGlobal.GetValue())
        如果 valueGlobal.GetValue() > 0
            ;如果被非切换施法的方式驱散,则恢复待定魔力值
            ; debug.notification("驱散栏位" + targetGlobalIndex + ",恢复" + valueGlobal.GetValue() + "点魔力")  
            akCaster.ModAv("Magicka", valueGlobal.GetValue())
            valueGlobal.SetValue(0)
        endif
        idGlobal.SetValue(0)
        targetGlobalIndex = -1
     endif
结束事件

事件 更新时()
    如果玩家拥有切换法术效果且处于战斗状态且没有无战斗经验加成
        ; 法术生效中,且玩家处于战斗状态
        float a = spellmagnitude / 50
        Game.AdvanceSkill(spellschool,a)
        ; debug.notification("战斗,推进 " + spellschool + " " + a)
    endif
    RegisterForSingleUpdate(1)
结束事件

Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
    如果玩家拥有该法术效果且处于战斗状态,并且命中时获得经验值
        float a = spellmagnitude / 35
        Game.AdvanceSkill(spellschool,a)
        ; debug.notification("命中推进 " + spellschool + " " + a)
    endif
结束事件

MagicEffect 属性 togglespelleffect Auto
string property spellschool auto
浮点属性 spellUniqueID 自动
float Property spellmagnitude Auto
bool Property noCombatXp Auto
bool 属性 xpOnHit 自动
bool property allowDualCast auto
Perk属性 allowDualCastPerk 自动
特技属性 半价特技 自动



持续魔法还借用了投入魔法的几项辅助功能:
已投入魔法: “黑暗之魂确实名副其实。(贝丝这次可搞砸了。)” 

  • 我的模组也包含了对此问题的修复。不过,我修正的是相关召唤法术使用该专长的方式,而非像“投入魔法”那样在事后通过脚本增加100点额外生命值。

2. 已投入魔法值:“死灵法术使你的亡灵获得快速恢复。” 

  • 一样。不过,我的版本中,治疗量与复活亡者所需的技能等级成正比(即“召唤僵尸”法术的治疗量会低于“亡魂复活”)。

3. 投入的魔力值:“元素 potency 让侍灵随你的等级成长。说真的。”
  • 我选择让所有召唤物都随你的等级提升而成长。具体提升幅度取决于召唤物的强度——例如,狼系魔宠大约为你等级的一半,而召唤出的魔神德雷莫拉领主则为你等级的90%。

除了这些,我还做了一些其他改动,值得一提:

  • 被复活的尸体在被杀死或驱散时会化为灰烬。这一机制被注能魔能移除,因此你可以持续复活同一具尸体。我觉得这有点不平衡,降低了“死灵奴仆”之类法术的实用性。魔族依然可以被无限次复活,就像原版游戏一样。
  • 恐惧僵尸(最强的复活尸体法术)可作用于99级以下的敌人。 
  • 法术消耗通常线性增长而非指数增长(即,法术强度翻倍则消耗翻倍)。这使得使用高级法师护甲法术尤其比InvestedMagicka中更合理,后者使用龙皮术需花费400点。

已知问题/限制:
  • 我的脚本一次只能处理最多两个相同召唤物。如果你装了允许召唤更多数量的模组,它们将无法正常工作。不过,你仍然可以召唤两个以上不同类型的召唤物(例如,两个火焰元素和一个冰霜元素)。
  • 你的召唤物可能不会总是跟随你进入新的区域。这是原版游戏中其他永久召唤物(如亡灵奴役)也存在的已知问题。移动到另一个新区域时应将召唤物召回,或者你也可以解除召唤并重新施放召唤法术。
  • 持续型法术不适合制成卷轴来施放。从游戏机制的角度来看,卷轴提供一次免费的施法机会。这对持续型法术来说设计上讲不太通,因为它们本应会过期,现在却会变成免费的半永久增益。从技术层面看,它们也不兼容,因为降低你魔力的脚本仍然会触发,所以卷轴实际上不会给你免费施法。我不想为了合理化持续型法术的卷轴而重新设计并避免漏洞,所以我干脆从等级列表中移除了那些有问题的卷轴。如果你的背包里还有某个已转化为持续型法术的卷轴,直接卖掉就好。

上古卷轴5:天际 特别版 的热门 MOD

探索适用于 上古卷轴5:天际 特别版 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

2025-12-16 11:53:50

前置必备Mod

修改与Mod必备前置工具

ModOrganizerTeam2024-08-04 16:31:44

Mod Organizer(MO)是一个用于管理任意大小的Mod集合的工具。它是专门为那些喜欢尝试mods的人设计的,因此需要一种简单可靠的方法来安装和卸载它们。

天空用户界面

schlangster2017-10-04 05:03:26

界面优雅,对电脑友好,并具有许多高级功能。

非官方《上古卷轴5:天际》特别版补丁 - USSEP

Arthmoor2025-09-01 07:56:09

一款针对《上古卷轴V:天际特别版》的综合性错误修复模组。非官方天际特别版补丁(简称USSEP)的目标是最终修复《天际特别版》中所有尚未被官方修复的错误。

静态网格改进模组 - SMIM

Brumbek2018-07-05 02:28:26

这是一个旨在大幅提升《上古卷轴5:天际》中无数静态3D模型外观的大型项目。简而言之,我希望通过这个项目让天际的建筑、杂物、家具和景观更加美观。

SKSE插件的地址库

meh3212024-02-14 09:19:54

包含头文件和数据库,以便轻松实现 SKSE DLL 插件的版本独立性。

比赛菜单

expired69782024-01-27 03:38:17

角色创建菜单全面改版,新增多种自定义功能,例如多种RGBA战纹、身体彩绘、手部彩绘和脚部彩绘。(需要SKSE)

Fores Skyrim SE-FNIS SE中的新闲置

NexusModsCaretaker2020-02-19 01:47:03

Skyrim没有可能的自定义动画?错误的。FNIS行为允许添加不同类型的动画到游戏:闲置/姿势,顺序,家具,配对,杀戮,生物,等等。

使用 Xmod 解锁 上古卷轴5:天际 特别版 的全部潜力 — 今天就探索这些顶级 MOD!