public bool processCmdEx(GameClient client, int nID, byte[] bytes, string[] cmdParams) { bool result; if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Building, false)) { GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(3, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = true; } else { switch (nID) { case 1080: result = this.ProcessShenJiAddEffectCmd(client, nID, bytes, cmdParams); break; case 1081: result = this.ProcessShenJiAddExpCmd(client, nID, bytes, cmdParams); break; case 1082: result = this.ProcessShenJiWashCmd(client, nID, bytes, cmdParams); break; default: result = true; break; } } return(result); }
public bool ProcessJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode); if (sceneType != SceneUIClasses.Normal) { client.sendCmd(nID, "-21".ToString(), false); return(true); } if (!this.IsGongNengOpened(client, true)) { client.sendCmd(nID, "-2001".ToString(), false); return(true); } if (client.ClientData.SignUpGameType != 0) { client.sendCmd(nID, "-2002".ToString(), false); return(true); } if (KuaFuManager.getInstance().IsInCannotJoinKuaFuCopyTime(client)) { client.sendCmd(nID, "-2004".ToString(), false); return(true); } SystemXmlItem systemFuBenItem = null; if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(this._runtimeData.CopyID, out systemFuBenItem)) { client.sendCmd(nID, "-3".ToString(), false); return(true); } int minLevel = systemFuBenItem.GetIntValue("MinLevel", -1); int minZhuanSheng = systemFuBenItem.GetIntValue("MinZhuanSheng", -1); int levelLimit = minZhuanSheng * 100 + minLevel; if (client.ClientData.ChangeLifeCount * 100 + client.ClientData.Level < levelLimit) { client.sendCmd(nID, "-19".ToString(), false); return(true); } int oldCount = this.GetElementWarCount(client); if (oldCount >= systemFuBenItem.GetIntValue("FinishNumber", -1)) { client.sendCmd(nID, "-16".ToString(), false); return(true); } int result = 0; if (result > 0) { client.ClientData.SignUpGameType = 4; GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 1, 0, 0, 0, 4); } client.sendCmd <int>(nID, result, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
/// <summary> /// 判断功能是否开启 /// </summary> public static bool IsGongNengOpened(GameClient client, bool hint = false) { if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.Fund)) { return(false); } return(GlobalNew.IsGongNengOpened(client, GongNengIDs.Fund, hint)); }
public bool ProcessHuanYingSiYuanEnterRespondCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { if (!IsGongNengOpened(client)) { client.sendCmd(nID, StdErrorCode.Error_Success_No_Info); return(true); } int result = StdErrorCode.Error_Success; int gropuIndex; int flag = Global.SafeConvertToInt32(cmdParams[1]); lock (RuntimeData.Mutex) { if (!RuntimeData.Range2GroupIndexDict.TryGetValue(new RangeKey(Global.GetUnionLevel(client)), out gropuIndex)) { result = StdErrorCode.Error_Operation_Denied; } } client.ClientData.SignUpGameType = (int)GameTypes.None; if (result >= 0) { if (flag > 0) { result = HuanYingSiYuanClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame); if (result >= 0) { GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_KF_SWITCH_SERVER, Global.GetClientKuaFuServerLoginData(client)); } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; client.sendCmd(nID, result); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HYSY_DEQUEUE, StdErrorCode.Error_Success_No_Info); } } else { HuanYingSiYuanClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.None); Global.GetClientKuaFuServerLoginData(client).RoleId = 0; client.sendCmd(nID, StdErrorCode.Error_Success_No_Info); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HYSY_DEQUEUE, StdErrorCode.Error_Success_No_Info); } } return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
//登录时处理采集数据 public static void InitRoleDailyCaiJiData(GameClient client, bool isLogin, bool isNewday) { //是否开启了水晶幻境采集 if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect)) { return; } //登录时需要取得上次采集的日期和次数,在线跨天就不需要取 if (isLogin) { client.ClientData.DailyCrystalCollectNum = Global.GetRoleParamsInt32FromDB(client, RoleParamName.CaiJiCrystalNum); client.ClientData.CrystalCollectDayID = Global.GetRoleParamsInt32FromDB(client, RoleParamName.CaiJiCrystalDayID); } bool bClear = false; //是否跨天了(今天第一次登录或者在线跨天) if (isNewday) { //昨天或昨天之前是否开启了水晶幻境采集 if (client.ClientData.DailyCrystalCollectNum >= 0 && client.ClientData.CrystalCollectDayID > 0) { //这个数据是水晶幻境资源找回用的 client.ClientData.OldCrystalCollectData = new OldCaiJiData(); client.ClientData.OldCrystalCollectData.OldDay = client.ClientData.CrystalCollectDayID; client.ClientData.OldCrystalCollectData.OldNum = client.ClientData.DailyCrystalCollectNum; } //跨天清零次数 bClear = true; } else if (0 == client.ClientData.CrystalCollectDayID) { //之前没保存过采集次数,现在需要保存一下 bClear = true; } if (bClear) { //清次数,重设日期 client.ClientData.DailyCrystalCollectNum = 0; client.ClientData.CrystalCollectDayID = (int)DateTime.Now.DayOfYear; Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.CaiJiCrystalNum, 0, true); Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.CaiJiCrystalDayID, client.ClientData.CrystalCollectDayID, true); //通知玩家水晶幻境的采集次数清零 if (Global.GetMapSceneType(client.ClientData.MapCode) == SceneUIClasses.ShuiJingHuanJing) { NotifyCollectLastNum(client, 0, DailyNum); } } client._IconStateMgr.CheckCaiJiState(client); }
/// <summary> /// 罗兰城战攻防竞价申请指令处理 /// </summary> /// <param name="client"></param> /// <param name="nID"></param> /// <param name="bytes"></param> /// <param name="cmdParams"></param> /// <returns></returns> public bool ProcessTianTiJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode); if (sceneType != SceneUIClasses.Normal) { client.sendCmd(nID, StdErrorCode.Error_Denied_In_Current_Map); return(true); } if (!IsGongNengOpened(client, true)) { client.sendCmd(nID, StdErrorCode.Error_Not_In_valid_Time); return(true); } int result = StdErrorCode.Error_Not_In_valid_Time; int gropuIndex = client.ClientData.TianTiData.DuanWeiId; TimeSpan time = TimeUtil.NowDateTime().TimeOfDay; lock (RuntimeData.Mutex) { for (int i = 0; i < RuntimeData.TimePoints.Count - 1; i += 2) { if (time >= RuntimeData.TimePoints[i] && time < RuntimeData.TimePoints[i + 1]) { result = StdErrorCode.Error_Success; break; } } } if (result >= 0) { result = TianTiClient.getInstance().TianTiSignUp(client.strUserID, client.ClientData.RoleID, client.ClientData.ZoneID, (int)GameTypes.TianTi, gropuIndex, client.ClientData.CombatForce); if (result > 0) { client.ClientData.SignUpGameType = (int)GameTypes.TianTi; GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 1, 0, 0, 0, (int)GameTypes.TianTi); } } //发送结果给客户端 client.sendCmd(nID, result); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
public void KuaFuSwitchServer(GameClient client) { long nowTicks = TimeUtil.NOW(); if (nowTicks >= client.KuaFuSwitchServerTicks + 5000L) { client.KuaFuSwitchServerTicks = nowTicks; GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false); } }
public static bool HasLeftnum(GameClient client) { if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect)) { return(false); } else { return(client.ClientData.DailyCrystalCollectNum < DailyNum); } }
public static void InitRoleShenQiData(GameClient client) { client.ClientData.ShenLiJingHuaPoints = Global.GetRoleParamsInt32FromDB(client, "10157"); if (GlobalNew.IsGongNengOpened(client, GongNengIDs.ShenQi, false)) { client.ClientData.shenQiData = ShenQiManager.GetShenQiData(client); ShenQiManager.getInstance().UpdateRoleShenQiProps(client); ShenQiManager.getInstance().UpdateRoleTouhgnessProps(client); ShenQiManager.getInstance().UpdateRoleGodProps(client); } }
public void AlchemyRollBack(GameClient client, string rollbackType) { if (GlobalNew.IsGongNengOpened(client, GongNengIDs.Alchemy, false)) { if (!string.IsNullOrEmpty(rollbackType)) { string[] valueFields = rollbackType.Split(new char[] { ',' }); if (valueFields.Length == 2) { int costType = Global.SafeConvertToInt32(valueFields[0]); int useNum = Global.SafeConvertToInt32(valueFields[1]); Dictionary <int, AlchemyConfigData> tempAlchemyConfig = null; lock (this.ConfigMutex) { tempAlchemyConfig = this.AlchemyConfig; } AlchemyConfigData alchemyConfig = null; if (!tempAlchemyConfig.TryGetValue(costType, out alchemyConfig) || useNum < alchemyConfig.Unit) { LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 失败!", client.ClientData.RoleID, rollbackType), null, true); client.ClientData.AlchemyInfo.rollbackType = ""; this.AlchemyRollBackOffline(client.ClientData.RoleID, ""); } else { useNum -= useNum % alchemyConfig.Unit; int element = useNum / alchemyConfig.Unit * alchemyConfig.Element; int histCost = 0; client.ClientData.AlchemyInfo.HistCost.TryGetValue(costType, out histCost); if (histCost < useNum || client.ClientData.AlchemyInfo.BaseData.Element < element) { LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 失败!", client.ClientData.RoleID, rollbackType), null, true); client.ClientData.AlchemyInfo.rollbackType = ""; this.AlchemyRollBackOffline(client.ClientData.RoleID, ""); } else { GameManager.ClientMgr.ModifyAlchemyElementValue(client, -element, "GM命令-alchemy", false, false); this.ModifyAddElementCost(client, costType, useNum, true); client.ClientData.AlchemyInfo.HistCost[costType] = histCost - useNum; this.UpdateAlchemyDataDB(client); client.ClientData.AlchemyInfo.rollbackType = ""; this.AlchemyRollBackOffline(client.ClientData.RoleID, ""); LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 成功!", client.ClientData.RoleID, rollbackType), null, true); } } } } } }
/// <summary> /// 添加一个场景 /// </summary> public bool AddHuanYingSiYuanCopyScenes(GameClient client, CopyMap copyMap) { if (copyMap.MapCode == RuntimeData.MapCode) { int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; lock (Mutex) { HuanYingSiYuanScene huanYingSiYuanScene = null; if (!HuanYingSiYuanSceneDict.TryGetValue(fuBenSeqId, out huanYingSiYuanScene)) { huanYingSiYuanScene = new HuanYingSiYuanScene(); huanYingSiYuanScene.CopyMap = copyMap; huanYingSiYuanScene.CleanAllInfo(); huanYingSiYuanScene.GameId = (int)Global.GetClientKuaFuServerLoginData(client).GameId; huanYingSiYuanScene.m_nMapCode = mapCode; huanYingSiYuanScene.CopyMapId = copyMap.CopyMapID; huanYingSiYuanScene.FuBenSeqId = fuBenSeqId; huanYingSiYuanScene.m_nPlarerCount = 1; HuanYingSiYuanSceneDict[fuBenSeqId] = huanYingSiYuanScene; } else { huanYingSiYuanScene.m_nPlarerCount++; } if (client.ClientData.BattleWhichSide == 1) { huanYingSiYuanScene.ScoreInfoData.Count1++; } else { huanYingSiYuanScene.ScoreInfoData.Count2++; } copyMap.IsKuaFuCopy = true; copyMap.SetRemoveTicks(TimeUtil.NOW() + RuntimeData.TotalSecs * TimeUtil.SECOND); GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_HYSY_SCORE_INFO, huanYingSiYuanScene.ScoreInfoData, huanYingSiYuanScene.CopyMap); } client.SceneContextData2 = new HuanYingSiYuanLianShaContextData(); //更新状态 HuanYingSiYuanClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame); GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)GameTypes.HuanYingSiYuan); return(true); } return(false); }
/// <summary> /// 添加一个场景 /// </summary> public bool AddTianTiCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType) { if (sceneType == SceneUIClasses.TianTi) { int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; lock (RuntimeData.Mutex) { TianTiScene tianTiScene = null; if (!TianTiSceneDict.TryGetValue(fuBenSeqId, out tianTiScene)) { tianTiScene = new TianTiScene(); tianTiScene.CopyMap = copyMap; tianTiScene.CleanAllInfo(); tianTiScene.GameId = (int)Global.GetClientKuaFuServerLoginData(client).GameId; tianTiScene.m_nMapCode = mapCode; tianTiScene.CopyMapId = copyMap.CopyMapID; tianTiScene.FuBenSeqId = fuBenSeqId; tianTiScene.m_nPlarerCount = 1; TianTiSceneDict[fuBenSeqId] = tianTiScene; } else { tianTiScene.m_nPlarerCount++; } copyMap.IsKuaFuCopy = true; SaveClientBattleSide(tianTiScene, client); copyMap.SetRemoveTicks(TimeUtil.NOW() + RuntimeData.TotalSecs * TimeUtil.SECOND); if (tianTiScene.SuccessSide == -1) { client.sendCmd((int)TCPGameServerCmds.CMD_SPR_TIANTI_AWARD, new TianTiAwardsData() { Success = -1 }); } } //更新状态 TianTiClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame); GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)GameTypes.TianTi); return(true); } return(false); }
/// <summary> /// 判断功能是否开启 /// </summary> /// <param name="client"></param> /// <returns></returns> public bool IsGongNengOpened(GameClient client, bool hint = false) { if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.TianTi)) { return(false); } // 如果1.6的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot6)) { return(false); } return(GlobalNew.IsGongNengOpened(client, GongNengIDs.TianTi, hint)); }
/// <summary> /// 判断功能是否开启 /// </summary> /// <param name="client"></param> /// <returns></returns> public bool IsGongNengOpened(GameClient client, bool hint = false) { // 如果1.7的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { return(false); } if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.YongZheZhanChang)) { return(false); } return(GlobalNew.IsGongNengOpened(client, GongNengIDs.YongZheZhanChang, hint)); }
/// <summary> /// 判断功能是否开启 /// </summary> /// <param name="client"></param> /// <returns></returns> public bool IsGongNengOpened(GameClient client, bool hint = false) { if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.HuanYingSiYuan)) { return(false); } // 如果1.4.1的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { return(false); } return(GlobalNew.IsGongNengOpened(client, GongNengIDs.HuanYingSiYuan, hint)); }
public static ShenQiData GetShenQiData(GameClient client) { ShenQiData result; if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.ShenQi, false)) { result = new ShenQiData { UpResultType = -1 }; } else { ShenQiData data = client.ClientData.shenQiData; try { if (null == data) { data = new ShenQiData(); List <int> props = Global.GetRoleParamsIntListFromDB(client, "36"); if (props == null || props.Count < 5) { props = new List <int>(); for (int i = 0; i < 5; i++) { props.Add(0); } props[0] = 1; Global.SaveRoleParamsIntListToDB(client, props, "36", true); } data.ShenQiID = props[0]; data.LifeAdd = props[1]; data.AttackAdd = props[2]; data.DefenseAdd = props[3]; data.ToughnessAdd = props[4]; client.ClientData.shenQiData = data; } data.ShenLiJingHuaLeft = client.ClientData.ShenLiJingHuaPoints; data.UpResultType = -100; } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("ShenQi :: 获取角色神器数据错误 ex:{0}", ex.Message), null, true); } result = data; } return(result); }
public GoodsData GetHuanLeDaiBi(int GCount = 0) { try { string str = GameManager.systemParamsList.GetParamValueByName("HuanLeDaiBi"); GoodsData data = GlobalNew.ParseGoodsData(str); data.GCount = GCount; return(data); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, "欢乐代币格式不对", null, true); LogManager.WriteLog(LogTypes.Exception, string.Format("[ljl_欢乐代币]{0}", ex.ToString()), null, true); } return(null); }
public bool ProcessTianTiEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { if (!IsGongNengOpened(client)) { client.sendCmd(nID, StdErrorCode.Error_Success_No_Info); return(true); } int result = StdErrorCode.Error_Success; int flag = Global.SafeConvertToInt32(cmdParams[1]); if (flag > 0) { result = TianTiClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame); if (result >= 0) { GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_KF_SWITCH_SERVER, Global.GetClientKuaFuServerLoginData(client)); } else { flag = 0; } } else { //TianTiClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.None); } client.ClientData.SignUpGameType = (int)GameTypes.None; if (flag <= 0) { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; client.sendCmd((int)TCPGameServerCmds.CMD_SPR_TIANTI_QUIT, StdErrorCode.Error_Success_No_Info); } //client.sendCmd(nID, result); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
/// <summary> /// 添加一个场景 /// </summary> public bool AddCopyScene(GameClient client, CopyMap copyMap) { if (copyMap.MapCode == _runtimeData.MapID) { int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; lock (_mutex) { CopyWolfSceneInfo newScene = null; if (!_runtimeData.SceneDict.TryGetValue(fuBenSeqId, out newScene)) { newScene = new CopyWolfSceneInfo(); newScene.CopyMapInfo = copyMap; newScene.CleanAllInfo(); newScene.GameId = Global.GetClientKuaFuServerLoginData(client).GameId; newScene.MapID = mapCode; newScene.CopyID = copyMap.CopyMapID; newScene.FuBenSeqId = fuBenSeqId; newScene.PlayerCount = 1; _runtimeData.SceneDict[fuBenSeqId] = newScene; } else { newScene.PlayerCount++; } client.ClientData.BattleWhichSide = _runtimeData.CampID; copyMap.IsKuaFuCopy = true; copyMap.SetRemoveTicks(TimeUtil.NOW() + _runtimeData.TotalSecs * TimeUtil.SECOND); GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_COPY_WOLF_SCORE_INFO, newScene.ScoreData, newScene.CopyMapInfo); } //更新状态 // ElementWarClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame); // 开始游戏统计 GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)_gameType); return(true); } return(false); }
public bool AddCopyScene(GameClient client, CopyMap copyMap) { bool result; if (copyMap.MapCode == this._runtimeData.MapID) { int fuBenSeqId = copyMap.FuBenSeqID; int mapCode = copyMap.MapCode; lock (CopyWolfManager._mutex) { CopyWolfSceneInfo newScene = null; if (!this._runtimeData.SceneDict.TryGetValue(fuBenSeqId, out newScene)) { newScene = new CopyWolfSceneInfo(); newScene.CopyMapInfo = copyMap; newScene.CleanAllInfo(); newScene.GameId = Global.GetClientKuaFuServerLoginData(client).GameId; newScene.MapID = mapCode; newScene.CopyID = copyMap.CopyMapID; newScene.FuBenSeqId = fuBenSeqId; newScene.PlayerCount = 1; this._runtimeData.SceneDict[fuBenSeqId] = newScene; } else { newScene.PlayerCount++; } client.ClientData.BattleWhichSide = this._runtimeData.CampID; copyMap.IsKuaFuCopy = true; copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)(this._runtimeData.TotalSecs * 1000)); GameManager.ClientMgr.BroadSpecialCopyMapMessage <CopyWolfScoreData>(1025, newScene.ScoreData, newScene.CopyMapInfo); } GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, 11); result = true; } else { result = false; } return(result); }
public static void InitRoleDailyCaiJiData(GameClient client, bool isLogin, bool isNewday) { if (GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect, false)) { if (isLogin) { client.ClientData.DailyCrystalCollectNum = Global.GetRoleParamsInt32FromDB(client, "CaiJiCrystalNum"); client.ClientData.CrystalCollectDayID = Global.GetRoleParamsInt32FromDB(client, "CaiJiCrystalDayID"); } bool bClear = false; if (isNewday) { if (client.ClientData.DailyCrystalCollectNum >= 0 && client.ClientData.CrystalCollectDayID > 0) { client.ClientData.OldCrystalCollectData = new OldCaiJiData(); client.ClientData.OldCrystalCollectData.OldDay = client.ClientData.CrystalCollectDayID; client.ClientData.OldCrystalCollectData.OldNum = client.ClientData.DailyCrystalCollectNum; } bClear = true; } else if (0 == client.ClientData.CrystalCollectDayID) { bClear = true; } if (bClear) { client.ClientData.DailyCrystalCollectNum = 0; client.ClientData.CrystalCollectDayID = TimeUtil.NowDateTime().DayOfYear; Global.SaveRoleParamsInt32ValueToDB(client, "CaiJiCrystalNum", 0, true); Global.SaveRoleParamsInt32ValueToDB(client, "CaiJiCrystalDayID", client.ClientData.CrystalCollectDayID, true); if (Global.GetMapSceneType(client.ClientData.MapCode) == SceneUIClasses.ShuiJingHuanJing) { CaiJiLogic.NotifyCollectLastNum(client, 0, CaiJiLogic.DailyNum); } } client._IconStateMgr.CheckCaiJiState(client); } }
/// <summary> /// 配置的功能是否开启 /// </summary> /// <param name="client"></param> /// <param name="id"></param> /// <returns></returns> public static bool IsGongNengOpened(GameClient client, GongNengIDs id, bool hint = false) { SystemXmlItem xmlItem = null; if (GameManager.SystemSystemOpen.SystemXmlItemDict.TryGetValue((int)id, out xmlItem)) { int trigger = xmlItem.GetIntValue("TriggerCondition"); // 等级 if (trigger == 1) { int[] paramArray = xmlItem.GetIntArrayValue("TimeParameters"); if (paramArray.Length == 2) { if (Global.GetUnionLevel(paramArray[0], paramArray[1]) > Global.GetUnionLevel(client)) { if (hint) { string msg = string.Format(Global.GetLang("开启此功能需要达到【{0}】转【{1}】级"), paramArray[0], paramArray[1]); GameManager.ClientMgr.NotifyHintMsg(client, msg); } return(false); } } return(true); } // 完成指定任务 else if (trigger == 7) { int taskId = xmlItem.GetIntValue("TimeParameters"); if (client.ClientData.MainTaskID < taskId) { if (hint) { string msg = string.Format(Global.GetLang("开启此功能需要完成主线任务【{0}】"), GlobalNew.GetTaskName(taskId)); GameManager.ClientMgr.NotifyHintMsg(client, msg); } return(false); } return(true); } // 羽毛阶数 else if (trigger == 14) { string str = xmlItem.GetStringValue("TimeParameters"); if (string.IsNullOrEmpty(str)) { return(true); } string[] fields = str.Split(','); if (fields.Length != 2) { return(true); } int suit = Convert.ToInt32(fields[0]); int star = Convert.ToInt32(fields[1]); return((client.ClientData.MyWingData.WingID > suit) || (client.ClientData.MyWingData.WingID == suit && client.ClientData.MyWingData.ForgeLevel >= star)); } // 成就阶数 else if (trigger == 15) { if (client.ClientData.ChengJiuLevel < xmlItem.GetIntValue("TimeParameters")) { return(false); } } // 军衔阶数 else if (trigger == 16) { int junxian = GameManager.ClientMgr.GetShengWangLevelValue(client); if (junxian < xmlItem.GetIntValue("TimeParameters")) { return(false); } } else if (trigger == 20) { int bangHuiLevel = Global.GetBangHuiLevel(client); if (bangHuiLevel < xmlItem.GetIntValue("TimeParameters")) { return(false); } } } return(true); }
public bool IsGongNengOpened(GameClient client, bool hint = false) { return(!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot8) && GameManager.VersionSystemOpenMgr.IsVersionSystemOpen("KuaFuBoss") && GlobalNew.IsGongNengOpened(client, GongNengIDs.KuaFuBoss, hint)); }
public bool ProcessKuaFuBossEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { KuaFuBossSceneInfo sceneItem = null; KuaFuBossGameStates state = KuaFuBossGameStates.None; int result = 0; if (!this.CheckMap(client)) { result = -21; } else { result = this.CheckCondition(client, ref sceneItem, ref state); } if (state == KuaFuBossGameStates.Start) { KuaFuServerLoginData kuaFuServerLoginData = null; lock (this.RuntimeData.Mutex) { if (this.RuntimeData.RoleIdKuaFuLoginDataDict.TryGetValue(client.ClientData.RoleID, out kuaFuServerLoginData)) { KuaFuServerLoginData clientKuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); if (null != clientKuaFuServerLoginData) { clientKuaFuServerLoginData.RoleId = kuaFuServerLoginData.RoleId; clientKuaFuServerLoginData.GameId = kuaFuServerLoginData.GameId; clientKuaFuServerLoginData.GameType = kuaFuServerLoginData.GameType; clientKuaFuServerLoginData.EndTicks = kuaFuServerLoginData.EndTicks; clientKuaFuServerLoginData.ServerId = kuaFuServerLoginData.ServerId; clientKuaFuServerLoginData.ServerIp = kuaFuServerLoginData.ServerIp; clientKuaFuServerLoginData.ServerPort = kuaFuServerLoginData.ServerPort; clientKuaFuServerLoginData.FuBenSeqId = kuaFuServerLoginData.FuBenSeqId; } } else { result = -11000; } } if (result >= 0) { result = YongZheZhanChangClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame, false); if (result >= 0) { GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false); } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; } } } else { result = -2001; } client.sendCmd <int>(nID, result, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
private bool IsGongNengOpened(GameClient client) { return(this.RuntimeData.IsGongNengOpend && GlobalNew.IsGongNengOpened(client, GongNengIDs.BianShen, false)); }
public bool IsGongNengOpen(GameClient client, bool hint = false) { return(!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System2Dot7) && GlobalNew.IsGongNengOpened(client, GongNengIDs.JingLingJueXing, hint)); }
/// <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 static bool HasLeftnum(GameClient client) { return(GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect, false) && client.ClientData.DailyCrystalCollectNum < CaiJiLogic.DailyNum); }
/// <summary> /// 给奖励 /// </summary> public void GiveAwards(HuanYingSiYuanScene huanYingSiYuanScene) { try { List <GameClient> objsList = huanYingSiYuanScene.CopyMap.GetClientsList(); if (objsList != null && objsList.Count > 0) { int nowDayId = Global.GetOffsetDayNow(); for (int n = 0; n < objsList.Count; ++n) { GameClient client = objsList[n]; if (client != null && client == GameManager.ClientMgr.FindClient(client.ClientData.RoleID)) //确认角色仍然在线 { bool success = false; double nMultiple = 0.5; int awardsRate = 1; int count = 0; HuanYingSiYuanLianShaContextData clientLianShaContextData = client.SceneContextData2 as HuanYingSiYuanLianShaContextData; if (null != clientLianShaContextData && clientLianShaContextData.TotalScore >= RuntimeData.TempleMirageMinJiFen) { if (client.ClientData.BattleWhichSide == huanYingSiYuanScene.SuccessSide) { success = true; nMultiple = 1; //每日前3次享受10倍奖励 int dayid = Global.GetRoleParamsInt32FromDB(client, RoleParamName.HysySuccessDayId); if (dayid == nowDayId) { count = Global.GetRoleParamsInt32FromDB(client, RoleParamName.HysySuccessCount); if (count < RuntimeData.TempleMirageWinExtraNum) { awardsRate = RuntimeData.TempleMirageWinExtraRate; } } else { awardsRate = RuntimeData.TempleMirageWinExtraRate; } } } else { //达不到最低分数,无奖励,不计次 nMultiple = 0; awardsRate = 0; } // 公式 long nExp = (long)(RuntimeData.TempleMirageEXPAward * nMultiple * client.ClientData.ChangeLifeCount); int chengJiuaward = (int)(RuntimeData.TempleMirageAwardChengJiu * nMultiple); int shengWangaward = (int)(RuntimeData.TempleMirageAwardShengWang * nMultiple); if (nExp > 0) { GameManager.ClientMgr.ProcessRoleExperience(client, nExp * awardsRate, false); //GameManager.ClientMgr.NotifyAddExpMsg(client, nExp); //客户端自己提示,有显示"X10"的需求 } if (chengJiuaward > 0) { ChengJiuManager.AddChengJiuPoints(client, "幻影寺院获得成就", chengJiuaward * awardsRate, true, true); } if (shengWangaward > 0) { GameManager.ClientMgr.ModifyShengWangValue(client, shengWangaward * awardsRate, "幻影寺院获得声望"); } HuanYingSiYuanAwardsData awardsData = new HuanYingSiYuanAwardsData() { SuccessSide = huanYingSiYuanScene.SuccessSide, Exp = nExp, ShengWang = shengWangaward, ChengJiuAward = chengJiuaward, AwardsRate = awardsRate, }; if (success) { if (nMultiple > 0) { Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.HysySuccessDayId, nowDayId, true); Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.HysySuccessCount, count + 1, true); GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, (int)GameTypes.HuanYingSiYuan); if (huanYingSiYuanScene.ScoreInfoData.Score1 >= 1000 || huanYingSiYuanScene.ScoreInfoData.Score2 >= 1000) { //FaildCount记录为获得够1000分而获胜的人次 GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 0, 1, (int)GameTypes.HuanYingSiYuan); } } } else { //FaildCount记录为失败人次 //GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 0, 1); } client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HYSY_AWARD, awardsData); } } } } catch (System.Exception ex) { DataHelper.WriteExceptionLogEx(ex, "幻影寺院清场调度异常"); } }
//圣物进阶 private EHolyResult HolyItem_Suit_Up(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot) { // 如果1.7的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7)) { return(EHolyResult.NotOpen); } //增加系统开启判断 if (false == GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.HolyItem)) { return(EHolyResult.NotOpen); } //不满足任务条件 if (GlobalNew.IsGongNengOpened(client, GongNengIDs.HolyItem, true) == false) { return(EHolyResult.NotOpen); } if (null == client.ClientData.MyHolyItemDataDic) { return(EHolyResult.Error); } Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic; HolyItemData tmpdata = null; HolyItemPartData tmppartdata = null; HolyPartInfo xmlData = null; //先取得当前圣物部件等级 if (false == holyitemdata.TryGetValue(sShengWu_slot, out tmpdata)) { return(EHolyResult.Error); } if (false == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata)) { return(EHolyResult.Error); } //0 看看要升级的部件阶级是不是已经满级了 if (tmppartdata.m_sSuit >= MAX_HOLY_PART_LEVEL) { return(EHolyResult.PartSuitIsMax); } int nDataID = HolyPartInfo.GetBujianID(sShengWu_slot, sBuJian_slot, (sbyte)tmppartdata.m_sSuit); if (false == _partDataDic.TryGetValue(nDataID, out xmlData)) { return(EHolyResult.Error); } //1 绑金+金币是否足够 if (-1 != xmlData.m_nCostBandJinBi && xmlData.m_nCostBandJinBi > Global.GetTotalBindTongQianAndTongQianVal(client)) { return(EHolyResult.NeedGold); } //2 部件碎片是否足够 if (-1 != xmlData.m_nNeedGoodsCount && xmlData.m_nNeedGoodsCount > tmppartdata.m_nSlice) { return(EHolyResult.NeedHolyItemPart); } //3 以上均满足,判断成功率 bool bSuccess = false; int nRank = Global.GetRandomNumber(0, 100); if (-1 == xmlData.m_sSuccessProbability || tmppartdata.m_nFailCount >= xmlData.m_nMaxFailCount || //[bing] 2015,8,12 达到连续失败最大次数必成功 nRank < (int)(xmlData.m_sSuccessProbability)) { //4 合成成功:消耗金币、消耗部件碎片,阶数+1 bSuccess = true; //扣除金币 if (-1 != xmlData.m_nCostBandJinBi) { if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗")) { return(EHolyResult.Error); } } //扣除部件碎片 if (-1 != xmlData.m_nNeedGoodsCount) { tmppartdata.m_nSlice -= xmlData.m_nNeedGoodsCount; } if (tmppartdata.m_nSlice < 0) { tmppartdata.m_nSlice = 0; return(EHolyResult.Error); } //部件阶级提升 tmppartdata.m_sSuit += 1; //重置失败次数 tmppartdata.m_nFailCount = 0; } else { //5 合成失败:消耗金币、消耗部分部件碎片 //扣除金币 if (-1 != xmlData.m_nCostBandJinBi) { if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗")) { return(EHolyResult.Error); } } //扣除失败时的部件碎片 if (-1 != xmlData.m_nFailCostGoodsCount) { tmppartdata.m_nSlice -= xmlData.m_nFailCostGoodsCount; } if (tmppartdata.m_nSlice < 0) { tmppartdata.m_nSlice = 0; return(EHolyResult.Error); } //失败次数增加1 tmppartdata.m_nFailCount += 1; } if (true == bSuccess) { //计算部件属性 UpdateHolyItemBuJianAttr(client, sShengWu_slot, sBuJian_slot); //计算圣物额外属性 UpdataHolyItemExAttr(client, sShengWu_slot); // 通知客户端属性变化 GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); // 总生命值和魔法值变化通知(同一个地图才需要通知) GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); } //更新db UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata); //发送给客户端更新数据 HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot); //写log做进阶统计 GameManager.logDBCmdMgr.AddDBLogInfo( -1 , SliceNameSet[sShengWu_slot, sBuJian_slot] , /**/ "圣物进阶" , /**/ "系统" , client.ClientData.RoleName , bSuccess == true ? /**/ "成功" : /**/ "失败" , xmlData.m_nCostBandJinBi != -1 ? xmlData.m_nCostBandJinBi : 0 //消耗的金币数 , client.ClientData.ZoneID , client.strUserID , tmppartdata.m_nSlice , client.ServerId); if (client._IconStateMgr.CheckSpecialActivity(client)) { client._IconStateMgr.SendIconStateToClient(client); } return(bSuccess == true ? EHolyResult.Success : EHolyResult.Fail); }