using System.Text.Json; namespace ET.Server { /// /// 抖音api http回调, 点赞10次增加等级 /// [ActorMessageHandler(SceneType.Game)] public class R2G_AddLevelHandler : AMActorHandler { protected override async ETTask Run(Scene scene, R2G_AddLevel request) { // 房间是否存在 Map map = scene.GetComponent().GetMapByRoomId(request.RoomId); if (map == null) { Log.Debug($"未找到房间...roomId={request.RoomId}"); return; } // 数据是否存在 Struct.UnitPlayerData unitPlayerData = map.GetUnitPlayerData(request.OpenId) ?? map.AddUnitPlayer(request.OpenId, 0, 0, request.Likes); // 累计增加点赞数 unitPlayerData.Likes += request.Likes; map.TotalLikeNum += request.Likes; int initialLevel = 1; // 初始等级 int maxLevel = 3; // 等级上限 int configNum = 1000; //到达多少值后,总数量减去这个值,然后继续累加 int level = initialLevel; // 玩家等级 long levelUpCount = unitPlayerData.Likes / 10; // 计算升级次数 // 根据升级次数更新等级 for (long i = 0; i < levelUpCount; i++) { level++; // 等级加1 // 如果等级超过上限,将等级设置为上限 if (level > maxLevel) { level = maxLevel; break; } } // 模板id int oldTemplateId = unitPlayerData.TemplateId; int newTemplateId = ((oldTemplateId / 10) * 10) + level; if (oldTemplateId != newTemplateId) { // 当前战斗服objId int curObjId = unitPlayerData.ObjId; // 移除原单位 await map.RemovePointUnit(curObjId); string[] pos = map.GetCurXY().Split(";"); Struct.MonsterUnit unit = new Struct.MonsterUnit(); unit.id = newTemplateId; unit.force = 1; unit.x = int.Parse(pos[0]); unit.y = int.Parse(pos[1]); unit.autoGuard = true; curObjId = await map.AddUnits(unit, true); map.AddUnitPlayer(request.OpenId, newTemplateId, curObjId, unitPlayerData.Likes); } // 推送客户端 if (map.Player != null) { MessageHelper.SendToClient(map.Player, new G2C_LikeInfoPush{ TotalNum = map.TotalLikeNum, ConfigNum = configNum}); } // 点赞>=ConfigNum时, 通知战斗服 if (map.TotalLikeNum >= configNum) { 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; } } }