Exemplo n.º 1
0
        public override void OnPlayerEnterOver(ObjPlayer player)
        {
            if (mReliveTrigger.ContainsKey(player.ObjId))
            {
                var trigger = mReliveTrigger[player.ObjId];
                mReliveTrigger.Remove(player.ObjId);
                SceneServerControl.Timer.DeleteTrigger(trigger);
                if (DateTime.Now > trigger.Time)
                {
                    FixPostion(player);
                    player.Relive();


                    PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerRelive----------Time Over");
                }
                else
                {
                    var reliveObj = SceneServerControl.Timer.CreateTrigger(trigger.Time, () =>
                    {
                        if (mLeaveTrigger.ContainsKey(player.ObjId))
                        {
                            return;
                        }
                        FixPostion(player);
                        player.Relive();
                        mReliveTrigger.Remove(player.ObjId);

                        PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerRelive----------Time Over");
                    });
                    mReliveTrigger.Add(player.ObjId, reliveObj);
                    //通知死者,复活倒计时
                    player.Proxy.NotifyCountdown((ulong)trigger.Time.ToBinary(), (int)eCountdownType.BattleRelive);
                }
            }
        }
Exemplo n.º 2
0
        public override void AfterPlayerEnterOver(ObjPlayer player)
        {
            if (player.IsDead())
            {
                player.Relive();
            }
            else
            {
                player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
                player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
            }

            if (mPlayerInfo.ContainsKey(player.ObjId))
            {
                return;
            }

            mPlayerInfo.Add(player.ObjId, player.GetName());
            mPlayers.Add(player);

            // 限制buff
            player.AddBuff(3001, 1, player);
            // 同步位置
            player.SyncCharacterPostion();

            if (Trggers[(int)eDungeonTimerType.WaitStart] == null)
            {
                StartTimer(eDungeonTimerType.WaitStart, DateTime.Now.AddSeconds(5), TimeOverStart);
            }
            NotifyDungeonTime(player, eDungeonTimerType.WaitStart);

            OnTriggerStartWarn(player);
        }
Exemplo n.º 3
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            base.OnPlayerLeave(player);

            //恢复满血满蓝
            if (player.IsDead())
            {
                player.Relive();
            }
            else
            {
                player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
                player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
            }

            var campId = player.GetCamp();

            if (campId == -1)
            {
                player.SetCamp(0);
                return;
            }
            var camp = Camps[campId];

            camp.Players.Remove(player);
            player.SetCamp(0);

            CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
        }
Exemplo n.º 4
0
        private void PlayerRelive(ObjPlayer player)
        {
            var campId = player.GetCamp();

            player.SetPosition(Camps[campId].RelivePos);
            player.Relive();
        }
Exemplo n.º 5
0
        public override void AutoRelive(ObjPlayer player)
        {
            // 不需要调用基类
            if (player == null)
            {
                return;
            }

            player.SetPosition(RelivePos.Range());
            player.Relive();
        }
Exemplo n.º 6
0
 private void PlayerRelive(ObjPlayer player)
 {
     //随机位置重生
     player.SetPosition(RelivePos.Range());
     foreach (var buffId in DieBuffId)
     {
         player.AddBuff(buffId, 1, player);
     }
     player.Relive();
     player.AddBuff(InvincibleBuffId, 1, player);
 }
Exemplo n.º 7
0
 private void ResetPlayer(ObjPlayer player)
 {
     if (player.IsDead())
     {
         player.Relive();
     }
     else
     {
         player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
         player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
     }
 }
Exemplo n.º 8
0
        public override void AfterPlayerEnterOver(ObjPlayer player)
        {
            if (player.IsDead())
            {
                player.Relive();
            }
            else
            {
                player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
                player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
            }

            ChangeDifficulty(PlayerCount);

            mPlayer = player;
            pvpId   = player.mDbData.P1vP1CharacterId;
            if (mAutoPlayer == null)
            {
                if (mHasHold)
                {
                    if (Trggers[(int)eDungeonTimerType.WaitStart] == null)
                    {
                        StartTimer(eDungeonTimerType.WaitStart, DateTime.Now.AddSeconds(5), TimeOverStart);
                    }
                    NotifyDungeonTime(player, eDungeonTimerType.WaitStart);
                    Exdata = 1;
                }
                else
                {
                    StartDungeon();
                    Exdata = 0;
                }

                player.AddBuff(3001, 1, player);
                if (StaticData.IsRobot(pvpId))
                {
                    var tbScene = Table.GetScene(TypeId);
                    mAutoPlayer = CreateAutoPlayer((int)pvpId,
                                                   new Vector2((float)tbScene.PVPPosX, (float)tbScene.PVPPosZ), new Vector2(1, 0));
                    mAutoPlayer.AddBuff(3001, 1, mAutoPlayer);
                }
                else
                {
                    CoroutineFactory.NewCoroutine(GetAutoPlayerInScene, pvpId).MoveNext();
                }
            }
        }
Exemplo n.º 9
0
 public override void OnPlayerLeave(ObjPlayer player)
 {
     if (State <= eDungeonState.Start)
     {
         var result = new FubenResult();
         result.CompleteType = (int)eDungeonCompleteType.Quit;
         Complete(player.ObjId, result);
     }
     if (player.IsDead())
     {
         player.Relive();
     }
     else
     {
         player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
         player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
     }
 }
