战神引擎传奇手游搭建架设常见问题解决合集

显示获取版本信息失败,请检查网络连接,是否重试

这个算是战神引擎新手搭建很容易遇到的问题。究其原因,是你没办法访问到D:\mud2.0\logincenter\logincenter_win\config\serverlist.json或者访问到之后无法通过PHP传奇登陆参数去登录。但是造成此问题最大的问题是因为你的服务端是残端或者被人动过手脚。。。我遇到几个版本的战神引擎绝对是有人故意改了配置,改法不尽相同,但都会报这个错误。下面列举我遇到的恶意改动。

这个错误其实很简单,不过这也说明第一步也没弄对啊。一般来说出现这个问题是因为没有获取到project.manifest文件和version.manifest,原因有很多,检查的话可以用浏览器输入你的IP或者域名后跟上面两个文件名,例如http://127.0.0.1\version.manifest(在服务器上的要填公网的ip或者域名)。

如果能正常访问,说明是客户端修改IP没有修改对,去看下客户端\assets\res\project.manifest文件的ip是否修改正确。
如果浏览器也不能访问,则大概率是assets目录位置不对或apache配置文件路径设置有问题,当然也有可能是客户端的project.manifest修改的IP不正确,如果能实现用浏览器访问此文件的得到的内容也为访问路径IP,说明应该配置没问题了。
如果浏览器能访问,手机客户端还有服务器都配置没问题了,还是显示这个报错,那就检查下手机能否联网,或者此APP是否有权限联网,或者用域名的的检测下DNS解析,再或者局域网搭建的看看是不是一个网段(例如忘连接wifi了或者虚拟机设置的NAT模式网卡)

战神引擎更新进度100%后卡住

这个问题也很常见,不过原因倒是比较简单。因为战神引擎的设置,更新用的端口是88,而更新之后获取列表及访问登录是用的8088端口,方便我们更新服务器和游戏服务器分离开来。前者大概率是phpstudy一键的,所以不会出什么问题就可以开始更新。而从客户端的project.manifest获取更新服务器信息更新完之后,会从客户端的mir2.zip及mir264.zip中读取游戏服务器(这三个文件是不是很眼熟~)。而在这里出问题要么就是服务端的8088端口无法访问到,要么就是客户端修改mir2.zip及mir264.zip文件时IP没有填对。测试方法还是通过浏览器访问IP:8088端口(英文输入法的冒号),测试是否正常访问,战胜引擎的默认主页是有一个hello world来测试访问的。

如果可以正常访问,大概率是客户端那两个压缩包里的IP不正确了。教程里一般都写明了,要修改为16位IP,位数不够用0来凑。但是到底怎么算16位IP,而且到底凑在哪,却都没有提到,造成很多误解和困扰。我这里大概说一下,需要注意的有两个地方:

IP中的.也算一位的,所以实际上数字要有13个。如果IP为111.222.123.123,可能大家都知道,在最后一个123前补0,即可凑齐6位,为111.222.123.0123。不过如果IP为111.22.123.123这种的呢,0补在哪。大家都说法是都可以,问题是我将两个0补在22的位置变为0022后还是连不上,改为111.22.0123.0123之后就可以连上了。所以我推测这个原则是先从后面补齐,每个数字也不要超过4位。也就是说1.1.1.1补齐的话,应该是1.0001.0001.0001。上面俩肯定正确,不过最后的结论个人推测,没遇到过这么短的ip,没有实践过。欢迎大家批评指正。如果端口能访问,客户端也修改正确ip,那就很有很能会遇到下面这个报错——获取开发者区服信息失败。

提示获取开发者区服信息失败

这个算是战神引擎新手搭建很容易遇到的问题。究其原因,是你没办法访问到D:\mud2.0\logincenter\logincenter_win\config\serverlist.json或者访问到之后无法通过PHP传奇登陆参数去登录。但是造成此问题最大的问题是因为你的服务端是残端或者被人动过手脚。。。遇到几个版本的战神引擎绝对是有人故意改了配置,改法不尽相同,但都会报这个错误。下面列举我遇到的恶意改动。

配置文件被做了手脚

