有时候在网狐类项目中测试,玩家进了一把房间,没打几分钟就掉了,或者强退了。结果下一次再进房间的时候,就提示:“您已经在房间,无法进入新房间”,无论怎么换房间还是同样的提示。 这时候其实玩家早就不在那个房间了,只不过服务器数据库里还残留着一条记录,锁住了他的状态。这个记录默认是存在一个叫 GameScoreLocker 的表里。 最直接的解决方法就是手动清掉这条锁定记录。 操作也非常简单,打开数据库管理工具,执行下面这条 SQL: use QPTreasureDB delete from dbo.GameScoreLocker 这条命令的意思是清空 GameScoreLocker 表里所有的记录。这个表用来记录正在游戏中的玩家,一般来说,正常退出后系统会自动清理。但如果是断线、强退、闪退、服务器掉线,就有可能残留。 清理后,再让玩家重新登录游戏,再点进房间就可以了,不再提示“您已经在房间”。 如果你不想一次性清掉所有人的记录,而是只清某个玩家的,可以先用以下语句查一下这个表里都有哪些用户被锁住: select * from dbo.GameScoreLocker 然后根据 UserID 精确删除,例如只删除 ID 为 123456 的: delete from dbo.GameScoreLocker where UserID = 123456 这种方式适合运营环境,避免误删正常在玩的玩家记录。 另外也可以把这段脚本做成一个后台GM功能,比如“一键清除用户卡房状态”,让运营自己搞定,少找开发加班。 这个问题虽然不大,但影响体验挺严重的,尤其是在测试或者上线初期用户断线频繁的情况下,一旦处理不及时,就会被误以为是游戏崩了,实则只是数据库里锁了一条状态而已。 仅限技术交流,禁止商用!
有时候在网狐类项目中测试,玩家进了一把房间,没打几分钟就掉了,或者强退了。结果下一次再进房间的时候,就提示:“您已经在房间,无法进入新房间”,无论怎么换房间还是同样的提示。 这时候其实玩家早就不在那个房间了,只不过服务器数据库里还残留着一条记录,锁住了他的状态。这个记录默认是存在一个叫 GameScoreLocker 的表里。 最直接的解决方法就是手动清掉这条锁定记录。 操作也非常简单,打开数据库管理工具,执行下面这条 SQL: use QPTreasureDB delete from dbo.GameScoreLocker 这条命令的意思是清空 GameScoreLocker 表里所有的记录。这个表用来记录正在游戏中的玩家,一般来说,正常退出后系统会自动清理。但如果是断线、强退、闪退、服务器掉线,就有可能残留。 清理后,再让玩家重新登录游戏,再点进房间就可以了,不再提示“您已经在房间”。 如果你不想一次性清掉所有人的记录,而是只清某个玩家的,可以先用以下语句查一下这个表里都有哪些用户被锁住: select * from dbo.GameScoreLocker 然后根据 UserID 精确删除,例如只删除 ID 为 123456 的: delete from dbo.GameScoreLocker where UserID = 123456 这种方式适合运营环境,避免误删正常在玩的玩家记录。 另外也可以把这段脚本做成一个后台GM功能,比如“一键清除用户卡房状态”,让运营自己搞定,少找开发加班。 这个问题虽然不大,但影响体验挺严重的,尤其是在测试或者上线初期用户断线频繁的情况下,一旦处理不及时,就会被误以为是游戏崩了,实则只是数据库里锁了一条状态而已。 仅限技术交流,禁止商用!