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;
}
}
}
}