因为是提示获取开发者区服信息失败,所以我第一个想到的就是文件路径不对,用户客户端定义获取区服信息是通过访问服务器的/serverlist路径。一般来说想访问此路径获取到到此文件有两种方式,一个是在lua程序中定义。另一个是在nginx里面设置alias。这两种修改的我都看到过,先说第一种。第一种方式访问区服列表的,nginx只起到一个代理的作用,不指定路径,因为在logincerter_win目录中已经定义好了访问规则,如下图所示,定义了访问/serverlist路径则去访问下application/controllers/serverlist.lua,而文件又定义了serverlist.json的位置,所以就可以正常获取区服表了。

不过我遇到有的版本,估计把这个serverlist.lua文件中的路径设置错误,或者把下面开服表内容删掉。因为不同版本开服表信息并不通用,而且名字要相互间匹配,所以如果没有开服表信息或者是错误的,那就比较难解决了。建议换个端试试吧。
第二种修改nginx的改动就比较好修复了。这种版本的在nginx的配置文件中定义了alias,来实现访问/serverlist路径可以获取到区服表,但是如果这一条alias如果被删掉了,或者故意改错,那就无法访问到正确的文件了。我遇到过一个版本,也是72的,正常来说应该访问/serverlist路径,直接定义到serverlist.json文件本身,可他这个配置文件却是定义到config目录本身,难怪我看nginx日志一直报403,权限拒绝。

所以需要将后面路径补齐,正确的为alias D:\mud2.0\logincenter\logincenter_win\config\serverlist.json;,记得nginx配置文件每行分号结尾。不过也有版本修复了上面的问题后还是不能正常登录,我倒也没发现到底是哪里被做了手脚。不过这个logincenter_win目录倒是通用的,找一个没被做手脚的,将里面的serverlist.json、serverlist.lua换成自己的,就可以用了,非要修复反而很麻烦,毕竟搞破坏比修好容易太多了。

战神引擎区服列表为空或不显示

最开始显示了测试服务器登录,也输入了要进入的区服,还提示了是否进入”XXXX”,点了确定进去之后,区服列表竟然是空的。这个问题大概率是因为serverlist配置的不对,检查下serverlist.json吧,版本名字都要匹配。

客户端如果用的版本不一致到也有可能出现这种情况。

战神引擎获取该区补丁失败

这个问题就是上面的截图中的那个ConfigName条目里填写的文件获取不到了。如果能到这一步,说明端口连通应该是没问题的,应该有两方面原因

  1. 检查nginx配置文件,有没有如下代码
          location /downloadconfig {
            alias D:\mud2.0\logincenter\ClientConfig;
            allow all;
            autoindex on;
            autoindex_localtime on;
        }
  1. 查看D:\mud2.0\logincenter\ClientConfig目录下有没有ConfigName条目后面跟着的对应文件,如果有其他名字的文件,改上面的截图中的那个ConfigName条目就可以了。

战神引擎选择完区服之后不开门

好不容易连接上了服务器,区服信息也显示了,历尽千辛万苦到最后,竟然半天没人开门。这真是气到吐血啊。出现此问题,肯定是因为mongodb出了问题,连接不上。

mongodb自身问题

上面提到,当时启动mongodb是一直报错,后来用命令方式启动起的端口和服务。这样虽然以前台进程方式启动了mongodb服务,也可以通过测试,甚至连接进去查看数据,可以好像战神引擎不认。。。其实我mongodb一直无法启动的时候就应该想到,为什么无法用服务方式启动。那是因为云主机默认只有一个C盘,我当时不是纯净系统,上面还跑着其他端,没法直接从C盘压缩卷再创建一个D盘,于是我是通过共享目录在映射网络磁盘的方式,生成了一个D盘(其实还是C盘下的一个目录而已),而这样虽然mongodb通过命令行可以启动,但是等到系统服务方式启动的时候,他就不认这个映射关系了(我用subst命令生成本地磁盘也试了,还是不能访问)。就相当于找不到数据库或者配置文件了。类似linux中很多配置文件中不能存在软链接一个原理吧。

所以解决方案就是通过原路径C盘目录下来指定配置文件(毕竟文件本来就在C盘),而不是D盘目录下的那个路径了。或者直接把mongodb整个数据库和配置文件目录都拷贝到C盘任一目录下,毕竟这个服务只是需要一个端口来连接就可以了,具体数据库在哪无所谓的。修改之后,以服务的方式启动,战神引擎就可以正确连接mongodb数据库,也就可以往里面写入账号信息了。不开门就是因为连接不上mongodb数据库,无法写入信息。

