Selaa lähdekoodia

【增加】玩家死亡5秒复活

johnclot69 2 vuotta sitten
vanhempi
commit
5877d89753

+ 14 - 3
DotNet/Hotfix/Scenes/Game/Map/MapEventComponentSystem.cs

@@ -53,7 +53,7 @@ namespace ET.Server
         /** 单位死亡事件 **/
         public static void OnUnitDead(this MapEventComponent self, Map map, JObject msg)
         {
-            Log.Debug($"怪物死亡处理...");
+            Log.Debug($"单位死亡...");
             int unitType = Convert.ToInt32(msg.SelectToken("unitType"));
             // 攻击者
             long hitFinalPlayerId = msg.SelectToken("hitFinal").ToString() == "" ? 0 : Convert.ToInt64(msg.SelectToken("hitFinal"));
@@ -83,8 +83,8 @@ namespace ET.Server
                         Log.Error($"unitDead not fount montster : {unitTemplateId}, {map.MapId}, {msg}");
                         return;
                     }
-                    // todo 怪物死亡处理逻辑,先暂时加入死亡列表
-                    self.MonsterDeadList.Add(unitTemplateId);
+                    // todo 怪物死亡处理逻辑
+                    Log.Debug($"怪物死亡处理...");
                     break;
                 case 1:
                     // 玩家死亡
@@ -101,6 +101,17 @@ namespace ET.Server
                         // 被玩家杀死
                         Log.Debug($"玩家死亡...被玩家杀死...playerId={unitPlayerId}, 攻击者={hitFinalPlayerId}");
                     }
+
+                    // 复活
+                    WNPlayer unitPlayer = map.GetPlayer(unitPlayerId);
+                    if (unitPlayer == null)
+                    {
+                        return;
+                    }
+
+                    unitPlayer.AddComponent<PlayerReliveTimeComponent, WNPlayer>(unitPlayer);
+                    unitPlayer.GetComponent<PlayerReliveTimeComponent>().ReliveTime = TimeHelper.ClientNowSeconds() + 5;
+
                     break;
                 case 2:
                     // 宠物死亡

+ 16 - 2
DotNet/Hotfix/Scenes/Game/Map/MapSystem.cs

@@ -1,7 +1,5 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
 using BattleIce;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
@@ -182,5 +180,21 @@ namespace ET.Server
             self.GetXmdsManager().removeUnit(self.Id.ToString().Trim(), unitId);
             await ETTask.CompletedTask;
         }
+
+        /// <summary>
+        /// 场景复活数据
+        /// </summary>
+        /// <param name="self"></param>
+        /// <param name="type">1:原地复活;2:出生点复活;3:复活点复活. 4:技能复活.</param>
+        public static string ReliveData(this Map self, ReliveType type)
+        {
+            JObject jsonObject = new ();
+            jsonObject.Add("type", (int)type);
+            jsonObject.Add("qty", 0);
+            jsonObject.Add("itemType", "diamond");
+            jsonObject.Add("hp", "88888");
+            jsonObject.Add("mp", "0");
+            return JsonConvert.SerializeObject(jsonObject, Formatting.Indented);
+        }
     }
 }

+ 34 - 0
DotNet/Hotfix/Scenes/Game/Player/PlayerReliveTimeComponentSystem.cs

@@ -0,0 +1,34 @@
+namespace ET.Server
+{
+    [FriendOf(typeof (PlayerReliveTimeComponent))]
+    public static class PlayerReliveTimeComponentSystem
+    {
+        public class PlayerReliveTimeComponentAwakeSystem: AwakeSystem<PlayerReliveTimeComponent, WNPlayer>
+        {
+            protected override void Awake(PlayerReliveTimeComponent self, WNPlayer player)
+            {
+                Log.Info($"创建玩家复活倒计时组件...");
+                self.Player = player;
+            }
+        }
+
+        public class PlayerReliveTimeComponentUpdateSystem: UpdateSystem<PlayerReliveTimeComponent>
+        {
+            protected override void Update(PlayerReliveTimeComponent self)
+            {
+                if (!(TimeHelper.ClientNowSeconds() - self.ReliveTime > 5) || self.ReliveTime == 0)
+                {
+                    return;
+                }
+
+                // 设置时间
+                self.ReliveTime = 0;
+
+                // 复活
+                self.Player.GetXmdsManager().revivePlayer(self.Player.GetId().ToString(), self.Player.Map.ReliveData(ReliveType.BORN));
+
+                self.Dispose();
+            }
+        }
+    }
+}

+ 11 - 0
DotNet/Model/Scenes/Game/Player/PlayerReliveTimeComponent.cs

@@ -0,0 +1,11 @@
+namespace ET.Server
+{
+    [ComponentOf(typeof (WNPlayer))]
+    public class PlayerReliveTimeComponent: Entity, IAwake<WNPlayer>, IUpdate
+    {
+        /** 复活时间 **/
+        public long ReliveTime { get; set; }
+        /** 玩家实体 **/
+        public WNPlayer Player { get; set; }
+    }
+}

+ 18 - 0
Unity/Assets/Scripts/Codes/Model/Share/Const/ConstGame.cs

@@ -135,4 +135,22 @@
         CARD_SKILL = 6,
     }
 
+    /**
+	 * 0:回城复活;1:原地复活;2:出生点复活;3:复活点复活;4:技能复活;5.随机点复活
+	 */
+    public enum ReliveType
+    {
+        /** 回城复活 */
+        CITY = 0,
+        /** 原地复活 */
+        NOW = 1,
+        /** 出生点复活 */
+        BORN = 2,
+        /** 复活点复活 */
+        PLACE = 3,
+        /** 技能复活 */
+        SKILL = 4,
+        /** 随机点复活 */
+        RANDOM = 5,
+    }
 }