/// <summary> /// 检测刷新真爱buff怪物 /// </summary> /// <param name="scene"></param> private void CheckFlushZhenAiMonster(CoupleArenaCopyScene scene) { if (!scene.IsZhenAiMonsterExist && !scene.EnterRoleSide.ContainsKey(scene.ZhenAiBuff_Role)) { GameMap gameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(scene.MapCode, out gameMap)) { LogManager.WriteLog(LogTypes.Fatal, string.Format("缺少情侣竞技地图 {0}", scene.MapCode)); return; } CoupleArenaBuffCfg buffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.ZhenAiBuffCfgType); if (buffCfg == null) { return; } var pos = buffCfg.RandPosList[Global.GetRandomNumber(0, buffCfg.RandPosList.Count)]; GameManager.MonsterZoneMgr.AddDynamicMonsters(scene.MapCode, buffCfg.MonsterId, scene.CopyMap.CopyMapID, 1, pos.X / gameMap.MapGridWidth, pos.Y / gameMap.MapGridHeight, pos.R, 0, SceneUIClasses.CoupleArena, null); scene.IsZhenAiMonsterExist = true; } }
/// <summary> /// 玩家离开副本 /// </summary> /// <param name="client"></param> public void OnLeaveFuBen(GameClient client) { lock (Mutex) { CoupleArenaCopyScene scene = null; if (FuBenSeq2CopyScenes.TryGetValue(client.ClientData.FuBenSeqID, out scene)) { if (scene.m_eStatus < GameSceneStatuses.STATUS_BEGIN) { // 尚未开始,退出也没事 scene.EnterRoleSide.Remove(client.ClientData.RoleID); } else if (scene.m_eStatus < GameSceneStatuses.STATUS_END) { CoupleArenaBuffCfg zhenAiBuffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.ZhenAiBuffCfgType); CoupleArenaBuffCfg yongQiBuffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.YongQiBuffCfgType); ModifyBuff(scene, client, BufferItemTypes.CoupleArena_YongQi_Buff, yongQiBuffCfg, false); ModifyBuff(scene, client, BufferItemTypes.CoupleArena_ZhenAi_Buff, zhenAiBuffCfg, false); scene.EnterRoleSide.Remove(client.ClientData.RoleID); var leftSide = scene.EnterRoleSide.Values.ToList(); if (leftSide.Count(_s => _s == client.ClientData.BattleWhichSide) <= 0) { // 本方没人了, 剩下的对方胜利, 如果没有剩余的一方,那么本次pk无效 scene.WinSide = leftSide.Count > 0 ? leftSide[0] : 0; ProcessEnd(scene, TimeUtil.NowDateTime(), TimeUtil.NOW()); } } } } }
/// <summary> /// 怪物死亡,检测给予玩家buff /// </summary> /// <param name="scene"></param> /// <param name="client"></param> /// <param name="monster"></param> private void OnMonsterDead(CoupleArenaCopyScene scene, GameClient client, Monster monster) { lock (Mutex) { if (scene.m_eStatus < GameSceneStatuses.STATUS_BEGIN || scene.m_eStatus >= GameSceneStatuses.STATUS_END) { return; } if (!scene.EnterRoleSide.ContainsKey(client.ClientData.RoleID)) { return; } CoupleArenaBuffCfg zhenAiBuffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.ZhenAiBuffCfgType); CoupleArenaBuffCfg yongQiBuffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.YongQiBuffCfgType); #if ___CC___FUCK___YOU___BB___ // 击杀真爱怪物,将获得真爱Buff if (scene.IsZhenAiMonsterExist && monster.XMonsterInfo.MonsterId == zhenAiBuffCfg.MonsterId) { scene.IsZhenAiMonsterExist = false; // 真爱buff 会 顶掉勇气buff, 先移除勇气buff,再添加真爱buff ModifyBuff(scene, client, BufferItemTypes.CoupleArena_YongQi_Buff, yongQiBuffCfg, false); ModifyBuff(scene, client, BufferItemTypes.CoupleArena_ZhenAi_Buff, zhenAiBuffCfg, true); } // 击杀勇气怪物,将获得勇气Buff if (scene.IsYongQiMonsterExist && monster.XMonsterInfo.MonsterId == yongQiBuffCfg.MonsterId) { scene.IsYongQiMonsterExist = false; ModifyBuff(scene, client, BufferItemTypes.CoupleArena_YongQi_Buff, yongQiBuffCfg, true); } #else if (scene.IsZhenAiMonsterExist && monster.MonsterInfo.ExtensionID == zhenAiBuffCfg.MonsterId) { scene.IsZhenAiMonsterExist = false; // 真爱buff 会 顶掉勇气buff, 先移除勇气buff,再添加真爱buff ModifyBuff(scene, client, BufferItemTypes.CoupleArena_YongQi_Buff, yongQiBuffCfg, false); ModifyBuff(scene, client, BufferItemTypes.CoupleArena_ZhenAi_Buff, zhenAiBuffCfg, true); } // 击杀勇气怪物,将获得勇气Buff if (scene.IsYongQiMonsterExist && monster.MonsterInfo.ExtensionID == yongQiBuffCfg.MonsterId) { scene.IsYongQiMonsterExist = false; ModifyBuff(scene, client, BufferItemTypes.CoupleArena_YongQi_Buff, yongQiBuffCfg, true); } #endif } }
/// <summary> /// 玩家死亡,检测玩家buff变更 /// </summary> /// <param name="scene"></param> /// <param name="deader"></param> /// <param name="killer"></param> private void OnPlayerDead(CoupleArenaCopyScene scene, GameClient deader, GameClient killer) { lock (Mutex) { if (scene.m_eStatus < GameSceneStatuses.STATUS_BEGIN || scene.m_eStatus >= GameSceneStatuses.STATUS_END) { return; } if (!scene.EnterRoleSide.ContainsKey(deader.ClientData.RoleID)) { return; } // 有可能是被怪杀死的,killer为null if (killer != null && !scene.EnterRoleSide.ContainsKey(killer.ClientData.RoleID)) { return; } CoupleArenaBuffCfg zhenAiBuffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.ZhenAiBuffCfgType); CoupleArenaBuffCfg yongQiBuffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.YongQiBuffCfgType); // 拥有真爱buff的玩家死亡,转移真爱buff if (scene.ZhenAiBuff_Role == deader.ClientData.RoleID) { ModifyBuff(scene, deader, BufferItemTypes.CoupleArena_ZhenAi_Buff, zhenAiBuffCfg, false); // 真爱buff 会 顶掉勇气buff, 先移除勇气buff,再添加真爱buff ModifyBuff(scene, killer, BufferItemTypes.CoupleArena_YongQi_Buff, yongQiBuffCfg, false); ModifyBuff(scene, killer, BufferItemTypes.CoupleArena_ZhenAi_Buff, zhenAiBuffCfg, true); } // 拥有勇气buff的玩家死亡,移除勇气buff if (scene.YongQiBuff_Role == deader.ClientData.RoleID) { ModifyBuff(scene, deader, BufferItemTypes.CoupleArena_YongQi_Buff, yongQiBuffCfg, false); } } }
/// <summary> /// 检测刷新勇气buff怪物 /// </summary> /// <param name="scene"></param> private void CheckFlushYongQiMonster(CoupleArenaCopyScene scene) { CoupleArenaBuffCfg buffCfg = BuffCfgList.Find(_b => _b.Type == CoupleAreanConsts.YongQiBuffCfgType); if (buffCfg == null) { return; } bool isInFlusTime = false; foreach (int sec in buffCfg.FlushSecList) { if (scene.m_lPrevUpdateTime - scene.m_lBeginTime <= sec * 1000 && scene.m_lCurrUpdateTime - scene.m_lBeginTime >= sec * 1000) { isInFlusTime = true; break; } } if (isInFlusTime && !scene.IsYongQiMonsterExist && !scene.EnterRoleSide.ContainsKey(scene.YongQiBuff_Role)) { GameMap gameMap = null; if (!GameManager.MapMgr.DictMaps.TryGetValue(scene.MapCode, out gameMap)) { LogManager.WriteLog(LogTypes.Fatal, string.Format("缺少情侣竞技地图 {0}", scene.MapCode)); return; } var pos = buffCfg.RandPosList[Global.GetRandomNumber(0, buffCfg.RandPosList.Count)]; GameManager.MonsterZoneMgr.AddDynamicMonsters(scene.MapCode, buffCfg.MonsterId, scene.CopyMap.CopyMapID, 1, pos.X / gameMap.MapGridWidth, pos.Y / gameMap.MapGridHeight, pos.R, 0, SceneUIClasses.CoupleArena, null); scene.IsYongQiMonsterExist = true; } }