mongodb连接端口被人改掉了

如果mongodb本身没有问题,还有就是这一种情况,连接mongodb的端口被人换了。 大家都是用的都是别人设置好的脚本来启动,也不需要检查各种配置文件,而有人把其中配置文件的端口换掉,你自己验证还是很难发现的。

请检查此文件中的端口是否是默认端口27017,我遇到了个还是72家族的1.85版本这个端口竟然写的27099,通过27099端口怎么也不可能连接到mongodb去验证的!卖端就算了,还要逼你掏钱修复买教程,真的太损了。

右上方角落版权水印修改

准备
1、MD5计算器
2、2个png透明图片(1280×26)
开始
游戏上方的广告有2个地方可以控制
1、就是列表文件
路径:D:\mud2.0\logincenter\logincenter_win\config
serverlist.json,先打开这份文件,看看里面是不是有
2、更新图片素材
3g.png和wifi.png
第一步:制作两张png的图片,格式必须要为png
第二步:进入服务器,找到更新文件夹
路径:\assets\rs\pic\console\infobar
把新作的2张图片,放到对应的路径

搭建后登录常见问题

1 获取版本信息失败 ,请检查网络…
project.manifest问题IP ,mysql未启动 以及端口问题,以及文件热更新地址打不开(指文件网址),素材最好直接放到客户端的同一文件目录里,素材与包名名字不能带中文

2 获取服务器信息失败
没点RUN

3 直接不开门
serverlist.json文件问题

4 下载异常,重试中
热更新问题,文件多余或带有中文,以及中文路径

5 你选择的游戏服务器正在维护中,或者满员
LG网关没开 GG游戏网关程序没开

6 10061 问题
PHPstudy未开启

7 游戏点提交没有反应及内部错误,或者账户画面没有游客模式
application.lua密码与DB数据库密码不一致,或者PHPsstudy什么之类dll文件被360杀毒缺失,360恢复区恢复

8 配置的区组ID或服务器名字不一致
serverlist.json里面的数字180.185.176 可能是数字不一致问题

一个IP只能注册一个账号 – db.lua

--package.path =  "../?/init.lua;" .. package.path
local config = require "config.application"
local mongo = require "resty.mongol"
local json = require "cjson.safe"
local errcode = require "errorcode"
local m = {}

local timeout = config.timeout or 10000
local max_idle_time = config.max_idle_time or 10000
local pool_size = config.pool_size or 20

local function get_db(dbname, id, key)
	local conn = mongo:new()
	conn:set_timeout(timeout)
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		return "null"
	end

	local db = conn:new_db_handle(dbname)
	local col = db:get_col(dbname)
	
	r = col:find_one({ticket = id})
	if r then
		ok, err = conn:set_keepalive(max_idle_time, pool_size)
		if not ok then ngx.log(ngx.ERR, err) end
		return r[key]
	else
		return ""
		-- return "null"
	end
end

function m.get_acc_guest(machine_id)  --通过机器编号获取游客账号 不存在则新建 返回该ptid码
	if machine_id == "" then return nil, errcode.ERR_NONE_PARAM end

	local errstr = errcode.ERR_INNER_FAILED

	local conn = mongo:new()
	conn:set_timeout(timeout)

	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		ngx.log(ngx.ERR, "get connect occur error ---" .. err)
		return nil, errstr 
	end

	local db = conn:new_db_handle("account")

	if config.mongodbauth then
		ok = db:auth(config.mongodbuser, config.mongodbpsw) 
		if not ok then 
			ngx.log(ngx.ERR, "mongo db auth failed")
			return nil, errstr 
		end 
	end

	local col = db:get_col("guest")
	if not col then 
		ngx.log(ngx.ERR, "get guest collection occur error")
		return nil, errstr
	end

	local ptid = nil
	local r = col:find_one({machine_id = machine_id})	
	if r then
		ptid = r["pt_id"]
		errstr = errcode.ERR_OK
	else
		ptid = "pt"..string.sub(ngx.md5(machine_id..":/"..ngx.time()), 8, -8)		--暂时共20位

		--检查重复
		local normal_col = db:get_col("normal")
		if normal_col and normal_col:find_one({pt_id = ptid}) or col:find_one({pt_id = ptid}) then	
			ngx.log(ngx.ERR, ptid.." this ptid is already exist in db")
			return nil, errstr
		end

		local t = {machine_id = machine_id, pt_id = ptid, create_time = ngx.localtime() , login_time = ngx.localtime() , login_ip = ngx.var.remote_addr}
         --机器编号		PT账号		创建账号时间	上次登录时间
		ok, err = col:insert({t}, nil, true)

		if ok then 
			errstr = errcode.ERR_OK
		else
			ptid = nil 
			ngx.log(ngx.ERR, err)
		end
	end

	local kep_ok, kep_err = conn:set_keepalive(max_idle_time, pool_size)
	if not kep_ok then ngx.log(ngx.ERR, kep_err) end	

	return ptid, errstr
