/// <summary> /// 根据副本ID获取副本地图映射项 /// </summary> /// <param name="fuBenID"></param> /// <returns></returns> public static FuBenMapItem FindMapCodeByFuBenID(int fuBenID, int mapCode) { FuBenMapItem fuBenMapItem = null; string key = string.Format("{0}_{1}", fuBenID, mapCode); if (!_FuBenMapCode2MapItemDict.TryGetValue(key, out fuBenMapItem)) { return(null); } return(fuBenMapItem); }
/// <summary> /// 判断是否能自动领取副本地图中中的奖励 /// </summary> /// <returns></returns> public static bool CanAutoGetFuBenMapAwards(GameClient client) { int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode); if (fuBenID <= 0) { return(false); } if (client.ClientData.FuBenSeqID <= 0) { return(false); } FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(client.ClientData.FuBenSeqID); if (null == fuBenInfoItem) { return(false); } if (fuBenID != fuBenInfoItem.FuBenID) { return(false); } FuBenMapItem fuBenMapItem = FindMapCodeByFuBenID(fuBenID, client.ClientData.MapCode); if (null == fuBenMapItem) { return(false); } if (null == fuBenMapItem.GoodsDataList || fuBenMapItem.GoodsDataList.Count <= 0) { if (fuBenMapItem.Experience <= 0) { if (fuBenMapItem.Money1 <= 0) { return(false); } } } if (null == fuBenMapItem.GoodsDataList || fuBenMapItem.GoodsDataList.Count <= 0) { return(true); } return(false); }
public static bool CanGetFuBenMapAwards(GameClient client) { int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode); bool result; if (fuBenID <= 0) { result = false; } else if (client.ClientData.FuBenSeqID <= 0) { result = false; } else { FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(client.ClientData.FuBenSeqID); if (null == fuBenInfoItem) { result = false; } else if (fuBenID != fuBenInfoItem.FuBenID) { result = false; } else { FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(fuBenID, client.ClientData.MapCode); if (null == fuBenMapItem) { result = false; } else { if (fuBenMapItem.GoodsDataList == null || fuBenMapItem.GoodsDataList.Count <= 0) { if (fuBenMapItem.Experience <= 0) { if (fuBenMapItem.Money1 <= 0) { return(false); } } } result = true; } } } return(result); }
public static int GetFuBenMaxTimeSecs(int fuBenId) { SystemXmlItem copyItem = null; FuBenMapItem mapItem = null; int result; if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(fuBenId, out copyItem) || (mapItem = FuBenManager.FindMapCodeByFuBenID(fuBenId, copyItem.GetIntValue("MapCode", -1))) == null) { result = 15; } else { result = mapItem.MaxTime * 60; } return(result); }
public static FuBenMapItem FindMapCodeByFuBenID(int fuBenID, int mapCode) { FuBenMapItem fuBenMapItem = null; string key = string.Format("{0}_{1}", fuBenID, mapCode); FuBenMapItem result; if (!FuBenManager._FuBenMapCode2MapItemDict.TryGetValue(key, out fuBenMapItem)) { result = null; } else { result = fuBenMapItem; } return(result); }
/// <summary> /// 解析Xml项 /// </summary> /// <param name="systemXmlItem"></param> private static void ParseXmlItem(SystemXmlItem systemXmlItem) { int mapCode = systemXmlItem.GetIntValue("MapCode"); int fuBenID = systemXmlItem.GetIntValue("CopyID"); int maxTime = systemXmlItem.GetIntValue("MaxTime"); int money1 = systemXmlItem.GetIntValue("Moneyaward"); int experience = systemXmlItem.GetIntValue("Experienceaward"); int nTmpFirstGold = systemXmlItem.GetIntValue("FirstGold"); int nTmpFirstExp = systemXmlItem.GetIntValue("FirstExp"); int nMinSaoDangTimer = systemXmlItem.GetIntValue("MinSaoDangTime"); int nTmpXingHunAward = systemXmlItem.GetIntValue("XingHunaward"); int nTmpFirstXingHunAward = systemXmlItem.GetIntValue("FirstXingHun"); int nTmpZhanGongaward = systemXmlItem.GetIntValue("ZhanGongaward"); List <GoodsData> goodsDataList = null; string goodsIDs = systemXmlItem.GetStringValue("GoodsIDs"); if (!string.IsNullOrEmpty(goodsIDs)) { string[] fields = goodsIDs.Split('|'); if (fields.Length > 0) { goodsDataList = ParseGoodsDataList(fields); } //else //{ // LogManager.WriteLog(LogTypes.Error, string.Format("解析副本地图映射配置项中的物品奖励失败, FuBenID={0}, MapCode={1}", fuBenID, mapCode)); //} } //else //{ // LogManager.WriteLog(LogTypes.Error, string.Format("解析副本地图映射配置项中的物品奖励失败, FuBenID={0}, MapCode={1}", fuBenID, mapCode)); //} // 首次通关奖励解析 ChenXiaojun List <GoodsData> goodsFirstDataList = null; string goodsFirstIDs = systemXmlItem.GetStringValue("FirstGoodsID"); if (!string.IsNullOrEmpty(goodsFirstIDs)) { string[] fields = goodsFirstIDs.Split('|'); if (fields.Length > 0) { goodsFirstDataList = ParseGoodsDataList(fields); } } FuBenMapItem fuBenMapItem = new FuBenMapItem() { FuBenID = fuBenID, MapCode = mapCode, MaxTime = maxTime, Money1 = money1, Experience = experience, GoodsDataList = goodsDataList, FirstGoodsDataList = goodsFirstDataList, MinSaoDangTimer = nMinSaoDangTimer, nFirstExp = nTmpFirstExp, nFirstGold = nTmpFirstGold, nXingHunAward = nTmpXingHunAward, nFirstXingHunAward = nTmpFirstXingHunAward, nZhanGongaward = nTmpZhanGongaward, }; string key = string.Format("{0}_{1}", fuBenID, mapCode); _FuBenMapCode2MapItemDict[key] = fuBenMapItem; List <int> mapCodeList = null; if (!_FuBen2MapCodeListDict.TryGetValue(fuBenID, out mapCodeList)) { mapCodeList = new List <int>(); _FuBen2MapCodeListDict[fuBenID] = mapCodeList; } mapCodeList.Add(mapCode); _MapCode2FuBenDict[mapCode] = fuBenID; }
/// <summary> /// 给奖励 /// </summary> public void GiveAwards(ElementWarScene scene) { try { FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(scene.CopyMapInfo.FubenMapID, scene.MapID); if (fuBenMapItem == null) { return; } //FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(scene.FuBenSeqId); //if (null == fuBenInfoItem) return; //fuBenInfoItem.EndTicks = TimeUtil.NOW(); //int addFuBenNum = 1; //if (fuBenInfoItem.nDayOfYear != TimeUtil.NowDateTime().DayOfYear) // addFuBenNum = 0; //int usedSecs = (int)(scene.EndTime - scene.BeginTime); int zhanLi = 0; List <GameClient> objsList = scene.CopyMapInfo.GetClientsList(); if (objsList != null && objsList.Count > 0) { for (int n = 0; n < objsList.Count; ++n) { GameClient client = objsList[n]; if (client != null && client == GameManager.ClientMgr.FindClient(client.ClientData.RoleID)) //确认角色仍然在线 { // 公式 long nExp = fuBenMapItem.Experience; int money = fuBenMapItem.Money1; int wave = scene.MonsterWaveOld; if (wave > 0) { wave -= 1; } int light = fuBenMapItem.LightAward + _runtimeData.AwardLight[wave]; if (nExp > 0) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp, false); } if (money > 0) { GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, string.Format(/**/ "副本{0}通关奖励", scene.CopyID), false); } if (light > 0) { GameManager.FluorescentGemMgr.AddFluorescentPoint(client, light, "元素试炼"); } ElementWarAwardsData awardsData = new ElementWarAwardsData() { Wave = scene.MonsterWaveOld, Exp = nExp, Money = money, Light = light }; AddElementWarCount(client); GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, (int)_gameType); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_ELEMENT_WAR_AWARD, awardsData); zhanLi += client.ClientData.CombatForce; Global.UpdateFuBenDataForQuickPassTimer(client, scene.CopyMapInfo.FubenMapID, 0, 1); } } } int roleCount = 0; if (objsList != null && objsList.Count > 0) { roleCount = objsList.Count; zhanLi = zhanLi / roleCount; } // ElementWarClient.getInstance().UpdateCopyPassEvent(scene.FuBenSeqId, roleCount, scene.MonsterWaveOld, zhanLi); } catch (System.Exception ex) { DataHelper.WriteExceptionLogEx(ex, "【元素试炼】清场调度异常"); } }
public void GiveAwards(ElementWarScene scene) { try { FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(scene.CopyMapInfo.FubenMapID, scene.MapID); if (fuBenMapItem != null) { int zhanLi = 0; List <GameClient> objsList = scene.CopyMapInfo.GetClientsList(); 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)) { long nExp = (long)fuBenMapItem.Experience; int money = fuBenMapItem.Money1; int wave = scene.MonsterWaveOld; int light = fuBenMapItem.LightAward + this._runtimeData.AwardLight[wave]; int ysfm = fuBenMapItem.YuanSuFenMoaward + this._runtimeData.YuanSuShiLianAward2[wave]; if (nExp > 0L) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp, false, true, false, "none"); } if (money > 0) { GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, string.Format("副本{0}通关奖励", scene.CopyID), false); } if (light > 0) { GameManager.FluorescentGemMgr.AddFluorescentPoint(client, light, "元素试炼", true); } if (ysfm > 0) { GameManager.ClientMgr.ModifyYuanSuFenMoValue(client, ysfm, "元素试炼", true, false); } ElementWarAwardsData awardsData = new ElementWarAwardsData { Wave = scene.MonsterWaveOld, Exp = nExp, Money = money, Light = light, ysfm = ysfm }; this.AddElementWarCount(client); GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, 4); client.sendCmd <ElementWarAwardsData>(1015, awardsData, false); zhanLi += client.ClientData.CombatForce; 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, "【元素试炼】清场调度异常"); } }
/// <summary> /// 给奖励 /// </summary> public void GiveAwards(CopyWolfSceneInfo scene, int leftSecond) { try { FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(scene.CopyMapInfo.FubenMapID, scene.MapID); if (fuBenMapItem == null) { return; } int zhanLi = 0; List <GameClient> objsList = scene.CopyMapInfo.GetClientsList(); if (objsList != null && objsList.Count > 0) { for (int n = 0; n < objsList.Count; ++n) { GameClient client = objsList[n]; if (client != null && client == GameManager.ClientMgr.FindClient(client.ClientData.RoleID)) //确认角色仍然在线 { int wave = scene.MonsterWaveOld; if (wave > scene.MonsterWaveTotal) { wave = scene.MonsterWaveTotal; } int scoreMonster = scene.GetMonsterScore(client.ClientData.RoleID); int life = scene.ScoreData.FortLifeNow; int scoreAll = GetScore(scoreMonster, leftSecond, life); // 公式 long nExp = AwardExp(fuBenMapItem.Experience, scoreAll); int money = AwardGoldBind(fuBenMapItem.Money1, scoreAll); int wolfMoney = AwardWolfMoney(fuBenMapItem.WolfMoney, scoreAll); if (nExp > 0) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp, false); } if (money > 0) { GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, string.Format("副本{0}通关奖励", scene.CopyID), false); } if (wolfMoney > 0) { GameManager.ClientMgr.ModifyLangHunFenMoValue(client, wolfMoney, "狼魂要塞", true); } CopyWolfAwardsData awardsData = new CopyWolfAwardsData() { Wave = scene.MonsterWaveOld, Exp = nExp, Money = money, WolfMoney = wolfMoney, RoleScore = scene.GetMonsterScore(client.ClientData.RoleID) }; //AddElementWarCount(client); GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, (int)_gameType); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_COPY_WOLF_AWARD, awardsData); zhanLi += client.ClientData.CombatForce; Global.UpdateFuBenDataForQuickPassTimer(client, scene.CopyMapInfo.FubenMapID, 0, 1); } } } int roleCount = 0; if (objsList != null && objsList.Count > 0) { roleCount = objsList.Count; zhanLi = zhanLi / roleCount; } // ElementWarClient.getInstance().UpdateCopyPassEvent(scene.FuBenSeqId, roleCount, scene.MonsterWaveOld, zhanLi); } catch (System.Exception ex) { DataHelper.WriteExceptionLogEx(ex, "【狼魂要塞】清场调度异常"); } }
public void GiveAwards(CopyWolfSceneInfo scene, int leftSecond) { try { FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(scene.CopyMapInfo.FubenMapID, scene.MapID); if (fuBenMapItem != null) { int zhanLi = 0; List <GameClient> objsList = scene.CopyMapInfo.GetClientsList(); 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)) { int wave = scene.MonsterWaveOld; if (wave > scene.MonsterWaveTotal) { wave = scene.MonsterWaveTotal; } int scoreMonster = scene.GetMonsterScore(client.ClientData.RoleID); int life = scene.ScoreData.FortLifeNow; int scoreAll = this.GetScore(scoreMonster, leftSecond, life); long nExp = (long)this.AwardExp(fuBenMapItem.Experience, scoreAll); int money = this.AwardGoldBind(fuBenMapItem.Money1, scoreAll); int wolfMoney = this.AwardWolfMoney(fuBenMapItem.WolfMoney, scoreAll); if (nExp > 0L) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp, false, true, false, "none"); } if (money > 0) { GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, string.Format("副本{0}通关奖励", scene.CopyID), false); } if (wolfMoney > 0) { GameManager.ClientMgr.ModifyLangHunFenMoValue(client, wolfMoney, "狼魂要塞", true, true); } CopyWolfAwardsData awardsData = new CopyWolfAwardsData { Wave = scene.MonsterWaveOld, Exp = nExp, Money = money, WolfMoney = wolfMoney, RoleScore = scene.GetMonsterScore(client.ClientData.RoleID) }; GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, 11); client.sendCmd <CopyWolfAwardsData>(1026, awardsData, false); zhanLi += client.ClientData.CombatForce; 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, "【狼魂要塞】清场调度异常"); } }
private static void ParseXmlItem(SystemXmlItem systemXmlItem) { int mapCode = systemXmlItem.GetIntValue("MapCode", -1); int fuBenID = systemXmlItem.GetIntValue("CopyID", -1); int maxTime = systemXmlItem.GetIntValue("MaxTime", -1); int money = systemXmlItem.GetIntValue("Moneyaward", -1); int experience = systemXmlItem.GetIntValue("Experienceaward", -1); int nTmpFirstGold = systemXmlItem.GetIntValue("FirstGold", -1); int nTmpFirstExp = systemXmlItem.GetIntValue("FirstExp", -1); int nMinSaoDangTimer = systemXmlItem.GetIntValue("MinSaoDangTime", -1); int nTmpXingHunAward = systemXmlItem.GetIntValue("XingHunaward", -1); int nTmpFirstXingHunAward = systemXmlItem.GetIntValue("FirstXingHun", -1); int nTmpZhanGongaward = systemXmlItem.GetIntValue("ZhanGongaward", -1); int YuanSuFenMoaward = systemXmlItem.GetIntValue("YuanSuFenMoaward", -1); int lightAward = systemXmlItem.GetIntValue("YingGuangaward", -1); List <GoodsData> goodsDataList = null; string goodsIDs = systemXmlItem.GetStringValue("GoodsIDs"); if (!string.IsNullOrEmpty(goodsIDs)) { string[] fields = goodsIDs.Split(new char[] { '|' }); if (fields.Length > 0) { goodsDataList = FuBenManager.ParseGoodsDataList(fields); } } List <GoodsData> goodsFirstDataList = null; string goodsFirstIDs = systemXmlItem.GetStringValue("FirstGoodsID"); if (!string.IsNullOrEmpty(goodsFirstIDs)) { string[] fields = goodsFirstIDs.Split(new char[] { '|' }); if (fields.Length > 0) { goodsFirstDataList = FuBenManager.ParseGoodsDataList(fields); } } FuBenMapItem fuBenMapItem = new FuBenMapItem { FuBenID = fuBenID, MapCode = mapCode, MaxTime = maxTime, Money1 = money, Experience = experience, GoodsDataList = goodsDataList, FirstGoodsDataList = goodsFirstDataList, MinSaoDangTimer = nMinSaoDangTimer, nFirstExp = nTmpFirstExp, nFirstGold = nTmpFirstGold, nXingHunAward = nTmpXingHunAward, nFirstXingHunAward = nTmpFirstXingHunAward, nZhanGongaward = nTmpZhanGongaward, YuanSuFenMoaward = YuanSuFenMoaward, LightAward = lightAward }; string key = string.Format("{0}_{1}", fuBenID, mapCode); lock (FuBenManager._FuBenMapCode2MapItemDict) { FuBenManager._FuBenMapCode2MapItemDict[key] = fuBenMapItem; } List <int> mapCodeList = null; if (!FuBenManager._FuBen2MapCodeListDict.TryGetValue(fuBenID, out mapCodeList)) { mapCodeList = new List <int>(); FuBenManager._FuBen2MapCodeListDict[fuBenID] = mapCodeList; } mapCodeList.Add(mapCode); FuBenManager._MapCode2FuBenDict[mapCode] = fuBenID; }
/// <summary> // 经验副本奖励 /// </summary> public static void SendMsgToClientForExperienceCopyMapAward(GameClient client) { CopyMap tmpCopyMap = null; tmpCopyMap = m_ExperienceListCopyMaps[client.ClientData.FuBenSeqID]; if (tmpCopyMap == null) { return; } int fuBenSeqID = FuBenManager.FindFuBenSeqIDByRoleID(client.ClientData.RoleID); FuBenTongGuanData fubenTongGuanData = null; if (fuBenSeqID > 0) //如果副本不存在 { FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(fuBenSeqID); if (null != fuBenInfoItem) { fuBenInfoItem.EndTicks = DateTime.Now.Ticks / 10000; int addFuBenNum = 1; if (fuBenInfoItem.nDayOfYear != TimeUtil.NowDateTime().DayOfYear) { addFuBenNum = 0; } int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode); if (fuBenID > 0) { int usedSecs = (int)((fuBenInfoItem.EndTicks - fuBenInfoItem.StartTicks) / 1000); // 更新玩家通关时间信息 Global.UpdateFuBenDataForQuickPassTimer(client, fuBenID, usedSecs, addFuBenNum); // 给玩家物品 FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(fuBenID, client.ClientData.MapCode); if (fuBenMapItem.Experience > 0 && fuBenMapItem.Money1 > 0) { int nMaxTime = fuBenMapItem.MaxTime * 60; //分->秒 long startTicks = fuBenInfoItem.StartTicks; long endTicks = fuBenInfoItem.EndTicks; int nFinishTimer = (int)(endTicks - startTicks) / 1000; //毫秒->秒 int killedNum = 0; // tmpCopyMap.KilledNormalNum + tmpCopyMap.KilledBossNum; int nDieCount = fuBenInfoItem.nDieCount; //向客户的发放通关奖励 fubenTongGuanData = Global.GiveCopyMapGiftForScore(client, fuBenID, nMaxTime, nFinishTimer, killedNum, nDieCount, fuBenMapItem.Experience, fuBenMapItem.Money1, fuBenMapItem); } GameManager.DBCmdMgr.AddDBCmd((int)TCPGameServerCmds.CMD_DB_ADDFUBENHISTDATA, string.Format("{0}:{1}:{2}:{3}", client.ClientData.RoleID, Global.FormatRoleName(client, client.ClientData.RoleName), fuBenID, usedSecs), null); int nLev = -1; SystemXmlItem systemFuBenItem = null; if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(fuBenID, out systemFuBenItem)) { nLev = systemFuBenItem.GetIntValue("FuBenLevel"); } //更新每日的通关副本的数量 GameManager.ClientMgr.UpdateRoleDailyData_FuBenNum(client, 1, nLev, false); //副本通关 //Global.BroadcastFuBenOk(client, usedSecs, fuBenID); } } } if (fubenTongGuanData != null) { //发送奖励到客户端 TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <FuBenTongGuanData>(fubenTongGuanData, Global._TCPManager.TcpOutPacketPool, (int)TCPGameServerCmds.CMD_SPR_FUBENPASSNOTIFY); if (!Global._TCPManager.MySocketListener.SendData(client.ClientSocket, tcpOutPacket)) { ; } } }
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, "【万魔峡谷】清场调度异常"); } }
/// <summary> /// 检查死亡的怪物是否为帮会副本boss并进行通关处理 /// </summary> public void ProcessMonsterDead(GameClient client, Monster monster) { // 怪物所在场景不是帮会地图 if (IsGuildCopyMap(monster.CurrentMapCode) == false) { return; } SystemXmlItem systemFuBenItem = null; if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(monster.CurrentMapCode, out systemFuBenItem)) { return; } if (null == systemFuBenItem) { return; } int nBossID = systemFuBenItem.GetIntValue("BossID"); // 不是boss if (nBossID != monster.MonsterInfo.ExtensionID) { return; } // 玩家没有帮会? GuildCopyMapDB data = GameManager.GuildCopyMapDBMgr.FindGuildCopyMapDB(client.ClientData.Faction); if (null == data) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapManager::ProcessMonsterDead (null == data), guildid={0}", client.ClientData.Faction)); return; } // 没有对应副本? CopyMap copyMap = GameManager.CopyMapMgr.FindCopyMap(monster.CurrentCopyMapID); if (null == copyMap) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapManager::ProcessMonsterDead (null == copyMap), CurrentCopyMapID={0}", monster.CurrentCopyMapID)); return; } // 没有奖励配置? FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(copyMap.FubenMapID, copyMap.MapCode); if (null == fuBenMapItem) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapManager::ProcessMonsterDead (null == fuBenMapItem), CopyMapID={0}, MapCode={1}", copyMap.FubenMapID, copyMap.MapCode)); return; } List <GameClient> objsList = copyMap.GetClientsList(); // 副本里没人? if (null == objsList || objsList.Count <= 0) { LogManager.WriteLog(LogTypes.Error, string.Format("GuildCopyMapManager::ProcessMonsterDead (null == objsList || objsList.Count <= 0), CurrentCopyMapID={0}", monster.CurrentCopyMapID)); return; } // 更新副本记录的状态 if (copyMap.FubenMapID >= data.FuBenID) { data.FuBenID = copyMap.FubenMapID; data.State = (int)GuildCopyMapState.Passed; if (copyMap.FubenMapID == GameManager.GuildCopyMapMgr.FirstGuildCopyMapOrder) { data.Killers = monster.WhoKillMeName; } else { data.Killers += ","; data.Killers += monster.WhoKillMeName; } } // 检查是否更新成功 bool result = GameManager.GuildCopyMapDBMgr.UpdateGuildCopyMapDB(data); if (false == result) { string logStr = @"GuildCopyMapManager::ProcessMonsterDead (false == result), data.GuildID={0}, data.FuBenID={1}, data.State={2}, data.OpenDay={3}, data.Killers={4}"; LogManager.WriteLog(LogTypes.Error, string.Format(logStr, data.GuildID, data.FuBenID, data.State, data.OpenDay, data.Killers)); return; } for (int i = 0; i < objsList.Count; i++) { //不在同一个地图上不参与分配 GameClient gc = objsList[i]; if (null == gc) { continue; } // 准备发奖 // 先检查上次领奖是不是本周~~ int nGuildCopyMapAwardDay = Global.GetRoleParamsInt32FromDB(gc, RoleParamName.GuildCopyMapAwardDay); DateTime AwardTime = Global.GetRealDate(nGuildCopyMapAwardDay); if (Global.BeginOfWeek(AwardTime) != Global.BeginOfWeek(DateTime.Now)) { // 不是这周领奖则重置玩家领奖记录 Global.SaveRoleParamsInt32ValueToDB(gc, RoleParamName.GuildCopyMapAwardFlag, 0, true); } int nGuildCopyMapAwardFlag = Global.GetRoleParamsInt32FromDB(gc, RoleParamName.GuildCopyMapAwardFlag); bool flag = GetGuildCopyMapAwardDayFlag(nGuildCopyMapAwardFlag, GetGuildCopyMapIndex(monster.CopyMapID), 1); // 领取过了 if (flag == true) { continue; } nGuildCopyMapAwardFlag = SetGuildCopyMapAwardDayFlag(nGuildCopyMapAwardFlag, GetGuildCopyMapIndex(monster.CopyMapID), 1); Global.SaveRoleParamsInt32ValueToDB(gc, RoleParamName.GuildCopyMapAwardFlag, nGuildCopyMapAwardFlag, true); Global.SaveRoleParamsInt32ValueToDB(gc, RoleParamName.GuildCopyMapAwardDay, Global.GetOffsetDay(DateTime.Now), true); // 发奖 Global.SaveRoleParamsInt32ValueToDB(gc, RoleParamName.GuildZhanGong, Global.GetRoleParamsInt32FromDB(gc, RoleParamName.GuildZhanGong) + fuBenMapItem.nZhanGongaward, true); GameManager.ClientMgr.NotifySelfParamsValueChange(gc, RoleCommonUseIntParamsIndexs.ZhanGong, fuBenMapItem.nZhanGongaward); } }
public static bool ProcessFuBenMapAwards(GameClient client, bool notifyClient = false) { bool result; if (client.ClientData.FuBenSeqID < 0) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(113, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = false; } else { int awardState = GameManager.CopyMapMgr.FindAwardState(client.ClientData.RoleID, client.ClientData.FuBenSeqID, client.ClientData.MapCode); if (awardState > 0) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(21, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = false; } else { int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode); if (fuBenID <= 0) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(114, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = false; } else { FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(client.ClientData.FuBenSeqID); if (null == fuBenInfoItem) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(115, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = false; } else if (fuBenID != fuBenInfoItem.FuBenID) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(116, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = false; } else { FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(fuBenID, client.ClientData.MapCode); if (null == fuBenMapItem) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(117, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = false; } else { CopyMap copyMap = GameManager.CopyMapMgr.FindCopyMap(client.ClientData.MapCode); if (copyMap == null) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(118, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = false; } else { GameManager.CopyMapMgr.AddAwardState(client.ClientData.RoleID, client.ClientData.FuBenSeqID, client.ClientData.MapCode, 1); int nMaxTime = fuBenMapItem.MaxTime * 60; long startTicks = fuBenInfoItem.StartTicks; long endTicks = fuBenInfoItem.EndTicks; int nFinishTimer = (int)(endTicks - startTicks) / 1000; int killedNum = 0; int nDieCount = fuBenInfoItem.nDieCount; FuBenTongGuanData fubenTongGuanData = Global.GiveCopyMapGiftForScore(client, fuBenID, client.ClientData.MapCode, nMaxTime, nFinishTimer, killedNum, nDieCount, (int)((double)fuBenMapItem.Experience * fuBenInfoItem.AwardRate), (int)((double)fuBenMapItem.Money1 * fuBenInfoItem.AwardRate), fuBenMapItem, null); if (fubenTongGuanData != null) { TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <FuBenTongGuanData>(fubenTongGuanData, Global._TCPManager.TcpOutPacketPool, 521); if (!Global._TCPManager.MySocketListener.SendData(client.ClientSocket, tcpOutPacket, true)) { } } Global.AddFuBenAwardEvent(client, fuBenID); result = true; } } } } } } return(result); }
/// <summary> /// 处理用户的获取副本奖励 /// </summary> /// <param name="client"></param> public static bool ProcessFuBenMapAwards(GameClient client, bool notifyClient = false) { if (client.ClientData.FuBenSeqID < 0) { GameManager.ClientMgr.NotifyImportantMsg( Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("您当前的副本顺序ID错误")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox); return(false); } //如果已经获取过一次奖励,则不再提示奖励 //查找角色的ID+副本顺序ID对应地图编号的奖励领取状态 int awardState = GameManager.CopyMapMgr.FindAwardState(client.ClientData.RoleID, client.ClientData.FuBenSeqID, client.ClientData.MapCode); if (awardState > 0) { GameManager.ClientMgr.NotifyImportantMsg( Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("当前副本地图的奖励只能领取一次")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox); return(false); } int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode); if (fuBenID <= 0) { GameManager.ClientMgr.NotifyImportantMsg( Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("没有找到当前地图对应的副本配置")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox); return(false); } FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(client.ClientData.FuBenSeqID); if (null == fuBenInfoItem) { GameManager.ClientMgr.NotifyImportantMsg( Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("没有找到对应的内存副本信息")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox); return(false); } if (fuBenID != fuBenInfoItem.FuBenID) { GameManager.ClientMgr.NotifyImportantMsg( Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("副本ID错误,无法领取其他副本的奖励")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox); return(false); } FuBenMapItem fuBenMapItem = FindMapCodeByFuBenID(fuBenID, client.ClientData.MapCode); if (null == fuBenMapItem) { GameManager.ClientMgr.NotifyImportantMsg( Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("没有找到当前副本地图的奖励")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox); return(false); } CopyMap copyMap = null; copyMap = GameManager.CopyMapMgr.FindCopyMap(client.ClientData.MapCode); if (copyMap == null) { GameManager.ClientMgr.NotifyImportantMsg( Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("领取副本奖励出错")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox); return(false); } GameManager.CopyMapMgr.AddAwardState(client.ClientData.RoleID, client.ClientData.FuBenSeqID, client.ClientData.MapCode, 1); FuBenTongGuanData fubenTongGuanData = null; int nMaxTime = fuBenMapItem.MaxTime * 60; //分->秒 long startTicks = fuBenInfoItem.StartTicks; long endTicks = fuBenInfoItem.EndTicks; int nFinishTimer = (int)(endTicks - startTicks) / 1000; //毫秒->秒 int killedNum = 0; // copyMap.KilledNormalNum + copyMap.KilledBossNum; int nDieCount = fuBenInfoItem.nDieCount; //向客户的发放通关奖励 fubenTongGuanData = Global.GiveCopyMapGiftForScore(client, fuBenID, nMaxTime, nFinishTimer, killedNum, nDieCount, fuBenMapItem.Experience, fuBenMapItem.Money1, fuBenMapItem); if (fubenTongGuanData != null) { //发送奖励到客户端 TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <FuBenTongGuanData>(fubenTongGuanData, Global._TCPManager.TcpOutPacketPool, (int)TCPGameServerCmds.CMD_SPR_FUBENPASSNOTIFY); if (!Global._TCPManager.MySocketListener.SendData(client.ClientSocket, tcpOutPacket)) { //如果发送失败 } } /*if (null != fuBenMapItem.GoodsDataList) * { * //判断背包是否空间足够 * if (!Global.CanAddGoodsDataList(client, fuBenMapItem.GoodsDataList)) * { * GameManager.ClientMgr.NotifyImportantMsg( * Global._TCPManager.MySocketListener, * Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("背包中空格不足,请清理出足够的空格后,再获取副本地图的奖励")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, (int)HintErrCodeTypes.NoBagGrid); * return false; * } * } * * //添加角色的ID+副本顺序ID对应地图编号的奖励领取状态 * GameManager.CopyMapMgr.AddAwardState(client.ClientData.RoleID, client.ClientData.FuBenSeqID, client.ClientData.MapCode, 1); * * if (Global.FilterFallGoods(client)) //是否奖励物品 * { * //奖励用户物品 * if (null != fuBenMapItem.GoodsDataList) * { * for (int i = 0; i < fuBenMapItem.GoodsDataList.Count; i++) * { * //想DBServer请求加入某个新的物品到背包中 * //添加物品 * Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, * client, fuBenMapItem.GoodsDataList[i].GoodsID, fuBenMapItem.GoodsDataList[i].GCount, fuBenMapItem.GoodsDataList[i].Quality, "", fuBenMapItem.GoodsDataList[i].Forge_level, fuBenMapItem.GoodsDataList[i].Binding, 0, "", true, 1, "副本奖励物品", Global.ConstGoodsEndTime, fuBenMapItem.GoodsDataList[i].AddPropIndex, fuBenMapItem.GoodsDataList[i].BornIndex, fuBenMapItem.GoodsDataList[i].Lucky, fuBenMapItem.GoodsDataList[i].Strong); * } * } * } * * //奖励用户经验 * //异步写数据库,写入经验和级别 * int experience = fuBenMapItem.Experience; * * //处理角色经验 * GameManager.ClientMgr.ProcessRoleExperience(client, experience, true, false); * * //通知客户端 * if (notifyClient) * { * string msgText = string.Format(Global.GetLang("恭喜您通关本副本后,获得了{0}点经验奖励"), experience); * GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, * client, msgText, GameInfoTypeIndexes.Hot, ShowGameInfoTypes.ErrAndBox, 0); * } * * //判断如果是最后一层,则不显示 * int toNextMapCode = FuBenManager.FindNextMapCodeByFuBenID(client.ClientData.MapCode); * if (-1 == toNextMapCode) //最后一层? * { * //副本通关获取经验通知 * Global.BroadcastFuBenExperience(client, fuBenID, experience); * } * * //奖励用户金钱 * //异步写数据库,写入金钱 * int money = fuBenMapItem.Money1; * if (-1 != money) * { * //过滤金币奖励 * money = Global.FilterValue(client, money); * * //更新用户的铜钱 * GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, false); * * //GameManager.SystemServerEvents.AddEvent(string.Format("角色获取金钱, roleID={0}({1}), Money={2}, newMoney={3}", client.ClientData.RoleID, client.ClientData.RoleName, client.ClientData.Money1, money), EventLevels.Record); * }*/ Global.AddFuBenAwardEvent(client, fuBenID); return(true); }
public static void SendMsgToClientForExperienceCopyMapAward(GameClient client) { CopyMap tmpCopyMap = ExperienceCopySceneManager.m_ExperienceListCopyMaps[client.ClientData.FuBenSeqID]; if (tmpCopyMap != null) { int fuBenSeqID = FuBenManager.FindFuBenSeqIDByRoleID(client.ClientData.RoleID); FuBenTongGuanData fubenTongGuanData = null; if (fuBenSeqID > 0) { FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(fuBenSeqID); if (null != fuBenInfoItem) { fuBenInfoItem.EndTicks = TimeUtil.NOW(); int addFuBenNum = 1; if (fuBenInfoItem.nDayOfYear != TimeUtil.NowDateTime().DayOfYear) { addFuBenNum = 0; } int fuBenID = FuBenManager.FindFuBenIDByMapCode(client.ClientData.MapCode); if (fuBenID > 0) { int usedSecs = (int)((fuBenInfoItem.EndTicks - fuBenInfoItem.StartTicks) / 1000L); Global.UpdateFuBenDataForQuickPassTimer(client, fuBenID, usedSecs, addFuBenNum); FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(fuBenID, client.ClientData.MapCode); if (fuBenMapItem.Experience > 0 && fuBenMapItem.Money1 > 0) { int nMaxTime = fuBenMapItem.MaxTime * 60; long startTicks = fuBenInfoItem.StartTicks; long endTicks = fuBenInfoItem.EndTicks; int nFinishTimer = (int)(endTicks - startTicks) / 1000; int killedNum = 0; int nDieCount = fuBenInfoItem.nDieCount; fubenTongGuanData = Global.GiveCopyMapGiftForScore(client, fuBenID, client.ClientData.MapCode, nMaxTime, nFinishTimer, killedNum, nDieCount, (int)((double)fuBenMapItem.Experience * fuBenInfoItem.AwardRate), (int)((double)fuBenMapItem.Money1 * fuBenInfoItem.AwardRate), fuBenMapItem, null); } GameManager.DBCmdMgr.AddDBCmd(10053, string.Format("{0}:{1}:{2}:{3}", new object[] { client.ClientData.RoleID, Global.FormatRoleName(client, client.ClientData.RoleName), fuBenID, usedSecs }), null, client.ServerId); int nLev = -1; SystemXmlItem systemFuBenItem = null; if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(fuBenID, out systemFuBenItem)) { nLev = systemFuBenItem.GetIntValue("FuBenLevel", -1); } GameManager.ClientMgr.UpdateRoleDailyData_FuBenNum(client, 1, nLev, false); } } } if (fubenTongGuanData != null) { TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <FuBenTongGuanData>(fubenTongGuanData, Global._TCPManager.TcpOutPacketPool, 521); if (!Global._TCPManager.MySocketListener.SendData(client.ClientSocket, tcpOutPacket, true)) { } } } }