using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace ET.Server { [FriendOf(typeof (MapEventComponent))] [FriendOf(typeof (Map))] public static class MapEventComponentSystem { public class MapEventComponentAwakeSystem: AwakeSystem { /// /// 场景事件组件创建 /// /// protected override void Awake(MapEventComponent self) { Log.Info($"创建战斗服事件组件..."); } } public class MapEventComponentDestroySystem: DestroySystem { /// /// 场景事件组件销毁 /// /// protected override void Destroy(MapEventComponent self) { Log.Info($"销毁战斗服事件组件..."); } } /// /// 单位死亡事件 /// /// /// public static void OnUnitDead(this MapEventComponent self, JObject msg) { } /// /// 副本消息 /// /// /// public static void OnMessageEvent(this MapEventComponent self, JObject msg) { switch (Convert.ToString(msg.SelectToken("msg"))) { case "Dead:Tower1": { Log.Debug($"塔1死亡事件..."); self.GetParent().DeadUnits.Add(1001); return; } case "Dead:Tower2": { Log.Debug($"塔2死亡事件..."); self.GetParent().DeadUnits.Add(1002); return; } case "Dead:Tower3": { Log.Debug($"塔3死亡事件..."); self.GetParent().DeadUnits.Add(1003); return; } } } /// /// 场景结算事件 /// /// public static void OnGameOver(this MapEventComponent self) { Map map = self.GetParent(); map.IsGameOver = true; if (map.Players is not { Count: > 0 }) { return; } foreach (WNPlayer player in map.Players.Values.Where(player => player != null)) { // 记录玩家历史 map.SyncPlayerHistoryData(player); // 战斗服场景玩家离开 map.PlayerLeaveRequest(player, false); // 本地场景移除玩家 map.RemovePlayer(player, false); // 战斗服结束场景 map.GetZoneManager().destroyZoneRequest(map.Id.ToString()); player.Map = null; } } /// /// 拾取道具 /// /// /// public static void OnPickItem(this MapEventComponent self, JObject msg) { } /// /// 击杀boss /// /// /// public static void OnKillBoss(this MapEventComponent self, JObject msg) { } /// /// 战报统计 /// /// /// public static void OnBattleReport(this MapEventComponent self, JObject msg) { string data = Convert.ToString(msg.SelectToken("data")); if (string.IsNullOrEmpty(data)) { return; } List battleReports = JsonConvert.DeserializeObject>(data); if (battleReports is not { Count: > 0 }) { return; } Map map = self.GetParent(); List list = (from report in battleReports where report.Force == 1 let ID = report.ID let PlayerUUID = string.IsNullOrEmpty(report.PlayerUUID)? "0" : report.PlayerUUID let TemplateID = report.TemplateId let Name = "玩家" + ID + "." + TemplateID let Force = report.Force let TotalDamage = report.TotalDamage select new Struct.BattleReports(ID, PlayerUUID, TemplateID, Name, Force, TotalDamage)).ToList(); map.GetComponent().UpdateRank(list, map); } } }