end

function m.check_acc_normal(id, psw)	--校验正式账号
	if id == "" or psw == "" then return nil, errcode.ERR_NONE_PARAM end

	local errstr = errcode.ERR_INNER_FAILED

	local conn = mongo:new()
	conn:set_timeout(timeout)

	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		ngx.log(ngx.ERR, "get connect occur error ---" .. err)
		return nil, errstr 
	end

	local db = conn:new_db_handle("account")

	if config.mongodbauth then
		ok = db:auth(config.mongodbuser, config.mongodbpsw) 
		if not ok then 
			ngx.log(ngx.ERR, "mongo db auth failed")
			return nil, errstr 
		end 
	end

	local col = db:get_col("normal")
	if not col then 
		ngx.log(ngx.ERR, "get normal collection occur error")
		return nil, errstr
	end

	local ptid = nil
	local r = col:find_one({normal_id = id})	

--正式账号表
--注册账号		PT账号  	密码		创建账号时间	上次登录时间

	if r then	
		if  r["password"] == psw then	
		    if  r["blacklist"] == "true" then
			    errstr = errcode.ERR_USER_INVALID
		    else
				ptid = r["pt_id"]
				col:update({_id = r["_id"]}, { ["$set"] = { login_ip = ngx.var.remote_addr} })
				errstr = errcode.ERR_OK
			end
		else
			errstr = errcode.ERR_PSW_INVALID
		end
	else
		errstr = errcode.ERR_ID_NOT_EXIST
	end
		
	local kep_ok, kep_err = conn:set_keepalive(max_idle_time, pool_size)
	if not kep_ok then ngx.log(ngx.ERR, kep_err) end	

	return ptid, errstr
end

function m.reg_acc_normal(id, psw, safecode)	--注册正式账号
	if id == "" or psw == "" or safecode == "" then return false, errcode.ERR_NONE_PARAM end

	local errstr = errcode.ERR_INNER_FAILED

	local conn = mongo:new()
	conn:set_timeout(timeout)

	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		ngx.log(ngx.ERR, "get connect occur error ---" .. err)
		return false, errstr 
	end

	local db = conn:new_db_handle("account")

	if config.mongodbauth then
		ok = db:auth(config.mongodbuser, config.mongodbpsw) 
		if not ok then 
			ngx.log(ngx.ERR, "mongo db auth failed")
			return false, errstr 
		end 
	end

	local col = db:get_col("normal")
	if not col then 
		ngx.log(ngx.ERR, "get normal collection occur error")
		return false, errstr
	end

	
	
	local r = col:find_one({creat_ip = ngx.var.remote_addr})	
	local flag = false

	if r then
		errstr = errcode.ERR_USER_IP
else




	local t = col:find_one({normal_id = id})	
	local flag = false

	if t then
		errstr = errcode.ERR_ID_EXIST
	else
	--新建数据
		local ptid = "pt"..string.sub(ngx.md5(id..":/"..ngx.time()), 8, -8)

		--检查重复
		local guest_col = db:get_col("guest")
		if guest_col and guest_col:find_one({pt_id = ptid}) or col:find_one({pt_id = ptid}) then	
			ngx.log(ngx.ERR, ptid.." this ptid is already exist in db")
			return false, errstr
		end

		local t = {normal_id = id,pt_id = ptid, password = psw, safecode = safecode, create_time = ngx.localtime(), login_time = ngx.localtime() ,creat_ip = ngx.var.remote_addr , login_ip = ngx.var.remote_addr , blacklist = "false"}
