コード例 #1
0
ファイル: AllianceWar.cs プロジェクト: tuita520/mmorpgserver
        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();
        }
コード例 #2
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            if (player == null)
            {
                return;
            }

            base.OnPlayerLeave(player);

            // 解除buff
            PushActionToAllObj(npc2 =>
            {
                var tempNpc = npc2 as ObjNPC;
                if (tempNpc == null)
                {
                    return;
                }
                if (!tempNpc.IsMonster())
                {
                    return;
                }


                tempNpc.DeleteBuff(buffId, eCleanBuffType.EffectOver);
            });
        }
コード例 #3
0
        public override void OnPlayerEnter(ObjPlayer player)
        {
            base.OnPlayerEnter(player);

            PlayerEnterTimes[player.ObjId] = DateTime.Now;
            FetchPlayerExData(player);
        }
コード例 #4
0
ファイル: AllianceWar.cs プロジェクト: tuita520/mmorpgserver
        private void PlayerRelive(ObjPlayer player)
        {
            var campId = player.GetCamp();

            player.SetPosition(Camps[campId].RelivePos);
            player.Relive();
        }
コード例 #5
0
//         public override void OnPlayerEnter(ObjPlayer player)
//         {
//             base.OnPlayerEnter(player);
//
//         }

        public override void OnPlayerEnterOver(ObjPlayer player)
        {
            base.OnPlayerEnterOver(player);
            Dirty = true;
            CoroutineFactory.NewCoroutine(ApplyPlayerExdata, player).MoveNext();
            player.SyncCharacterPostion();
        }
コード例 #6
0
        public override void OnPlayerRelive(ObjPlayer player, bool byItem)
        {
            base.OnPlayerRelive(player, byItem);
            foreach (var buffId in DieBuffId)
            {
                player.AddBuff(buffId, 1, player);
            }
            if (!byItem)
            {
                //player.SetPosition(RelivePos.Range());
                //player.SyncCharacterPostion();
                player.AddBuff(InvincibleBuffId, 1, player);
            }

            PushActionToAllPlayer(proxyPlayer =>
            {
                if (!proxyPlayer.Active)
                {
                    return;
                }

                // 向客户端刷新副本信息
                Msg.Int32OneList.Clear();
                Msg.Int32OneList.Add(GetAlivePlayerNum());
                Msg.Int32OneList.Add(PlayerCount);
                proxyPlayer.Proxy.NotifyRefreshDungeonInfo(Msg);
            });
        }
コード例 #7
0
ファイル: JewellWars.cs プロジェクト: tuita520/mmorpgserver
 void DropPoint(int point, ObjPlayer player)
 {
     for (int i = 0; i < checkenTableList.Count; i++)
     {
         var itemChecken = checkenTableList[i];
         if (point >= itemChecken.ExData1)
         {
             var count = (int)Math.Floor((float)point / (float)itemChecken.ExData1);
             point = point % itemChecken.ExData1;
             if (point > 0 && i + 1 == checkenTableList.Count)
             {
                 count += 1;
             }
             Vector2 v2 = new Vector2(player.GetPosition().X + MyRandom.Random(-randomNum, randomNum), player.GetPosition().Y + MyRandom.Random(-randomNum, randomNum));
             CreateDropItem(4, new List <ulong>(), 0, itemChecken.ItemID[2], count, v2);
         }
         else
         {
             if (i + 1 == checkenTableList.Count) //last
             {
                 Vector2 v2 = new Vector2(player.GetPosition().X + MyRandom.Random(-randomNum, randomNum), player.GetPosition().Y + MyRandom.Random(-randomNum, randomNum));
                 CreateDropItem(4, new List <ulong>(), 0, itemChecken.ItemID[2], 1, player.GetPosition());
             }
         }
     }
 }
