MMORPG游戏拍卖行开发流程

一、模块及线程分类

TIradeBankMgr 整体管理模块
TTradeBankBidListTasket 拍卖行批量道具操作线程
TIradeBankBidTasket,拍卖行单个道具操作线程
TradeBankBidTimerTasket 拍卖行时间相关操作线程(上架过期之类的时间操作)

二、批量搜索物品

1、客户端发起查询(doCM TradeBankGoodList)
2、选择交易行类型为拍卖行
3、执行不同的查询操作
我要购买:查询拍卖行所有出售中的道具
我要购买搜索;根据道具名字查询拍卖行出售中的道具
我的拍品(包括我正在拍卖和拍卖出去了没领取的)
我的竞价(包括我正在竞拍和竞拍下了没领取的和竞拍失败(失败但是可以继续竞拍失败且不能再竞拍的)的)

三、出售

1、客户端发起出售(doCM TradeBanksel)
2、服务器检测一系列条件
3、服务器异步查询交易行总单数、玩家正在出售单数、待领取单数
4、异步查询结束,检查一些列条件
5、扣除手续费,扣除装备
6、异步保存(插入出售订单)
7、异步保存失败,尝试返回手续费,补回道具,如果玩家离线,日志记录道具信息
8、异步保存成功,通知玩家

四、一口价

1、客户端发起购买(doCM TradeBankOp)
2、服务器检查是否满足购买条件
3、异步查询订单信息,查询成功,则锁定订单
4、异步查询失败不允许购买
5、异步查询成功,检测一些列条件
6、扣除购买费用
7、异步更新订单到售出状态(同时解锁订单)
8、异步更新失败,补回购买费用(在线直接给钱,离线邮件补回)
9、异步更新成功,通知买家购买成功和领取红点提示,通知卖家道具售出和领取红点提示;
10、将老的竞价持有者加到待领取数据库中
11、直接走竞价失败领取流程,从竞价失败待领取数据库中读职数据,给竞价失败的玩家发钱
12、交易成功,直接走领取流程,卖方领职货币,买方领取道具

五、竞价

1、客户端发起竞价(doCM_TradeBankOp)
2、服务器检查是否满足购买条件
3、异步查询订单信息,查询成功,则锁定订单
4、异步查询失败不允许购买
5、异步查询成功,检测一些条件,幷断是否高于当前竞价者
6、扣除购买费用
7、异步更新订单,修改最新竞价者(同时解锁订单)
8、异步更新失败,补回购买费用(在线直接给钱,离线邮件补回)
9、异步更新成功,红点提示
10、将老的竞价持有者加到待领职数据库中
11、直接走竞价失败领取流程,从竞价失败待领取数据库中读取数据,给竟价失败的玩家发钱

六、下架

1、客户端发起下架(doCM TradeBankop)
2、服务器异步查询订单信息,查询成功,则锁定订单
3、异步查询失败,通知客户湍
4、查询成功检测一些列条件
5、异步更新订单到下架状态(同时解锁订单)
6、异步更新失败,通知客户端下架失败
7、异步更新成功,通知客户端下架成功和领取红点提示
8、将老的竞价持有者加到待领取数据库中
9、直接走竞价失败领取流程,从竞价失败待领取数据库中读取数据,给竞价失败的玩家发钱

七、单个领取(引擎版领取流程直接在订单结束时调用)

1、客户端发起领取(doCM_TradeBankOp)
2、服务器异步查询订单信息,查询成功,则预定订单
3、异步查询失败,通知客户端领取失败
4、异步查询成功,捡测一系列条件
5、异步更新订单领职状态(同时解锁订单)
6、异步更新失败,通知客户揣领取失败
7、异步更新成功,开始发货
8、玩家离线,则不允许领取,异步更新恢复领取状态
9、玩家是买家,则领取物品,如果背包不足,则通过邮件发送物品
10、玩家是卖家,则领取报醒

八、一键领取(引擎版领取流程直接在订单结束时调用)

1、客户端发起一键领取(doCMTradeBankGoodList)
2、服务器异步查询可领取列表
3、异步查询结束,逐个领取物品
4、领取流程同“单个领取”

九、时间管理

1、TradeBankMgr每隔8分钟(可设置)或者记录的标记时间到的时候调用 TTradeBankBidTimerTasket 检测拍卖行上的道具上架时间是否结束,同时把最近一次即将过期的时间设置为标记时间
2、通知玩家领取
3、对于无人竞拍的道具修改订单号为洨拍状态
4、对于有人竞拍的道具服务器异步查询订单信息,查询成功,则领定订单
5、异步更新订单,修改竞拍结果(同时解锁订单)
6、交易失收,直接走领取流程,卖方领职道具

十、上线检测

1、玩家上线时去数据库查询是否有已完成或失败的订单还未领取,或者是否有竞价退回未领取
2、查询出了结果,走对应的领取流程

·十一、异步线程操作说明

1、使用异步线程过程
如: 购买,先异步线程查询数据库,查到先修改锁定字段,回到主线程,扣除金币之类的,再异步线程修改订单状态
2、异步线程结构
一个管理类,管理类里有一个 threadlist 和tasktist,我们的每一个操作都封装成一个task任务放入tasklist 中,threadlist 多线程去 taskuist 中取任务执行(交易行目前采用的异步线程是单线程,因为多线程修改数据库的操作太复杂容易出错,单线程目前也已经能支持性能了)

数据库设计

– Table structure for `tradebank

DROP TABLE IF EXISTS tradebank; CREATE TABLE "tradebank (
Idx int(10) NOT NULL AUTO_INCREMENT,
OrderlD varchar(255) NOT NULL,
SellerlD bigint(20) DEFAULT NULL,
BuyerlD bigint(20) DEFAULT NULL,
BidderlD bigint(20) DEFAULT NULL,
StartingPrice"int(10) DEFAULT NULL FixedPriceint(10) DEFAULT NULL,
BiddingPriceint(10) DEFAULT NULL,
Itemidxint(10) DEFAULT NULL,ItemName’varchar(255) DEFAULT NULL,
ItemKindint(10) DEFAULT NULL, Statusint(10) DEFAULT NULL,
FetchStatusint(10) DEFAULT NULL , Moneylype"int(10) DEFAULT NULL,
BuyType int(10) DEFAULT NULL,
ExpireTime' datetime DEFAULT NULL, UpdateDatedatetime DEFAULT NULL, CreateTimedatetime DEFAULT NULL ltemDatablob,ltemid’ bigint(20) DEFAULT NULL,
PRIMARY KEY (‘Idx’),
UNIQUE KEY OrderiD(OrderD) USING BTREE, KEY ix tradestatus (MoneyType,status,FetchStatus,SellerlD,BuyerlD`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

  • Records of tradebank.

-Table structure for tradebank bidding return

DROP TABLE IF EXISTS tradebank bidding return ;
CREATE TABLE tradebank bidding return(
OrderlD varchar(255) NOT NULL,
BidderlD bigint(20) NOT NULL DEFAULT ‘0’
BiddingPriceint(10) DEFAULT NULL,
UpdateDate datetime DEFAULT NULL,"Statusint(10) DEFAULT NULL,Moneylypeint(10) DEFAULT NULL, PRIMARY KEY ("OrderlD `BidderlD)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

– Records of tradebank bidding return

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值