--正式账号表
--注册账号		PT账号  	密码		创建账号时间	上次登录时间
		ok, err = col:insert({t}, nil, true)
		if ok then 
			flag = true
			errstr = errcode.ERR_OK
		else
			ngx.log(ngx.ERR, err) 
		end
			ngx.log(ngx.ERR, err) 
		end
	end
		
	local kep_ok, kep_err = conn:set_keepalive(max_idle_time, pool_size)
	if not kep_ok then ngx.log(ngx.ERR, kep_err) end	

	return flag, errstr	
end

function m.modify_acc_psw(id, new_psw, safecode)		--修改密码
	if id == "" or new_psw == "" or safecode == "" then return false, errcode.ERR_NONE_PARAM end

	local errstr = errcode.ERR_INNER_FAILED

	local conn = mongo:new()
	conn:set_timeout(timeout)

	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		ngx.log(ngx.ERR, "get connect occur error ---" .. err)
		return false, errstr 
	end

	local db = conn:new_db_handle("account")

	if config.mongodbauth then
		ok = db:auth(config.mongodbuser, config.mongodbpsw) 
		if not ok then 
			ngx.log(ngx.ERR, "mongo db auth failed")
			return false, errstr 
		end 
	end

	local col = db:get_col("normal")
	if not col then 
		ngx.log(ngx.ERR, "get normal collection occur error")
		return false, errstr
	end

	local r = col:find_one({normal_id = id})	
	local flag = false

	if r then		
		if r["safecode"] == safecode then
			local t = {
				normal_id = r["normal_id"], 
				pt_id = r["pt_id"], 
				password = new_psw, 
				safecode = r["safecode"], 
				create_time = r["create_time"], 
				login_time = r["login_time"]
			}
			ok, err = col:update({_id = r["_id"]}, { ["$set"] = { password = new_psw } })	
			if ok then
				flag = true
				errstr = errcode.ERR_OK
			else
				ngx.log(ngx.ERR, err)
			end
		else
			errstr = errcode.ERR_SAFECODE_INVALID
		end
	else
		errstr = errcode.ERR_ID_NOT_EXIST
	end
		
	local kep_ok, kep_err = conn:set_keepalive(max_idle_time, pool_size)
	if not kep_ok then ngx.log(ngx.ERR, kep_err) end	

	return flag, errstr	
end

function m.bind_acc_normal(machine_id, new_normal_id, new_psw, safecode)		--绑定正式账号
	--查询游客表是否存在该机器ID
	--查询正式账号表是否存在该新ID
	--创建账号(PTID用游客表的)创建日期也使用游客表的
	--删除游客表信息

	if machine_id == "" or new_normal_id == "" or new_psw == "" or safecode == "" then return false, errcode.ERR_NONE_PARAM end

	local errstr = errcode.ERR_INNER_FAILED

	local conn = mongo:new()
	conn:set_timeout(timeout)

	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		ngx.log(ngx.ERR, "get connect occur error ---" .. err)
		return false, errstr 
	end

	local db = conn:new_db_handle("account")

	if config.mongodbauth then
		ok = db:auth(config.mongodbuser, config.mongodbpsw)
		if not ok then 
			ngx.log(ngx.ERR, "mongo db auth failed")
			return false, errstr 
		end 
	end

	local guest_col = db:get_col("guest")
	if not guest_col then 
		ngx.log(ngx.ERR, "get guest collection occur error")
		return false, errstr
	end

	local r = guest_col:find_one({machine_id = machine_id})	
	

	if r then
		local normal_col = db:get_col("normal")
		if not normal_col then 
			ngx.log(ngx.ERR, "get normal collection occur error")
			return false, errstr
		end

		local flag = false
		local rnew = normal_col:find_one({normal_id = new_normal_id})	
		
		if rnew then
			errstr = errcode.ERR_ID_EXIST
		else
			--新建数据
			local ptid = r["pt_id"]

			local t = {normal_id = new_normal_id, pt_id = ptid, password = new_psw, safecode = safecode, create_time = r["create_time"], login_time = r["login_time"]}

			ok, err = normal_col:insert({t}, nil, true)
			if ok then 
				flag = true
				errstr = errcode.ERR_OK

				--删除游客表中数据
				ok, err = guest_col:delete({_id = r["_id"]})
				if not ok then
					ngx.log(ngx.ERR, err)
				end
			else
				ngx.log(ngx.ERR, err) 
			end
		end
	else
		errstr = errcode.ERR_MACHINEID_INVALID
	end
		
	local kep_ok, kep_err = conn:set_keepalive(max_idle_time, pool_size)
	if not kep_ok then ngx.log(ngx.ERR, kep_err) end	

	return flag, errstr	
