游戏服务器中,能力模块品级提升主要包括两个方面,一个方面是等级,另外一个方面是当前等级的经验值。一般表现为通过吞噬单个或者多个道具来获取经验值,然后根据经验值从而使该能力模块升到多少级。有两种做法可以实现:
(1)先计算吞噬的所有道具,得到总经验值,然后再升级,描述如下:
while (true) {
根据当前等级找到对应相关配置;
if (总经验值 < 当前升级需要经验值) break;
if (如果下一等级的配置不存在) break; //已经到达最大等级
总经验值 -= 当前升级所需要经验值;
当前等级 += 1;
}
(2)循环计算单个道具的经验值,然后再计算本次吞噬后所处等级段,描述如下:
void cal_exp(int &cur_lvl, &int cur_exp)
{
根据当前等级找到对应相关配置;
if (总经验值 < 当前升级需要经验值) return;
if (如果下一等级的配置不存在) return;
cur_exp -= 当前升级所需要经验值;
cur_lvl += 1;
}
能力模块相关功能一般来说都是需要处理品级提升相关逻辑的,比如图鉴系统,衣服系统,卡片系统等。每次升级后,重新计算一下属性,然后刷新给客户端即可。
for (对于每个道具) {
...特殊处理...
当前经验值 += 该道具经验值;
cal_exp(当前等级,当前经验值);//计算吞噬单个道具后,所属等级段(当前等级传引用)
}
一般来说都是通过方法(1)实现这种能力模块品级提升需求,但是当需要对所吞噬的道具中某些道具做特殊处理时,即对被吞噬的道具有不一致处理的时候,可以通过方法(2)实现。