R2G_AddLevelHandler.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System.Text.Json;
  2. namespace ET.Server
  3. {
  4. /// <summary>
  5. /// 抖音api http回调, 点赞10次增加等级
  6. /// </summary>
  7. [ActorMessageHandler(SceneType.Game)]
  8. public class R2G_AddLevelHandler : AMActorHandler<Scene, R2G_AddLevel>
  9. {
  10. protected override async ETTask Run(Scene scene, R2G_AddLevel request)
  11. {
  12. // 房间是否存在
  13. Map map = scene.GetComponent<GameMapComponent>().GetMapByRoomId(request.RoomId);
  14. if (map == null)
  15. {
  16. Log.Debug($"未找到房间...roomId={request.RoomId}");
  17. return;
  18. }
  19. // 数据是否存在
  20. Struct.UnitPlayerData unitPlayerData = map.GetUnitPlayerData(request.OpenId) ?? map.AddUnitPlayer(request.OpenId, 0, 0, request.Likes);
  21. // 累计增加点赞数
  22. unitPlayerData.Likes += request.Likes;
  23. map.TotalLikeNum += request.Likes;
  24. int initialLevel = 1; // 初始等级
  25. int maxLevel = 3; // 等级上限
  26. int configNum = 1000; //到达多少值后,总数量减去这个值,然后继续累加
  27. int level = initialLevel; // 玩家等级
  28. long levelUpCount = unitPlayerData.Likes / 10; // 计算升级次数
  29. // 根据升级次数更新等级
  30. for (long i = 0; i < levelUpCount; i++)
  31. {
  32. level++; // 等级加1
  33. // 如果等级超过上限,将等级设置为上限
  34. if (level > maxLevel)
  35. {
  36. level = maxLevel;
  37. break;
  38. }
  39. }
  40. // 模板id
  41. int oldTemplateId = unitPlayerData.TemplateId;
  42. int newTemplateId = ((oldTemplateId / 10) * 10) + level;
  43. if (oldTemplateId != newTemplateId)
  44. {
  45. // 当前战斗服objId
  46. int curObjId = unitPlayerData.ObjId;
  47. // 移除原单位
  48. await map.RemovePointUnit(curObjId);
  49. string[] pos = map.GetCurXY().Split(";");
  50. Struct.MonsterUnit unit = new Struct.MonsterUnit();
  51. unit.id = newTemplateId;
  52. unit.force = 1;
  53. unit.x = int.Parse(pos[0]);
  54. unit.y = int.Parse(pos[1]);
  55. unit.autoGuard = true;
  56. curObjId = await map.AddUnits(unit, true);
  57. map.AddUnitPlayer(request.OpenId, newTemplateId, curObjId, unitPlayerData.Likes);
  58. }
  59. // 点赞>=ConfigNum时, 通知战斗服
  60. if (map.TotalLikeNum >= configNum)
  61. {
  62. // 设置总数
  63. map.TotalLikeNum -= configNum;
  64. map.ConfigNum += 1;
  65. Struct.TriggerEventNotify notify = new Struct.TriggerEventNotify();
  66. notify.message = BattleNotify.TiktokLike_energy.ToString();
  67. notify.TriggerUnits = unitPlayerData.ObjId.ToString();
  68. map.GetXmdsManager().notifyBattleServer(map.Id.ToString(), NotifyBSName.TriggerEvent, JsonSerializer.Serialize(notify));
  69. }
  70. // 推送客户端
  71. if (map.Player != null)
  72. {
  73. long totalNum = map.ConfigNum * configNum + map.TotalLikeNum;
  74. MessageHelper.SendToClient(map.Player, new G2C_LikeInfoPush{ TotalNum = totalNum, ConfigNum = configNum});
  75. }
  76. await ETTask.CompletedTask;
  77. }
  78. }
  79. }