end

function m.save_ticket(ticket, ptid)
	if ticket == "" or ptid == "" then return false, errcode.ERR_NONE_PARAM end

	local errstr = errcode.ERR_INNER_FAILED

	local conn = mongo:new()
	conn:set_timeout(timeout)

	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		ngx.log(ngx.ERR, "get connect occur error ---" .. err)
		return false, errstr 
	end

	local db = conn:new_db_handle("account")

	if config.mongodbauth then
		ok = db:auth(config.mongodbuser, config.mongodbpsw)
		if not ok then 
			ngx.log(ngx.ERR, "mongo db auth failed")
			return false, errstr 
		end 
	end

	local col = db:get_col("ticket_stored")
	if not col then 
		ngx.log(ngx.ERR, "get ticket_stored collection occur error")
		return false, errstr
	end

	local flag = false

	local v = col:find_one({ticket_id = ticket})
	if not v then
		local r = col:find_one({pt_id = ptid})
		if r then
			--ptid已存在则替换新的
			ok, err = col:delete({_id = r["_id"]})
			if not ok then
				ngx.log(ngx.ERR, err)
			end		
		end

		local t = {
			ticket_id = ticket,
			pt_id = ptid, 
			create_tick = ngx.time()
		}
		ok, err = col:insert({t}, nil, true)	

		if ok then 
			flag = true
			errstr = errcode.ERR_OK
		else
			ngx.log(ngx.ERR, err) 
		end
	end

	local kep_ok, kep_err = conn:set_keepalive(max_idle_time, pool_size)
	if not kep_ok then ngx.log(ngx.ERR, kep_err) end	

	return flag, errstr	
end

function m.check_ticket(ticket, exptime)
	if ticket == "" or exptime < 0 then return false, errcode.ERR_NONE_PARAM end

	local errstr = errcode.ERR_INNER_FAILED

	local conn = mongo:new()
	conn:set_timeout(timeout)

	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		ngx.log(ngx.ERR, "get connect occur error ---" .. err)
		return false, errstr 
	end

	local db = conn:new_db_handle("account")

	if config.mongodbauth then
		ok = db:auth(config.mongodbuser, config.mongodbpsw)
		if not ok then 
			ngx.log(ngx.ERR, "mongo db auth failed")
			return false, errstr 
		end 
	end

	local col = db:get_col("ticket_stored")
	if not col then 
		ngx.log(ngx.ERR, "get ticket_stored collection occur error")
		return false, errstr
	end

	local flag = false
	local r = col:find_one({ticket_id = ticket})
	if r then
		if ngx.time() - exptime > r["create_tick"] then -- 超时
			errstr = errcode.ERR_TICKETID_EXPTIME
			ok, err = col:delete({_id = r["_id"]})
			if not ok then
				ngx.log(ngx.ERR, err)
			end
		else
			flag = r["pt_id"]
			errstr = errcode.ERR_OK
		end 
	else
		errstr = errcode.ERR_CHECK_FAILD
	end

	local kep_ok, kep_err = conn:set_keepalive(max_idle_time, pool_size)
	if not kep_ok then ngx.log(ngx.ERR, kep_err) end	

	return flag, errstr
end











function m.get_lastloginserver(id)
	return get_db('login', tostring(id), "servername")
end

function m.get_userid(id)
	return get_db('userid',id, "userid")
end

function m.set_lastloginserver(id, ticket, name)
	local conn = mongo:new()
	conn:set_timeout(timeout) 
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then return "null" end
	local db = conn:new_db_handle('login')
	local col = db:get_col('login')
	id = tostring(id)
	local r = col:find_one({ticket = id})	
	local t = {ticket = id, servername = name}
	if r then
		col:update({_id = r["_id"]}, t)	
	else
		col:insert({t}, nil, true) 
	end
	
	db = conn:new_db_handle('userid')
	col = db:get_col('userid')
	
	ok, err = col:delete({userid = id})
	if not ok then ngx.log(ngx.ERR, err) end
	
	ok, err = conn:set_keepalive(max_idle_time, pool_size)
	if not ok then ngx.log(ngx.ERR, err) end	
