缩放奇点球体照明(基于震荡法球的黑色洞穴法术,可吸引一切)

创作者: JARLBALLSCRUFF999
已更新:2026-06-18 15:38:56
18KB

关于此 MOD

用奇点法球撕裂现实,其光芒随玩家等级成长而增强。需要天际重置版。最新ESL版本现已推出:)
召唤奇点球形闪电: 一个有趣且可成长的魔法核爆法术。可在以下地点找到:废弃监狱的弓架旁、微风阁的炼金房门口,以及龙霄宫法仁加的桌上。
重要更新说明: 如果从旧版本更新到新ESL版本,并在已有存档上使用,请务必先使用遗忘法术模组清除角色魔法清单中的旧版本,然后再学习更新后的ESL版本!若未能清除旧的时空循环,将导致时间引擎错误。
厌倦了只会扔简单火球?准备好撕裂奈恩本身的构造了吗?召唤奇点球状闪电引入了一种传奇的、自给自足的黑洞法术,将天际的物理与魔法引擎推至绝对极限。这不仅仅是一场爆炸;它是一枚有知觉、动态扩展的魔法核弹,将整支军队拖入毁灭性的奇点,以他们的死亡为养分,并为你的屠杀奉上丰厚回报。
此法术采用自定义引擎、原生C++驱动的脚本设计,完全绕开标准Papyrus与Havok卡顿,实现完美无瑕、无可逃脱的重力真空效果。
🌌 核心特性
  • 无法逃脱的真空(100%恒定牵引力): 不同于原版《天际》中那些断断续续的隔空取物法术,本模组采用了自定义数组缓存和C++引擎级交接。一旦敌人被雷达锁定,他们就会被以每秒60帧的速度无情地拖向中心。即便是龙或马这类无法布娃娃化的实体也无法逃脱。
  • 智能敌我识别协议(跟随者安全): 别担心会气化莉迪亚或你的宠物。奇点的多节点雷达采用智能锁定,会完全忽略你的随从、盟友及非敌对伙伴。他们连一丝风都感觉不到。
  • 绝对之针: 一旦敌人越过事件视界,他们将被瞬间吸入漆黑的核心,并被锁定在绝对的静止状态中。他们无法动弹、攻击或逃脱。 (注意:被困在家具动画(如采矿或坐下)中的NPC会进入一种搞笑的量子叠加态,在黑洞与他们的日常活动之间快速来回弹跳)。
  • 超高温漩涡(平滑持续伤害): 当敌人被拖拽进入时,奇点会主动以连环闪电、雷霆霹雳、风暴之墙和狂野烈焰轰击他们。核心持续引爆炫目的等离子爆裂,造成大量持续的持续伤害,让你可以看着受害者被慢慢烤熟,滑入虚空之中。
🎲 动态等级与大规模变异系统
此法术将魔力视作辐射能量,随你的成长而向外扩展。基础引力半径随玩家等级提升而扩大(80级封顶)。此外,每次施法时,核心都会掷出1-100的随机点数来决定其密度,让每一次施法都成为高风险赌注:
  • 稳定核心(1-50): 1.0x 缩放。标准重力半径和标准魔法值消耗。
  • 致密核心(51-85): 1.5倍规模。范围更广,但魔力消耗速度加快1.5倍。
  • 超大质量核心 (86-98): 2.0倍规模。巨大的重力半径和双倍伤害,但魔力消耗速度提升2倍。
  • 异象(99-100): 3.0倍缩放。 头奖。 一个体积庞大的黑洞,能将战场上的敌人吸入其中。然而,它消耗魔法值的速度是原来的3倍,需要极度专注或立即击杀敌人,以防猛烈坍缩。
  • UGrids 安全帽: 双重施法或使用上帝模式会将奇点推至极限,但内置的安全上限可防止半径触及未加载的地图区域,确保游戏绝对稳定。
🩸 坚持即胜(魔法超限)
奇点以死亡为食。每当有敌人在核心内死亡,该法术便会“吞噬”他们,并根据你的玩家等级进行一次叠加的百分比判定,以瞬间恢复你的魔力值。在高等级时,喂养黑洞将瞬间回满你的整个魔力条,使你能够实现魔法永动,只要持续为其献上灵魂,就能无限维持巨大的异常现象。
💥 有机生存与最终崩塌
当魔力耗尽或法术时间结束时,黑洞向内坍缩。
  • 有机生存: 剧本 不再自动执行 敌人!如果龙或高级首领拥有足够生命值,能在绝对禁锢的残酷持续伤害下存活,C++禁锢将解除,它们会重重摔落地面,重伤但未死。
  • 防崩溃矩阵: 死亡的敌人会安全地掉落在地面上,在核心原本所在的位置正下方堆成一摊散落的“薄饼”状,完全绕过了Havok物理爆炸效果。
  • 浓缩精华: 核心现在掷出一个平坦的 每次施法时有10%的几率 将环境魔法完美蒸馏成一个单一的、超高密度的特大灵魂石或黑色灵魂石。它直接掉落在幸存者堆上。 (有趣的是,如果在某人家中施放奇点法术,法术结束时生成的灵魂宝石依法将归该房屋主人所有!)
⚙️ 配置要求与兼容性
  • 无需安装SKSE: 100% 纯原生Papyrus脚本,搭配C++原生交接,支持控制台与VR。
  • 《天际》周年纪念版: 使用奥术配件与地精创造俱乐部文件,实现炫酷的“解禁之焰”与“元素爆发”等离子载荷效果。
  • ESL标记: 不会占用你的加载顺序槽位。