コード例 #8
0
        public override void ExitDungeon(ObjPlayer player)
        {
//强退的玩家,直接副本结束
            Log(Logger, "ExitDungeon:State = {0}", State);

            if (State <= eDungeonState.Start)
            {
                if (mQuitPlayers.ContainsKey(player.ObjId))
                {
                    Logger.Error("ExitDungeon Error mQuitPlayers.ContainsKey({0})", player.ObjId);
                    return;
                }
                mQuitPlayers.Add(player.ObjId, player);

                var result = new FubenResult();
                result.CompleteType = (int)eDungeonCompleteType.Quit;
                Complete(player.ObjId, result);

                if (PlayerCount == 1 && mDropPlayers.Count == 0)
                {
//没人掉线,且强退副本,30s后关闭副本
                    EnterAutoClose(30);
                }
            }
        }
コード例 #9
0
        public void OnPlayerEnter(DungeonScene _this, ObjPlayer player)
        {
            Scene.GetImpl().OnPlayerEnter(_this, player);

            //修改副本难度
            _this.ChangeDifficulty(_this.PlayerCount);

            var now = DateTime.Now;

            if (_this.GetTriggerTime(eDungeonTimerType.WaitStart) > now)
            {
                _this.NotifyDungeonTime(player, eDungeonTimerType.WaitStart);
            }
            else if (_this.GetTriggerTime(eDungeonTimerType.WaitExtraTimeStart) > now)
            {
                _this.NotifyDungeonTime(player, eDungeonTimerType.WaitExtraTimeStart);
            }
            else if (_this.GetTriggerTime(eDungeonTimerType.WaitEnd) > now)
            {
                _this.NotifyDungeonTime(player, eDungeonTimerType.WaitEnd);
            }
            else
            {
                _this.NotifyDungeonTime(player, eDungeonTimerType.WaitClose);
            }
        }
コード例 #10
0
        public void OnPlayerLeave(DungeonScene _this, ObjPlayer player)
        {
            Scene.GetImpl().OnPlayerLeave(_this, player);

            //修改副本难度
            _this.ChangeDifficulty(_this.PlayerCount);
        }
コード例 #11
0
ファイル: GameMaster.cs プロジェクト: tuita520/mmorpgserver
        //开始创建副本
        public IEnumerator NotifyCreateChangeSceneCoroutine(Coroutine co,
                                                            ObjPlayer Character,
                                                            int scneneId,
                                                            int x,
                                                            int y,
                                                            AsyncReturnValue <ErrorCodes> error)
        {
            //GM命令切换场景,根据合服ID进行
            var serverLogicId = SceneExtension.GetServerLogicId(Character.ServerId);
            var sceneInfo     = new ChangeSceneInfo
            {
                SceneId   = scneneId,
                ServerId  = serverLogicId,
                SceneGuid = 0,
                Type      = (int)eScnenChangeType.Position
            };

            sceneInfo.Guids.Add(Character.ObjId);
            sceneInfo.Pos = new SceneParam();
            sceneInfo.Pos.Param.Add(x);
            sceneInfo.Pos.Param.Add(y);
            Character.BeginChangeScene();
            var msgChgScene = SceneServer.Instance.SceneAgent.SBChangeSceneByTeam(Character.ObjId, sceneInfo);

            yield return(msgChgScene.SendAndWaitUntilDone(co, TimeSpan.FromSeconds(30)));
        }
コード例 #12
0
 public override void ExitDungeon(ObjPlayer player)
 {
     if (State <= eDungeonState.Start)
     {
         mQuitPlayers.Add(player.ObjId, player);
     }
 }
コード例 #13
0
ファイル: SceneManager.cs プロジェクト: tuita520/mmorpgserver
        //获取成员的完整信息
        private IEnumerator NotifyChangeScene(Coroutine coroutine, ObjPlayer obj, int sceneId)
        {
            var sceneSimpleData = SceneServer.Instance.TeamAgent.SSNotifyPlayerChangeScene(obj.ObjId, obj.ServerId,
                                                                                           obj.ObjId, sceneId, obj.GetLevel(), obj.Attr.GetFightPoint());

            yield return(sceneSimpleData.SendAndWaitUntilDone(coroutine));
        }
