public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType) { bool result; if (copyMap.MapCode == this.RuntimeData.MapID) { int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; lock (this.RuntimeData.Mutex) { WanMoXiaGuScene scene = null; if (!this.SceneDict.TryGetValue(fuBenSeqId, out scene)) { scene = new WanMoXiaGuScene(); scene.CopyMapInfo = copyMap; scene.CleanAllInfo(); scene.GameId = Global.GetClientKuaFuServerLoginData(client).GameId; scene.MapID = mapCode; scene.CopyMapID = copyMap.CopyMapID; scene.FuBenSeqId = fuBenSeqId; scene.PlayerCount = 1; scene.BossLifePercent = 1.0; this.SceneDict[fuBenSeqId] = scene; } else { scene.PlayerCount++; } client.ClientData.BattleWhichSide = 1; client.SceneObject = scene; copyMap.IsKuaFuCopy = true; copyMap.CustomPassAwards = true; copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)(this.RuntimeData.TotalSecs * 1000)); GameManager.ClientMgr.BroadSpecialCopyMapMessage <WanMoXiaGuScoreData>(1266, scene.ScoreData, scene.CopyMapInfo); } result = true; } else { result = false; } return(result); }
public void LeaveFuBen(GameClient client) { WanMoXiaGuScene scene = null; lock (this.RuntimeData.Mutex) { if (!this.SceneDict.TryGetValue(client.ClientData.FuBenSeqID, out scene)) { return; } } lock (this.RuntimeData.Mutex) { scene.PlayerCount--; if (scene.SceneStatus != GameSceneStatuses.STATUS_END && scene.SceneStatus != GameSceneStatuses.STATUS_AWARD && scene.SceneStatus != GameSceneStatuses.STATUS_CLEAR) { KuaFuManager.getInstance().SetCannotJoinKuaFu_UseAutoEndTicks(client); } } }
public void CreateMonster(WanMoXiaGuScene scene, object tag) { CopyMap copyMap = scene.CopyMapInfo; GameMap gameMap = null; if (GameManager.MapMgr.DictMaps.TryGetValue(scene.MapID, out gameMap)) { WanMoXiaGuMonsterConfigInfo waveConfig = tag as WanMoXiaGuMonsterConfigInfo; if (waveConfig != null) { for (int i = 0; i < waveConfig.MonstersNum; i++) { int monsterID = waveConfig.MonsterID[i]; int gridX = waveConfig.Site[i * 2] / gameMap.MapGridWidth; int gridY = waveConfig.Site[i * 2 + 1] / gameMap.MapGridHeight; GameManager.MonsterZoneMgr.AddDynamicMonsters(scene.MapID, monsterID, scene.CopyMapInfo.CopyMapID, 1, gridX, gridY, 0, 0, SceneUIClasses.WanMoXiaGu, waveConfig, null); } scene.ScoreData.MonsterCount = waveConfig.MonstersNum; GameManager.ClientMgr.BroadSpecialCopyMapMessage <WanMoXiaGuScoreData>(1266, scene.ScoreData, scene.CopyMapInfo); } } }
public void OnInjureMonster(GameClient client, Monster monster, long injure) { if (monster.VLife <= 0.0) { } lock (this.RuntimeData.Mutex) { WanMoXiaGuScene scene = client.SceneObject as WanMoXiaGuScene; if (scene != null && scene.SceneStatus == GameSceneStatuses.STATUS_BEGIN) { if (monster.GetMonsterData().ExtensionID == this.RuntimeData.BossMonsterID) { scene.BossLifePercent = monster.VLife / monster.MonsterInfo.VLifeMax; if (scene.BossLifePercent <= 0.0) { scene.Success = 1; scene.SceneStatus = GameSceneStatuses.STATUS_END; } if (scene.BossLifePercent <= 0.0 || Math.Round(scene.BossLifePercent, 2) != Math.Round(scene.ScoreData.BossLifePercent, 2)) { scene.ScoreData.BossLifePercent = scene.BossLifePercent; GameManager.ClientMgr.BroadSpecialCopyMapMessage <WanMoXiaGuScoreData>(1266, scene.ScoreData, scene.CopyMapInfo); } else { scene.ScoreData.BossLifePercent = scene.BossLifePercent; } } else if (monster.VLife <= 0.0 && scene.AddKilledMonster(monster)) { scene.ScoreData.MonsterCount--; scene.ScoreData.MonsterCount = ((scene.ScoreData.MonsterCount < 0) ? 0 : scene.ScoreData.MonsterCount); GameManager.ClientMgr.BroadSpecialCopyMapMessage <WanMoXiaGuScoreData>(1266, scene.ScoreData, scene.CopyMapInfo); } } } }
public void GiveAwards(WanMoXiaGuScene scene) { try { FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(scene.CopyMapInfo.FubenMapID, scene.MapID); if (fuBenMapItem != null) { int usedSecs = (int)(scene.EndTime - scene.BeginTime); int zhanLi = 0; List <GameClient> objsList = scene.CopyMapInfo.GetClientsList().Distinct <GameClient>().ToList <GameClient>(); if (objsList != null && objsList.Count > 0) { for (int i = 0; i < objsList.Count; i++) { GameClient client = objsList[i]; if (client != null && client == GameManager.ClientMgr.FindClient(client.ClientData.RoleID)) { zhanLi += client.ClientData.CombatForce; long nExp = (long)fuBenMapItem.Experience; int money = fuBenMapItem.Money1; int idx = this.RuntimeData.AwardList.Count - 1; int mul = this.RuntimeData.AwardList[idx][1]; for (int j = 0; j <= idx; j++) { if (usedSecs <= this.RuntimeData.AwardList[j][0]) { mul = this.RuntimeData.AwardList[j][1]; break; } } if (nExp > 0L) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp, false, true, false, "万魔峡谷通关奖励"); } if (money > 0) { GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, "万魔峡谷通关奖励", true); } List <GoodsData> goodsList = new List <GoodsData>(); if (null != fuBenMapItem.GoodsDataList) { for (int k = 0; k < fuBenMapItem.GoodsDataList.Count; k++) { GoodsData goodsData = new GoodsData(fuBenMapItem.GoodsDataList[k]); goodsData.GCount *= mul; goodsList.Add(goodsData); } } if (goodsList.Count > 0) { if (Global.CanAddGoodsDataList(client, goodsList)) { foreach (GoodsData goodsData in goodsList) { GoodsUtil.AddGoodsDBCommand(client, goodsData, true, 1, "万魔峡谷通关奖励", true); } } else { Global.UseMailGivePlayerAward2(client, goodsList, GLang.GetLang(4000, new object[0]), GLang.GetLang(4001, new object[0]), 0, 0, 0); } } WanMoXiaGuAwardsData awardsData = new WanMoXiaGuAwardsData { Success = scene.Success, UsedSecs = usedSecs, Exp = nExp, Money = money, AwardsGoods = goodsList }; client.sendCmd <WanMoXiaGuAwardsData>(1267, awardsData, false); Global.UpdateFuBenDataForQuickPassTimer(client, scene.CopyMapInfo.FubenMapID, 0, 1); } } } if (objsList != null && objsList.Count > 0) { int roleCount = objsList.Count; zhanLi /= roleCount; } } } catch (Exception ex) { DataHelper.WriteExceptionLogEx(ex, "【万魔峡谷】清场调度异常"); } }