mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 12:16:03 +08:00
feat: grid fight trait & pending actions
This commit is contained in:
@@ -39,7 +39,7 @@ public class CommandGrid : ICommand
|
||||
return;
|
||||
}
|
||||
|
||||
await inst.GetComponent<GridFightRoleComponent>().AddAvatar(roleId, tier);
|
||||
await inst.GetComponent<GridFightRoleComponent>().AddAvatar(roleId, tier, src:GridFightSrc.KGridFightSrcNone);
|
||||
await arg.SendMsg(I18NManager.Translate("Game.Command.Grid.AddedRole"));
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class CommandGrid : ICommand
|
||||
|
||||
var gold = arg.GetInt(0);
|
||||
|
||||
await inst.GetComponent<GridFightBasicComponent>().UpdateGoldNum(gold, true, GridFightSrc.KGridFightSrcNone);
|
||||
await inst.GetComponent<GridFightBasicComponent>().UpdateGoldNum(gold);
|
||||
await arg.SendMsg(I18NManager.Translate("Game.Command.Grid.UpdateGold", gold.ToString()));
|
||||
}
|
||||
}
|
||||
19
Common/Data/Excel/GridFightCombinationBonusExcel.cs
Normal file
19
Common/Data/Excel/GridFightCombinationBonusExcel.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("GridFightCombinationBonus.json")]
|
||||
public class GridFightCombinationBonusExcel : ExcelResource
|
||||
{
|
||||
public uint BonusID { get; set; }
|
||||
public List<uint> CombinationBonusList { get; set; } = [];
|
||||
public List<uint> BonusNumberList { get; set; } = [];
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
return (int)BonusID;
|
||||
}
|
||||
|
||||
public override void Loaded()
|
||||
{
|
||||
GameData.GridFightCombinationBonusData.TryAdd(BonusID, this);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,20 @@
|
||||
using EggLink.DanhengServer.Enums.GridFight;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("GridFightEquipment.json")]
|
||||
public class GridFightEquipmentExcel : ExcelResource
|
||||
{
|
||||
public uint ID { get; set; }
|
||||
public string EquipCategory { get; set; } = ""; // TODO use enum
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public GridFightEquipCategoryEnum EquipCategory { get; set; }
|
||||
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public GridFightEquipDressTypeEnum DressRule { get; set; }
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
|
||||
20
Common/Data/Excel/GridFightTraitBasicInfoExcel.cs
Normal file
20
Common/Data/Excel/GridFightTraitBasicInfoExcel.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("GridFightTraitBasicInfo.json")]
|
||||
public class GridFightTraitBasicInfoExcel : ExcelResource
|
||||
{
|
||||
public uint ID { get; set; }
|
||||
public uint SeasonID { get; set; }
|
||||
public List<uint> TraitEffectList { get; set; } = [];
|
||||
public List<uint> BEIDList { get; set; } = [];
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
return (int)ID;
|
||||
}
|
||||
|
||||
public override void Loaded()
|
||||
{
|
||||
GameData.GridFightTraitBasicInfoData.TryAdd(ID, this);
|
||||
}
|
||||
}
|
||||
20
Common/Data/Excel/GridFightTraitLayerExcel.cs
Normal file
20
Common/Data/Excel/GridFightTraitLayerExcel.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("GridFightTraitLayer.json")]
|
||||
public class GridFightTraitLayerExcel : ExcelResource
|
||||
{
|
||||
public uint TraitID { get; set; }
|
||||
public uint Layer { get; set; }
|
||||
public uint MazebuffID { get; set; }
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
return (int)TraitID;
|
||||
}
|
||||
|
||||
public override void Loaded()
|
||||
{
|
||||
GameData.GridFightTraitLayerData.TryAdd(TraitID, []);
|
||||
GameData.GridFightTraitLayerData[TraitID].TryAdd(Layer, this);
|
||||
}
|
||||
}
|
||||
@@ -107,6 +107,8 @@ public static class GameData
|
||||
|
||||
public static Dictionary<uint, GridFightRoleBasicInfoExcel> GridFightRoleBasicInfoData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightRoleStarExcel> GridFightRoleStarData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightCombinationBonusExcel> GridFightCombinationBonusData { get; private set; } =
|
||||
[];
|
||||
public static Dictionary<uint, GridFightDivisionInfoExcel> GridFightDivisionInfoData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightDivisionStageExcel> GridFightDivisionStageData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightEquipmentExcel> GridFightEquipmentData { get; private set; } = [];
|
||||
@@ -120,6 +122,8 @@ public static class GameData
|
||||
public static Dictionary<uint, GridFightPortalBuffExcel> GridFightPortalBuffData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightItemsExcel> GridFightItemsData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightTalentExcel> GridFightTalentData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightTraitBasicInfoExcel> GridFightTraitBasicInfoData { get; private set; } = [];
|
||||
public static Dictionary<uint, Dictionary<uint, GridFightTraitLayerExcel>> GridFightTraitLayerData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightSeasonTalentExcel> GridFightSeasonTalentData { get; private set; } = [];
|
||||
public static Dictionary<uint, Dictionary<uint, GridFightStageRouteExcel>> GridFightStageRouteData { get; private set; } = [];
|
||||
public static Dictionary<uint, GridFightNodeTemplateExcel> GridFightNodeTemplateData { get; private set; } = [];
|
||||
|
||||
16
Common/Enums/GridFight/GridFightEquipCategoryEnum.cs
Normal file
16
Common/Enums/GridFight/GridFightEquipCategoryEnum.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace EggLink.DanhengServer.Enums.GridFight;
|
||||
|
||||
public enum GridFightEquipCategoryEnum
|
||||
{
|
||||
None = 0,
|
||||
Basic = 1,
|
||||
Craftable = 2,
|
||||
Emblem = 3,
|
||||
Crown = 4,
|
||||
TraitSpecial = 5,
|
||||
Artifacts = 6,
|
||||
Radiant = 7,
|
||||
Support = 8,
|
||||
Other = 9,
|
||||
Material = 10
|
||||
}
|
||||
11
Common/Enums/GridFight/GridFightEquipDressTypeEnum.cs
Normal file
11
Common/Enums/GridFight/GridFightEquipDressTypeEnum.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace EggLink.DanhengServer.Enums.GridFight;
|
||||
|
||||
public enum GridFightEquipDressTypeEnum
|
||||
{
|
||||
DressRuleNotUnique = 0,
|
||||
DressRuleUnique = 1,
|
||||
DressRuleAllSlotEmpty = 2,
|
||||
DressRuleLeader = 3,
|
||||
DressRuleTraitOnly = 4,
|
||||
DressRuleUniqueAndExclusiveTrait = 5
|
||||
}
|
||||
@@ -14,17 +14,18 @@ public class BattleGridFightOptions(GridFightGameSectionInfo curSection, GridFig
|
||||
{
|
||||
public GridFightGameEncounterInfo Encounter { get; set; } = curSection.Encounters.RandomElement();
|
||||
public GridFightInstance Inst { get; set; } = inst;
|
||||
public GridFightRoleComponent AvatarComponent { get; set; } = inst.GetComponent<GridFightRoleComponent>();
|
||||
public GridFightRoleComponent RoleComponent { get; set; } = inst.GetComponent<GridFightRoleComponent>();
|
||||
public GridFightLevelComponent LevelComponent { get; set; } = inst.GetComponent<GridFightLevelComponent>();
|
||||
public GridFightBasicComponent BasicComponent { get; set; } = inst.GetComponent<GridFightBasicComponent>();
|
||||
public GridFightAugmentComponent AugmentComponent { get; set; } = inst.GetComponent<GridFightAugmentComponent>();
|
||||
public GridFightTraitComponent TraitComponent { get; set; } = inst.GetComponent<GridFightTraitComponent>();
|
||||
public GridFightGameSectionInfo CurSection { get; set; } = curSection;
|
||||
public PlayerInstance Player { get; set; } = player;
|
||||
|
||||
public void HandleProto(SceneBattleInfo proto, BattleInstance battle)
|
||||
{
|
||||
var avatars = AvatarComponent.GetForegroundAvatarInfos(0);
|
||||
var backAvatars = AvatarComponent.GetBackgroundAvatarInfos(BasicComponent.GetFieldCount());
|
||||
var avatars = RoleComponent.GetForegroundAvatarInfos();
|
||||
var backAvatars = RoleComponent.GetBackgroundAvatarInfos(BasicComponent.GetFieldCount());
|
||||
|
||||
var tempLineup = new LineupInfo
|
||||
{
|
||||
@@ -60,12 +61,12 @@ public class BattleGridFightOptions(GridFightGameSectionInfo curSection, GridFig
|
||||
{
|
||||
wave.Monsters.Select(x => new SceneMonster
|
||||
{
|
||||
MonsterId = x.MonsterID,
|
||||
MonsterId = x.Monster.MonsterID,
|
||||
ExtraInfo = new SceneMonsterExtraInfo
|
||||
{
|
||||
BattleGridFightInfo = new SceneMonsterGridFightInfo
|
||||
{
|
||||
Tier = Math.Max(1, x.MonsterTier)
|
||||
Tier = Math.Max(1, x.Tier)
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -73,7 +74,7 @@ public class BattleGridFightOptions(GridFightGameSectionInfo curSection, GridFig
|
||||
});
|
||||
}
|
||||
|
||||
foreach (var role in AvatarComponent.Data.Roles)
|
||||
foreach (var role in RoleComponent.Data.Roles)
|
||||
{
|
||||
if (!GameData.GridFightRoleStarData.TryGetValue(role.RoleId << 4 | role.Tier, out var roleConf)) continue;
|
||||
battle.BattleEvents.TryAdd((int)roleConf.BEID, new BattleEventInstance((int)roleConf.BEID, 5000));
|
||||
@@ -89,7 +90,7 @@ public class BattleGridFightOptions(GridFightGameSectionInfo curSection, GridFig
|
||||
{
|
||||
GridGameAvatarList =
|
||||
{
|
||||
AvatarComponent.Data.Roles.Where(x => x.Pos <= BasicComponent.GetFieldCount()).OrderBy(x => x.Pos).Select(x => x.ToBattleInfo())
|
||||
RoleComponent.Data.Roles.Where(x => x.Pos <= BasicComponent.GetFieldCount()).OrderBy(x => x.Pos).Select(x => x.ToBattleInfo())
|
||||
},
|
||||
GridFightCurLevel = BasicComponent.Data.CurLevel,
|
||||
GridFightLineupHp = BasicComponent.Data.CurHp,
|
||||
@@ -107,6 +108,7 @@ public class BattleGridFightOptions(GridFightGameSectionInfo curSection, GridFig
|
||||
PenaltyBonusRuleId = ruleId,
|
||||
GridFightAugmentInfo = { AugmentComponent.Data.Augments.Select(x => x.ToBattleInfo()) },
|
||||
GridFightPortalBuffList = { LevelComponent.PortalBuffs.Select(x => x.ToBattleInfo()) },
|
||||
GridFightTraitInfo = { TraitComponent.Data.Traits.Select(x => x.ToBattleInfo(RoleComponent)) }
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class GridFightBasicComponent(GridFightInstance inst) : BaseGridFightComp
|
||||
public GridFightBasicInfoPb Data { get; set; } = new()
|
||||
{
|
||||
CurHp = 100,
|
||||
CurLevel = 1,
|
||||
MaxAvatarNum = 1,
|
||||
CurLevel = 3,
|
||||
MaxAvatarNum = 3,
|
||||
BuyLevelCost = 1,
|
||||
CurGold = 0
|
||||
};
|
||||
@@ -25,7 +25,7 @@ public class GridFightBasicComponent(GridFightInstance inst) : BaseGridFightComp
|
||||
|
||||
#region Data Management
|
||||
|
||||
public async ValueTask<Retcode> UpdateGoldNum(int changeNum, bool sendPacket = true, GridFightSrc src = GridFightSrc.KGridFightSrcManualRefreshGoods)
|
||||
public async ValueTask<Retcode> UpdateGoldNum(int changeNum, bool sendPacket = true, GridFightSrc src = GridFightSrc.KGridFightSrcNone)
|
||||
{
|
||||
if (changeNum < 0 && -changeNum > Data.CurGold)
|
||||
{
|
||||
@@ -99,10 +99,10 @@ public class GridFightBasicComponent(GridFightInstance inst) : BaseGridFightComp
|
||||
if (sendPacket)
|
||||
{
|
||||
await Inst.Player.SendPacket(new PacketGridFightSyncUpdateResultScNotify(
|
||||
new GridFightGoldSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data),
|
||||
new GridFightPlayerLevelSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data),
|
||||
new GridFightMaxAvatarNumSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data),
|
||||
new GridFightBuyExpCostSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data)));
|
||||
new GridFightGoldSyncData(GridFightSrc.KGridFightSrcNone, Data),
|
||||
new GridFightPlayerLevelSyncData(GridFightSrc.KGridFightSrcNone, Data),
|
||||
new GridFightMaxAvatarNumSyncData(GridFightSrc.KGridFightSrcNone, Data),
|
||||
new GridFightBuyExpCostSyncData(GridFightSrc.KGridFightSrcNone, Data)));
|
||||
}
|
||||
|
||||
return Retcode.RetSucc;
|
||||
@@ -130,10 +130,10 @@ public class GridFightBasicComponent(GridFightInstance inst) : BaseGridFightComp
|
||||
if (sendPacket)
|
||||
{
|
||||
await Inst.Player.SendPacket(new PacketGridFightSyncUpdateResultScNotify(
|
||||
new GridFightGoldSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data),
|
||||
new GridFightPlayerLevelSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data),
|
||||
new GridFightMaxAvatarNumSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data),
|
||||
new GridFightBuyExpCostSyncData(GridFightSrc.KGridFightSrcBuyGoods, Data)));
|
||||
new GridFightGoldSyncData(GridFightSrc.KGridFightSrcNone, Data),
|
||||
new GridFightPlayerLevelSyncData(GridFightSrc.KGridFightSrcNone, Data),
|
||||
new GridFightMaxAvatarNumSyncData(GridFightSrc.KGridFightSrcNone, Data),
|
||||
new GridFightBuyExpCostSyncData(GridFightSrc.KGridFightSrcNone, Data)));
|
||||
}
|
||||
|
||||
return Retcode.RetSucc;
|
||||
|
||||
@@ -122,29 +122,26 @@ public class GridFightLevelComponent : BaseGridFightComponent
|
||||
|
||||
List<BaseGridFightSyncData> syncs = [new GridFightLevelSyncData(src, this)];
|
||||
|
||||
//await Inst.RollPortalBuff();
|
||||
syncs.AddRange(await Inst.CreatePendingAction<GridFightElitePendingAction>(sendPacket: false));
|
||||
if (CurrentSection.Excel.IsAugment == 1)
|
||||
{
|
||||
// create augment action
|
||||
syncs.AddRange(await Inst.CreatePendingAction<GridFightAugmentPendingAction>(sendPacket: false));
|
||||
await Inst.CreatePendingAction<GridFightAugmentPendingAction>(sendPacket: false);
|
||||
}
|
||||
|
||||
if (CurrentSection.Excel.NodeType == GridFightNodeTypeEnum.Supply)
|
||||
{
|
||||
// create supply action
|
||||
syncs.AddRange(await Inst.CreatePendingAction<GridFightSupplyPendingAction>(sendPacket: false));
|
||||
await Inst.CreatePendingAction<GridFightSupplyPendingAction>(sendPacket: false);
|
||||
await Inst.CreatePendingAction<GridFightElitePendingAction>(sendPacket: false);
|
||||
}
|
||||
else
|
||||
else if (CurrentSection.Excel.NodeType == GridFightNodeTypeEnum.EliteBranch)
|
||||
{
|
||||
syncs.AddRange(await Inst.CreatePendingAction<GridFightElitePendingAction>(sendPacket: false));
|
||||
|
||||
if (CurrentSection.Excel.NodeType is not GridFightNodeTypeEnum.Boss
|
||||
and not GridFightNodeTypeEnum.EliteBranch)
|
||||
{
|
||||
syncs.AddRange(await Inst.CreatePendingAction<GridFightPreparePendingAction>(sendPacket: false));
|
||||
}
|
||||
await Inst.CreatePendingAction<GridFightEliteBranchPendingAction>(sendPacket: false);
|
||||
}
|
||||
|
||||
await Inst.CreatePendingAction<GridFightEnterNodePendingAction>(sendPacket: false);
|
||||
|
||||
if (sendPacket)
|
||||
{
|
||||
await Inst.Player.SendPacket(new PacketGridFightSyncUpdateResultScNotify(syncs));
|
||||
@@ -314,6 +311,7 @@ public class GridFightGameSectionInfo
|
||||
public GridFightStageRouteExcel Excel { get; }
|
||||
public uint ChapterId { get; }
|
||||
public uint SectionId { get; }
|
||||
public uint BranchId { get; set; } = 1;
|
||||
public GridFightCampExcel MonsterCamp { get; set; }
|
||||
public List<GridFightGameEncounterInfo> Encounters { get; } = [];
|
||||
|
||||
@@ -328,7 +326,20 @@ public class GridFightGameSectionInfo
|
||||
if (Excel.NodeType is not GridFightNodeTypeEnum.Monster and not GridFightNodeTypeEnum.CampMonster
|
||||
and not GridFightNodeTypeEnum.Boss and not GridFightNodeTypeEnum.EliteBranch) return;
|
||||
|
||||
Encounters.Add(new GridFightGameEncounterInfo(1, 1, this));
|
||||
if (Excel.NodeType is GridFightNodeTypeEnum.EliteBranch)
|
||||
{
|
||||
List<uint> difficulties = [1, 2, 3];
|
||||
BranchId = 0;
|
||||
|
||||
foreach (var diff in difficulties.OrderBy(_ => Guid.NewGuid()).Take(2))
|
||||
{
|
||||
Encounters.Add(new GridFightGameEncounterInfo(diff, diff, this));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Encounters.Add(new GridFightGameEncounterInfo(1, 1, this));
|
||||
}
|
||||
}
|
||||
|
||||
public GridFightRouteInfo ToRouteInfo()
|
||||
@@ -336,7 +347,7 @@ public class GridFightGameSectionInfo
|
||||
return new GridFightRouteInfo
|
||||
{
|
||||
FightCampId = MonsterCamp.ID,
|
||||
EliteBranchId = 0,
|
||||
EliteBranchId = BranchId,
|
||||
RouteEncounterList = { Encounters.Select(x => x.ToProto()) }
|
||||
};
|
||||
}
|
||||
@@ -359,51 +370,8 @@ public class GridFightGameEncounterInfo
|
||||
EncounterDifficulty = difficulty;
|
||||
ParentSection = section;
|
||||
|
||||
var waveNum = ParentSection.Excel.NodeType switch
|
||||
{
|
||||
//GridFightNodeTypeEnum.Boss => 2,
|
||||
//GridFightNodeTypeEnum.EliteBranch => 2,
|
||||
_ => 1
|
||||
};
|
||||
|
||||
List<int> monsterNum = ParentSection.Excel.NodeType switch
|
||||
{
|
||||
GridFightNodeTypeEnum.Boss => [1],
|
||||
GridFightNodeTypeEnum.EliteBranch => [3],
|
||||
GridFightNodeTypeEnum.CampMonster => [3],
|
||||
_ => [Random.Shared.Next(3, 5)]
|
||||
};
|
||||
|
||||
var monsterPool = ParentSection.MonsterCamp.Monsters.Where(x => x.MonsterTier <= 2).OrderBy(_ => Guid.NewGuid()).ToList();
|
||||
var monster4Pool = ParentSection.MonsterCamp.Monsters.Where(x => x.MonsterTier is 4 or 3).OrderBy(_ => Guid.NewGuid()).ToList();
|
||||
var monster5Pool = ParentSection.MonsterCamp.Monsters.Where(x => x.MonsterTier == 5).OrderBy(_ => Guid.NewGuid()).ToList();
|
||||
for (var i = 0; i < waveNum; i++)
|
||||
{
|
||||
if (i < waveNum - 1 || ParentSection.Excel.NodeType is GridFightNodeTypeEnum.Monster)
|
||||
{
|
||||
// no elite
|
||||
var res = monsterPool.OrderBy(_ => Guid.NewGuid()).Take(monsterNum[i]).ToList();
|
||||
MonsterWaves.Add(new GridFightGameMonsterWaveInfo((uint)(i + 1), res, ParentSection.MonsterCamp.ID));
|
||||
}
|
||||
else
|
||||
{
|
||||
List<GridFightMonsterExcel> elites = ParentSection.Excel.NodeType switch
|
||||
{
|
||||
GridFightNodeTypeEnum.Boss => [..monster5Pool],
|
||||
_ => [monster4Pool.RandomElement()],
|
||||
};
|
||||
|
||||
List<GridFightMonsterExcel> monsters = [..elites];
|
||||
var remain = monsterNum[i] - 1;
|
||||
|
||||
if (remain > 0)
|
||||
{
|
||||
monsters.AddRange(monsterPool.OrderBy(_ => Guid.NewGuid()).Take(remain).ToList());
|
||||
}
|
||||
|
||||
MonsterWaves.Add(new GridFightGameMonsterWaveInfo((uint)(i + 1), monsters, ParentSection.MonsterCamp.ID));
|
||||
}
|
||||
}
|
||||
var waves = GridFightEncounterGenerateHelper.GenerateMonsterWaves(section);
|
||||
MonsterWaves.AddRange(waves);
|
||||
}
|
||||
|
||||
public uint EncounterIndex { get; set; }
|
||||
@@ -426,8 +394,9 @@ public class GridFightGameEncounterInfo
|
||||
public class GridFightGameMonsterWaveInfo(uint wave, List<GridFightMonsterExcel> monsters, uint campId)
|
||||
{
|
||||
public uint Wave { get; set; } = wave;
|
||||
public uint CampId { get; set; } = campId;
|
||||
public List<GridFightMonsterExcel> Monsters { get; } = monsters;
|
||||
|
||||
public List<GridFightGameMonsterInfo> Monsters { get; } = monsters
|
||||
.Select(x => new GridFightGameMonsterInfo(x, campId, (uint)Random.Shared.Next(1, (int)(x.MonsterTier + 1)))).ToList();
|
||||
|
||||
public GridEncounterMonsterWave ToProto()
|
||||
{
|
||||
@@ -436,13 +405,143 @@ public class GridFightGameMonsterWaveInfo(uint wave, List<GridFightMonsterExcel>
|
||||
EncounterWave = Wave,
|
||||
FightMonsterList =
|
||||
{
|
||||
Monsters.Select(x => new GridFightMonsterInfo
|
||||
{
|
||||
MonsterId = x.MonsterID,
|
||||
MonsterCampId = CampId,
|
||||
Tier = x.MonsterTier
|
||||
})
|
||||
Monsters.Select(x => x.ToProto())
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class GridFightGameMonsterInfo(GridFightMonsterExcel monsters, uint campId, uint tier)
|
||||
{
|
||||
public uint CampId { get; set; } = campId;
|
||||
public GridFightMonsterExcel Monster { get; } = monsters;
|
||||
public uint Tier { get; } = tier;
|
||||
|
||||
public GridFightMonsterInfo ToProto()
|
||||
{
|
||||
return new GridFightMonsterInfo
|
||||
{
|
||||
MonsterId = Monster.MonsterID,
|
||||
MonsterCampId = CampId,
|
||||
Tier = Tier
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public static class GridFightEncounterGenerateHelper
|
||||
{
|
||||
private static readonly List<List<List<uint>>> RandomWaveRule =
|
||||
[
|
||||
[[3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]],
|
||||
[[3, 2, 2, 2, 2], [3, 3, 2, 2, 2]],
|
||||
[[3, 3, 3, 2, 2, 2, 2, 2]],
|
||||
[[2, 2, 2, 2, 3, 3]]
|
||||
];
|
||||
|
||||
public static List<GridFightGameMonsterWaveInfo> GenerateMonsterWaves(GridFightGameSectionInfo section)
|
||||
{
|
||||
switch (section.Excel.NodeType)
|
||||
{
|
||||
case GridFightNodeTypeEnum.Monster:
|
||||
return GenerateMonsterType(section);
|
||||
|
||||
case GridFightNodeTypeEnum.CampMonster:
|
||||
case GridFightNodeTypeEnum.EliteBranch:
|
||||
return GenerateCampMonsterType(section);
|
||||
|
||||
case GridFightNodeTypeEnum.Boss:
|
||||
return GenerateBossType(section);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public static List<GridFightGameMonsterWaveInfo> GenerateMonsterType(GridFightGameSectionInfo section)
|
||||
{
|
||||
List<GridFightGameMonsterWaveInfo> waves = [];
|
||||
|
||||
var monsters = section.MonsterCamp.Monsters
|
||||
.Where(x => x.MonsterTier <= 2).ToList();
|
||||
|
||||
List<GridFightMonsterExcel> targets = [];
|
||||
|
||||
for (var i = 0; i < 5; i++)
|
||||
{
|
||||
targets.Add(monsters.RandomElement());
|
||||
}
|
||||
|
||||
waves.Add(new GridFightGameMonsterWaveInfo(1, targets, section.MonsterCamp.ID));
|
||||
|
||||
return waves;
|
||||
}
|
||||
|
||||
public static List<GridFightGameMonsterWaveInfo> GenerateCampMonsterType(GridFightGameSectionInfo section)
|
||||
{
|
||||
List<GridFightGameMonsterWaveInfo> waves = [];
|
||||
|
||||
var rules = RandomWaveRule.RandomElement();
|
||||
|
||||
foreach (var rule in rules)
|
||||
{
|
||||
List<GridFightMonsterExcel> excels = [];
|
||||
|
||||
foreach (var tier in rule)
|
||||
{
|
||||
var targets = section.MonsterCamp.Monsters.Where(x => x.MonsterTier == tier).ToList();
|
||||
if (targets.Count == 0)
|
||||
continue;
|
||||
|
||||
var selected = targets.RandomElement();
|
||||
excels.Add(selected);
|
||||
}
|
||||
|
||||
// random order
|
||||
excels = excels.OrderBy(_ => Guid.NewGuid()).ToList();
|
||||
waves.Add(new GridFightGameMonsterWaveInfo((uint)(waves.Count + 1), excels, section.MonsterCamp.ID));
|
||||
}
|
||||
|
||||
return waves;
|
||||
}
|
||||
|
||||
public static List<GridFightGameMonsterWaveInfo> GenerateBossType(GridFightGameSectionInfo section)
|
||||
{
|
||||
List<GridFightGameMonsterWaveInfo> waves = [];
|
||||
|
||||
var waveNum = section.ChapterId == 3 ? 2 : 1;
|
||||
|
||||
for (var i = 0; i < waveNum; i++)
|
||||
{
|
||||
if (i == waveNum - 1)
|
||||
{
|
||||
// boss wave
|
||||
var bossMonsters = section.MonsterCamp.Monsters
|
||||
.Where(x => x.MonsterTier == (section.ChapterId == 3 ? 6 : 5))
|
||||
.ToList();
|
||||
|
||||
if (bossMonsters.Count == 0)
|
||||
continue;
|
||||
|
||||
waves.Add(new GridFightGameMonsterWaveInfo((uint)(waves.Count + 1), bossMonsters, section.MonsterCamp.ID));
|
||||
}
|
||||
else
|
||||
{
|
||||
// normal wave
|
||||
var monsters = section.MonsterCamp.Monsters
|
||||
.Where(x => x.MonsterTier <= 2).ToList();
|
||||
|
||||
List<GridFightMonsterExcel> targets = [];
|
||||
|
||||
for (var j = 0; j < 5; j++)
|
||||
{
|
||||
targets.Add(monsters.RandomElement());
|
||||
}
|
||||
|
||||
waves.Add(new GridFightGameMonsterWaveInfo((uint)(waves.Count + 1), targets, section.MonsterCamp.ID));
|
||||
}
|
||||
}
|
||||
|
||||
return waves;
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ public class GridFightRoleComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
}
|
||||
|
||||
public async ValueTask<List<BaseGridFightSyncData>> AddAvatar(uint roleId, uint tier = 1, bool sendPacket = true,
|
||||
bool checkMerge = true, GridFightSrc src = GridFightSrc.KGridFightSrcBuyGoods, uint syncGroup = 0, uint targetPos = 0)
|
||||
bool checkMerge = true, GridFightSrc src = GridFightSrc.KGridFightSrcBuyGoods, uint syncGroup = 0, uint targetPos = 0, params uint[] param)
|
||||
{
|
||||
if (!GameData.GridFightRoleBasicInfoData.TryGetValue(roleId, out var excel)) return [];
|
||||
|
||||
@@ -55,7 +55,7 @@ public class GridFightRoleComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
|
||||
Data.Roles.Add(info);
|
||||
|
||||
List<BaseGridFightSyncData> syncs = [new GridFightRoleAddSyncData(src, info, syncGroup)];
|
||||
List<BaseGridFightSyncData> syncs = [new GridFightRoleAddSyncData(src, info, syncGroup, param)];
|
||||
|
||||
if (checkMerge)
|
||||
{
|
||||
@@ -68,6 +68,8 @@ public class GridFightRoleComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
await Inst.Player.SendPacket(new PacketGridFightSyncUpdateResultScNotify(syncs));
|
||||
}
|
||||
|
||||
Inst.GetComponent<GridFightTraitComponent>().CheckTrait();
|
||||
|
||||
return syncs;
|
||||
}
|
||||
|
||||
@@ -155,10 +157,12 @@ public class GridFightRoleComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
await Inst.Player.SendPacket(new PacketGridFightSyncUpdateResultScNotify(syncs));
|
||||
}
|
||||
|
||||
Inst.GetComponent<GridFightTraitComponent>().CheckTrait();
|
||||
|
||||
return syncs;
|
||||
}
|
||||
|
||||
public List<BaseAvatarInfo> GetForegroundAvatarInfos(uint maxAvatarNum)
|
||||
public List<BaseAvatarInfo> GetForegroundAvatarInfos()
|
||||
{
|
||||
var foreground = Data.Roles.Where(x => x.Pos <= 4).OrderBy(x => x.Pos).ToList();
|
||||
List<BaseAvatarInfo> res = [];
|
||||
@@ -230,7 +234,7 @@ public class GridFightRoleComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
if (role != null)
|
||||
{
|
||||
role.Pos = pos.Pos;
|
||||
syncs.Add(new GridFightRoleUpdateSyncData(GridFightSrc.KGridFightSrcCopyRole, role));
|
||||
syncs.Add(new GridFightRoleUpdateSyncData(GridFightSrc.KGridFightSrcNone, role));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,6 +243,8 @@ public class GridFightRoleComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
await Inst.Player.SendPacket(new PacketGridFightSyncUpdateResultScNotify(syncs));
|
||||
}
|
||||
|
||||
Inst.GetComponent<GridFightTraitComponent>().CheckTrait();
|
||||
|
||||
return Retcode.RetSucc;
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ public class GridFightShopComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
var totalCost = (uint)targetGoods.Select(x => GetGoodsPrice(x.Rarity, x.RoleItem.Tier)).Sum(x => x);
|
||||
|
||||
// COST
|
||||
var code = await Inst.GetComponent<GridFightBasicComponent>().UpdateGoldNum((int)-totalCost, false);
|
||||
var code = await Inst.GetComponent<GridFightBasicComponent>().UpdateGoldNum((int)-totalCost, false, GridFightSrc.KGridFightSrcBuyGoods);
|
||||
if (code != Retcode.RetSucc)
|
||||
{
|
||||
return code;
|
||||
@@ -61,7 +61,8 @@ public class GridFightShopComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
{
|
||||
if (item.ItemTypeCase == GridFightShopItemPb.ItemTypeOneofCase.RoleItem)
|
||||
{
|
||||
syncs.AddRange(await avatarComp.AddAvatar(item.RoleItem.RoleId, item.RoleItem.Tier, false));
|
||||
syncs.AddRange(await avatarComp.AddAvatar(item.RoleItem.RoleId, item.RoleItem.Tier, false,
|
||||
param: (uint)Data.ShopItems.IndexOf(item)));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -136,7 +137,7 @@ public class GridFightShopComponent(GridFightInstance inst) : BaseGridFightCompo
|
||||
else
|
||||
{
|
||||
// cost
|
||||
var code = await Inst.GetComponent<GridFightBasicComponent>().UpdateGoldNum((int)-Data.RefreshCost);
|
||||
var code = await Inst.GetComponent<GridFightBasicComponent>().UpdateGoldNum((int)-Data.RefreshCost, src:GridFightSrc.KGridFightSrcManualRefreshGoods);
|
||||
if (code != Retcode.RetSucc)
|
||||
{
|
||||
return code;
|
||||
|
||||
152
GameServer/Game/GridFight/Component/GridFightTraitComponent.cs
Normal file
152
GameServer/Game/GridFight/Component/GridFightTraitComponent.cs
Normal file
@@ -0,0 +1,152 @@
|
||||
using EggLink.DanhengServer.Data;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Component;
|
||||
|
||||
public class GridFightTraitComponent(GridFightInstance inst) : BaseGridFightComponent(inst)
|
||||
{
|
||||
public GridFightTraitInfoPb Data { get; set; } = new();
|
||||
|
||||
public void CheckTrait()
|
||||
{
|
||||
var roleComp = Inst.GetComponent<GridFightRoleComponent>();
|
||||
|
||||
Dictionary<uint, uint> traitCount = [];
|
||||
|
||||
foreach (var traitId in GameData.GridFightTraitBasicInfoData.Keys)
|
||||
{
|
||||
traitCount[traitId] = 0; // initialize
|
||||
}
|
||||
|
||||
foreach (var role in roleComp.Data.Roles.Where(x => x.Pos <= GridFightRoleComponent.PrepareAreaPos))
|
||||
{
|
||||
if (!GameData.GridFightRoleBasicInfoData.TryGetValue(role.RoleId, out var excel)) continue;
|
||||
|
||||
foreach (var traitId in excel.TraitList)
|
||||
{
|
||||
traitCount[traitId]++; // increase count
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var (traitId, count) in traitCount)
|
||||
{
|
||||
var traitExcel = GameData.GridFightTraitBasicInfoData.GetValueOrDefault(traitId);
|
||||
if (traitExcel == null) continue;
|
||||
|
||||
var traitLayers = GameData.GridFightTraitLayerData.GetValueOrDefault(traitId);
|
||||
if (traitLayers == null) continue;
|
||||
|
||||
var layers = traitLayers.Where(x => x.Key <= count).ToList();
|
||||
var layer = layers.Count > 0 ? layers.Max(x => x.Value.Layer) : 0;
|
||||
|
||||
var existingTrait = Data.Traits.FirstOrDefault(x => x.TraitId == traitId);
|
||||
|
||||
if (existingTrait != null)
|
||||
{
|
||||
existingTrait.TraitLayer = layer;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (layer == 0) continue; // do not add if no layer
|
||||
|
||||
Data.Traits.Add(new GridFightGameTraitPb
|
||||
{
|
||||
TraitId = traitId,
|
||||
TraitLayer = layer,
|
||||
Effects =
|
||||
{
|
||||
traitExcel.TraitEffectList.Select(x => new GridFightGameTraitEffectPb
|
||||
{
|
||||
EffectId = x
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override GridFightGameInfo ToProto()
|
||||
{
|
||||
var roleComp = Inst.GetComponent<GridFightRoleComponent>();
|
||||
|
||||
return new GridFightGameInfo
|
||||
{
|
||||
GridTraitGameInfo = new GridFightGameTraitInfo
|
||||
{
|
||||
GridFightTraitInfo = { Data.Traits.Select(x => x.ToProto(roleComp)) }
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public static class GridFightTraitInfoPbExtensions
|
||||
{
|
||||
public static GridGameTraitInfo ToProto(this GridFightGameTraitPb info, GridFightRoleComponent roleComp)
|
||||
{
|
||||
var traitRoles = roleComp.Data.Roles.Where(x =>
|
||||
GameData.GridFightRoleBasicInfoData.GetValueOrDefault(x.RoleId)?.TraitList.Contains(info.TraitId) == true).ToList();
|
||||
|
||||
return new GridGameTraitInfo
|
||||
{
|
||||
TraitId = info.TraitId,
|
||||
TraitEffectLayer = info.TraitLayer,
|
||||
GridFightTraitMemberUniqueIdList = { traitRoles.Select(x => x.UniqueId) },
|
||||
TraitEffectList = { info.Effects.Select(x => x.ToProto())}
|
||||
};
|
||||
}
|
||||
|
||||
public static BattleGridFightTraitInfo ToBattleInfo(this GridFightGameTraitPb info, GridFightRoleComponent roleComp)
|
||||
{
|
||||
var traitRoles = roleComp.Data.Roles.Where(x =>
|
||||
x.Pos <= GridFightRoleComponent.PrepareAreaPos && GameData.GridFightRoleBasicInfoData
|
||||
.GetValueOrDefault(x.RoleId)?.TraitList.Contains(info.TraitId) == true).ToList();
|
||||
|
||||
var phainonRole = roleComp.Data.Roles.FirstOrDefault(x =>
|
||||
x.Pos <= GridFightRoleComponent.PrepareAreaPos && x.RoleId == 1408); // hardcode
|
||||
|
||||
var res = new BattleGridFightTraitInfo
|
||||
{
|
||||
TraitId = info.TraitId,
|
||||
TraitEffectLayer = info.TraitLayer,
|
||||
MemberList = { traitRoles.Select(x => new GridFightTraitMember
|
||||
{
|
||||
GridUpdateSrc = GridFightTraitSrc.KGridFightTraitSrcRole,
|
||||
MemberRoleId = x.RoleId,
|
||||
MemberRoleUniqueId = x.UniqueId,
|
||||
MemberType = GridFightTraitMemberType.KGridFightTraitMemberRole
|
||||
}) },
|
||||
TraitEffectList = { info.Effects.Select(x => x.ToBattleInfo())}
|
||||
};
|
||||
|
||||
if (phainonRole != null && traitRoles.All(x => x.UniqueId != phainonRole.UniqueId))
|
||||
{
|
||||
res.MemberList.Add(new GridFightTraitMember
|
||||
{
|
||||
GridUpdateSrc = GridFightTraitSrc.KGridFightTraitSrcDummy,
|
||||
MemberRoleId = phainonRole.RoleId,
|
||||
MemberRoleUniqueId = phainonRole.UniqueId,
|
||||
MemberType = GridFightTraitMemberType.KGridFightTraitMemberRole
|
||||
});
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public static GridFightTraitEffectInfo ToProto(this GridFightGameTraitEffectPb info)
|
||||
{
|
||||
return new GridFightTraitEffectInfo
|
||||
{
|
||||
EffectId = info.EffectId,
|
||||
EffectDnaNum = info.Param
|
||||
};
|
||||
}
|
||||
|
||||
public static BattleGridFightTraitEffectInfo ToBattleInfo(this GridFightGameTraitEffectPb info)
|
||||
{
|
||||
return new BattleGridFightTraitEffectInfo
|
||||
{
|
||||
EffectId = info.EffectId
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -59,7 +59,7 @@ public class GridFightInstance(PlayerInstance player, uint season, uint division
|
||||
_ => 1u
|
||||
};
|
||||
|
||||
await basicComp.UpdateGoldNum((int)(baseCoin + interestCoin + comboCoin), false, GridFightSrc.KGridFightSrcNone);
|
||||
await basicComp.UpdateGoldNum((int)(baseCoin + interestCoin + comboCoin), false);
|
||||
await basicComp.AddLevelExp(expNum, false);
|
||||
|
||||
List<GridFightRoleDamageSttInfo> sttList = [];
|
||||
@@ -76,7 +76,7 @@ public class GridFightInstance(PlayerInstance player, uint season, uint division
|
||||
comboCoin));
|
||||
|
||||
|
||||
syncs.Add(new GridFightGoldSyncData(GridFightSrc.KGridFightSrcBattleEnd, basicComp.Data));
|
||||
syncs.Add(new GridFightGoldSyncData(GridFightSrc.KGridFightSrcBattleEnd, basicComp.Data, 0, levelComp.CurrentSection.ChapterId, levelComp.CurrentSection.SectionId));
|
||||
syncs.Add(new GridFightPlayerLevelSyncData(GridFightSrc.KGridFightSrcBattleEnd, basicComp.Data));
|
||||
syncs.Add(new GridFightLineupHpSyncData(GridFightSrc.KGridFightSrcBattleEnd, basicComp.Data));
|
||||
syncs.Add(new GridFightComboNumSyncData(GridFightSrc.KGridFightSrcBattleEnd, basicComp.Data));
|
||||
@@ -93,12 +93,14 @@ public class GridFightInstance(PlayerInstance player, uint season, uint division
|
||||
Components.Add(new GridFightLevelComponent(this));
|
||||
Components.Add(new GridFightRoleComponent(this));
|
||||
Components.Add(new GridFightAugmentComponent(this));
|
||||
Components.Add(new GridFightTraitComponent(this));
|
||||
|
||||
_ = GetComponent<GridFightRoleComponent>().AddAvatar(1414, 3, false);
|
||||
_ = GetComponent<GridFightShopComponent>().RefreshShop(true, false);
|
||||
|
||||
_ = CreatePendingAction<GridFightPortalBuffPendingAction>(sendPacket:false);
|
||||
_ = CreatePendingAction<GridFightElitePendingAction>(sendPacket: false);
|
||||
_ = CreatePendingAction<GridFightEnterNodePendingAction>(sendPacket: false);
|
||||
}
|
||||
|
||||
public T GetComponent<T>() where T : BaseGridFightComponent
|
||||
@@ -189,6 +191,8 @@ public class GridFightInstance(PlayerInstance player, uint season, uint division
|
||||
public async ValueTask HandleResultRequest(GridFightHandlePendingActionCsReq req)
|
||||
{
|
||||
var basicComp = GetComponent<GridFightBasicComponent>();
|
||||
var levelComp = GetComponent<GridFightLevelComponent>();
|
||||
|
||||
var curAction = GetCurAction();
|
||||
|
||||
// end
|
||||
@@ -231,10 +235,32 @@ public class GridFightInstance(PlayerInstance player, uint season, uint division
|
||||
|
||||
break;
|
||||
case GridFightHandlePendingActionCsReq.GridFightActionTypeOneofCase.EliteAction:
|
||||
break;
|
||||
case GridFightHandlePendingActionCsReq.GridFightActionTypeOneofCase.EliteBranchAction:
|
||||
var target = req.EliteBranchAction.EliteBranchId;
|
||||
levelComp.CurrentSection.BranchId = target;
|
||||
// sync
|
||||
syncs.Add(new GridFightLevelSyncData(GridFightSrc.KGridFightSrcNone, levelComp));
|
||||
|
||||
break;
|
||||
case GridFightHandlePendingActionCsReq.GridFightActionTypeOneofCase.SupplyAction:
|
||||
src = GridFightSrc.KGridFightSrcSelectSupply;
|
||||
await CheckCurNodeFinish(src);
|
||||
|
||||
PendingActions.Remove(curAction.QueuePosition);
|
||||
|
||||
if (curAction is GridFightSupplyPendingAction supplyAction)
|
||||
{
|
||||
foreach (var supply in req.SupplyAction.SelectSupplyIndexes)
|
||||
{
|
||||
var role = supplyAction.RoleList[(int)supply];
|
||||
|
||||
syncs.AddRange(await GetComponent<GridFightRoleComponent>().AddAvatar(role.RoleId, 1, false, true,
|
||||
GridFightSrc.KGridFightSrcSelectSupply, 0, 0, req.SupplyAction.SelectSupplyIndexes.ToArray()));
|
||||
}
|
||||
}
|
||||
|
||||
syncs.AddRange(await CheckCurNodeFinish(src));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -248,9 +274,6 @@ public class GridFightInstance(PlayerInstance player, uint season, uint division
|
||||
basicComp.Data.LockType = (uint)GridFightLockType.KGridFightLockTypeNone;
|
||||
|
||||
syncs.Add(new GridFightLockInfoSyncData(GridFightSrc.KGridFightSrcNone, basicComp.Data.Clone()));
|
||||
|
||||
// sync level
|
||||
syncs.Add(new GridFightLevelSyncData(GridFightSrc.KGridFightSrcNone, GetComponent<GridFightLevelComponent>()));
|
||||
}
|
||||
|
||||
if (PendingActions.Count > 0)
|
||||
@@ -265,17 +288,17 @@ public class GridFightInstance(PlayerInstance player, uint season, uint division
|
||||
await Player.SendPacket(new PacketGridFightSyncUpdateResultScNotify(syncs));
|
||||
}
|
||||
|
||||
public async ValueTask CheckCurNodeFinish(GridFightSrc src)
|
||||
public async ValueTask<List<BaseGridFightSyncData>> CheckCurNodeFinish(GridFightSrc src)
|
||||
{
|
||||
var levelComp = GetComponent<GridFightLevelComponent>();
|
||||
var curSection = levelComp.CurrentSection;
|
||||
|
||||
if (curSection.Encounters.Count != 0) return;
|
||||
if (curSection.Encounters.Count != 0) return [];
|
||||
|
||||
if (PendingActions.Count != 0) return;
|
||||
if (PendingActions.Count != 0) return [];
|
||||
|
||||
// next
|
||||
await levelComp.EnterNextSection(src:GridFightSrc.KGridFightSrcNone);
|
||||
return await levelComp.EnterNextSection(src:GridFightSrc.KGridFightSrcNone);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -2,13 +2,13 @@ using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.PendingAction;
|
||||
|
||||
public class GridFightPreparePendingAction(GridFightInstance inst) : BaseGridFightPendingAction(inst)
|
||||
public class GridFightEnterNodePendingAction(GridFightInstance inst) : BaseGridFightPendingAction(inst)
|
||||
{
|
||||
public override GridFightPendingAction ToProto()
|
||||
{
|
||||
return new GridFightPendingAction
|
||||
{
|
||||
PrepareAction = new GridFightPrepareActionInfo(),
|
||||
EnterNodeAction = new GridFightEnterNodeActionInfo(),
|
||||
QueuePosition = QueuePosition
|
||||
};
|
||||
}
|
||||
@@ -2,9 +2,10 @@ using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public abstract class BaseGridFightSyncData(GridFightSrc src, uint groupId = 0)
|
||||
public abstract class BaseGridFightSyncData(GridFightSrc src, uint groupId = 0, params uint[] syncParams)
|
||||
{
|
||||
public GridFightSrc Src { get; set; } = src;
|
||||
public uint GroupId { get; set; } = groupId;
|
||||
public uint[] SyncParams { get; set; } = syncParams;
|
||||
public abstract GridFightSyncData ToProto();
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightAddAugmentSyncData(GridFightSrc src, GridFightGameAugmentPb augment, uint groupId = 0) : BaseGridFightSyncData(src, groupId)
|
||||
public class GridFightAddAugmentSyncData(GridFightSrc src, GridFightGameAugmentPb augment, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using GridFightPortalBuffInfo = EggLink.DanhengServer.GameServer.Game.GridFight.
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightAddPortalBuffSyncData(GridFightSrc src, GridFightPortalBuffInfo info, uint groupId = 0) : BaseGridFightSyncData(src, groupId)
|
||||
public class GridFightAddPortalBuffSyncData(GridFightSrc src, GridFightPortalBuffInfo info, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightBuyExpCostSyncData(GridFightSrc src, GridFightBasicInfoPb info) : BaseGridFightSyncData(src)
|
||||
public class GridFightBuyExpCostSyncData(GridFightSrc src, GridFightBasicInfoPb info, params uint[] param) : BaseGridFightSyncData(src, 0, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightComboNumSyncData(GridFightSrc src, GridFightBasicInfoPb info) : BaseGridFightSyncData(src)
|
||||
public class GridFightComboNumSyncData(GridFightSrc src, GridFightBasicInfoPb info, params uint[] param) : BaseGridFightSyncData(src, 0, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@ using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightFinishPendingActionSyncData(GridFightSrc src, uint queuePosition) : BaseGridFightSyncData(src)
|
||||
public class GridFightFinishPendingActionSyncData(GridFightSrc src, uint queuePosition, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightGoldSyncData(GridFightSrc src, GridFightBasicInfoPb basic) : BaseGridFightSyncData(src)
|
||||
public class GridFightGoldSyncData(GridFightSrc src, GridFightBasicInfoPb basic, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,11 @@ using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightLevelSyncData(GridFightSrc src, GridFightLevelComponent level) : BaseGridFightSyncData(src)
|
||||
public class GridFightLevelSyncData(
|
||||
GridFightSrc src,
|
||||
GridFightLevelComponent level,
|
||||
uint groupId = 0,
|
||||
params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightLineupHpSyncData(GridFightSrc src, GridFightBasicInfoPb info) : BaseGridFightSyncData(src)
|
||||
public class GridFightLineupHpSyncData(GridFightSrc src, GridFightBasicInfoPb info, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightLockInfoSyncData(GridFightSrc src, GridFightBasicInfoPb info, uint groupId = 0) : BaseGridFightSyncData(src, groupId)
|
||||
public class GridFightLockInfoSyncData(GridFightSrc src, GridFightBasicInfoPb info, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightMaxAvatarNumSyncData(GridFightSrc src, GridFightBasicInfoPb info) : BaseGridFightSyncData(src)
|
||||
public class GridFightMaxAvatarNumSyncData(GridFightSrc src, GridFightBasicInfoPb info, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightPendingActionSyncData(GridFightSrc src, BaseGridFightPendingAction action, uint groupId = 0) : BaseGridFightSyncData(src, groupId)
|
||||
public class GridFightPendingActionSyncData(GridFightSrc src, BaseGridFightPendingAction action, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightPlayerLevelSyncData(GridFightSrc src, GridFightBasicInfoPb info) : BaseGridFightSyncData(src)
|
||||
public class GridFightPlayerLevelSyncData(GridFightSrc src, GridFightBasicInfoPb info, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightRoleAddSyncData(GridFightSrc src, GridFightRoleInfoPb role, uint groupId = 0) : BaseGridFightSyncData(src, groupId)
|
||||
public class GridFightRoleAddSyncData(GridFightSrc src, GridFightRoleInfoPb role, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightRoleDamageSttSyncData(GridFightSrc src, GridFightLevelComponent comp) : BaseGridFightSyncData(src)
|
||||
public class GridFightRoleDamageSttSyncData(GridFightSrc src, GridFightLevelComponent comp, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightRoleRemoveSyncData(GridFightSrc src, GridFightRoleInfoPb role, uint groupId = 0) : BaseGridFightSyncData(src, groupId)
|
||||
public class GridFightRoleRemoveSyncData(GridFightSrc src, GridFightRoleInfoPb role, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightRoleUpdateSyncData(GridFightSrc src, GridFightRoleInfoPb role) : BaseGridFightSyncData(src)
|
||||
public class GridFightRoleUpdateSyncData(GridFightSrc src, GridFightRoleInfoPb role, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@ using EggLink.DanhengServer.Proto.ServerSide;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.GridFight.Sync;
|
||||
|
||||
public class GridFightShopSyncData(GridFightSrc src, GridFightShopInfoPb data, uint level) : BaseGridFightSyncData(src)
|
||||
public class GridFightShopSyncData(GridFightSrc src, GridFightShopInfoPb data, uint level, uint groupId = 0, params uint[] param) : BaseGridFightSyncData(src, groupId, param)
|
||||
{
|
||||
public override GridFightSyncData ToProto()
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@ public class PacketGridFightSyncUpdateResultScNotify : BasePacket
|
||||
{
|
||||
GridUpdateSrc = x.Key.Src,
|
||||
UpdateDynamicList = { x.Select(j => j.ToProto()) },
|
||||
ONMDGNHMABO = { 0 }
|
||||
SyncEffectParamList = { x.SelectMany(j => j.SyncParams).ToHashSet() }
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
@@ -54,19 +54,19 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
"ASgJEg0KBXZhbHVlGAIgASgNOgI4ASJDChZHcmlkRmlnaHRBdWdtZW50SW5m",
|
||||
"b1BiEikKCEF1Z21lbnRzGAEgAygLMhcuR3JpZEZpZ2h0R2FtZUF1Z21lbnRQ",
|
||||
"YiJOChpHcmlkRmlnaHRHYW1lVHJhaXRFZmZlY3RQYhIPCgdUcmFpdElkGAEg",
|
||||
"ASgNEhAKCEVmZmVjdElkGAIgASgNEg0KBVBhcmFtGAMgASgNImsKFEdyaWRG",
|
||||
"ASgNEhAKCEVmZmVjdElkGAIgASgNEg0KBVBhcmFtGAMgASgNImkKFEdyaWRG",
|
||||
"aWdodEdhbWVUcmFpdFBiEg8KB1RyYWl0SWQYASABKA0SLAoHRWZmZWN0cxgC",
|
||||
"IAMoCzIbLkdyaWRGaWdodEdhbWVUcmFpdEVmZmVjdFBiEhQKDEV4dHJhUm9s",
|
||||
"ZU51bRgDIAEoDSI9ChRHcmlkRmlnaHRUcmFpdEluZm9QYhIlCgZUcmFpdHMY",
|
||||
"ASADKAsyFS5HcmlkRmlnaHRHYW1lVHJhaXRQYiKvAgoUR3JpZEZpZ2h0Q29t",
|
||||
"cG9uZW50UGISKAoIU2hvcEluZm8YASABKAsyFC5HcmlkRmlnaHRTaG9wSW5m",
|
||||
"b1BiSAASKgoJQmFzaWNJbmZvGAIgASgLMhUuR3JpZEZpZ2h0QmFzaWNJbmZv",
|
||||
"UGJIABIsCgpBdmF0YXJJbmZvGAMgASgLMhYuR3JpZEZpZ2h0QXZhdGFySW5m",
|
||||
"b1BiSAASJgoHT3JiSW5mbxgEIAEoCzITLkdyaWRGaWdodE9yYkluZm9QYkgA",
|
||||
"Ei4KC0F1Z21lbnRJbmZvGAUgASgLMhcuR3JpZEZpZ2h0QXVnbWVudEluZm9Q",
|
||||
"YkgAEioKCVRyYWl0SW5mbxgGIAEoCzIVLkdyaWRGaWdodFRyYWl0SW5mb1Bi",
|
||||
"SABCDwoNQ29tcG9uZW50VHlwZUIpqgImRWdnTGluay5EYW5oZW5nU2VydmVy",
|
||||
"LlByb3RvLlNlcnZlclNpZGViBnByb3RvMw=="));
|
||||
"IAMoCzIbLkdyaWRGaWdodEdhbWVUcmFpdEVmZmVjdFBiEhIKClRyYWl0TGF5",
|
||||
"ZXIYAyABKA0iPQoUR3JpZEZpZ2h0VHJhaXRJbmZvUGISJQoGVHJhaXRzGAEg",
|
||||
"AygLMhUuR3JpZEZpZ2h0R2FtZVRyYWl0UGIirwIKFEdyaWRGaWdodENvbXBv",
|
||||
"bmVudFBiEigKCFNob3BJbmZvGAEgASgLMhQuR3JpZEZpZ2h0U2hvcEluZm9Q",
|
||||
"YkgAEioKCUJhc2ljSW5mbxgCIAEoCzIVLkdyaWRGaWdodEJhc2ljSW5mb1Bi",
|
||||
"SAASLAoKQXZhdGFySW5mbxgDIAEoCzIWLkdyaWRGaWdodEF2YXRhckluZm9Q",
|
||||
"YkgAEiYKB09yYkluZm8YBCABKAsyEy5HcmlkRmlnaHRPcmJJbmZvUGJIABIu",
|
||||
"CgtBdWdtZW50SW5mbxgFIAEoCzIXLkdyaWRGaWdodEF1Z21lbnRJbmZvUGJI",
|
||||
"ABIqCglUcmFpdEluZm8YBiABKAsyFS5HcmlkRmlnaHRUcmFpdEluZm9QYkgA",
|
||||
"Qg8KDUNvbXBvbmVudFR5cGVCKaoCJkVnZ0xpbmsuRGFuaGVuZ1NlcnZlci5Q",
|
||||
"cm90by5TZXJ2ZXJTaWRlYgZwcm90bzM="));
|
||||
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
|
||||
new pbr::FileDescriptor[] { },
|
||||
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
|
||||
@@ -82,7 +82,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameAugmentPb), global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameAugmentPb.Parser, new[]{ "AugmentId", "SavedValues" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.GridFightAugmentInfoPb), global::EggLink.DanhengServer.Proto.ServerSide.GridFightAugmentInfoPb.Parser, new[]{ "Augments" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameTraitEffectPb), global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameTraitEffectPb.Parser, new[]{ "TraitId", "EffectId", "Param" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameTraitPb), global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameTraitPb.Parser, new[]{ "TraitId", "Effects", "ExtraRoleNum" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameTraitPb), global::EggLink.DanhengServer.Proto.ServerSide.GridFightGameTraitPb.Parser, new[]{ "TraitId", "Effects", "TraitLayer" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.GridFightTraitInfoPb), global::EggLink.DanhengServer.Proto.ServerSide.GridFightTraitInfoPb.Parser, new[]{ "Traits" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::EggLink.DanhengServer.Proto.ServerSide.GridFightComponentPb), global::EggLink.DanhengServer.Proto.ServerSide.GridFightComponentPb.Parser, new[]{ "ShopInfo", "BasicInfo", "AvatarInfo", "OrbInfo", "AugmentInfo", "TraitInfo" }, new[]{ "ComponentType" }, null, null, null)
|
||||
}));
|
||||
@@ -3401,7 +3401,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
public GridFightGameTraitPb(GridFightGameTraitPb other) : this() {
|
||||
traitId_ = other.traitId_;
|
||||
effects_ = other.effects_.Clone();
|
||||
extraRoleNum_ = other.extraRoleNum_;
|
||||
traitLayer_ = other.traitLayer_;
|
||||
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
|
||||
}
|
||||
|
||||
@@ -3434,15 +3434,15 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
get { return effects_; }
|
||||
}
|
||||
|
||||
/// <summary>Field number for the "ExtraRoleNum" field.</summary>
|
||||
public const int ExtraRoleNumFieldNumber = 3;
|
||||
private uint extraRoleNum_;
|
||||
/// <summary>Field number for the "TraitLayer" field.</summary>
|
||||
public const int TraitLayerFieldNumber = 3;
|
||||
private uint traitLayer_;
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||
public uint ExtraRoleNum {
|
||||
get { return extraRoleNum_; }
|
||||
public uint TraitLayer {
|
||||
get { return traitLayer_; }
|
||||
set {
|
||||
extraRoleNum_ = value;
|
||||
traitLayer_ = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3463,7 +3463,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
}
|
||||
if (TraitId != other.TraitId) return false;
|
||||
if(!effects_.Equals(other.effects_)) return false;
|
||||
if (ExtraRoleNum != other.ExtraRoleNum) return false;
|
||||
if (TraitLayer != other.TraitLayer) return false;
|
||||
return Equals(_unknownFields, other._unknownFields);
|
||||
}
|
||||
|
||||
@@ -3473,7 +3473,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
int hash = 1;
|
||||
if (TraitId != 0) hash ^= TraitId.GetHashCode();
|
||||
hash ^= effects_.GetHashCode();
|
||||
if (ExtraRoleNum != 0) hash ^= ExtraRoleNum.GetHashCode();
|
||||
if (TraitLayer != 0) hash ^= TraitLayer.GetHashCode();
|
||||
if (_unknownFields != null) {
|
||||
hash ^= _unknownFields.GetHashCode();
|
||||
}
|
||||
@@ -3497,9 +3497,9 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
output.WriteUInt32(TraitId);
|
||||
}
|
||||
effects_.WriteTo(output, _repeated_effects_codec);
|
||||
if (ExtraRoleNum != 0) {
|
||||
if (TraitLayer != 0) {
|
||||
output.WriteRawTag(24);
|
||||
output.WriteUInt32(ExtraRoleNum);
|
||||
output.WriteUInt32(TraitLayer);
|
||||
}
|
||||
if (_unknownFields != null) {
|
||||
_unknownFields.WriteTo(output);
|
||||
@@ -3516,9 +3516,9 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
output.WriteUInt32(TraitId);
|
||||
}
|
||||
effects_.WriteTo(ref output, _repeated_effects_codec);
|
||||
if (ExtraRoleNum != 0) {
|
||||
if (TraitLayer != 0) {
|
||||
output.WriteRawTag(24);
|
||||
output.WriteUInt32(ExtraRoleNum);
|
||||
output.WriteUInt32(TraitLayer);
|
||||
}
|
||||
if (_unknownFields != null) {
|
||||
_unknownFields.WriteTo(ref output);
|
||||
@@ -3534,8 +3534,8 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(TraitId);
|
||||
}
|
||||
size += effects_.CalculateSize(_repeated_effects_codec);
|
||||
if (ExtraRoleNum != 0) {
|
||||
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ExtraRoleNum);
|
||||
if (TraitLayer != 0) {
|
||||
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(TraitLayer);
|
||||
}
|
||||
if (_unknownFields != null) {
|
||||
size += _unknownFields.CalculateSize();
|
||||
@@ -3553,8 +3553,8 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
TraitId = other.TraitId;
|
||||
}
|
||||
effects_.Add(other.effects_);
|
||||
if (other.ExtraRoleNum != 0) {
|
||||
ExtraRoleNum = other.ExtraRoleNum;
|
||||
if (other.TraitLayer != 0) {
|
||||
TraitLayer = other.TraitLayer;
|
||||
}
|
||||
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
|
||||
}
|
||||
@@ -3580,7 +3580,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
break;
|
||||
}
|
||||
case 24: {
|
||||
ExtraRoleNum = input.ReadUInt32();
|
||||
TraitLayer = input.ReadUInt32();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3607,7 +3607,7 @@ namespace EggLink.DanhengServer.Proto.ServerSide {
|
||||
break;
|
||||
}
|
||||
case 24: {
|
||||
ExtraRoleNum = input.ReadUInt32();
|
||||
TraitLayer = input.ReadUInt32();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ message GridFightGameTraitEffectPb {
|
||||
message GridFightGameTraitPb {
|
||||
uint32 TraitId = 1;
|
||||
repeated GridFightGameTraitEffectPb Effects = 2;
|
||||
uint32 ExtraRoleNum = 3;
|
||||
uint32 TraitLayer = 3;
|
||||
}
|
||||
|
||||
message GridFightTraitInfoPb {
|
||||
|
||||
Reference in New Issue
Block a user