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(); }
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); }); }
public override void OnPlayerEnter(ObjPlayer player) { base.OnPlayerEnter(player); PlayerEnterTimes[player.ObjId] = DateTime.Now; FetchPlayerExData(player); }
private void PlayerRelive(ObjPlayer player) { var campId = player.GetCamp(); player.SetPosition(Camps[campId].RelivePos); player.Relive(); }
// 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(); }
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); }); }
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()); } } } }
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); } } }
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); } }
public void OnPlayerLeave(DungeonScene _this, ObjPlayer player) { Scene.GetImpl().OnPlayerLeave(_this, player); //修改副本难度 _this.ChangeDifficulty(_this.PlayerCount); }
//开始创建副本 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))); }
public override void ExitDungeon(ObjPlayer player) { if (State <= eDungeonState.Start) { mQuitPlayers.Add(player.ObjId, player); } }
//获取成员的完整信息 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)); }
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 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); }
public override void ExitDungeon(ObjPlayer player) { //玩家强退,1s之后关闭副本 Log(Logger, "ExitDungeon:player id = {0}, name = {1}", player.ObjId, player.GetName()); EnterAutoClose(30); }
public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0) { if (player == null) { return; } }
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)); }
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 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); } }
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); } } }
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); } }
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); } } } } }
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); }
public override void ExitDungeon(ObjPlayer player) { CoroutineFactory.NewCoroutine(ResultOver, player, false).MoveNext(); // 玩家手动退出副本? player.ExitDungeon(); }
public override void OnPlayerLeave(ObjPlayer player) { Log(Logger, "OnPlayerLeave:player id = {0}, name = {1}", player.ObjId, player.GetName()); base.OnPlayerLeave(player); RefreshInfoPlayerCount(); }
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)); }
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); }); }
protected void SendFubenInfo(ObjPlayer player) { if (mFubenInfoMsg == null) { return; } player.Proxy.NotifyFubenInfo(mFubenInfoMsg); }
public override void OnPlayerEnter(ObjPlayer player) { Log(Logger, "OnPlayerEnter:player id = {0}, name = {1}", player.ObjId, player.GetName()); base.OnPlayerEnter(player); RefreshInfoPlayerCount(); SendFubenInfo(player); }