CTT/Server/Hotfix/Game/Helper/UnitHelper.cs

98 lines
4.0 KiB
C#
Executable File

using System;
using System.Collections.Generic;
using System.Text;
using MongoDB.Bson;
namespace ET
{
public class UnitHelper
{
public static async ETTask<Unit> Query(Entity domain, long id)
{
try
{
Unit unit = EntityFactory.CreateWithId<Unit>(domain, id);
PlayerData data = await DBComponent.Instance.Query<PlayerData>(id);
unit.AddComponent(data);
Character character = await DBComponent.Instance.Query<Character>(id);
unit.AddComponent(character);
NumericComponent num = await DBComponent.Instance.Query<NumericComponent>(id);
unit.AddComponent(num);
UnitSkillComponent unitSkill = await DBComponent.Instance.Query<UnitSkillComponent>(id);
unit.AddComponent(unitSkill);
//!玩家设置
UserSetting setting = await DBComponent.Instance.Query<UserSetting>(id);
unit.AddComponent(setting);
//!任务
UnitTask unitTask = await DBComponent.Instance.Query<UnitTask>(id);
unit.AddComponent(unitTask);
//!背包
Bag bag = await DBComponent.Instance.Query<Bag>(id);
unit.AddComponent(bag);
UnitScene unitScene = await DBComponent.Instance.Query<UnitScene>(id);
unit.AddComponent(unitScene);
StarSoulBag starSoulBag = await DBComponent.Instance.Query<StarSoulBag>(id);
unit.AddComponent(starSoulBag);
Pet pet = await DBComponent.Instance.Query<Pet>(id);
unit.AddComponent(pet);
unit.AddComponent<Combat>();
return unit;
}
catch (Exception e)
{
Log.Error(e);
}
return null;
}
public static async ETTask<T> Query<T>(int zone,long id)where T:Entity
{
try
{
long mapInstanceId = StartSceneConfigCategory.Instance.GetBySceneName(zone, SceneType.UserCache.ToString()).SceneId;
U2M_GetComponent getComponent= (U2M_GetComponent) await MessageHelper.CallActor(mapInstanceId, new M2U_GetComponent() { UserId = id, type = typeof (T).Name });
if (getComponent.component == null) return null;
T t = getComponent.component as T;
return t;
}
catch (Exception e)
{
Log.Error(e);
}
return null;
}
public static void Save<T>(Unit unit) where T : Entity
{
Entity entity = unit.GetComponent<T>();
long mapInstanceId = StartSceneConfigCategory.Instance.GetBySceneName(entity.DomainZone(), SceneType.UserCache.ToString()).SceneId;
MessageHelper.SendActor(mapInstanceId, new M2U_WriteComponent() { Id = entity.Id, type = typeof (T).Name, component =entity });
}
public static void SaveComponenet<T>(T t) where T : Entity
{
// await DBComponent.Instance.Save(t);
long mapInstanceId = StartSceneConfigCategory.Instance.GetBySceneName(t.DomainZone(), SceneType.UserCache.ToString()).SceneId;
MessageHelper.SendActor(mapInstanceId, new M2U_WriteComponent() { Id = t.Id, type = typeof (T).Name, component =t });
}
/// <summary>
/// 设置位置信息以及人物信息
/// </summary>
/// <param name="unit"></param>
/// <param name="unitInfo"></param>
/// <param name="pvpUnitCharacter"></param>
public static void SetUnitInfo(Unit unit, UnitPosInfo unitInfo)
{
UnitScene unitScene = unit.GetComponent<UnitScene>();
if (unitScene == null)
{
Log.Error($"unitScene == null where id = {unit.Id}");
return;
}
unitInfo.X = unitScene.X;
unitInfo.Y = unitScene.Y;
unitInfo.YAngle = unitScene.YAngle;
}
}
}