⚠️ 警告与性能
  • 建议使用高显存: 由于涉及极端的物理计算和粒子效果,若您的显存低于12GB,请勿使用此法术。
  • 请勿连续施放技能: 同时丢超过两个这个,可能会在你的显卡上撕个洞,而不是在奈恩上,哈哈。
  • 杂乱警告: 不要在摆满装饰品的玩家住宅内施法,除非你想让房间里所有的甜面包卷、木桶和高脚杯永久传送到暗影界。
🙏 鸣谢与支持
所用工具与特别鸣谢: Verteiron(其原始模组创意深受启发)、Google Gemini、Grok、CKPE、SSEDIT、LOOT、Bethesda。
我们的Patreon捐赠页面: https://patreon.com/MTECHINDUSTRIES


我们的免费传奇级开源脚本:

ScriptName ELEMBallLightningActorScript Extends Actor

法术属性 法术恐惧 自动
静态属性 MAGINVShockSpellArt 自动
静态属性 MAGINVFireballSpellArt 自动
Static Property MAGINVRestoreSpellArt Auto
静态属性 MAGINVAlterationSpellArt 自动
静态属性 MAGINVAbsorbSpellArt 自动   
静态属性 MAGINVConjurationSpellArt 自动
激活器属性 MAGINVVoidSphereArt Auto
ActorBase属性 ActorExtra自动
特长属性持续时间自动
爆炸属性 爆炸冲击风暴01 自动
激活器属性 激活器额外 自动
专长属性能量2自动
专长 破坏大师 自动
法术属性 法术爆炸 自动
滚动属性 自动滚动
Int Property AreaOfEffect Auto
ObjectReference 属性 FXSmokeSmokeLg1x1 自动
特长属性 威力1 自动
法术 属性 法术攻击 自动
法术属性 法术能力 自动
ImpactDataSet 属性 MAGShockStorm01ImpactSet 自动
法术属性 MS04致盲 自动
法术属性 法术边框 自动
静态属性 FXGlowFillRoundXBrt 自动
爆炸属性 fakeForceBall1024ByFormula 自动
灯光属性 光球自动
声音属性 声音球闪电嗡嗡声 自动
声音属性 音球闪电嗡鸣 自动
EffectShader属性OrbitTrailShader 自动
法术属性 法术冲击 自动

; --- 显式载荷武器属性 ---
爆炸属性 奇点风暴爆炸 自动
法术属性 连锁闪电法术 自动
法术属性 闪电术 自动
法术属性 闪电风暴法术 自动
法术属性 火花法术 自动
法术属性 闪电箭法术 自动
法术属性 ELEM_奇点念力法术 自动
法术属性 近距离等离子爆破 自动
法术属性 AE_ElementalFlamesSpell 自动
险境属性 风暴壁垒险境 自动
关键字 属性 魔法无灰堆 自动
材质对象属性 MAGShockAshPileObj 自动
爆炸属性 ELEMClutterVacuumExplosion 自动

; --- 视觉异常属性 ---
表单属性 玛格努斯之眼裂隙特效 自动
爆炸属性 碎片环爆炸 自动

; --- 灵魂宝石收获属性 ---
灵魂石属性 灵魂石大型充满 自动
灵魂石属性 灵魂石黑填充 自动

Bool BlastingAway = False
布尔 轨道 = 假
ObjectReference[] TargetPoints
对象引用 法术中心
Int HumInstance = 0
浮动位置X
Int NumFrightened = 0
Bool StillAlive = True

; --- 基础魔法消耗 ---
Int PlayerMagickaDrain = 8
Int PlayerMagickaDamage = 40

浮动位置Y
施法者致盲目标
Spinner[] 旋转器
Int BuzzInstance = 0
整数型 球体高度
Float[] rPosX
ObjectReference 辉光光源
边界点对象引用数组
Int Angle = 0
ObjectReference[] SourcePoints
Float[] rPosY
ObjectReference 球形闪电
ObjectReference 火球等离子核心
物体引用 次元裂隙
Bool CleanedUp = False
整数 计时器 = 0
浮动 PosZ
物体引用 发光2
浮动延迟 = 0.000000
物体引用 烟雾弹
Int 角度偏移
物体引用发光
行动者 玩家
半径

; --- 宝珠全局引用 ---
ObjectReference 闪电球克隆体1
ObjectReference 闪电球克隆体2
ObjectReference 闪电球克隆体3
ObjectReference 闪电球克隆4
对象引用 恢复宝珠     
ObjectReference 变更宝珠     
ObjectReference 吸收宝珠         
对象引用 召唤法球
ObjectReference 虚空之球

Int CurrentLoopTicks = 0
Int BaseMaxTicks = 300
Int ExtraTicksEarned = 0
Int BaseDamage = 25
Float 伤害倍率 = 1.0

; --- 大规模变异与等级缩放全局变量 ---
Float MassModifier = 1.0
浮动动态重力范围
浮动动态双精度范围

Actor[] 已处理尸体
Int 处理计数 = 0

; --- 100% 恒定拉力数组缓存 ---
Actor[] CapturedActors

ObjectReference RebirthAnchorMarker = None

