SignalCircleConfig = SignalCircleConfig or {} -- 实际开始时间为前面所有圈的 delaytime + SafeZoneAppeartime + lasttime SignalCircleConfig.CircleList = { [1] = { { delaytime = 1; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 6; -- 提示即将缩圈的提示存在时间 lasttime = 7; -- 缩圈的时间 blueradius = 30000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 14000; -- 白圈半径,即蓝圈缩至的大小 pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, { delaytime = 5; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 50; -- 提示即将缩圈的提示存在时间 lasttime = 30; -- 缩圈的时间 blueradius = 14000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 8000; -- 白圈半径,即蓝圈缩至的大小 pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, { delaytime = 10; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 40; -- 提示即将缩圈的提示存在时间 lasttime = 20; -- 缩圈的时间 blueradius = 8000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 2000; -- 白圈半径,即蓝圈缩至的大小 pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, { delaytime = 5; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 15; -- 提示即将缩圈的提示存在时间 lasttime = 10; -- 缩圈的时间 blueradius = 2000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 1; -- 白圈半径,即蓝圈缩至的大小 pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, }, [2] = { { delaytime = 1; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 6; -- 提示即将缩圈的提示存在时间 lasttime = 7; -- 缩圈的时间 blueradius = 20000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 8000; -- 白圈半径,即蓝圈缩至的大小 pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, { delaytime = 5; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 50; -- 提示即将缩圈的提示存在时间 lasttime = 30; -- 缩圈的时间 blueradius = 8000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 4000; -- 白圈半径,即蓝圈缩至的大小 pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, { delaytime = 10; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 40; -- 提示即将缩圈的提示存在时间 lasttime = 20; -- 缩圈的时间 blueradius = 4000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 1000; -- 白圈半径,即蓝圈缩至的大小 pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, { delaytime = 5; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 15; -- 提示即将缩圈的提示存在时间 lasttime = 10; -- 缩圈的时间 blueradius = 1000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 1; -- 白圈半径,即蓝圈缩至的大小 pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, }, [3] = { -- 攻楼用 { delaytime = 3; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 3; -- 提示即将缩圈的提示存在时间 lasttime = 7; -- 缩圈的时间 blueradius = 3500; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 3000; -- 白圈半径,即蓝圈缩至的大小 pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, { delaytime = 120; -- 激活该缩圈的延迟时间 SafeZoneAppeartime = 30; -- 提示即将缩圈的提示存在时间 lasttime = 30; -- 缩圈的时间 blueradius = 3000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致 whiteradius = 0; -- 白圈半径,即蓝圈缩至的大小 pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害 }, } } --- 注册缩圈信息,必须注册了才能缩圈,不然可能会出现问题 ---@param GMDataSourcePoisonCircleIndex GameMode-DataManager-GMDataManager-DataSources中配置的GMDataSourcePoisonCircle对应的索引,这里会自动+1,所以对应蓝图中的索引即可 ---@param CenterPoint FVector2D 毒圈的中心点位 ---@param RandomCircle bool 是否为随机毒圈 ---@param CircleIndex int 默认为1,使用的毒圈配置的索引,对应CircleList function SignalCircleConfig.RegisterCircleInfo(GMDataSourcePoisonCircleIndex, CenterPoint, RandomCircle, CircleIndex) --- 设置参数 -- 索引 SignalCircleConfig.SourcesIndex = GMDataSourcePoisonCircleIndex + 1 -- 中心点 SignalCircleConfig.CenterPoint = CenterPoint -- 使用的毒圈配置类型 SignalCircleConfig.UseCircleIndex = CircleIndex and CircleIndex or 1 -- 是否为随机毒圈 SignalCircleConfig.IsRandomCircle = RandomCircle -- 激活毒圈的次数 SignalCircleConfig.ActiveCircleCount = 0 end --- 执行缩圈 --- 若为随机毒圈则这里会自动获取一个新的毒圈 function SignalCircleConfig.TogglePoisonCircle() -- 配置一个新毒圈 SignalCircleConfig.UpdateNewCircleData() -- 开始缩圈 UGCBlueprintFunctionLibrary.TogglePoisonCircle(UGCGameSystem.GameState, true); -- 增加一次使用毒圈的次数 SignalCircleConfig.ActiveCircleCount = SignalCircleConfig.ActiveCircleCount + 1 end function SignalCircleConfig.UpdateNewCircleData() -- 如果非随机毒圈且已配置过一次则不再进行配置 if not SignalCircleConfig.IsRandomCircle and SignalCircleConfig.ActiveCircleCount > 0 then return end -- 清空毒圈配置 UGCGameSystem.GameMode.DataManager.DataSources[SignalCircleConfig.SourcesIndex].CircleConfigs:Empty() -- 配置毒圈 local CircleCenterPoint = SignalCircleConfig.CenterPoint for CircleLayer, CircleInfo in pairs(SignalCircleConfig.CircleList[SignalCircleConfig.UseCircleIndex]) do local NewCirCleCfg = SignalCircleConfig.NewCirCleCfgStruct() -- 拷贝参数 for ParamName, ParamVal in pairs(CircleInfo) do NewCirCleCfg[ParamName] = ParamVal end -- 设置使用自定义白圈 NewCirCleCfg.bUseCustomWhitePoint = true -- 设置自定义蓝圈 NewCirCleCfg.bUseCustomBluePoint = true -- 设置蓝圈中心 NewCirCleCfg.bluepoint = {X = CircleCenterPoint.X, Y = CircleCenterPoint.Y} -- 判断是否要对毒圈的中心点进行随机设置 if SignalCircleConfig.IsRandomCircle and CircleLayer > 1 then -- 获取可进行随机的偏移 local RandomDeviation = CircleInfo.blueradius - CircleInfo.whiteradius --local AddRandomX = RandomDeviation * math.random() * 2 - RandomDeviation --local AddRandomY = RandomDeviation * math.random() * 2 - RandomDeviation ---- 设置中心偏移 --CircleCenterPoint = VectorHelper.Add2D(CircleCenterPoint, {X = AddRandomX, Y = AddRandomY} ) CircleCenterPoint = math.RandomCirclePoint(RandomDeviation, CircleCenterPoint) end -- 设置目标白圈的中心 NewCirCleCfg.whitepoint = {X = CircleCenterPoint.X, Y = CircleCenterPoint.Y} UGCLogSystem.LogTree("[SignalCircleConfig_UpdateNewCircleData] NewCirCleCfg:", UE.ToTable(NewCirCleCfg)) -- 加入GM的毒圈设置 UGCGameSystem.GameMode.DataManager.DataSources[SignalCircleConfig.SourcesIndex].CircleConfigs:Add(NewCirCleCfg) end end function SignalCircleConfig.NewCirCleCfgStruct() return UE.CreateStruct("CirCleCfg") end