找回密碼
 立即注册

【回来看看】教你自己制作点卡或月卡计费的服务器

[複製鏈接]
蓝翎 發表於 2013-7-19 15:26:18 | 顯示全部樓層 |閱讀模式
本帖最后由 蓝翎 于 2013-7-19 15:57 编辑 : z. O0 o  v1 W! V2 q! O$ d

( G3 |/ m! ^2 K6 ?- b2 p转眼不知道离开了无双多少的时间,今天登录论坛看到了有人给我留消息和问了一些问题,实在抱歉各位曾经的战友,因为离开后一直未登录论坛也没有能帮上大家的忙。
5 ^2 W- S% B% G; n" I$ T7 H  k
此次登录论坛总感觉如果不给大家提供点新的思路就有些过意不起,有部分好友在QQ上和我说能不能搞个点卡的,好牛X的。各位老友,我实在现在是没有精力和时间在弄无双,所以还是给大家出出主意,以帮助那些奋战在第一线的GM们。
! ^& Z7 _+ E! M5 O3 b! f0 j4 B4 Y- r- L  D8 w
1.计费模式,原官方使用的是AP服务器,也就是MCC中的TYPE选择项,其中有一项是AP,这个也就是当时华义时候计费的计费系统,但是不知道为什么大家都没有使用,包括我自己也没去尝试,实在是不想和他较劲。! @* |+ P7 T  \0 R7 Z
9 `& G  v& g1 z5 Q
2.计费模式,使用源码自己在写一份记点的,也不难,但是这里又不知道如何给你们描述才好。2 U1 r, Y" F: r; y" z6 B( R

& ^3 ~9 T' [% J0 M$ D* f3.计费模式,外挂式计费。我感觉对于一些普通GM这条是比较靠谱的。那就针对第三种模式给大家来说说如何实现。! o* t6 ?' e) o$ V- J2 Y# M

  B$ f, S3 s/ c, Q% G2 o/ `* Q1)。建立一个计费的服务端。如图1.
( l$ E, {6 G) @) n+ k
9 i) L$ k7 E5 F6 G3 L/ _6 b% W TestCard.gif
1 k6 _; r+ U  S! Y( \: ~% n  r' b4 {+ [" I+ F2 [6 l& X
2)。在计费服务端内开启一个线程来检查数据库的Online表,也就是玩家在线表.) u8 E' K2 F6 X8 U2 p! l$ R8 p
. J/ K" H  ?$ O% X
3)。我不知道大家的Online表有没有ID,如果没有可以自己增加一个,让其自增长,每次增加1.
' l5 w- h7 y# f  e. O/ m
$ k* V, J$ R( I9 H4)。用计费工具直接SELECT COUNT(*) Online;之后将得到的COUNT赋值给一个STATIC的整型变量,将szAccount直接使用一个char[]数组保存起来;: _, @& ^1 q3 g: U: c' }* s

4 L1 c& R2 l0 E' C5)。进程继续循环读取,如果出现新的COUNT 大于 STATIC的变量,那表示有新的玩家进入,小于则表示玩家退出游戏。1 y  q; }( Q' }1 q3 P, Z1 R

1 ?9 ]4 ^+ k/ H/ r6)。玩家进入的时候直接SQL倒序查询,得到第一个既是新进入玩家,直接将玩家的szAccount和原本保存的char[]数组对比,如果存在,就检查是否
4 F% a+ Y! t) Y% t7 E2 m0 p- q9 W0 R, a3 F, \
         在计费状态,如果不存在,直接引入计费线程。退出也一样,COUNT变小后直接对比char[]和现在online表里的szAccount,没有的就是下了,
2 C' Q* [5 c) k1 g) \( \: H. c8 b: ?! S9 ^- P$ y, G
         停掉该用户的计费线程。