Bool IsBeamFiring = False
Int BeamDurationTicks = 0
Int BeamCooldownTicks = 0

函数 OnTranslationAlmostComplete()
EndFunction

Function Cleanup()
Debug.Trace(Self As String + ": 正在清理…", 0)
CleanedUp = True
BlastingAway = False
Utility.Wait(0.100000)

; --- 有机生存崩溃 ---
Int c = 0
当c < CapturedActors.Length时
Actor DoomedSoul = CapturedActors[c]
如果注定灵魂
DoomedSoul.停止翻译()
如果 !DoomedSoul.IsDead()
; 为幸存者重新唤醒物理引擎,使其安全落回地面
DoomedSoul.PushActorAway(DoomedSoul, 0.1)
EndIf
EndIf
c += 1
结束循环

; --- 低概率浓缩灵魂宝石收获 ---
如果法术中心
; 每次施法有10%的几率生成宝石
如果Utility.RandomInt(1, 100) <= 10
如果 Utility.RandomInt(1, 100) <= 50
如果灵魂石已充满
SpellCenter.PlaceAtMe(SoulGemGrandFilled As Form, 1, False, False)
EndIf
否则
若灵魂石已充满
SpellCenter.PlaceAtMe(SoulGemBlackFilled As Form, 1, False, False)
EndIf
EndIf
EndIf
EndIf

Int i = 0
当 i < BorderPoints.Length 时
如果BorderPoints[i]
BorderPoints[i].InterruptCast()
BorderPoints[i].Delete()
EndIf
i += 1
结束循环
i = 0
当 i < TargetPoints.Length 时
如果SourcePoints[i]
SourcePoints[i].InterruptCast()
Utility.Wait(0.0100000)
SourcePoints[i].Delete()
结束如果
如果TargetPoints[i]
TargetPoints[i].Delete()
结束如果
i += 1
结束循环
Sound.StopInstance(HumInstance)
Sound.StopInstance(BuzzInstance)

如果法术中心
SpellCenter.MoveTo(SpellCenter, 0 As Float, 0 As Float, -50 As Float, True)
ObjectReference ExplosionLight = SpellCenter.PlaceAtMe(LightBall As Form, 1, False, False)
ObjectReference ExplosionLight2 = SpellCenter.PlaceAtMe(LightBall As Form, 1, False, False)

如果施法爆炸
SpellExplosion.Cast(SpellCenter, None)
EndIf

若发出光芒
Glow.SetScale(3.0 * MassModifier)
结束如果

Self.KnockAreaEffect(1.00000, DynamicDoubleRange)

如果激活器额外条件成立且仍存活
RebirthAnchorMarker = SpellCenter.PlaceAtMe(ActivatorExtra As Form, 1, False, False)
如果重生锚点标记
RebirthAnchorMarker.MoveTo(SpellCenter, 0.0, 0.0, 10.0, True)
GoToState("残留监测")
EndIf
EndIf

Self.MoveTo(SpellCenter, 0 As Float, 0 As Float, 10000 As Float, True)
SpellCenter.PlaceAtMe(fakeForceBall1024ByFormula As Form, 1, False, False)
ExplosionLight.Delete()
ExplosionLight2.Delete()
Self.MoveTo(SpellCenter, 0.000000, 0.000000, 0.000000, True)
Self.PlayImpactEffect(MAGShockStorm01ImpactSet, "BODY", 0 As Float, 0 As Float, -1 As Float, 512 As Float, False, False)

若发出荧光
GlowLight.Delete()
EndIf
如果球状闪电
BallLightning.Disable(1 为 布尔值)
EndIf
如果火球等离子核心
FireballPlasmaCore.Disable(1 As Bool)
EndIf
如果进入维度裂隙
维度裂隙.禁用(1 As Bool)
EndIf
若闪耀
Glow.Disable(1 As Bool)
结束如果
SpellCenter.Delete()
EndIf

Utility.Wait(2 As Float)
如果球状闪电
球形闪电.Delete()
EndIf
如果火焰球等离子核心
火球等离子核心.Delete()
EndIf
如果进入维度裂隙
维度裂缝。删除()
EndIf
如果有微光
Glow.Delete()
EndIf
如果烟雾弹
SmokeBall.Disable(1 As Bool)
Utility.Wait(2 As Float)
烟雾弹.删除()
结束如果

如果闪电球克隆体1
BallLightningClone1.Delete()
EndIf
如果闪电球克隆体2
BallLightningClone2.Delete()
EndIf
如果闪电克隆体3
BallLightningClone3.Delete()
EndIf
如果闪电克隆体4
BallLightningClone4.Delete()
EndIf
若恢复宝珠
恢复宝珠.Delete()
EndIf
如果有机会石
改造宝珠.Delete()
EndIf
如果吸收法球
AbsorbOrb.Delete()
EndIf
如果召唤法球
召唤宝珠.Delete()
EndIf
如果空灵珠
虚空法球.Delete()
EndIf

如果GetState() != "ResidualMonitoring"
自身.删除()
EndIf
Debug.Trace(Self As String + ": 清理完成!", 0)
结束函数

函数 OnDead(角色 akKiller)
StillAlive = False
结束函数

函数 ProcessSingularityGravMath()
如果 !BlastingAway || !StillAlive || !BallLightning || !SpellCenter
返回
EndIf

