using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace ET.Server { [FriendOf(typeof (MapEventComponent))] [FriendOf(typeof (Map))] public static class MapEventComponentSystem { public class MapEventComponentAwakeSystem: AwakeSystem<MapEventComponent> { /// <summary> /// 场景事件组件创建 /// </summary> /// <param name="self"></param> protected override void Awake(MapEventComponent self) { Log.Info($"创建战斗服事件组件..."); } } public class MapEventComponentDestroySystem: DestroySystem<MapEventComponent> { /// <summary> /// 场景事件组件销毁 /// </summary> /// <param name="self"></param> protected override void Destroy(MapEventComponent self) { Log.Info($"销毁战斗服事件组件..."); } } /// <summary> /// 副本消息 /// </summary> /// <param name="self"></param> /// <param name="msg"></param> public static void OnMessage(this MapEventComponent self, JObject json) { string msg = Convert.ToString(json.SelectToken("msg")); string[] parames = msg.Split(":"); switch (parames[0]) { case "Dead": { if ("Tower1".Equals(parames[1])) { return; } else if ("Tower2".Equals(parames[1])) { Log.Debug($"塔2死亡事件..."); self.GetParent<Map>().DeadUnits.Add(1002); return; } else if ("Tower3".Equals(parames[1])) { Log.Debug($"塔3死亡事件..."); self.GetParent<Map>().DeadUnits.Add(1003); return; } else { int objId = int.Parse(parames[1]); if (objId > 0) { Log.Debug($"单位:{objId}死亡事件..."); Map map = self.GetParent<Map>(); Struct.UnitPlayerData unitPlayerData = map.GetUnitPlayerByObjId(objId); if (unitPlayerData != null) { unitPlayerData.DeadState = 1; } return; } } return; } case "Revive": { int objId = int.Parse(parames[1]); if (objId > 0) { Log.Debug($"单位:{objId}复活事件..."); Map map = self.GetParent<Map>(); Struct.UnitPlayerData unitPlayerData = map.GetUnitPlayerByObjId(objId); if (unitPlayerData != null) { unitPlayerData.DeadState = 0; } return; } return; } } } private static void TransferUnitsToNewTower(this MapEventComponent self) { Map map = self.GetParent<Map>(); int cnt = 0; foreach(Struct.UnitPlayerData player in map.UnitPlayers.Values) { //TODO: 转移坐标为当前战斗区域中的随机位置 map.GetXmdsManager().transferUnit(map.Id.ToString(), player.ObjId, 178f + (cnt++), 139f); } Log.Debug($"transfer unit: {cnt}"); } /// <summary> /// 场景结算事件 /// </summary> /// <param name="self"></param> public static void OnGameOver(this MapEventComponent self) { Map map = self.GetParent<Map>(); map.IsGameOver = true; if (map.Player == null) { return; } // 场景结束逻辑 map.GetComponent<MapRankComponent>().OnGameOver(); // 记录玩家历史 map.SyncPlayerHistoryData(map.Player); // 战斗服场景玩家离开 map.PlayerLeaveRequest(map.Player, false); // 本地场景移除玩家 map.RemovePlayer(map.Player, false); // 战斗服结束场景 map.GetZoneManager().destroyZoneRequest(map.Id.ToString()); map.Player.Map = null; } /// <summary> /// 拾取道具 /// </summary> /// <param name="self"></param> /// <param name="msg"></param> public static void OnPickItem(this MapEventComponent self, JObject msg) { } /// <summary> /// 击杀boss /// </summary> /// <param name="self"></param> /// <param name="msg"></param> public static void OnKillBoss(this MapEventComponent self, JObject msg) { } /// <summary> /// 战报统计 /// </summary> /// <param name="self"></param> /// <param name="msg"></param> public static void OnBattleReport(this MapEventComponent self, JObject msg) { } } }