8 V" R) f9 K! _* t& @& h6 g1 _
4 K7 Z& N) R( X0 i5 n0 ^9 l! N: x--------------------------------------------------------------分割线---------------------------------------------------------------
, G6 n7 E. |, M+ q
/ P8 A" l9 G; q3 S& ?有人就问了,那怎么样才能控制没有付费的玩家进入游戏啊?
/ o  h' u0 J7 s% z8 R, b
% w6 F/ M0 \0 u  I6 z- D: |8 b+ L下面我们来说下如何限制。
- |, ]3 A8 z. q3 O- j- _) J; \/ z  F; j% f3 g3 F
首先将你的计费工具写入端口转发功能,无需任何花哨的功能,直接映射,之后修改客户端的登录端口,例如原来是10023,你现在将其修改为8000,或者其他任意端口,但是这个任意端口必须是你计费小软件接收触发的端口,之后将8000直接映射给10023,那么现在的流程就是。
9 A+ o, }0 m5 a$ u! I( P0 f8 e2 c: G% ?6 w
登录 请求 -- 服务器8000端口 -- 计费软件触发映射 -- 转发到端口10032 -- 登录服务器判断 -- 进入游戏。4 l/ L/ X' ?. |4 d& b' D& L
2 b( ?1 n. R" j- H9 K2 k2 W
看到这个流程,那我们就可以轻易的来拦截玩家。
( r1 h* z) a& @0 F5 }( m) Q6 C0 Q
当访问8000的时候,我们可以直接获取到对方的登录帐号,这个时候计费小软件就可以判断该帐号是否有点数,如果没有点卡了,直接断开他的连接,不允许登录。写到了这里忽然想到一个问题,可能有同学问了,怎么获取帐号啊?
* I. O: t  w* D$ N5 T) I/ U3 [4 F5 h% w1 i6 B: p1 q4 ?! k! C
我们可以直接截获封包并且直接解出来,如果感觉有难度,可以在登录上做个钩子,直接记录对方输入的帐号,虽然有点流氓像木马,但是毕竟是自己官方出的登录器,只是获取帐号和玩家说明也没什么太大问题。
. O7 m! ^7 p4 t- `# B9 d
- }9 u7 z; c9 \: s: v& ]2 B* o9 w没太多时间就写这么多,附上刚才边思考边弄的工具,让大家更直观的了解些!6 y' P0 `8 N, Z/ L. e% L
$ n. J# p% p* L# K  U4 p
TestCard.zip (4.51 KB, 下載次數: 32)
' L% s7 B3 y2 O: R% M: x# v
) a  W  |* I! C. O' `
8 a/ E1 a7 P/ Y& q- K% v3 K% k) z7 c; [1 j+ V+ m5 z
' L. J4 D8 G1 p- ^4 T! ~8 d
补充说明下:, f4 H" P; M6 k, ?9 `. L0 [" g

" e+ ?6 ]% s" J3 H6 K8 B6 S这个半成品的小工具里面写的是2秒跳一次,所以计费开始后感觉秒会慢,当时写了2秒忘记改了!只是让大家能直观的感受下流程。
bysx7997 發表於 2013-7-24 17:16:07 | 顯示全部樓層
另外我最近蓝翎3.6单机架设成功了,但是从进入人物选择画面以后就开始花屏,请教咋回事?客户端是原版3.6。
回復

使用道具 舉報

bysx7997 發表於 2013-7-24 17:08:59 | 顯示全部樓層
谢谢!虽然看不懂。我只想知道开外网怎么设置IP那些,找几个朋友一起玩。
回復

使用道具 舉報

jianyang0816 發表於 2013-7-23 10:56:15 | 顯示全部樓層
虽然看不懂,但那些技术强人肯定能了解。感谢为天下作出的杰出贡献!
回復

使用道具 舉報

toutoudelian 發表於 2013-7-19 15:49:32 | 顯示全部樓層
坐沙发上慢慢看吧
回復

使用道具 舉報

252600 發表於 2013-7-19 17:09:54 來自手機 | 顯示全部樓層
不错,很久没有新动作了
回復

使用道具 舉報

叛逆不羁 發表於 2013-7-20 21:47:31 | 顯示全部樓層
技术文,值得参考,邻居还是心有无双,你已经天下无双了。
回復

使用道具 舉報

rainbow 發表於 2013-7-22 09:44:52 | 顯示全部樓層
谢谢还有人为天下奋斗出力。谢谢
回復

使用道具 舉報

yun5520245 發表於 2013-7-23 11:37:49 來自手機 | 顯示全部樓層
让更多的人看看
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2025-11-30 09:07

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表