ObjectReference[] SearchNodes = new ObjectReference[14]
SearchNodes[0] = 球形闪电
SearchNodes[1] = SpellCenter
Int n = 0
当 n < 12 时
如果BorderPoints.Length大于n
SearchNodes[n+2] = BorderPoints[n]
EndIf
n += 1
结束循环

Int sweepCount = 0
当sweepCount < 14时
ObjectReference OriginNode = SearchNodes[sweepCount]

如果起源节点
Actor FoundTarget = Game.FindRandomActorFromRef(OriginNode, DynamicGravityRange)

若发现目标 且 目标不是自身角色 且 目标不是玩家
Bool TargetIsSafe = False
如果FoundTarget是玩家队友()
TargetIsSafe = True
否则如果FoundTarget与玩家的派系关系>=1且FoundTarget不敌视玩家
TargetIsSafe = True
EndIf

如果目标不安全
如果CapturedActors.Find(FoundTarget) < 0
Int emptySlot = CapturedActors.Find(None)
如果空槽位 >= 0
CapturedActors[emptySlot] = FoundTarget
结束如果
EndIf
EndIf
EndIf
结束如果
sweepCount += 1
结束当

Float CoreX = BallLightning.GetPositionX()
Float CoreY = BallLightning.GetPositionY()
浮动核心Z = 球形闪电位置Z + 15.0

Int iTarget = 0
当iTarget小于CapturedActors的长度时
Actor 物理目标 = 捕获的角色[iTarget]

如果物理目标
浮动 到核心的距离 = 球形闪电.获取距离(物理目标作为对象引用)

如果距离核心的距离大于动态重力范围
PhysicsTarget.StopTranslation()
CapturedActors[iTarget] = None
否则
如果PhysicsTarget已死亡
如果 ProcessedCorpses.Find(PhysicsTarget) < 0
如果ProcessedCount < ProcessedCorpses.Length
ProcessedCorpses[ProcessedCount] = PhysicsTarget
ProcessedCount += 1
EndIf

ExtraTicksEarned += 150
DamageMultiplier += 0.35

Int CurrentLevel = Player.GetLevel()

Int MinScaling = CurrentLevel
如果最小缩放比例 > 85
MinScaling = 85
EndIf

Int MaxScaling = 40 + (CurrentLevel * 2)
如果 MaxScaling > 100
MaxScaling = 100
EndIf

Float StaticRollMult = (Utility.RandomInt(10, 100) As Float) / 100.0
Float ScalingRollMult = (Utility.RandomInt(MinScaling, MaxScaling) As Float) / 100.0

Float TotalMult = StaticRollMult + ScalingRollMult
浮点 最大魔法值 = Player.GetBaseActorValue("魔法值")
Float MagickaToRestore = MaxMagicka * TotalMult

Player.RestoreActorValue("Magicka", MagickaToRestore)

如果奇点风暴爆炸
BallLightning.PlaceAtMe(SingularityStormExplosion As Form, 1, False, False)
EndIf

如果施放法术爆炸
SpellExplosion.Cast(BallLightning, None)
EndIf

如果MAGShockAshPileObj存在,且(没有禁用灰烬堆的魔法效果,或物理目标不具有禁用灰烬堆的关键字)
如果 Utility.RandomInt(1, 100) <= 60
PhysicsTarget.SetCriticalStage(PhysicsTarget.CritStage_DisintegrateStart)
PhysicsTarget.SetAlpha(0.0, True)
PhysicsTarget.AttachAshPile(MAGShockAshPileObj)
PhysicsTarget.SetCriticalStage(PhysicsTarget.CritStage_DisintegrateEnd)
EndIf
EndIf
结束如果
EndIf

; --- 绝对猎杀(非致命矩阵) ---
如果距离核心 <= (50.0 * 质量修正)
如果 !PhysicsTarget.IsDead()
如果PhysicsTarget.GetActorValue("Stamina") > 0.0
PhysicsTarget.DamageActorValue("耐力", 9999.0)
结束如果
EndIf

Float OffsetX = CoreX + Utility.RandomFloat(-45.0, 45.0)
Float OffsetY = CoreY + Utility.RandomFloat(-45.0, 45.0)
Float 偏移Z = CoreZ + Utility.RandomFloat(-10.0, 60.0)

PhysicsTarget.TranslateTo(OffsetX, OffsetY, OffsetZ, PhysicsTarget.GetAngleX(), PhysicsTarget.GetAngleY(), PhysicsTarget.GetAngleZ(), 1040.0, 0.0)
否则
Float PullSpeed = 1560.0 * (1.5 - (DistanceToCore / DynamicGravityRange))
如果拉取速度 < 260.0
PullSpeed = 260.0
结束如果

PhysicsTarget.TranslateTo(CoreX, CoreY, CoreZ, PhysicsTarget.GetAngleX(), PhysicsTarget.GetAngleY(), PhysicsTarget.GetAngleZ(), PullSpeed, 0.0)

如果 !PhysicsTarget.IsDead()
如果 PhysicsTarget.GetActorValue("Stamina") > 0.0
PhysicsTarget.DamageActorValue("Stamina", 9999.0)
PhysicsTarget.PushActorAway(PhysicsTarget, 0.1)
EndIf
EndIf
EndIf
EndIf
EndIf
iTarget += 1
结束当

如果魔法中心 && 元素杂物真空爆炸
SpellCenter.PlaceAtMe(ELEMClutterVacuumExplosion As Form, 1, False, False)
结束如果