end


function m.set_userid(id, userid, phone)
	local conn = mongo:new()
	conn:set_timeout(timeout) 
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		return "null"
	end
	local db = conn:new_db_handle('userid')
	local col = db:get_col('userid')
	local id = tostring(id)	
	local phone = tostring(phone)
	local userid = tostring(userid)
	local r = col:find_one({ticket = id})	
	local t = {ticket = id, userid = userid, phone = phone}
	if r then
		col:update({_id = r["_id"]}, t)	
	else
		r, err = col:insert({t}, nil, true)	
	end

	ok, err = conn:set_keepalive(max_idle_time, pool_size)
	if not ok then ngx.log(ngx.ERR, err) end

end

function m.get_userphone(id)
	if not id then return end
	return get_db('userid',id, "phone")
end


-- function m.set_userphone(id, phone)
-- 	if not (id and phone) then return end
-- 	local conn = mongo:new()
-- 	conn:set_timeout(timeout)
-- 	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
-- 	if not ok then
-- 		return "null"
-- 	end
-- 	local db = conn:new_db_handle("userid")
-- 	local col = db:get_col("userid")
-- 	local id = tostring(id)
-- 	local phone = tostring(phone)
-- 	local r = col:find_one({ticket = id})
-- 	if r then
-- 		local t = {ticket = id, userid = r["userid"], phone = phone}
-- 		col:update({_id = r["_id"]}, t)
-- 	else
-- 		--由于先插入的userid, 故在正常的情况下肯定能找到这个文档,不会出现找不到的情况
-- 	end

-- 	ok, err = conn:set_keepalive(max_idle_time, pool_size)
-- 	if not ok then
-- 		ngx.log(ngx.ERR, err)
-- 	end
-- end

function m.save_userid(userid)   --insert secondpwd.secondpwd
	if not userid then return end
	
	local conn = mongo:new()
	conn:set_timeout(timeout)
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		return "null"
	end
	local db = conn:new_db_handle("secondpwd")
	local col = db:get_col("secondpwd")
	local userid = tostring(userid)
	local r = col:find_one({userid = userid})
	if not r then 
		local t = {userid = userid}
		r, err = col:insert({t}, nil, true)
	end
	ok, err = conn:set_keepalive(max_idle_time, pool_size)
	if not ok then ngx.log(ngx.ERR, err) end
end


function m.get_usersecondpwd(userid)
	if not userid then return end
	local userid = tostring(userid)
	local conn = mongo:new()
	conn:set_timeout(timeout)
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		return "null"
	end

	local db = conn:new_db_handle("secondpwd")
	local col = db:get_col("secondpwd")

	local r = col:find_one({userid = userid})
	if r then
		ok, err = conn:set_keepalive(max_idle_time, pool_size)
		if not ok then ngx.log(ngx.ERR, err) end
		return r["secondpwd"]
	else
		return ""
	end
end


function m.set_usersecondpwd(userid, secondpwd)
	if not (userid and secondpwd) then return end
	local userid = tostring(userid)
	local secondpwd = tostring(secondpwd)
	local conn = mongo:new()
	conn:set_timeout(timeout)
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then 
		return "null"
	end
	local db = conn:new_db_handle("secondpwd")
	local col = db:get_col("secondpwd")
	local r = col:find_one({userid = userid})
	if r then
		local t = {userid = r["userid"], secondpwd = secondpwd}
		col:update({_id = r["_id"]}, t)
		return "success"
	else
		--正常情况下不会出现
		return "fail"
	end
end


