feat: titan bless reroll

This commit is contained in:
StopWuyu
2025-08-29 19:41:19 +08:00
parent 7ca4833ede
commit 377a5c44ef
6 changed files with 51 additions and 3 deletions

View File

@@ -144,11 +144,16 @@ public class RogueEventManager(PlayerInstance player, BaseRogueInstance rogueIns
if (dynamicAct != null)
await RogueEventActionExecutor.ExecuteActions(Rogue, eventInstance, dynamicAct.SelectActions);
if (eventInstance.EffectEventId.Count > 0)
option.OverrideSelected = false;
// send rsp
await Player.SendPacket(new PacketSyncRogueCommonDialogueOptionFinishScNotify(eventInstance));
option.IsSelected = true;
await Player.SendPacket(new PacketSelectRogueCommonDialogueOptionScRsp(eventInstance));
eventInstance.EffectEventId.Clear();
}
}

View File

@@ -215,6 +215,19 @@ public class RogueTournInstance : BaseRogueInstance
await UpdateMenu();
}
public async ValueTask HandleRerollTitanBless(int location)
{
if (RogueActions.Count == 0) return;
var action = RogueActions.First().Value;
if (action.RogueTitanBlessSelectMenu != null)
{
action.RogueTitanBlessSelectMenu.Reroll(); // reroll
await Player.SendPacket(
new PacketHandleRogueCommonPendingActionScRsp(action.QueuePosition, location,
titanMenu: action.RogueTitanBlessSelectMenu));
}
}
#endregion
#region Buff & Formula

View File

@@ -11,6 +11,8 @@ public class RogueTitanBlessSelectMenu(RogueTournInstance rogue)
{
public List<RogueTournTitanBlessExcel> Blesses { get; set; } = [];
public int QueueAppend { get; set; } = 3;
public int MaxRerollCount { get; set; } = 1;
public int CurRerollCount { get; set; } = 0;
public bool TypeSelect { get; set; }
public void RollTitanBless(int count = 3, bool typeSelect = false)
@@ -35,7 +37,14 @@ public class RogueTitanBlessSelectMenu(RogueTournInstance rogue)
RogueTitanCategoryEnum.Day && x.TitanBlessLevel == 1 &&
!rogue.RogueTitanBlessInstance.BlessTypeExcel.Contains(x)).ToList().RandomElement();
var other = GameData.RogueTournTitanBlessData.Values.Where(x => x.TitanBlessLevel == 1 &&
!rogue.RogueTitanBlessInstance
.BlessTypeExcel.Contains(x) &&
x != day && x != night).ToList()
.RandomElement();
list.Add(day);
list.Add(other);
list.Add(night);
}
@@ -55,6 +64,14 @@ public class RogueTitanBlessSelectMenu(RogueTournInstance rogue)
Blesses = result;
}
public void Reroll()
{
if (CurRerollCount >= MaxRerollCount) return;
CurRerollCount++;
RollTitanBless(Blesses.Count, TypeSelect);
}
public RogueActionInstance GetActionInstance()
{
rogue.CurActionQueuePosition += QueueAppend;
@@ -65,7 +82,6 @@ public class RogueTitanBlessSelectMenu(RogueTournInstance rogue)
};
}
public RogueTitanBlessSelectInfo ToProto()
{
return new RogueTitanBlessSelectInfo
@@ -74,7 +90,9 @@ public class RogueTitanBlessSelectMenu(RogueTournInstance rogue)
? TitanBlessSelectType.KSelectTitanBlessType
: TitanBlessSelectType.KSelectTitanBlessEnhance,
TitanBlessIdList = { Blesses.Select(x => (uint)x.TitanBlessID) },
SelectHintId = (uint)(TypeSelect ? 310001 : 310002)
SelectHintId = (uint)(TypeSelect ? 310001 : 310002),
MaxRerollCount = (uint)MaxRerollCount,
CurRerollCount = (uint)CurRerollCount
};
}
}

View File

@@ -41,6 +41,9 @@ public class HandlerHandleRogueCommonPendingActionCsReq : Handler
await tournInstance3.HandleTitanBlessSelect((int)req.TitanBlessSelectEnhanceResult.SelectTitanBlessId,
(int)req.QueueLocation);
if (req.TitanBlessRerollResult != null && rogue is RogueTournInstance tournInstance4)
await tournInstance4.HandleRerollTitanBless((int)req.QueueLocation);
if (req.MagicUnitSelectResult != null && rogue is RogueMagicInstance magic)
await magic.HandleMagicUnitSelect(req.MagicUnitSelectResult.SelectMagicUnit, (int)req.QueueLocation);

View File

@@ -1,5 +1,6 @@
using EggLink.DanhengServer.Enums.RogueMagic;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.RogueMagic;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
@@ -23,5 +24,6 @@ public class HandlerRogueMagicEnterRoomCsReq : Handler
await inst.EnterRoom((int)(req.CurRoomIndex + 1), (RogueMagicRoomTypeEnum)req.NextRoomType);
await connection.SendPacket(new PacketRogueMagicEnterRoomScRsp(Retcode.RetSucc, inst));
await connection.SendPacket(new PacketEnterSceneByServerScNotify(connection.Player!.SceneInstance!));
}
}

View File

@@ -1,4 +1,5 @@
using EggLink.DanhengServer.GameServer.Game.Rogue.Buff;
using EggLink.DanhengServer.GameServer.Game.RogueTourn.Titan;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
@@ -10,7 +11,7 @@ public class PacketHandleRogueCommonPendingActionScRsp : BasePacket
bool selectMiracle = false, bool selectBonus = false, bool selectFormula = false,
bool reforgeBuff = false, bool selectMagicUnit = false, bool selectScepter = false,
bool selectTitanBlessEnhance = false, bool selectTitanBlessType = false,
RogueBuffSelectMenu? menu = null) : base(
RogueBuffSelectMenu? menu = null, RogueTitanBlessSelectMenu? titanMenu = null) : base(
CmdIds.HandleRogueCommonPendingActionScRsp)
{
var proto = new HandleRogueCommonPendingActionScRsp
@@ -43,6 +44,12 @@ public class PacketHandleRogueCommonPendingActionScRsp : BasePacket
BuffSelectInfo = menu.ToProto()
};
if (titanMenu != null)
proto.TitanBlessRerollCallback = new RogueTitanBlessRerollCallback
{
TitanRerollInfo = titanMenu.ToProto()
};
SetData(proto);
}
}