如果是闪电球
球状闪电.击退范围效果(-8.0, 动态重力范围)
结束如果

如果施法中心
Self.KnockAreaEffect(-0.95, DynamicDoubleRange * 1.5)
结束如果
结束函数

Function OnUpdate()
如果正在爆破逃离
处理奇点引力数学()

如果 BorderPoints.Length > 0 且 BorderPoints[0] 不为空
SpellBorder.Cast(BorderPoints[Utility.RandomInt(0, BorderPoints.Length - 1)], Game.FindRandomActorFromRef(Player, DynamicDoubleRange) As ObjectReference)
EndIf

Delay += 0.0100000
Timer += 1

Int RandomX = Utility.RandomInt(-Radius, Radius)
Int RandomY = Utility.RandomInt(-Radius, Radius)
如果TargetPoints.Length > 0 且 TargetPoints[0] != None
TargetPoints[Utility.RandomInt(0, TargetPoints.Length - 1)].MoveTo(BallLightning, RandomX As Float, RandomY As Float, Utility.RandomInt(0, Radius * 2) As Float, True)
结束如果

Self.RegisterForSingleUpdate(0.0 As Float)
EndIf
EndFunction

function OnInit()
Player = Game.GetPlayer()
TargetPoints = New ObjectReference[13]
SourcePoints = New ObjectReference[13]
Spinners = New Actor[12]
BorderPoints = New ObjectReference[12]

CapturedActors = 新演员[36]

rPosX = New Float[12]
rPosY = New Float[12]
半径 = 效果范围 / 2

ProcessedCorpses = New Actor[50]
ProcessedCount = 0

Int PlayerLevel = Player.GetLevel()
基础伤害 = 25 + (玩家等级 * 2)

如果玩家等级 > 30
BaseMaxTicks = 300 + ((PlayerLevel - 30) * 5)
EndIf

如果玩家拥有“毁灭大师”技能
PlayerMagickaDamage = 48
PlayerMagickaDrain = 12
否则
PlayerMagickaDamage = 80
PlayerMagickaDrain = 20   
EndIf
EndFunction

函数 OnCamp(角色 akKiller)
结束函数

函数 OnDying(Actor akKiller)
Debug.Trace(Self As String + ": 濒死!", 0)
StillAlive = False
如果 !CleanedUp
Self.Cleanup()
EndIf
EndFunction

Function OnLoad()
Debug.Trace(Self As String + ": 已加载!", 0)

Int CurrentPlayerLevel = Player.GetLevel()

; --- 大规模变异掷骰 ---
Int MassRoll = Utility.RandomInt(1, 100)
如果MassRoll <= 50
MassModifier = 1.0
否则如果 质量掷骰 <= 85
MassModifier = 1.5
否则如果质量掷点小于等于98
MassModifier = 2.0
否则
MassModifier = 3.0 ; 大奖异常
EndIf

; --- 动态等级缩放 ---
浮点数 等级上限 = 当前玩家等级 转换为浮点数
如果等级上限 > 80.0
LevelCap = 80.0
结束如果

浮动 等级乘数 = 1.0 + (等级上限 / 80.0)

DynamicGravityRange = (AreaOfEffect As Float * 3.5) * LevelMultiplier * MassModifier
DynamicDoubleRange = (AreaOfEffect As Float * 1.5) * LevelMultiplier * MassModifier
DamageMultiplier = 1.0 * MassModifier

Self.SetGhost(True)           
Self.EnableAI(False)
Self.SetAlpha(0 As Float, False)
Self.SetPlayerTeammate(True, True)

Self.ApplyHavokImpulse(0.0, 0.0, 1.0, 1.0)

Form SmokeBallForm = FXSmokeSmokeLg1x1.GetBaseObject()
PosX = Self.GetPositionX()
PosY = Self.GetPositionY()
PosZ = Self.GetPositionZ()

Self.AddSpell(SpellImpact, False)
Self.AddSpell(SpellBorder, False)
Self.AddSpell(SpellAttack, False)
Self.AddSpell(SpellExplosion, False)
Self.AddSpell(SpellAbility, False)

SpellCenter = Self.PlaceAtMe(ActivatorExtra As Form, 1, False, False)
Self.KnockAreaEffect(0.100000, DynamicDoubleRange)

AngleOffset = 360 / BorderPoints.Length
Int i = 0
当 i < BorderPoints.Length 且 StillAlive 为真时
BorderPoints[i] = Self.PlaceAtMe(ActivatorExtra As Form, 1, False, False)
rPosX[i] = Math.Cos(((Angle + AngleOffset * i) % 360) As Float) * (250.0 * MassModifier)
rPosY[i] = Math.Sin(((Angle + AngleOffset * i) % 360) As Float) * (250.0 * MassModifier)
BorderPoints[i].MoveTo(Self As ObjectReference, rPosX[i], rPosY[i], 10 As Float, True)
i += 1
结束循环
i = 0
当i < TargetPoints.Length且StillAlive为真时
TargetPoints[i] = Self.PlaceAtMe(ActivatorExtra As Form, 1, False, False)
i += 1
EndWhile
Self.MoveTo(SpellCenter, 0 As Float, 0 as Float, BallHeight As Float, True)
i = 0
当 i < SourcePoints.Length 且 StillAlive 为布尔值时
SourcePoints[i] = Self.PlaceAtMe(ActivatorExtra As Form, 1, False, False)
i += 1
结束While
Actor Target = None
ObjectReference oTarget = None
Self.SetScale(0.100000)
ScrollRunning.Cast(Self As ObjectReference, None)
i = 0
Int j = 0

