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); }
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); }
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}]已经超越神了! } }
//获取成员的完整信息 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)); }