Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            var killer = FindPlayer(characterId);

            if (null == killer)
            {
                var obj = FindCharacter(characterId);
                if (null != obj && obj.GetObjType() == ObjType.RETINUE)
                {
                    var retinue = obj as ObjRetinue;
                    if (null != retinue.Owner && retinue.Owner.GetObjType() == ObjType.PLAYER)
                    {
                        killer = retinue.Owner as ObjPlayer;
                    }
                }

                if (null == killer)
                {
                    return;
                }
            }
            var  oldKills = GetContinuesKillRecord(player.ObjId);
            bool bfirst   = false;

            if (Msg.Int64List.Count > 0 && Msg.Int64List[0] == player.ObjId && oldKills >= 10)
            {
                bfirst = true;
            }
            AddKillOrDeadRecord(player.ObjId, false);
            AddKillOrDeadRecord(killer.ObjId, true);
            Dirty = true;


            CreateDropItem(99, new List <ulong> {
                characterId
            }, 0uL, 2, CalculateKillerGold(TableParam[ParamIdx_KillGoldBase], player.GetLevel(), oldKills, killer.GetLevel()), player.GetPosition());

            GiveItem(characterId, 1, CalculateKillerExp(TableParam[ParamIdx_KillExpBase], player.GetLevel(), oldKills, killer.GetLevel(), TableParam[ParamIdx_KillExpRate]));

            //移除死亡给叠加的buff
            foreach (var buffId in DieBuffId)
            {
                var datas = killer.BuffList.GetBuffById(buffId);
                foreach (var data in datas)
                {
                    MissBuff.DoEffect(this, killer, data);
                    killer.DeleteBuff(data, eCleanBuffType.EffectOver);
                }
            }

            AssignMsg();

            PushActionToAllPlayer(proxyPlayer =>
            {
                if (!proxyPlayer.Active)
                {
                    return;
                }
                AssignSelfMsg(proxyPlayer.ObjId);
                proxyPlayer.Proxy.NotifyRefreshDungeonInfo(Msg);
            });

            if (bfirst)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272005);
            }

            var num = GetContinuesKillRecord(killer.ObjId);

            if (3 == num)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272001);                //[{0}]正在大杀特杀!
            }
            else if (6 == num)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272002);                //[{0}]已经主宰比赛了!
            }
            else if (8 == num)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272003);                //[{0}]已经无人能挡!
            }
            else if (num >= 10 && num % 5 == 0)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272004);                //[{0}]已经超越神了!
            }
        }
Exemplo n.º 4
0
        //获取成员的完整信息
        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));
        }