当 i < 6 且 StillAlive 为真时
j = i % BorderPoints.Length
目标 = 游戏.从引用中查找随机角色(玩家, 动态双精度范围)

如果目标不存在 || 目标已死亡 || 目标为玩家 || 目标是子项 || 目标正在流血倒下 || 目标为自身 || 目标对玩家的派系反应 > 1 || 目标对玩家不怀有敌意
oTarget = SpellCenter
如果BorderPoints[j]
SpellImpact.RemoteCast(BorderPoints[j], Player, oTarget)
EndIf
否则
oTarget = 目标 作为 ObjectReference
如果BorderPoints[j]
SpellAttack.RemoteCast(BorderPoints[j], Player, oTarget)
EndIf
EndIf
Utility.Wait(0.0200000)
i += 1
结束循环

SpellCenter.MoveTo(SpellCenter, 0 As Float, 0 As Float, 50 As Float, True)
SpellCenter.PlaceAtMe(ExplosionShockStorm01 As Form, 1, False, False)
Glow = SpellCenter.PlaceAtMe(FXGlowFillRoundXBrt As Form, 1, False, False)
Glow.MoveTo(SpellCenter, 0 As Float, 0 As Float, 10 As Float, True)
GlowLight = SpellCenter.PlaceAtMe(LightBall As Form, 1, False, False)

BallLightning = SpellCenter.PlaceAtMe(MAGINVShockSpellArt As Form, 1, False, False)
BallLightning.SetScale(3.0 * MassModifier)
BallLightning.MoveTo(SpellCenter, 0 As Float, 0 As Float, -10 As Float, True)

BallLightningClone1 = SpellCenter.PlaceAtMe(MAGINVShockSpellArt As Form, 1, False, False)
BallLightningClone1.SetScale(2.8 * MassModifier)
BallLightningClone1.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)

BallLightningClone2 = SpellCenter.PlaceAtMe(MAGINVShockSpellArt As Form, 1, False, False)
BallLightningClone2.SetScale(2.5 * MassModifier)
BallLightningClone2.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)

BallLightningClone3 = SpellCenter.PlaceAtMe(MAGINVShockSpellArt As Form, 1, False, False)
BallLightningClone3.SetScale(2.2 * MassModifier)
BallLightningClone3.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)

BallLightningClone4 = SpellCenter.PlaceAtMe(MAGINVShockSpellArt As Form, 1, False, False)
BallLightningClone4.SetScale(1.9 * MassModifier)
BallLightningClone4.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)

如果MAGINVRestoreSpellArt
RestorationOrb = SpellCenter.PlaceAtMe(MAGINVRestoreSpellArt As Form, 1, False, False)
RestorationOrb.SetScale(2.5 * MassModifier)
RestorationOrb.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)
EndIf

如果MAGINVAlterationSpellArt
AlterationOrb = SpellCenter.PlaceAtMe(MAGINVAlterationSpellArt As Form, 1, False, False)
AlterationOrb.SetScale(2.3 * MassModifier)
AlterationOrb.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)
结束如果

如果MAGINVAbsorbSpellArt
AbsorbOrb = SpellCenter.PlaceAtMe(MAGINVAbsorbSpellArt As Form, 1, False, False)
AbsorbOrb.SetScale(2.1 * MassModifier)
AbsorbOrb.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)
结束如果

如果MAGINVConjurationSpellArt
ConjurationOrb = SpellCenter.PlaceAtMe(MAGINVConjurationSpellArt As Form, 1, False, False)
ConjurationOrb.SetScale(2.4 * MassModifier)
ConjurationOrb.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)
EndIf

如果MAGINVVoidSphereArt
VoidOrb = SpellCenter.PlaceAtMe(MAGINVVoidSphereArt As Form, 1, False, False)
VoidOrb.SetScale(3.8 * MassModifier)
VoidOrb.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 0.0 As Float, True)
结束如果

如果眼魔法裂隙特效
DimensionalRift = SpellCenter.PlaceAtMe(EyeOfMagnusRiftFX As Form, 1, False, False)
如果处于维度裂隙中
DimensionalRift.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, 15.0 As Float, True)
DimensionalRift.SetScale(1.8 * MassModifier)
维度裂隙。启用()
EndIf
结束如果

如果MAGINV火球术法术艺术
FireballPlasmaCore = SpellCenter.PlaceAtMe(MAGINVFireballSpellArt As Form, 1, False, False)
如果火焰球等离子核心
FireballPlasmaCore.SetScale(2.5 * MassModifier)
FireballPlasmaCore.MoveTo(SpellCenter, 0.0 As Float, 0.0 As Float, -5 As Float, True)
EndIf
EndIf

SmokeBall = SpellCenter.PlaceAtMe(SmokeBallForm, 1, False, False)

如果ELEM_SingularityTelekinesisSpell
ELEM_SingularityTelekinesisSpell.Cast(SpellCenter, SpellCenter)
结束如果

若为球状闪电
BallLightning.ApplyHavokImpulse(0.0, 0.0, 1.0, 1.0)
EndIf

BlastingAway = True

