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; } // 数据是否存在 if (map.GetUnitTemplateId(request.OpenId) == 0) { Log.Debug($"未找到单位玩家数据...openId={request.OpenId}"); return; } // 总点赞数 int totelLikes = 0; // 累计增加点赞数 if (map.UnitPlayerLikes.TryGetValue(request.OpenId, out int likes)) { totelLikes = likes + request.Likes; map.UnitPlayerLikes[request.OpenId] = totelLikes; } else { totelLikes = request.Likes; map.UnitPlayerLikes.Add(request.OpenId, totelLikes); } int initialLevel = 1; // 初始等级 int maxLevel = 3; // 等级上限 int level = initialLevel; // 玩家等级 int levelUpCount = totelLikes / 10; // 计算升级次数 // 根据升级次数更新等级 for (int i = 0; i < levelUpCount; i++) { level++; // 等级加1 // 如果等级超过上限,将等级设置为上限 if (level > maxLevel) { level = maxLevel; break; } } // 模板id int oldTemplateId = map.GetUnitTemplateId(request.OpenId); int newTemplateId = ((oldTemplateId / 10) * 10) + level; if (oldTemplateId != newTemplateId) { // 当前战斗服objId int curObjId = map.GetUnitObjId(request.OpenId); // 移除原单位 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.AddUnitObjId(request.OpenId, curObjId); map.AddUnitPlayer(request.OpenId, newTemplateId); } await ETTask.CompletedTask; } } }