任务系统和其他系统打交道很多,比如副本系统、导航系统等,其他的系统用于刷新任务系统的进度。
添加更新任务进度API
给TaskSys
添加更新任务进度的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
| public void CalcTaskPrgs(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);
ServerSession session = _cacheSvc.GetOnlineServerSession(pd.id); if (session != null) { session.SendMsg(new GameMsg { cmd = (int)CMD.PshTaskPrgs, pshTaskPrgs = new PshTaskPrgs { taskArr = pd.taskArr, } }); } } }
|
在GameMsg
里面添加PshTaskPrgs
,相应的CMD
和GameMsg
类的声明像之前一样省略
1 2 3 4 5
| [System.Serializable] public class PshTaskPrgs { public string[] taskArr; }
|
在CacheSvc
添加GetOnlineServerSession(int id)
的API,用来在TaskSys里面调用
1 2 3 4 5 6 7 8 9 10 11 12 13
| public ServerSession GetOnlineServerSession(int id) { ServerSession session = null; foreach (var item in onLineSessionDic) { if (item.Value.id == id) { session = item.Key; break; } } return session; }
|
GuideSys应用进度更新
在ReqGuide
中根据GuideID来确定是否更新任务进度
1 2 3 4 5 6 7 8 9 10
| if(pd.guideid == reqGuideData.guideid) { if (pd.guideid == 1001) { TaskSys.Instance.CalcTaskPrgs(pd, 1); } }
|
StrongSys应用进度更新
在成功进行强化时更新任务进度
1 2 3 4 5 6 7 8
| if (nextSd != null) { TaskSys.Instance.CalcTaskPrgs(pd, 3); pd.coin -= nextSd.coin; pd.crystal -= nextSd.crystal; pd.strongArr[reqStrongData.pos] += 1; }
|
BuySys应用进度更新
在购买体力时更新任务进度,在购买金币时更新任务进度
1 2 3 4 5 6 7 8 9 10 11
| switch (data.buytype) { case 0: pd.power += 100; TaskSys.Instance.CalcTaskPrgs(pd, 4); break; case 1: pd.coin += 1000; TaskSys.Instance.CalcTaskPrgs(pd,5); break; }
|
ChatSys应用进度更新
1 2 3 4 5 6 7
| public void SendChat(MsgPack msgPack) { SndChat data = msgPack.msg.sndChat; PlayerData pd = _cacheSvc.GetPalyerDataBySession(msgPack.session); TaskSys.Instance.CalcTaskPrgs(pd, 6); }
|
注意,进度更新没有应用到数据库,仅应用在缓存中
只有在客户端点击领取时才会更新到数据库中。