mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
fix: tourn rogue room id
This commit is contained in:
@@ -13,6 +13,9 @@ public class RogueTournRoomConfig
|
||||
|
||||
public int AnchorGroup { get; set; }
|
||||
public int AnchorId { get; set; }
|
||||
public uint SingleRoomId { get; set; }
|
||||
public uint DoubleRoomId { get; set; }
|
||||
public uint TripleRoomId { get; set; }
|
||||
|
||||
public List<int> DefaultLoadBasicGroup { get; set; } = [];
|
||||
public List<int> DefaultLoadGroup { get; set; } = [];
|
||||
@@ -29,6 +32,9 @@ public class RogueTournRoomConfig
|
||||
DefaultLoadBasicGroup = DefaultLoadBasicGroup,
|
||||
DefaultLoadGroup = DefaultLoadGroup,
|
||||
EntranceId = EntranceId,
|
||||
TripleRoomId = TripleRoomId,
|
||||
SingleRoomId = SingleRoomId,
|
||||
DoubleRoomId = DoubleRoomId,
|
||||
SubMonsterGroup = SubMonsterGroup
|
||||
};
|
||||
}
|
||||
|
||||
@@ -410,7 +410,7 @@ public class RogueTournInstance : BaseRogueInstance
|
||||
{
|
||||
ENNPJGLCBEM = new FKOCBOOCDNL
|
||||
{
|
||||
POIIAIAKILF = (uint)TitanType
|
||||
POIIAIAKILF = 1
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
using EggLink.DanhengServer.Data;
|
||||
using EggLink.DanhengServer.Data.Custom;
|
||||
using EggLink.DanhengServer.Enums.Rogue;
|
||||
using EggLink.DanhengServer.Enums.TournRogue;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
using EggLink.DanhengServer.Util;
|
||||
using System;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.RogueTourn.Scene;
|
||||
|
||||
@@ -13,6 +15,7 @@ public class RogueTournRoomInstance(int roomIndex, RogueTournLevelInstance level
|
||||
public RogueTournRoomStatus Status { get; set; } = RogueTournRoomStatus.None;
|
||||
public RogueTournLevelInstance LevelInstance { get; set; } = levelInstance;
|
||||
public RogueTournRoomTypeEnum RoomType { get; set; }
|
||||
public RogueTournVariantTypeEnum VariantType { get; set; }
|
||||
|
||||
public RogueTournRoomConfig? Config { get; set; }
|
||||
|
||||
@@ -28,11 +31,21 @@ public class RogueTournRoomInstance(int roomIndex, RogueTournLevelInstance level
|
||||
|
||||
public void Init(RogueTournRoomTypeEnum type)
|
||||
{
|
||||
if (Status == RogueTournRoomStatus.Processing || Status == RogueTournRoomStatus.Finish)
|
||||
if (Status is RogueTournRoomStatus.Processing or RogueTournRoomStatus.Finish)
|
||||
return; // already initialized
|
||||
|
||||
RoomType = type;
|
||||
VariantType = type switch
|
||||
{
|
||||
RogueTournRoomTypeEnum.Battle => RoomIndex == 1 ? RogueTournVariantTypeEnum.BattleTriple : RogueTournVariantTypeEnum.BattleDouble,
|
||||
RogueTournRoomTypeEnum.Event => RogueTournVariantTypeEnum.EventTriple,
|
||||
RogueTournRoomTypeEnum.Encounter => RogueTournVariantTypeEnum.EncounterDouble,
|
||||
RogueTournRoomTypeEnum.Reward => RogueTournVariantTypeEnum.RewardDouble,
|
||||
_ => RogueTournVariantTypeEnum.None
|
||||
};
|
||||
|
||||
Status = RogueTournRoomStatus.Processing;
|
||||
|
||||
// get config
|
||||
Config = RoomType == RogueTournRoomTypeEnum.Adventure
|
||||
? GameData.RogueTournRoomGenData.Where(x => x.RoomType == RoomType).ToList().RandomElement()
|
||||
@@ -46,7 +59,29 @@ public class RogueTournRoomInstance(int roomIndex, RogueTournLevelInstance level
|
||||
return;
|
||||
}
|
||||
|
||||
RoomId = GameData.RogueTournRoomData.Where(x => x.Value.RogueRoomType == RoomType).Select(x => x.Key).ToList()
|
||||
// get room id (unique)
|
||||
var entryIdSuffix = (Config?.EntranceId ?? 0) % 1000;
|
||||
var suffix = entryIdSuffix * 100 + 20 + LevelInstance.LevelIndex;
|
||||
|
||||
var sameTypeExcels = GameData.RogueTournRoomData.Where(x =>
|
||||
x.Value.RogueRoomType == RoomType && x.Key.ToString().EndsWith(suffix.ToString())).ToArray();
|
||||
|
||||
if (sameTypeExcels.Length == 0)
|
||||
{
|
||||
suffix -= LevelInstance.LevelIndex;
|
||||
|
||||
sameTypeExcels = GameData.RogueTournRoomData.Where(x =>
|
||||
x.Value.RogueRoomType == RoomType && x.Key.ToString().EndsWith(suffix.ToString())).ToArray();
|
||||
}
|
||||
|
||||
sameTypeExcels = sameTypeExcels.Where(x => LevelInstance.Rooms.All(r => r.RoomId != x.Key)).ToArray(); // unique
|
||||
|
||||
var sameVariantTypeExcels = sameTypeExcels.Where(x => x.Value.VariantType == VariantType).ToArray();
|
||||
if (sameVariantTypeExcels.Length > 0)
|
||||
sameTypeExcels = sameVariantTypeExcels;
|
||||
|
||||
RoomId = sameTypeExcels.Select(x => x.Key)
|
||||
.ToList()
|
||||
.RandomElement();
|
||||
}
|
||||
|
||||
@@ -54,7 +89,12 @@ public class RogueTournRoomInstance(int roomIndex, RogueTournLevelInstance level
|
||||
{
|
||||
var groupList = new List<int>();
|
||||
groupList.AddRange(Config!.DefaultLoadBasicGroup);
|
||||
groupList.AddRange(Config.DefaultLoadGroup);
|
||||
if (VariantType.ToString().Contains("Double"))
|
||||
groupList.AddRange(Config.DefaultLoadGroup.Take(2));
|
||||
else if (VariantType.ToString().Contains("Single"))
|
||||
groupList.AddRange(Config.DefaultLoadGroup.Take(1));
|
||||
else
|
||||
groupList.AddRange(Config.DefaultLoadGroup);
|
||||
|
||||
//if (RoomIndex == 1) // first room
|
||||
groupList.AddRange(Config.SubMonsterGroup);
|
||||
|
||||
@@ -12,6 +12,26 @@ public static class TournRoomGenerator
|
||||
public static List<int> AllowedFloorIdList { get; set; } = [80601001, 80602001, 80603001, 80604001];
|
||||
public static List<RogueTournRoomConfig> SavedRoomInstanceList { get; set; } = [];
|
||||
|
||||
#region Prefix
|
||||
|
||||
public static Dictionary<RogueTournRoomTypeEnum, List<int>> RoomPrefix { get; set; } = new()
|
||||
{
|
||||
{ RogueTournRoomTypeEnum.Battle, [0, 120300000, 1120300000] },
|
||||
{ RogueTournRoomTypeEnum.Event, [620500000, 320500000, 1120500000] },
|
||||
{ RogueTournRoomTypeEnum.Encounter, [420400000, 120400000, 0] },
|
||||
{ RogueTournRoomTypeEnum.Reward, [420800000, 120800000, 0] },
|
||||
{ RogueTournRoomTypeEnum.Coin, [620600000, 0, 0] } // 20
|
||||
};
|
||||
|
||||
public static Dictionary<RogueTournRoomTypeEnum, List<int>> RoomFloorDiffPrefix { get; set; } = new()
|
||||
{
|
||||
{ RogueTournRoomTypeEnum.Boss, [320100000, 320100000, 220100000, 220100000] },
|
||||
{ RogueTournRoomTypeEnum.Respite, [321000000, 321000000, 221000000, 221000000] }, // 20
|
||||
{ RogueTournRoomTypeEnum.Elite, [320200000, 320200000, 220200000, 220200000] },
|
||||
{ RogueTournRoomTypeEnum.Shop, [320700000, 320700000, 220700000, 220700000] } // 20
|
||||
};
|
||||
|
||||
#endregion
|
||||
public static void GenerateFile(string path)
|
||||
{
|
||||
// get floor info
|
||||
@@ -31,7 +51,7 @@ public static class TournRoomGenerator
|
||||
{
|
||||
if (areaGroupId > 0 && baseModuleId > 0 && contentGroupId.Count > 0)
|
||||
foreach (var group in contentGroupId)
|
||||
FlushRoom(GameData.MapEntranceData.First(x => x.Value.FloorID == floorId).Key, areaGroupId,
|
||||
FlushRoom(GameData.MapEntranceData.First(x => x.Value.FloorID == floorId).Key, floorId, areaGroupId,
|
||||
baseModuleId, group.Value, group.Key);
|
||||
|
||||
contentGroupId.Clear();
|
||||
@@ -44,7 +64,7 @@ public static class TournRoomGenerator
|
||||
{
|
||||
if (areaGroupId > 0 && baseModuleId > 0 && contentGroupId.Count > 0)
|
||||
foreach (var group in contentGroupId)
|
||||
FlushRoom(GameData.MapEntranceData.First(x => x.Value.FloorID == floorId).Key, areaGroupId,
|
||||
FlushRoom(GameData.MapEntranceData.First(x => x.Value.FloorID == floorId).Key, floorId, areaGroupId,
|
||||
baseModuleId, group.Value, group.Key);
|
||||
|
||||
contentGroupId.Clear();
|
||||
@@ -98,6 +118,10 @@ public static class TournRoomGenerator
|
||||
}
|
||||
}
|
||||
|
||||
// clear old file
|
||||
if (File.Exists(path))
|
||||
File.WriteAllText(path, "", Encoding.UTF8);
|
||||
|
||||
// save
|
||||
File.AppendAllText(path, JsonConvert.SerializeObject(SavedRoomInstanceList, Formatting.Indented),
|
||||
Encoding.UTF8);
|
||||
@@ -106,9 +130,22 @@ public static class TournRoomGenerator
|
||||
Logger.GetByClassName().Info($"Generated in {path} Successfully!");
|
||||
}
|
||||
|
||||
public static void FlushRoom(int entranceId, int areaGroupId, int baseGroupId, List<int> contentGroupIds,
|
||||
public static void FlushRoom(int entranceId, int floorId, int areaGroupId, int baseGroupId, List<int> contentGroupIds,
|
||||
RogueTournRoomTypeEnum type)
|
||||
{
|
||||
var prefix = RoomPrefix.GetValueOrDefault(type)?.LastOrDefault(x => x != 0);
|
||||
if (prefix == null)
|
||||
prefix = RoomFloorDiffPrefix.GetValueOrDefault(type)?[AllowedFloorIdList.IndexOf(floorId)];
|
||||
|
||||
var entryIdSuffix = entranceId % 1000;
|
||||
var roomId = prefix + entryIdSuffix * 100 + 20;
|
||||
if (roomId == null)
|
||||
{
|
||||
roomId = 0;
|
||||
Logger.GetByClassName().Error(
|
||||
$"Cannot find prefix for RoomType {type} at Floor {floorId} (EntranceId {entranceId})");
|
||||
}
|
||||
|
||||
SavedRoomInstanceList.Add(new RogueTournRoomConfig
|
||||
{
|
||||
AnchorGroup = baseGroupId,
|
||||
@@ -116,7 +153,8 @@ public static class TournRoomGenerator
|
||||
DefaultLoadBasicGroup = { areaGroupId, baseGroupId },
|
||||
DefaultLoadGroup = contentGroupIds,
|
||||
EntranceId = entranceId,
|
||||
RoomType = type
|
||||
RoomType = type,
|
||||
//RoomId = (uint)roomId
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user