Exemplo n.º 10
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            //修改副本难度
            ChangeDifficulty(PlayerCount);

            if (State <= eDungeonState.Start)
            {
                var result = new FubenResult();
                result.CompleteType = (int)eDungeonCompleteType.Quit;
                Complete(player.ObjId, result);
            }
            if (player.IsDead())
            {
                player.Relive();
            }
            else
            {
                player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
                player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
            }
            PlayerLog.WriteLog(player.ObjId, "CloseDungeon character is full! c={0}", player.ObjId);
            CoroutineFactory.NewCoroutine(CloseDungeon).MoveNext();
        }
Exemplo n.º 11
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            var side = GetPlayerSide(player);

            if (side == -1)
            {
                Logger.Error("OnPlayerDie GetPlayerSide  ObjOd{0}", player.ObjId);
                return;
            }
            PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------PlayerDie----------KillId={0}", characterId);
            //死人了,重置一下trigger area的状态
            var playerPos = player.GetPosition();
            var area      = mAreaDict.Values.FirstOrDefault(a => a.IsInArea(playerPos));

            if (area != null)
            {
                OnTriggerAreaPlayersChanged(area);
            }

            var reliveObj = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(10.0f), () =>
            {
                if (mLeaveTrigger.ContainsKey(player.ObjId))
                {
                    return;
                }
                mReliveTrigger.Remove(player.ObjId);
                FixPostion(player);
                player.Relive();
                PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------PlayerRelive----------Time Over");
            });

            mReliveTrigger.Add(player.ObjId, reliveObj);

            var caster = FindCharacter(characterId);

            if (caster == null)
            {
                return;
            }
            caster = caster.GetRewardOwner();
            var strColor = "";

            if (side == 0)
            {
                strColor = "FF0000";//红色
            }
            else if (side == 1)
            {
                strColor = "2866E1";//蓝色
            }
            //
            var args = new List <string>();

            args.Add(strColor);
            args.Add(caster.GetName());
            var content = Utils.WrapDictionaryId(224008, args);

            player.Proxy.NotifyCountdown((ulong)DateTime.Now.AddSeconds(10f).ToBinary(),
                                         (int)eCountdownType.BattleRelive);

            player.Proxy.NotifyBattleReminder(14, content, 1);
            args.Clear();
            args.Add(caster.GetName());//此处 A 击杀了 B   player是被击杀者
            args.Add(player.GetName());
            string text = side == 1 ? Utils.WrapDictionaryId(61000, args) : Utils.WrapDictionaryId(61001, args);

            PushActionToAllPlayer(p =>
            {
                p.Proxy.NotifyBattleReminder(14, text, 1);
            });
        }
Exemplo n.º 12
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            var side = GetPlayerSide(player);

            if (side == -1)
            {
                Logger.Error("OnPlayerDie GetPlayerSide  ObjOd{0}", player.ObjId);
                return;
            }
            var bossName = "";
            var caster   = FindCharacter(characterId);

            if (caster == null)
            {
                return;
            }
            caster = caster.GetRewardOwner();
            var strColor1 = "";
            var strColor2 = "";

            if (side == 0)
            {
                bossName  = Utils.AddDictionaryId(220451);
                strColor1 = Utils.AddDictionaryId(220453);
                strColor2 = Utils.AddDictionaryId(220454);
            }
            else if (side == 1)
            {
                bossName  = Utils.AddDictionaryId(220452);
                strColor1 = Utils.AddDictionaryId(220454);
                strColor2 = Utils.AddDictionaryId(220453);
            }
            //所有获得2层BUFF-
            Add3003Buff(side, 2, true);

            var args = new List <string>();

            args.Add(strColor1);
            args.Add(caster.GetName());
            args.Add(strColor2);
            args.Add(player.GetName());
            args.Add(bossName);
            args.Add(mBuffLayer[side].ToString());

            var reliveTime = DateTime.Now.AddSeconds(10);
            var reliveObj  = SceneServerControl.Timer.CreateTrigger(reliveTime, () =>
            {
                if (mLeaveTrigger.ContainsKey(player.ObjId))
                {
                    return;
                }
                FixPostion(player);
                player.Relive();
                mReliveTrigger.Remove(player.ObjId);

                PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerRelive----------Time Over");
            });

            mReliveTrigger.Add(player.ObjId, reliveObj);

            PlayerLog.WriteLog(player.ObjId, "----HLKBattle------PlayerDie----------KillId={0}", caster.ObjId);

            //通告,某人被某人杀了
            //var info = Utils.WrapDictionaryId(220421, args);
            //BroadcastScene(
            //    objPlayer =>
            //    {
            //        if (objPlayer != null && objPlayer.Proxy != null)
            //        {
            //            objPlayer.Proxy.NotifyBattleReminder(14, info, 1);
            //        }
            //    });


            args.Clear();
            args.Add(caster.GetName());//此处 A 击杀了 B   player是被击杀者
            args.Add(player.GetName());
            string text = side == 1 ? Utils.WrapDictionaryId(61000, args) : Utils.WrapDictionaryId(61001, args);

            PushActionToAllPlayer(p =>
            {
                p.Proxy.NotifyBattleReminder(14, text, 1);
            });



            //通知死者,复活倒计时
            player.Proxy.NotifyBattleReminder(14, Utils.WrapDictionaryId(220450), 1);
            player.Proxy.NotifyCountdown((ulong)reliveTime.ToBinary(), (int)eCountdownType.BattleRelive);
        }