function m.insert_order(orderid, gameorderid, productid, extend)
	--ngx.log(1, orderid..'|'..gameorderid..'|'..productid..'|'..extend)
	if not (orderid and gameorderid and extend) then return end  
	local i = string.find(extend, "&")
	if not i then return end
	local playerid = string.sub(extend, 1, i - 1)
	local serverid = string.sub(extend, i + 1, -1)
	if not (playerid and serverid) then return end
	--playerid = playerid
	serverid = tonumber(serverid)
	gameorderid = tonumber(gameorderid)
	local conn = mongo:new()
	conn:set_timeout(timeout) 
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		return "null"
	end

	local db = conn:new_db_handle("order")
	local col = db:get_col("order")

	local r, err = col:insert({{orderid = orderid, gameorderid = gameorderid, playerid = playerid, status = 1, serverid = serverid, productid = productid}}, nil, true)	
	
	ok, err = conn:set_keepalive(max_idle_time, pool_size)
	if not ok then ngx.log(ngx.ERR, err) end
	return r
end

function m.get_orders(serverid)
	if not serverid then return end 
	serverid = tonumber(serverid)
	local conn = mongo:new()
	conn:set_timeout(timeout) 
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		return "null"
	end

	local db = conn:new_db_handle("order")
	local col = db:get_col("order")
	local result
	local data = col:find({status = 1, serverid = serverid})
	local r
	if data then
		r = {}
		for i, v in data:pairs() do
			r[i] = {gameorderid = v["gameorderid"], playerid = v["playerid"], productid = v["productid"]}
			col:update({_id = v["_id"]},  {orderid = v["orderid"], serverid = v["serverid"], gameorderid = v["gameorderid"], playerid = v["playerid"], productid = v["productid"], status = 2})
		end
		result = "success"
	else
		result = "failed"
	end
	ok, err = conn:set_keepalive(max_idle_time, pool_size)
	if not ok then ngx.log(ngx.ERR, err) end
	return result, r
end

function m.get_timeout_orders(serverid)
	if not serverid then return end 
	serverid = tonumber(serverid)
	local conn = mongo:new()
	conn:set_timeout(timeout) 
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		return "null"
	end

	local db = conn:new_db_handle("order")
	local col = db:get_col("order")
	local result
	local data = col:find({status = 2, serverid = serverid})
	local r = {}
	if data then
		for i, v in data:pairs() do
			r[i] = {gameorderid = v["gameorderid"], playerid = v["playerid"], productid = v["productid"]}
		end
	end
	ok, err = conn:set_keepalive(max_idle_time, pool_size)
	if not ok then ngx.log(ngx.ERR, err) end
	return r
end

function m.end_order(gameorderid, playerid, serverid, flag)
	if not (gameorderid and playerid and serverid) then return end
	serverid = tonumber(serverid)
	gameorderid = tonumber(gameorderid)
	local conn = mongo:new()
	conn:set_timeout(timeout) 
	local ok, err = conn:connect(config.mongodbip, config.mongodbport)
	if not ok then
		ngx.log(ngx.ERR, err)
		return "null"
	end

	local db = conn:new_db_handle("order")
	local col = db:get_col("order")
	local result
	local r = col:find_one({gameorderid = gameorderid, playerid = playerid, serverid = serverid})
	if r and r["status"] == 2 then
		local dbbackup = conn:new_db_handle("order_backup")
		local colbackup = dbbackup:get_col("order_backup")
		result = "success"
		local h, e = colbackup:insert({{orderid = r["orderid"], serverid = r["serverid"], productid = r["productid"], gameorderid = gameorderid, playerid = playerid, status = 3, flag = flag}}, nil, true)
		if not h then ngx.log(ngx.ERR, e) result = "failed" end
		h, e = col:delete({_id = r["_id"]})
		if not h then ngx.log(ngx.ERR, e) result = "failed" end	
	else
		result = "failed"
	end
	ok, err = conn:set_keepalive(max_idle_time, pool_size)
	if not ok then ngx.log(ngx.ERR, err) end
	return result
end

function m.end_order_normal(gameorderid, playerid, serverid)
	return m.end_order(gameorderid, playerid, serverid, 1)
end

function m.end_order_timeout(gameorderid, playerid, serverid)
	return m.end_order(gameorderid, playerid, serverid,  2)
end

return m

 

打赏
幽冥传奇手游搭建过程中碰到的坑和各种DIY修改路径大全
上一篇
2025长期公益免费无GM无充值复古热血传奇手游安卓Android+苹果IOS巨魔自签
下一篇
博主索奈
Sonay
33 文章
0 评论
0 收藏
生成中...
二维码标题