当我们完成了任务奖励系统后,奖励系统发出的包和其他触发此系统发出的包会同时发送给客户端,这是一种浪费流量的行为,我们可以把两个消息合并来优化流量。

当我们铸造金币,PshTaskPrgs
和RspBuy
会同时推送给客户端
服务器TaskSys增加GetTaskPrgs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public PshTaskPrgs GetTaskPrgs(PlayerData pd, int tid) { TaskRewardData trd = CalcTaskRewardData(pd, tid); TaskRewardCfg trc = _cfgSvc.GetTaskRewardCfg(tid);
if (trd.prgs < trc.count) { trd.prgs += 1;
CalcTaskArr(pd, trd);
return new PshTaskPrgs { taskArr = pd.taskArr }; } else return null; }
|
修改BuySys的API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| if (pd.diamond < data.cost) { msg.err = (int)ErrorCode.LackDiamond; } else { pd.diamond -= data.cost; PshTaskPrgs pshTaskPrgs = null; switch (data.buytype) { case 0: pd.power += 100; pshTaskPrgs = TaskSys.Instance.GetTaskPrgs(pd, 4); break; case 1: pd.coin += 1000; pshTaskPrgs = TaskSys.Instance.GetTaskPrgs(pd,5); break; } if(_cacheSvc.UpdatePlayerData(pd.id, pd)) { msg.err = (int)ErrorCode.UpdateDBError; } else { msg.rspBuy = new RspBuy { buytype = data.buytype, diamond = pd.diamond, coin = pd.coin, power = pd.power, };
msg.pshTaskPrgs = pshTaskPrgs; } }
|
修改客户端MainCitySys
修改RspBuy
方法,就是判断一下GameMsg
里面有没有pshTaskPrgs
包。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public void RspBuy(GameMsg msg) { RspBuy rspBuy = msg.rspBuy; GameRoot.Instance.SetPlayerDataByBuy(rspBuy); GameRoot.AddTips("Buy Succeed"); mainCityWnd.RefreshUI(); buyWnd.SetWndState(false);
if (msg.pshTaskPrgs != null) { GameRoot.Instance.SetPlayerTaskPrgs(msg.pshTaskPrgs); if (taskWnd.GetWndState()) taskWnd.RefreshUI(); } }
|