using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace ET.Server { /// /// 战斗服事件工具类 /// public static class BattleServerEventHelper { /// /// area related battleServerEvent /// /// public static void AreaBattleServerEvent(JObject msg) { Log.Debug($"AreaBattleServerEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}"); long instanceId = Convert.ToInt64(msg.SelectToken("instanceId")); Map map = GameMapComponent.Instance.Get(instanceId); if (map == null) { Log.Warning($"areaBattleServerEvent no area: {msg}"); return; } switch (Convert.ToString(msg.SelectToken("eventName"))) { case "unitDead": { OnUnitDead(map, msg); return; } case "message": { // 副本消息 map.GetComponent().OnMessageEvent(msg); return; } case "gameOver": { map.GetComponent().OnGameOver(map); return; } case "pickItem": { map.GetComponent().OnPickItem(msg); return; } case "KillBossEventB2R": { map.GetComponent().OnKillBoss(msg); return; } case "BattleReportEventB2R": { // 战斗统计事件 map.GetComponent().OnBattleReport(msg); return; } default: { Log.Error($"unknown area event: {msg}"); return; } } } /// /// player related battleServerEvent /// /// public static void PlayerBattleServerEvent(JObject msg) { Log.Debug($"PlayerBattleServerEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}"); switch (Convert.ToString(msg.SelectToken("eventName"))) { case "ConsumeItemEventB2R": { return; } case "interActiveItem": { return; } case "changeSceneProgress": { return; } case "TransUnitEventB2R": { return; } case "SummonMountEventB2R": { return; } case "ShowRebirthDialogueB2R": { return; } case "TriggerSceneEventB2R": { return; } case "PlayerExceptionEventB2R": { return; } } } /// /// task related battleServerEvent /// /// public static void TaskBattleServerEvent(JObject msg) { Log.Debug($"TaskBattleServerEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}"); } public static void MapNotifyEvent(JObject msg) { Log.Debug($"MapNotifyEvent msg: {JsonConvert.SerializeObject(msg, Formatting.Indented)}"); } /// /// 单位死亡 /// /// /// private static void OnUnitDead(Map map, JObject msg) { int unitType = Convert.ToInt32(msg.SelectToken("unitType")); // 攻击者 long hitFinalPlayerId = msg.SelectToken("hitFinal").ToString() == "" ? 0 : Convert.ToInt64(msg.SelectToken("hitFinal")); long belongPlayerId = msg.SelectToken("belongPlayerId").ToString() == "" ? 0 : Convert.ToInt64(msg.SelectToken("belongPlayerId")); long[] atkAssistantList = JsonConvert.DeserializeObject(Convert.ToString(msg.SelectToken("atkAssistantList")) ?? string.Empty); WNPlayer hitFinalPlayer = null; // 默认使用第一个摸怪玩家 if (belongPlayerId > 0) { hitFinalPlayer = map.GetPlayer(belongPlayerId); } if (hitFinalPlayer == null && hitFinalPlayerId > 0) { hitFinalPlayer = map.GetPlayer(hitFinalPlayerId); } switch (unitType) { case 0: // 怪物死亡 int unitTemplateId = Convert.ToInt32(msg.SelectToken("unitTemplateId")); Monster monsterProp = MonsterCategory.Instance.Get(unitTemplateId); if (monsterProp == null) { Log.Error($"unitDead not fount montster : {unitTemplateId}, {map.MapId}, {msg}"); } else { map.GetComponent().OnUnitDead(monsterProp, map); } break; case 1: // 玩家死亡 long unitPlayerId = Convert.ToInt64(msg.SelectToken("unitPlayerId")); if (hitFinalPlayerId <= 0) { // 被boss杀死 int attackerTemplateId = Convert.ToInt32(msg.SelectToken("attackerTemplateId")); Log.Debug($"玩家死亡...被boss杀死...playerId={unitPlayerId}, bossId={attackerTemplateId}"); } else { // 被玩家杀死 Log.Debug($"玩家死亡...被玩家杀死...playerId={unitPlayerId}, 攻击者={hitFinalPlayerId}"); } break; case 2: // 宠物死亡 break; } } } }