コード例 #14
0
ファイル: SceneManager.cs プロジェクト: tuita520/mmorpgserver
        public void CheckAvgLevelBuff(SceneManager _this, ObjPlayer objPlayer)
        {
            objPlayer.DeleteBuff(319, eCleanBuffType.TimeOver);
            var serverId = SceneExtension.GetServerLogicId(objPlayer.ServerId);
            var avgLevel = _this.GetAvgLevel(serverId);

            if (avgLevel <= 150)
            {
                return;
            }
            var playerLevel = objPlayer.GetLevel();

            if (playerLevel < _this.minLevel)
            {
                return;
            }
            if (playerLevel + _this.minDev > avgLevel)
            {
                return;
            }
            var a         = (_this.maxExpMul - 2.0f) / (_this.maxDev - _this.minDev);
            var b         = _this.maxExpMul - a * _this.maxDev;
            var buffLevel = ((avgLevel - playerLevel) * a + b);

            if (buffLevel > _this.maxExpMul)
            {
                buffLevel = _this.maxExpMul;
            }
            objPlayer.AddBuff(319, (int)buffLevel * 100, objPlayer);
        }
コード例 #15
0
ファイル: JewellWars.cs プロジェクト: tuita520/mmorpgserver
        public override void OnPlayerEnterOver(ObjPlayer player)
        {
            if (player == null)
            {
                return;
            }
            base.OnPlayerEnterOver(player);
            int idx = _playerList.FindIndex(r => r.objId == player.ObjId);

            if (idx >= 0)
            {
                _playerList.RemoveAt(idx);
            }

            JPlayer p = new JPlayer();

            p.objId = player.ObjId;
            p.name  = player.GetName();
            p.lv    = 1;
            _playerList.Add(p);
            var tb = Table.GetCheckenLv(p.lv);

            if (tb != null)
            {//buff
                player.AddBuff(tb.BaseBuff, 1, player);
            }
            SendRadius(player);
        }
コード例 #16
0
        public override void ExitDungeon(ObjPlayer player)
        {
//玩家强退,1s之后关闭副本
            Log(Logger, "ExitDungeon:player id = {0}, name = {1}", player.ObjId, player.GetName());

            EnterAutoClose(30);
        }
コード例 #17
0
 public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
 {
     if (player == null)
     {
         return;
     }
 }
コード例 #18
0
        private IEnumerator PlayerEnter(Coroutine coroutine, ObjPlayer player)
        {
            var msg = SceneServer.Instance.TeamAgent.SSCharacterEnterBattle(player.ObjId, mFubenRecord.Id, Guid,
                                                                            player.ObjId);

            yield return(msg.SendAndWaitUntilDone(coroutine));
        }
コード例 #19
0
ファイル: SceneManager.cs プロジェクト: tuita520/mmorpgserver
        public Scene EnterScene(SceneManager _this, ObjPlayer obj, ulong guid)
        {
            var scene = GetScene(_this, guid);

            if (scene == null)
            {
                Logger.Error("EnterScene Error sceneGuid={0},objGuid={1}", guid, obj.ObjId);
                return(null);
            }
            scene.EnterScene(obj);
            if (obj.GetAllianceId() != 0)
            {
                CoroutineFactory.NewCoroutine(NotifyChangeScene, obj, scene.TypeId).MoveNext();
            }
            //后台统计
            try
            {
                string v = string.Format("scene#{0}|{1}|{2}|{3}|{4}|{5}|{6}",
                                         obj.ServerId,
                                         obj.ObjId,
                                         obj.GetLevel(),
                                         obj.Attr.GetFightPoint(),                      //战力
                                         obj.Scene.TypeId,
                                         0,                                             //0:进入  1:离开
                                         DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间
                PlayerLog.Kafka(v);
            }
            catch (Exception)
            {
            }
            return(scene);
        }
コード例 #20
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            base.OnPlayerLeave(player);
            PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------OnPlayerLeave----------");

            if (mBattleState == BattleState.None)
            {
                if (mQuitPlayers.Contains(player.ObjId))
                {
                    mQuitPlayers.Remove(player.ObjId);
                    CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
                }
                else
                {
                    var leave = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(60.0f), () =>
                    {
                        CoroutineFactory.NewCoroutine(PlayerLeave, player).MoveNext();
                        mLeaveTrigger.Remove(player.ObjId);
                    });
                    mLeaveTrigger.Add(player.ObjId, leave);
                }
            }
            else
            {
                ResetPlayer(player);
            }
        }
