public void SndChat(PackMsg pack) { SndChat data = pack.msg.sndChat; PlayerData pd = cacheSvc.GetPlayerDataCache(pack.session); PshTaskProgs pshTaskProgs = null; //更新任务进度 pshTaskProgs = TaskSys.Instance.CalcTaskProgs(pd, 6); GameMsg msg = new GameMsg { cmd = (int)CMD.PshChat, pshChat = new PshChat { name = pd.name, msg = data.msg } }; if (pshTaskProgs != null) { msg.pshTaskProgs = pshTaskProgs; } //广播所有在线客户端 List <ServerSession> sessionList = cacheSvc.GetOnLineServerSessions(); foreach (ServerSession session in sessionList) { session.SendMsg(msg); } }
public void ReqPurchase(PackMsg pack) { ReqPurchase data = pack.msg.reqPurchase; ServerSession session = pack.session; GameMsg msg = new GameMsg { cmd = (int)CMD.RspPurchase }; PlayerData playerData = cacheSvc.GetPlayerDataCache(session); //钻石不够 if (playerData.diamond < data.costDiamond) { msg.err = (int)ErrorCode.LackCrystal; } else { playerData.diamond -= data.costDiamond; PshTaskProgs pshTaskPrgs = null; switch (data.buyType) { case 0: //更新任务进度 pshTaskPrgs = TaskSys.Instance.CalcTaskProgs(playerData, 4); playerData.stamina += 100; break; case 1: //更新任务进度 pshTaskPrgs = TaskSys.Instance.CalcTaskProgs(playerData, 5); playerData.coin += 100; break; } if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) { msg.err = (int)ErrorCode.UpdateDBError; } else { RspPurchase rspPurchase = new RspPurchase { buyType = data.buyType, diamond = playerData.diamond, coin = playerData.coin, stamina = playerData.stamina }; //并包优化 msg.rspPurchase = rspPurchase; msg.pshTaskProgs = pshTaskPrgs; } } session.SendMsg(msg); }
/// <summary> /// 回应任务完成请求 /// </summary> public void ReqTask(PackMsg pack) { ReqTask data = pack.msg.reqTask; ServerSession session = pack.session; GameMsg msg = new GameMsg { cmd = (int)CMD.RspTask }; PlayerData playerData = cacheSvc.GetPlayerDataCache(pack.session); AutoGuideCfg AutoGuideCfg = cfgSvc.GetAutoGuideCfg(data.taskID); //更新任务ID if (playerData.taskid == data.taskID) { PshTaskProgs pshTaskProgs = null; //更新任务智者点拨进度 if (playerData.taskid == 1001) { pshTaskProgs = TaskSys.Instance.CalcTaskProgs(playerData, 1); } playerData.taskid++; //更新玩家数据 playerData.coin += AutoGuideCfg.coin; PECommon.UpdateExp(playerData, AutoGuideCfg.exp); if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) { msg.err = (int)ErrorCode.UpdateDBError; } else { RspTask rspTask = new RspTask { taskID = playerData.taskid, coin = playerData.coin, exp = playerData.exp, lv = playerData.lv, hp = playerData.hp, }; //发送回客户端 msg.rspTask = rspTask; if (pshTaskProgs != null) { msg.pshTaskProgs = pshTaskProgs; } } } else { msg.err = (int)ErrorCode.ServerDataError; } pack.session.SendMsg(msg); }
public void ReqFBFightEnd(PackMsg pack) { ReqFBFightEnd data = pack.msg.reqFBFightEnd; ServerSession session = pack.session; GameMsg msg = new GameMsg { cmd = (int)(CMD.RspFBFFightEnd), }; PlayerData playerData = cacheSvc.GetPlayerDataCache(session); MapCfg mapCfg = cfgSvc.GetMapCfg(data.fbid); if (data.isWin) { if (data.costTime > 0 && data.restHp > 0) { TaskSys.Instance.CalcTaskProgs(playerData, 2); PECommon.UpdateExp(playerData, mapCfg.exp); playerData.coin += mapCfg.coin; playerData.crystal += mapCfg.crystal; if (data.fbid == playerData.fuben) { playerData.fuben++; } if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) { msg.err = (int)ErrorCode.UpdateDBError; } else { RspFBFightEnd rspFBFightEnd = new RspFBFightEnd { isWin = data.isWin, fbid = data.fbid, restHp = data.restHp, costTime = data.costTime, exp = playerData.exp, lv = playerData.lv, coin = playerData.coin, crystal = playerData.crystal, fuben = playerData.fuben, }; msg.rspFBFightEnd = rspFBFightEnd; } } } else { msg.err = (int)ErrorCode.UpdateDBError; } session.SendMsg(msg); }
public void Update() { if (msgPackQueue.Count > 0) { PECommon.Log("msgPackCount:" + msgPackQueue.Count); lock (obj) { PackMsg pack = msgPackQueue.Dequeue(); HandOutMsg(pack); } } }
public void ReqTakeTaskReward(PackMsg pack) { ReqTakeTaskReward data = pack.msg.reqTakeTaskReward; ServerSession session = pack.session; GameMsg msg = new GameMsg { cmd = (int)CMD.RspTakeTaskReward, }; int rewardID = data.rid; PlayerData playerData = cacheSvc.GetPlayerDataCache(session); TaskRewardCfg trc = cfgSvc.GetTaskRewardCfg(rewardID); TaskRewardData trd = GetTaskRewardData(playerData, rewardID); //安全验证 if (trd.progress == trc.count && !trd.taked) { playerData.coin += trc.coin; PECommon.UpdateExp(playerData, trc.exp); trd.taked = true; //更新任务进度数据 CalcTaskArr(playerData, trd); if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) { msg.err = (int)ErrorCode.UpdateDBError; } else { msg.rspTakeTaskReward = new RspTakeTaskReward { coin = playerData.coin, exp = playerData.exp, lv = playerData.lv, hp = playerData.hp, taskArr = playerData.taskArr, }; session.SendMsg(msg); } } else { msg.err = (int)ErrorCode.ClientDataError; } }
/// <summary> /// 登录请求 /// </summary> /// <param name="msg"></param> public void ReqLogin(PackMsg pack) { ReqLogin req = pack.gameMsg.reqLogin; //当前账号是否上线 //已经上线 返回错误提示 //未上线 //账号是否存在 //存在 检测密码 //不存在 创建默认账号密码(应该是存入数据库之类的) //回应客户端 GameMsg msg = new GameMsg { cmd = (int)CMD.RspLogin, }; //当前账号是否上线 if (cacheService.isAccountOnLine(req.account)) { //已经上线 返回错误提示 msg.err = (int)ErrorCode.AccIsOnLine; } else { //未上线 PlayerData _playdata = cacheService.GetPlayData(req.account, req.password); //账号是否存在 if (_playdata == null) { //为空 说明密码错误 msg.err = (int)ErrorCode.PassError; } else { msg.rspLogin = new RspLogin { playerData = _playdata }; } //缓存账号数据 cacheService.CachePlayerInfo(req.account, pack.serverSession, _playdata); } //回应客户端 pack.serverSession.SendMsg(msg); }
//消息包处理 public void HandOutMsg(PackMsg pack) { switch ((CMD)pack.msg.cmd) { case CMD.ReqLogin: LoginSys.Instance.ReqLogin(pack); break; case CMD.ReqRename: LoginSys.Instance.ReqRename(pack); break; case CMD.ReqTask: AutoGuideSys.Instance.ReqTask(pack); break; case CMD.ReqStrong: StrongSys.Instance.ReqStrong(pack); break; case CMD.SndChat: ChatSys.Instance.SndChat(pack); break; case CMD.ReqPurchase: PurchaseSys.Instance.ReqPurchase(pack); break; case CMD.ReqTakeTaskReward: TaskSys.Instance.ReqTakeTaskReward(pack); break; case CMD.ReqFBFight: FuBenSys.Instance.ReqFBFight(pack); break; case CMD.ReqFBFightEnd: FuBenSys.Instance.ReqFBFightEnd(pack); break; } }
public void ReqFBFight(PackMsg pack) { ReqFBFight data = pack.msg.reqFBFight; ServerSession session = pack.session; GameMsg msg = new GameMsg { cmd = (int)CMD.RspFBFight, }; PlayerData playerData = cacheSvc.GetPlayerDataCache(session); MapCfg mapCfg = cfgSvc.GetMapCfg(data.fbid); if (playerData.fuben < data.fbid) { msg.err = (int)ErrorCode.ClientDataError; } else if (playerData.stamina < mapCfg.costStamina) { msg.err = (int)ErrorCode.LackStamia; } else { playerData.stamina -= mapCfg.costStamina; if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) { msg.err = (int)ErrorCode.UpdateDBError; } else { RspFBFight rspFBFight = new RspFBFight { fbid = data.fbid, stamina = playerData.stamina, }; msg.rspFBFight = rspFBFight; } } session.SendMsg(msg); }
//回应重命名请求 public void ReqRename(PackMsg pack) { ReqRename data = pack.msg.reqRename; ServerSession session = pack.session; GameMsg msg = new GameMsg { cmd = (int)CMD.RspRename, }; //判断当前名字是否存在 //若存在,返回错误码 if (cacheSvc.IsNameExist(data.name)) { msg.err = (int)ErrorCode.NameIsExist; } //若不存在,更新缓存以及数据库,返回客户端 else { PlayerData playerData = cacheSvc.GetPlayerDataCache(session); playerData.name = data.name; //数据库更新失败 if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) { msg.err = (int)ErrorCode.UpdateDBError; } else { msg.rspRename = new RspRename { name = data.name, }; } } pack.session.SendMsg(msg); }
/// <summary> /// 回应强化请求 /// </summary> public void ReqStrong(PackMsg pack) { ReqStrong data = pack.msg.reqStrong; ServerSession session = pack.session; GameMsg msg = new GameMsg { cmd = (int)CMD.RspStrong, }; PlayerData playerData = cacheSvc.GetPlayerDataCache(session); if (playerData.strongArr[data.pos] == data.starlv) { int nextStarLv = data.starlv + 1; StrongCfg nextStrongCfg = cfgSvc.GetStrongCfg(data.pos, nextStarLv); if (playerData.lv < nextStrongCfg.minlv) { msg.err = (int)ErrorCode.LackLevel; } else if (playerData.coin < nextStrongCfg.coin) { msg.err = (int)ErrorCode.LackCoin; } else if (playerData.crystal < nextStrongCfg.crystal) { msg.err = (int)ErrorCode.LackCrystal; } else { //更新任务进度 PshTaskProgs pshTaskProgs = TaskSys.Instance.CalcTaskProgs(playerData, 3); playerData.hp += nextStrongCfg.addhp; playerData.ad += nextStrongCfg.addhurt; playerData.ap += nextStrongCfg.addhurt; playerData.addef += nextStrongCfg.adddef; playerData.apdef += nextStrongCfg.adddef; playerData.strongArr[data.pos] += 1; playerData.coin -= nextStrongCfg.coin; playerData.crystal -= nextStrongCfg.crystal; if (!cacheSvc.UpdatePlayerData(playerData.id, playerData)) { msg.err = (int)ErrorCode.UpdateDBError; } else { RspStrong rspStrong = new RspStrong { pos = nextStrongCfg.pos, starlv = nextStrongCfg.starlv, addhp = nextStrongCfg.addhp, addhurt = nextStrongCfg.addhurt, adddef = nextStrongCfg.adddef, minlv = nextStrongCfg.minlv, coin = nextStrongCfg.coin, crystal = nextStrongCfg.crystal, strongArr = playerData.strongArr }; msg.rspStrong = rspStrong; if (pshTaskProgs != null) { msg.pshTaskProgs = pshTaskProgs; } } } } else { msg.err = (int)ErrorCode.ServerDataError; } pack.session.SendMsg(msg); }
public void ReqLogin(PackMsg pack) { ReqLogin data = pack.msg.reqLogin; ServerSession session = pack.session; //判断当前账号是否上线 GameMsg msg = new GameMsg { cmd = (int)CMD.RspLogin, }; //已上线,返回错误信息 if (cacheSvc.IsAcctOnLine(data.acct)) { msg.err = (int)ErrorCode.AcctIsOnLine; } else { //未上线: //账号是否存在 PlayerData _playerData = cacheSvc.GetPlayerDate(data.acct, data.pwd); if (_playerData == null) { //账号存在 但密码错误 msg.err = (int)ErrorCode.WrongPwd; } //存在 返回账号数据 else { //计算离线增加体力 int stamina = _playerData.stamina; long now = timeSvc.GetNowTime(); long milliSecondsSpan = now - _playerData.time; int growStamina = (int)(milliSecondsSpan / (1000 * 60 * PECommon.StaminaAddSpace)) * PECommon.StaminaAddCount; //PECommon.Log(milliSecondsSpan / 60000+ " " + milliSecondsSpan.ToString() + " " + growStamina.ToString()); if (growStamina > 0) { int maxStamina = PECommon.GetStaminaLimitByLv(_playerData.lv); if (_playerData.stamina < maxStamina) { _playerData.stamina += growStamina; if (_playerData.stamina > maxStamina) { _playerData.stamina = maxStamina; } } } if (stamina != _playerData.stamina) { cacheSvc.UpdatePlayerData(_playerData.id, _playerData); } msg.rspLogin = new RspLogin { //将账号数据存到回应包里 playerData = _playerData }; //将账号数据存储进缓存层 cacheSvc.StoreIdOnline(data.acct, session, _playerData); } } //回应客户端 pack.session.SendMsg(msg); }
/// <summary> /// 重命名请求 /// </summary> /// <param name="pack"></param> public void ReqRename(PackMsg pack) { }