登录业务系统
登录注册
角色创建
账号密码正确 才到角色创建这一步
1 注册完之后---->角色创建
2 账号密码输入之后 如果角色没有创建--->创建角色
3 角色名字在client 随机or输入 初步校验合法性 server校验
网络库 PESocket
玩家属性
level #等级
exp #经验
power #体力
coin #金币
diamond #钻石
crystal #水晶
角色属性
hp #生命
ad #防御
ap #战力
addef #防御
apdef #ap差值
dodge #闪避概率
pierce #穿透比率
critical #必杀技(暴击概率)
guideid #引导
地图
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item ID="10000">
<mapName>圣光主城</mapName>
<sceneName>SceneMainCity</sceneName>
<mainCamPos>17.4,7,50</mainCamPos>
<mainCamRote>45,135,0</mainCamRote>
<playerBornPos>22,-1.1,45</playerBornPos>
<playerBornRote>0,0,0</playerBornRote>
</item>
</root>
任务剧情
id:1000
npcid:0智者(1将军,2工匠,3商人)
dialog:[xxxxxx,xxxxxx,xxxxxxx,xxxxxx]
actID:剧情结束之后,要干的事情(0与智者聊天,1进入副本,2强化界面,3体力购买,4金币铸造,5世界聊天)
reward:coin 100 exp 100
经验值升级
def calExp(player,addExp):
curlv = player.level
curexp = player.exp
while True:
diff = getexpupbylevel(curlv) - curexp
if(addExp >= diff):
curlv += 1
curexp = 0
addExp = addExp - diff
else:
player.level = curlv
player.exp = curexp + addExp
break
强化升级
头部、身体 腰部 手臂 腿部 脚部
每个部位都有星级 生命、伤害、防御 花费金币强化各个部位
强化条件:最小level,消耗xxxx 结果:生命+x 伤害+x 防御+x 战力+xxx
聊天系统
世界、工会、好友
资源交易系统
花费钻石购买体力、金币
在线玩家 体力每隔xx秒定时恢复xxx点 体力也有上限
离线玩家 根据离线时长=now - 玩家下线时间 折算add体力
PowerAddSpace = 5 分钟
PowerAddCount = 2 体力值
addpower = diffsecond / (60 * PowerAddSpace) * PowerAddCount
powermax = 根据当前玩家等级 查表获取
if player.power >= powermax:
continue
else:
player.power += addpower
if player.power >= powermax:
player.power = powermax
任务系统
战斗系统
一般的战斗模式如下
客户端先要自己校验体力够不够。。。。。
a请求服务器开始战斗,校验合法则开始加载战斗资源
b玩家操控角色释放技能 本质是控制角色播放动作 对应时间点播放技能特效与音效
c 计算攻击范围与伤害
d 保留相应运算结果,战斗数据发往服务器校验
e 结果合法则发送关卡奖励
ARPG游戏不涉及战斗部分的网络同步
服务器伪代码
fbid = packet.unpacket("H",pkt)
costpower = getConfig(fbid).power
player.power -= costpower
然后告诉client 最新的power 以及 fbid