123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- using System;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- namespace ET.Server
- {
- /// <summary>
- /// 战斗服事件工具类
- /// </summary>
- public static class BattleServerEventHelper
- {
- /// <summary>
- /// area related battleServerEvent
- /// </summary>
- /// <param name="msg"></param>
- 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<MapEventComponent>().OnMessageEvent(msg);
- return;
- }
- case "gameOver":
- {
- map.GetComponent<MapEventComponent>().OnGameOver(map);
- return;
- }
- case "pickItem":
- {
- map.GetComponent<MapEventComponent>().OnPickItem(msg);
- return;
- }
- case "KillBossEventB2R":
- {
- map.GetComponent<MapEventComponent>().OnKillBoss(msg);
- return;
- }
- case "BattleReportEventB2R":
- {
- // 战斗统计事件
- map.GetComponent<MapEventComponent>().OnBattleReport(msg);
- return;
- }
- default:
- {
- Log.Error($"unknown area event: {msg}");
- return;
- }
- }
- }
- /// <summary>
- /// player related battleServerEvent
- /// </summary>
- /// <param name="msg"></param>
- 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;
- }
- }
- }
- /// <summary>
- /// task related battleServerEvent
- /// </summary>
- /// <param name="msg"></param>
- 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)}");
- }
- /// <summary>
- /// 单位死亡
- /// </summary>
- /// <param name="map"></param>
- /// <param name="msg"></param>
- 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<long[]>(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<MapEventComponent>().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;
- }
- }
- }
- }
|