using System.Numerics; using System.Text.Json; namespace ET.Server { /// /// 抖音推送回调, 点赞 /// [ActorMessageHandler(SceneType.Game)] public class R2G_LiveLikeHandler : AMActorHandler { protected override async ETTask Run(Scene scene, R2G_LiveLike request) { // 房间是否存在 Map map = scene.GetComponent().GetMapByRoomId(request.RoomId); if (map == null) { Log.Debug($"未找到房间...roomId={request.RoomId}"); return; } // 数据是否存在 Struct.UnitPlayerData unitPlayerData = map.GetUnitPlayerByOpenId(request.OpenId); if (unitPlayerData == null) { int[] units = new int[] { 101, 121, 111, 131 }; Vector2 pos = map.GetRandomPlayerPos(); Struct.MonsterUnit unit = new Struct.MonsterUnit(); unit.id = RandomGenerator.RandomArray(units); unit.force = 1; unit.x = pos.X; unit.y = pos.Y; unit.autoGuard = true; unit.name = request.NickName; unit.alias = request.Url; int objId = await map.AddUnits(unit, true); unitPlayerData = map.AddUnitPlayer(request.OpenId, unit.id, objId, 0, request.NickName, request.Url); } // 累计增加点赞数 unitPlayerData.Likes += request.Likes; map.TotalLikeNum += request.Likes; // 点赞增加贡献值 unitPlayerData.ContributeValue += request.Likes; const int configNum = 1000; //到达多少值后,总数量减去这个值,然后继续累加 bool notifyBattleServer = false; // 点赞总数>=ConfigNum时, 通知战斗服 if (map.TotalLikeNum >= configNum) { // 设置总数 map.TotalLikeNum -= configNum; map.ConfigNum += 1; notifyBattleServer = true; } // 推送客户端 if (map.Player != null) { long totalNum = map.ConfigNum * configNum + map.TotalLikeNum; MessageHelper.SendToClient(map.Player, new G2C_LikeInfoPush{ TotalNum = totalNum, ConfigNum = configNum}); } if (notifyBattleServer) { Struct.TriggerEventNotify notify = new Struct.TriggerEventNotify(); notify.message = BattleNotify.TiktokLike_energy.ToString(); notify.TriggerUnits = unitPlayerData.ObjId.ToString(); map.GetXmdsManager().notifyBattleServer(map.Id.ToString(), NotifyBSName.TriggerEvent, JsonSerializer.Serialize(notify)); } await ETTask.CompletedTask; } } }