HumInstance = SoundBallLightningHum.Play(SpellCenter)
BuzzInstance = SoundBallLightningBuzz.Play(SpellCenter)
i = 0
Self.RegisterForSingleUpdate(1 As Float)
Self.SetScale(1 As Float)
Int RandomX = 0
Int RandomY = 0
j = 0
当 j < SourcePoints.Length 且仍然存活时
如果SourcePoints[j]
SourcePoints[j].MoveTo(SpellCenter, 0 As Float, 0 As Float, 0 As Float, True)
EndIf
如果目标点[j]存在
RandomX = Utility.RandomInt(-Radius, Radius)
RandomY = Utility.RandomInt(-Radius, Radius)
TargetPoints[j].MoveTo(SpellCenter, RandomX As Float, RandomY As Float, Utility.RandomInt(0, Radius * 2) As Float, True)
EndIf
j += 1
结束循环
j = 0
Debug.Trace(Self As String + ": 开始主循环……", 0)

当BlastingAway为真且玩家魔法值大于(玩家魔法消耗×质量修正)且StillAlive为真且当前循环计数小于(基础最大计数+额外获得计数)时
j = i % SourcePoints.Length

如果碎片环爆炸 && 随机整数(1, 100) <= 25
如果BorderPoints[j]
BorderPoints[j].PlaceAtMe(DebrisRingExplosion作为表单,1,假,假)
EndIf
EndIf

目标 = Game.FindRandomActorFromRef(玩家, 动态双精度范围)

Bool TargetIsSafe = False
如果目标 且 目标 != 玩家 且 目标 != 自身作为角色
如果目标.是玩家队友()
TargetIsSafe = True
否则如果目标对玩家的派系反应 >= 1 且目标不对玩家怀有敌意
TargetIsSafe = True
结束如果
EndIf

如果目标≠自身角色 && 目标≠无 && 目标≠玩家 && !目标已死亡() && !目标安全
如果 SpellCenter.GetDistance(目标 As ObjectReference) < DynamicDoubleRange 且 !目标.IsDead()

SpellImpact.Cast(Self As ObjectReference, Target As ObjectReference)
Target.AddSpell(MS04Blindness, False)
致盲目标 = 目标

如果球形闪电
如果连锁闪电法术 && 源点[j]
ChainLightningSpell.RemoteCast(SourcePoints[j], Player, Target As ObjectReference)
EndIf

如果雷霆法术
ThunderboltSpell.Cast(Self As ObjectReference, Target As ObjectReference)
EndIf

如果AE_ElementalFlamesSpell
AE_元素火焰法术.施放(自身作为对象引用,目标作为对象引用)
EndIf

如果闪电箭法术 && 源点[j]
如果 Utility.RandomInt(1, 100) <= 25
LightningBoltSpell.RemoteCast(SourcePoints[j], Player, Target As ObjectReference)
EndIf
EndIf

如果SpellCenter.GetDistance(目标作为对象引用) < (150.0 * 质量修正)

Float 总伤害施加 = (基础伤害 浮点 * 伤害倍率) * 0.15
目标.伤害角色属性("生命值", 总应用伤害)

如果近距离等离子爆破
CloseRangePlasmaBlast.RemoteCast(SpellCenter, Player, Target As ObjectReference)
结束如果
结束如果

如果SparksSpell && SourcePoints[j]
如果 Utility.RandomInt(1, 100) <= 40
SparksSpell.RemoteCast(SourcePoints[j], Player, Target As ObjectReference)
EndIf
EndIf

如果闪电风暴法术 && 源点[j]
如果IsBeamFiring
BeamDurationTicks += 1
LightningStormSpell.RemoteCast(SourcePoints[j], Player, Target As ObjectReference)

如果光束持续时间(以刻为单位)大于等于120
IsBeamFiring = False
BeamDurationTicks = 0
BeamCooldownTicks = Utility.RandomInt(150, 400)
EndIf
否则
如果光束冷却时间 > 0
BeamCooldownTicks -= 1
否则
如果 Utility.RandomInt(1, 100) <= 3
IsBeamFiring = True
BeamDurationTicks = 0
结束如果
EndIf
EndIf
结束如果
结束如果

如果存在风暴墙危险且激活器额外条件
ObjectReference GroundAnchor = Target.PlaceAtMe(ActivatorExtra As Form, 1, False, False)
如果地面锚点
GroundAnchor.MoveTo(Target, 0.0, 0.0, 0.0, True)
GroundAnchor.SetPosition(Target.GetPositionX(), Target.GetPositionY(), Player.GetPositionZ())
GroundAnchor.PlaceAtMe(WallOfStormsHazard As Form, 1, False, False)
工具.等待(0.1)
GroundAnchor.Delete()
EndIf
结束如果

EndIf

Self.SetAngle(0 As Float, 0 As Float, Self.GetAngleZ() + Self.GetHeadingAngle(Target As ObjectReference))

如果目标未死亡且(目标非关键角色或未处于流血濒死状态),且自身对目标有视线路径
oTarget = Target 作为 ObjectReference
如果 BlastingAway 为真 且 Player.GetAV("Magicka") > (PlayerMagickaDamage * MassModifier) 为浮点数
SpellCenter.PlaceAtMe(ExplosionShockStorm01 As Form, 1, False, False)
如果玩家拥有技能(Power1)
SpellCenter.KnockAreaEffect(0.100000, DynamicDoubleRange)
EndIf