コード例 #21
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);
                }
            }
        }
コード例 #22
0
ファイル: PetIsland.cs プロジェクト: tuita520/mmorpgserver
        public override void OnPlayerEnterOver(ObjPlayer player)
        {
            if (player == null)
            {
                return;
            }

            base.OnPlayerEnterOver(player);
            CoroutineFactory.NewCoroutine(GetPlayerTili, player.ObjId).MoveNext();

            TimerState outValue = null;

            if (StateDic.TryGetValue(player.ObjId, out outValue))
            {
                StateDic[player.ObjId].state = 1;
                StateDic[player.ObjId].time  = DateTime.MaxValue;
            }
            else
            {
                StateDic.Add(player.ObjId, new TimerState(1));
            }

            DateTime outData;

            if (EnterTimeDic.TryGetValue(player.ObjId, out outData))
            {
                EnterTimeDic[player.ObjId] = DateTime.Now;
            }
            else
            {
                EnterTimeDic.Add(player.ObjId, DateTime.Now);
            }
        }
コード例 #23
0
ファイル: BossHome.cs プロジェクト: tuita520/mmorpgserver
        public override void OnPlayerExDataChanged(ObjPlayer obj, int idx, int val)
        {
            if (obj == null)
            {
                return;
            }
            base.OnPlayerExDataChanged(obj, idx, val);

            if (val > 0)
            {
                if (StateDic.ContainsKey(obj.ObjId))
                {
                    StateDic[obj.ObjId].state = 1;
                    StateDic[obj.ObjId].time  = DateTime.MaxValue;
                }
            }
            else
            {
                // 设置剔出状态 准备剔出
                if (StateDic.ContainsKey(obj.ObjId))
                {
                    if (StateDic[obj.ObjId].state != 0)
                    {
                        StateDic[obj.ObjId].state = 0;
                        if (StateDic[obj.ObjId].time == DateTime.MaxValue)
                        {
                            StateDic[obj.ObjId].time = DateTime.Now.AddSeconds(10);
                        }
                    }
                }
            }
        }
コード例 #24
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);
        }
コード例 #25
0
        public override void ExitDungeon(ObjPlayer player)
        {
            CoroutineFactory.NewCoroutine(ResultOver, player, false).MoveNext();

            // 玩家手动退出副本?
            player.ExitDungeon();
        }
コード例 #26
0
        public override void OnPlayerLeave(ObjPlayer player)
        {
            Log(Logger, "OnPlayerLeave:player id = {0}, name = {1}", player.ObjId, player.GetName());

            base.OnPlayerLeave(player);
            RefreshInfoPlayerCount();
        }
コード例 #27
0
        public override void OnPlayerEnter(ObjPlayer player)
        {
            base.OnPlayerEnter(player);
            player.Proxy.BroadcastSceneMonsterCount(mMonsterCount);

            player.Attr.SetDataValue(eAttributeType.HpNow, player.Attr.GetDataValue(eAttributeType.HpMax));
            player.Attr.SetDataValue(eAttributeType.MpNow, player.Attr.GetDataValue(eAttributeType.MpMax));
        }
コード例 #28
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            CoroutineFactory.NewCoroutine(ResultOver, player, false).MoveNext();

            // 是否需要延时几秒再退出场景??
            // 离开副本
            mDeadWaitExitTrigger = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(2.0f), () => { OnDeadExit(player); });
        }
コード例 #29
0
 protected void SendFubenInfo(ObjPlayer player)
 {
     if (mFubenInfoMsg == null)
     {
         return;
     }
     player.Proxy.NotifyFubenInfo(mFubenInfoMsg);
 }
コード例 #30
0
        public override void OnPlayerEnter(ObjPlayer player)
        {
            Log(Logger, "OnPlayerEnter:player id = {0}, name = {1}", player.ObjId, player.GetName());

            base.OnPlayerEnter(player);
            RefreshInfoPlayerCount();
            SendFubenInfo(player);
        }