R2G_AddLevelHandler.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. namespace ET.Server
  2. {
  3. /// <summary>
  4. /// 抖音api http回调, 点赞10次增加等级
  5. /// </summary>
  6. [ActorMessageHandler(SceneType.Game)]
  7. public class R2G_AddLevelHandler : AMActorHandler<Scene, R2G_AddLevel>
  8. {
  9. protected override async ETTask Run(Scene scene, R2G_AddLevel request)
  10. {
  11. // 房间是否存在
  12. Map map = scene.GetComponent<GameMapComponent>().GetMapByRoomId(request.RoomId);
  13. if (map == null)
  14. {
  15. Log.Debug($"未找到房间...roomId={request.RoomId}");
  16. return;
  17. }
  18. // 数据是否存在
  19. if (map.GetUnitTemplateId(request.OpenId) == 0)
  20. {
  21. Log.Debug($"未找到单位玩家数据...openId={request.OpenId}");
  22. return;
  23. }
  24. // 总点赞数
  25. int totelLikes = 0;
  26. // 累计增加点赞数
  27. if (map.UnitPlayerLikes.TryGetValue(request.OpenId, out int likes))
  28. {
  29. totelLikes = likes + request.Likes;
  30. map.UnitPlayerLikes[request.OpenId] = totelLikes;
  31. }
  32. else
  33. {
  34. totelLikes = request.Likes;
  35. map.UnitPlayerLikes.Add(request.OpenId, totelLikes);
  36. }
  37. int initialLevel = 1; // 初始等级
  38. int maxLevel = 3; // 等级上限
  39. int level = initialLevel; // 玩家等级
  40. int levelUpCount = totelLikes / 10; // 计算升级次数
  41. // 根据升级次数更新等级
  42. for (int i = 0; i < levelUpCount; i++)
  43. {
  44. level++; // 等级加1
  45. // 如果等级超过上限,将等级设置为上限
  46. if (level > maxLevel)
  47. {
  48. level = maxLevel;
  49. break;
  50. }
  51. }
  52. // 模板id
  53. int oldTemplateId = map.GetUnitTemplateId(request.OpenId);
  54. int newTemplateId = ((oldTemplateId / 10) * 10) + level;
  55. if (oldTemplateId != newTemplateId)
  56. {
  57. // 当前战斗服objId
  58. int curObjId = map.GetUnitObjId(request.OpenId);
  59. // 移除原单位
  60. await map.RemovePointUnit(curObjId);
  61. string[] pos = map.GetCurXY().Split(";");
  62. Struct.MonsterUnit unit = new Struct.MonsterUnit();
  63. unit.id = newTemplateId;
  64. unit.force = 1;
  65. unit.x = int.Parse(pos[0]);
  66. unit.y = int.Parse(pos[1]);
  67. unit.autoGuard = true;
  68. curObjId = await map.AddUnits(unit, true);
  69. map.AddUnitObjId(request.OpenId, curObjId);
  70. map.AddUnitPlayer(request.OpenId, newTemplateId);
  71. }
  72. await ETTask.CompletedTask;
  73. }
  74. }
  75. }