如果SourcePoints[j]
SpellAttack.RemoteCast(SourcePoints[j], Player, oTarget)
否则
SpellAttack.RemoteCast(SpellCenter, Player, oTarget)
EndIf
Player.DamageActorValue("Magicka", (PlayerMagickaDamage * MassModifier) As Float)
结束如果
否则
如果TargetPoints的长度大于j,且SourcePoints的长度也大于j
oTarget = TargetPoints[j]
如果正在轰炸且SourcePoints[j]且oTarget
SpellBorder.Cast(SourcePoints[j], oTarget)
EndIf
EndIf
EndIf
否则
如果TargetPoints.Length > j && SourcePoints.Length > j
oTarget = TargetPoints[j]
如果BlastingAway && SourcePoints[j] && oTarget
SpellBorder.Cast(SourcePoints[j], oTarget)
EndIf
EndIf
EndIf

Utility.Wait(0.0100000)

Player.DamageActorValue("Magicka", (PlayerMagickaDrain * MassModifier) As Float)
CurrentLoopTicks += 1
i += 1
结束循环

如果闪电球克隆体1
BallLightningClone1.Delete()
EndIf
如果闪电克隆2
BallLightningClone2.Delete()
EndIf
如果闪电克隆体3
BallLightningClone3.Delete()
EndIf
如果闪电球克隆体4
BallLightningClone4.Delete()
EndIf
如果使用复原宝珠
RestorationOrb.Delete()
结束如果
如果有机会石
改造石.Delete()
EndIf
如果吸收法球
AbsorbOrb.Delete()
EndIf
若召唤宝珠
召唤法球。删除()
EndIf
如果虚空宝珠
虚空法球.Delete()
EndIf

Self.GetActorBase().SetInvulnerable(False)
Self.Kill(None)
Self.GetActorBase().SetInvulnerable(True)
EndFunction

Function OnUnload()
StillAlive = False
BlastingAway = False

如果!尚未清理
CleanedUp = True

Sound.StopInstance(HumInstance)
Sound.StopInstance(BuzzInstance)

Int c = 0
当 c < CapturedActors.Length 时
如果CapturedActors[c]
CapturedActors[c].StopTranslation()
EndIf
c += 1
结束循环

Int i = 0
当i < BorderPoints.Length时
如果BorderPoints[i]
BorderPoints[i].InterruptCast()
BorderPoints[i].Delete()
结束如果
i += 1
结束当

i = 0
while i < TargetPoints.Length
如果SourcePoints[i]存在
SourcePoints[i].InterruptCast()
SourcePoints[i].Delete()
结束如果
如果目标点[i]存在
TargetPoints[i].Delete()
EndIf
i += 1
EndWhile

若辉光照明
GlowLight.Delete()
EndIf
如果闪电球
球状闪电.Delete()
EndIf
如果火焰球等离子核心
火球等离子核心.Delete()
EndIf
如果传送门裂隙
维度裂隙。删除()
EndIf
如果发光
Glow.Delete()
EndIf
如果烟雾弹
SmokeBall.Delete()
EndIf
如果技能中心
SpellCenter.Delete()
结束如果

如果闪电弹克隆体1
BallLightningClone1.Delete()
EndIf
如果闪电球克隆体2
BallLightningClone2.Delete()
EndIf
如果球状闪电克隆体3
BallLightningClone3.Delete()
EndIf
如果闪电球克隆体4
BallLightningClone4.Delete()
EndIf
若使用复原宝珠
恢复宝珠.Delete()
EndIf
如果存在改变之球
改造宝珠.Delete()
EndIf
如果吸收法球
AbsorbOrb.Delete()
EndIf
如果召唤法球
召唤法球.Delete()
EndIf
如果VoidOrb
虚空宝珠.Delete()
EndIf

Self.Delete()
EndIf
结束函数

函数 OnTranslationComplete()
如果球高度 <= 50
轨道运行 = 假
BallHeight = 50
Self.MoveTo(SpellCenter, 0 As Float, 0 As Float, 50 As Float, True)
Utility.Wait(5 As Float)
BlastingAway = False
Utility.Wait(1 As Float)
自身删除()
EndIf
EndFunction

Function OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, Bool abPowerAttack, Bool abSneakAttack, Bool abBashAttack, Bool abHitBlocked)
EndFunction

状态残留监控
事件 OnBeginState()
RegisterForSingleUpdate(1.0)
Timer = 0
结束事件

Event OnUpdate()
如果 !RebirthAnchorMarker 或 计时器 >= 45
如果重生锚点标记
重生锚点标记.删除()
结束如果
自身删除()
返回
结束如果

Float DoubleRange = AreaOfEffect As Float * 2.0
Actor LocalCasualty = Game.FindRandomActorFromRef(RebirthAnchorMarker, DoubleRange)

如果本地伤亡单位 && 本地伤亡单位已死亡() && 本地伤亡单位 != 玩家
ObjectReference PhoenixSingularity = RebirthAnchorMarker.PlaceAtMe(Self.GetBaseObject(), 1, False, False)

如果凤凰奇点
如果奇点风暴爆炸
重生锚点标记.放置于自身(奇点风暴爆炸 作为 表单, 1, 假, 假)
EndIf
结束如果

重生锚点标记.删除()
自身。删除()
返回
EndIf

Timer += 1
RegisterForSingleUpdate(1.0)
结束事件
结束状态

上古卷轴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!