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