飞雪团队

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 53954|回复: 11

多人网络斗地主开发实战基于(Unity2017)

[复制链接]

8116

主题

8204

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26678
发表于 2018-8-18 15:58:40 | 显示全部楼层 |阅读模式
下载地址
下载地址: 加入VIP查看下载地址!
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。8 \- V) E% U* \! R- R
服务器采用:c# 开发  
4 F) ^% U3 o/ t8 C( D1 m客户端采用:Unity2017; _. }- W. K/ ~' ~
; b( R+ o" v3 D5 ?2 ^
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。8 J1 q/ D" b" q! d4 k
课程每天会有更新,难免有一些特殊情况望理解。. M; j4 a" [: z8 J- t
个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。3 w; v- |# X' n6 F' L
' g7 g- l6 {4 F8 P
严格意义上来说,本课程应该是两个课程合二为一了。8 M% _8 l6 y/ I$ H, {; V
第一个课程就是《从计算机网络都服务器编程》。
7 V6 O/ Q/ }4 [. S, p关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
4 h/ w8 g  c5 m7 v. x什么是因特网?+ ^1 y" s7 Y+ r0 V
什么是协议?) C3 l) L+ x/ X1 T* |
什么是应用层?应用层协议?% M0 f/ `7 S' _# F
什么是运输层?运输层协议?; M  I" _2 r4 I+ W2 V! k- ]% x# T. d
什么是TCP协议?什么是UDP协议?: G- ~8 ~( t$ f, }; s+ P7 M
等等···7 N# P$ a# J. O% ^" n% ~
(很深层次的知识,大家根据兴趣来进一步自己学习)
( [! u, L+ d( z4 H3 a) T; Q8 J; a知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。- ^) p7 x1 M4 X% F" B2 k! q  c5 X- g

# I0 T" j! d4 d# z第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
: }# Z- X' x7 V, x1 N+ V' b斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
* O, d5 ?/ y# W; s9 m& w/ F
; y9 }1 k: Q' M1 M+ e. x  V& N2 R, T6 Q+ e. \* ^
001-课程介绍
# x) S' b2 l; B8 w( d7 S003-因特网和协议, ~3 a" W* L' y: ]4 u  c( Z
004-分层体系结构* d$ j4 O& `) i2 H1 Y' O4 I
006-进程和套接字
9 e7 T$ O) S; x# T; t/ o. v007-运输层协议TCP和UDP
# ]' W7 W/ K' v1 Z008-应用层协议HTTP& L. o  j$ c& V# u& w* T
009-socket服务端
2 d9 `  w5 z2 C- {- b% f010-socket客户端& L6 M9 Z" C+ T2 {* H2 q8 A3 ?! |
011-验证连接/ l8 L( w" e# z/ O: v
012-SocketDemo$ z/ D- u# d# u# F9 l5 `2 w( M9 \
013-实现接收连接的异步事件
/ q7 [  r" u, W* B014-添加限制连接数的信号. B+ l1 g% a! a% Z) B6 |
015-封装客户端连接对象和编写连接池% f' t) }( D2 D2 E  O
016-GameServer(8-1)
5 N: m: P; {1 u4 G9 c017-粘包拆包问题介绍
8 t/ T2 D2 ~7 }018-采用包头+包尾的方式解决粘包和拆包3 l- S7 L/ q& I0 d5 k
019-GameServer(8-3)$ F! l7 |9 @( ~2 G6 ]% a% i
020实现异步网络接受数据
, i( d5 l  I: K; p4 q021-客户端对自身接收的数据进行解析0 o; ~4 `2 c" ^! t
022-构造SocketMsg负责网络消息的传递: e' I  y7 X$ i8 {$ f: @) N7 h
023-实现soceketMsg与byte[]的转化- r) R/ m5 V/ h1 S5 w: v
024-对象的序列化和反序列化
! t# t& O2 z" e2 D8 g8 K025-GameServer(8-3)_2
6 n4 C( i7 Z: X026-实现客户端断开连接
9 [* g6 R$ }) z1 H& r& Q027-实现发送数据
1 p1 Q- n' U* ~/ D# c) ~# d) g8 V028-助学篇:带大家回忆一下所开发的内容* H4 j2 Z( \  n5 k8 J
029-抽象出应用层
" S; P6 d5 a/ F: a! ^030-GameServer(8-4)
1 X5 k3 z. g" g+ D) s* v031-开发定时任务功能(计时器),编写任务模型$ ~4 i# Y5 l$ \; @0 q& K
032-创建计时器管理类,监听到达间隔触发的事件6 k# p" _# z# H* d; `5 ~' |
033-控制定时任务(计时器)的触发时间
: t+ |$ c- Q( h: s2 @7 f- @' z034-开发线程安全的INT类型( [. `* l8 U0 ?! R+ T  g8 D
035-GameServer(8-6)
/ C+ y  s' v* r2 S9 h0 c036-实现单线程池
+ x3 F0 s( Z5 r. b7 f, e5 f; D+ C037-Unity2017下载% k3 v- L( u# I3 d/ O1 `/ V' R
038-创建工程导入素材
" K: D/ D6 b$ k( H, ~039-Res
( C% {- c/ m3 O; |" z040-Card(8-7); r* y+ U# K$ S8 |7 A1 ]0 `8 o
041-GameServer(8-7)
! `3 n) D' d& J9 X043-根据策划创建面板
" H: H  x0 a' d& V* c+ s1 J7 K044-导入客户端框架,创建PlayPanel脚本
# K) j( v  U* _- ~045-完成开始面板; n8 P9 {6 _: q1 s- `0 b" V
046-完成注册面板
, Z/ N2 q9 }1 e8 W! A2 J9 ~047-Card(8-8)0 b) I# J2 L' u3 P2 P* r% l
049-服务器架构介绍
7 V2 ~& k2 V3 Z. a050-按照架构实现服务器$ |" M6 V/ E: t& O$ l
051-在客户端封装Socket,使其连接到服务器; H- g8 K4 d8 v8 y6 K9 g* g
052-测试客户端服务器的连接. r# [$ E  d& \9 I; k) G
053-解决BUG4 r, g* V# ?* a+ }
054-Card(8-9)
- v% r9 \( \* D$ d( X1 Z055-GameServer(8-9)
; B$ G( X$ O4 D056-修改客户端的链接方法
; D8 W- P: O6 \. W# N1 B056-修改客户端的链接方法_20171124142335' y; S/ I; p+ u, I
057-定义操作码、子操作码,演示客户端如何给服务器发送请求
+ @0 F3 Y, M% |+ p  [058-测试数据传输是否正确
7 L1 Y  A' y. r059-Card(8-10)
9 n9 o1 S2 u6 h: t" c7 l  z9 X060-GameServer(8-10)& r- P% W! A$ Y* n
061-创建账号缓存层,实现注册的一些方法
; v1 v! I8 `7 x+ V4 T- E061-创建账号缓存层,实现注册的一些方法_20171124142334
; u% p4 [( Z; F062-完成账号缓存的所有方法
8 ?: j2 N1 A4 M062-完成账号缓存的所有方法_20171124142334
5 ~) a1 t2 |+ U063-实现账号逻辑层
7 o+ Q0 D$ R9 n064-解决今日BUG
9 \+ g* L; Y5 f- G6 O+ z  B$ G065-Card(8-11)
# {( g5 D2 @7 @" O9 `- N066-GameServer(8-11)
6 n' x: Q5 D8 v# w, h067-开发提示面板
" l& F, h+ o( U/ z& o$ Z8 X* y068-给登录和注册面板添加提示0 d& M8 _5 d1 }: i+ }
069-处理接收到的服务器发来的消息、优化发送网络消息的方法- f) k7 D1 |- A* y6 e0 h, u& J
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)4 G/ D& i; J" @$ S1 J* h3 M
071-优化服务器,改变传输结果
+ j2 o+ [) L6 k% E+ T; e1 `072-Card(8-14)
. p0 U; ?0 m( ]5 Q073-GameServer(8-14)
1 C8 q$ q* ~$ Q1 O6 I074-初步实现场景管理器,融入到框架中) _4 w' T+ w9 V" t# z
075-增加当场景加载完成的时候调用的方法
+ W0 Y  r5 _  ~* x! U076-实现登录成功跳转场景. b1 ]* I9 w& K
077-设计UI之主界面的信息面板8 W+ g/ |& a6 P) |3 g
078-设计UI之主界面的匹配面板1 Z# R1 `3 Y$ r2 X
079-设计UI之主界面的设置面板) t3 P/ v+ `" n% N- K% I
080-设计UI之主界面的创建面板- m6 X& k: `  K# r# H( e
081-Card(8-15). @6 B$ f4 f0 K( e
082.编写信息面板* Y$ u2 z; x# c
083开发匹配面板; J9 H. [. _8 k" h  l' X: q
084.修改默认创建的脚本
8 g1 a. T  f4 J: q& p& B% A1 a085.开发设置面板0 x0 C- M$ K) M, K
086.开发创建面板
% ~) h) F2 F& b5 d& H9 \087-Card(8-16)
- c) ^; X! S; r3 C- K7 \# @088.创建角色数据模型$ Q4 |. c, I3 H- }/ v
089.开发角色数据的缓存层) z7 z5 B/ ~1 v+ [- d6 b
090.完成角色数据缓存层5 j9 k4 B+ X4 S- c7 c
091-GameServer(8-17)
( {/ b7 Y' d6 Y6 m( M092创建有关角色的操作码7 W/ k  O5 U$ \/ g! ]6 _
093.实现用户逻辑层
7 Z$ {4 i' b4 J# n8 ]0 S094.向服务器获取信息,在客户端创建用户处理类7 @. X7 k3 a; E
095.客户端处理获取角色信息的响应
# Z2 F% O5 A* z( Z( n096.保存接收到的角色信息并且处理角色上线响应2 u; ]0 ?9 l+ Z5 |0 o, G
097.发起创建请求和处理创建响应
+ p9 |9 a& m+ u- \) X. B: L098.演示本日BUG9 n9 C* [7 z0 o
099-GameServer(8-20)
  i9 b& n) i" D- r: `100-Card(8-20)
. S' y9 o8 v. g3 L2 S7 h8 ]101.更新客户端视图; O. S& O3 d! E! j! B' Q2 i
102-编写匹配操作码
" s3 D6 W" F' c4 ~+ K103-定义匹配房间的数据模型$ o- i! ?9 N" `  e6 W5 g+ Z. a
104-创建匹配缓存层,实现进入匹配队列
1 X) E) m* P, o/ k" {9 g8 y1 [. K105-实现匹配缓存其他所有的功能8 d' o& z2 V/ l) C
106-创建匹配逻辑类,实现进入匹配房间功能
/ T! j5 F& S% {107-优化服务器之群发消息) Y0 v( q' o# p3 l; \
108-创建匹配房间的传输模型,在逻辑层进行构造: g$ e: M/ r0 o/ Y$ B9 N
109-实现离开匹配房间功能
8 y$ W" v0 |( I& U( [5 f# Y0 z110-GameServer(8-24)# D/ V5 o* _1 _) i# _, H
111-实现玩家准备8 Z4 {$ @5 Q) x
112-在客户端发起匹配请求
& Y5 Z1 e/ u7 {* p  t& I113-GameServer(8-25)2 ]. ]1 L) l5 E  G
114-Card(8-25)
4 `+ R4 i2 d) Z115-创建MatchHandler,接收服务器的响应- O1 o( _: z/ ^! z
116-保存房间信息,他人进入房间广播处理
$ K6 x% H* j% Q1 N# p* K- f8 O117-玩家离开: }1 A- U5 b4 V. V- z& i/ K
118-玩家准备和开始游戏的处理
; X8 H- t' d# \( e7 }: I+ ]# m119-GameServer(8-29)
1 q+ ^' y4 W+ @4 C5 b120-Card(8-39) (1)" k, q! V( P# }
121-搭建战斗界面的左、右角色状态面板  \# ]$ ^; W# M' I4 O) M4 p
122-搭建战斗界面自我的状态面板  V$ h- y$ B- k% g% y; N  u4 r1 d
123-搭建战斗界面上边的底牌面板
; K7 E; O  I' s5 @. N+ S5 d124-搭建战斗界面下边的快捷聊天面板
2 J/ q. c' }. L125-搭建提示面板和结束面板9 p8 A" X# s' ~% r$ u# t
126-Card(8-30)  @* y5 W2 G( G0 K
127-创建出牌点,实现进入房间按钮功能& g& \. i8 P+ ^! R/ m
128-控制底牌显示,编写代码
5 J1 Q0 O0 G6 X( J- S129-在服务器工程内创建卡牌的传输模型类6 M, B6 c5 B. G1 s: |( l! p& H) S
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)+ m7 Q: k& i& }) E( g; [2 S/ E5 k
131-分别创建左、右角色的状态类(有破音). I' @9 E% j1 N, n, N& }" u7 r
132-ard(9-2)/ R: n- ?4 p+ G- t
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)2 P4 ^; B& w5 t7 }: j
134-如何控制玩家左、右玩家位置?(有破音)
& ^# a  r+ T! r5 j0 H135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
+ y) V6 B- |% u3 b: w' C. Z4 [! R' r136-Card(9-4)' C/ @& ?. @, e, c/ g9 @
137-GameServer(9-4)% U' l$ O4 y* \- r$ U1 h
138-解决左、右的代码重复部分- b, F; D% @, K( x! ~8 n, h
139-创建自身的状态面板(有破音)  m6 ]( e/ v/ }1 |( E$ J
140-完善自身进入更新状态面板
- i1 m& m' ?, Y: o) I8 p" B141-CardGame(9-5); T% s" b  {4 b: D' h. N% }
142-找之前的BUG(一)
( z. {( s) [, {' O5 P143-找之前的bug(二)
; O& ^' V; K* s3 A144-Card(9-6)
+ P+ \# [  ^. H: T145-GameServer(9-6)( Q! S, P) N' x; @0 X- G
146-发送自身准备的请求! i: l1 b% N* A- _9 M
147-创建下边的面板的脚本8 p4 f. d  p+ e1 i7 ?$ \
148-Card(9-7)6 `2 y+ p0 }0 i% {; J
149-创建聊天操作码,在客户的发起请求9 `0 A, p# Z4 s2 o
150-服务器处理聊天的请求,创建聊天传输模型) I0 P4 w9 ~# e5 G% }8 i3 `
151-创建聊天文字的常量类
" }  U: T5 n! ?# Y  Z8 G152-Card(9-9)
+ r( Q  Z! M: p# F, s153-GameServer(9-9)
. }7 q4 C& z& `. l154-客户端接收响应,显示聊天文字
9 u% r4 @4 h# h: O8 g/ W155-聊天声音的播放
  f5 K' D2 P: q! c- P156-测试聊天BUG9 x5 N' O! ?6 d7 @$ e, R1 d- u; a9 e* n
157-Card(9-10)
2 J7 ?. ~% P0 L3 p6 [158-GameServer(9-10)
% s/ Z9 i+ c" V- D9 g159-所有人准备完毕开始游戏,使用中介者模式触发
- a3 Y9 D& U% i9 ]160-逐层分析,创建玩家数据的传输模型
, b' u' o1 P( u9 }) n. O161-创建并初始化牌库,创建花色的常量类
% w# \$ ?' H$ l* _162-创建权值的常量类,完成创建牌库的过程9 e9 k% k2 ]$ Z4 w
163-洗牌算法,完成牌库类
; B8 a, m9 u0 ]' X# L3 I/ U164-创建回合管理类
+ n9 ?  d& [* M6 @: M7 [/ ?165-GameServer(9-12)
4 s. A/ [- `) d! V166-初始化战斗房间,添加第一个方法:转换出牌5 ~% p8 o' V+ h. d, f. f( p" |
167-创建出牌类型,判断能不能管牌8 z0 `( G. K7 E" p: ~
168-如果出牌判断成功就移除玩家的手牌" B3 a+ F- A7 o; x4 i% f) [
169-增加倍数和更新回合信息! u" r' w2 F$ F- Q# [  j& E4 ~
170-发牌
  B' [; ~9 ~$ X7 e171-设置地主身份,创建身份的常量类
: [! s( |& j) I( c5 k172-补充一些辅助方法,完成战斗房间所有内容8 D9 Z6 x8 X' q) W# ]
173-GameServer(9-13)
6 j' \" j0 {. {2 j174-创建战斗缓存层8 w% L3 D7 F8 P: _# U: C) Q
175-定义战斗的一些操作码
7 e& T0 c# l5 ]7 b176-编写开始战斗的逻辑7 n5 b! ]# m: l
177-关于发送卡牌集合还是卡牌id的解释
, f3 d4 v# a! G2 s: V$ T178-GameServer(9-16)
: h* @+ A& u/ C7 k- X' `179-实现抢地主的方法
( t* `, _+ T5 ~4 J180-创建出牌的传输模型,获取选中牌的权值
! D1 O. |* |7 k" @# p. ~! D8 _181-判断各种卡牌类型
- w9 I8 f  E, e$ ~6 A" B2 z182-完成编写出牌的传输模型
9 q7 b5 k) z5 D9 V( V. t0 f183-GameServer(9-18)
# ~' K- t5 s% n: Z, u, i! [184-玩家出牌在服务器的处理9 S, d, u5 i" i
185-转换出牌的实现2 g3 R, ~. z5 a- ^
186-游戏结束的处理
. |2 h$ M8 `; E187-不出的处理  r( q8 `! E$ }8 `) Q; ?$ m5 H
188-玩家掉线的处理* q5 \2 ], X" \+ f' @8 L5 ^, B) J5 e( t
189-GameServer(9-20)" ?$ O8 ^7 G2 q3 z% r3 h, m/ _
190-在客户端创建战斗的处理类,编写获取卡牌的处理
( q$ Y- W4 G  ~191-创建客户端的卡牌控制类
( ~. x9 c' t& Y192-创建自身角色控制类,管理卡牌的创建1 y- v& D, |3 S: E
193-创建左、右玩家的控制类,管理卡牌的创建6 X1 t6 B; l4 X
194-Card(9-21)1 N5 o$ P4 n# b
195-给大家录制BUG过程
- @: Z, z: y+ x: i196-GameServer(9-23)
$ s) [. L5 \, O! f197-开始处理抢地主的响应
1 q) V, I- t! o3 ?198-发送抢地主请求和抢地主成功的处理# M7 Q2 H2 u" K( j
199-自身的玩家添加三张底牌的处理
$ i1 m  j3 ^2 G" r' S) n; x+ X7 f200-抢地主成功的处理完毕9 J! m0 H, A+ z
201-测试抢地主并修改BUG
( Q1 k; P# Z% o3 Q9 o  U" m202-Card(9-24)
* `9 v! l$ T1 E3 J- A0 Y8 V203-GameServer(9-24)
! u  a: Y3 y. _+ J( i204-接收来自服务器的出牌命令
6 F6 c0 o' _) @* C' i205-客户端出牌的处理
% i6 P5 A3 a$ f+ t, _206-向服务器发送不出的请求  E! }! q, T4 s3 |2 \2 v
207-GameServer(9-25)
7 m9 t0 O; D: R208-Card(9-25)
; y: a) h, Z- [3 K209-给卡片添加碰撞器让他能点击/ I2 R2 o5 f  M# P; g; _8 S
210-解决出牌BUG4 x( i1 w6 J# [# A' P$ P  N
211-移除出完的手牌
6 E6 ~% E; Z8 r8 A. V# t, i212-管理桌面的牌显示) Y- s* r0 i) T: i
213-出牌特效声音的播放5 O9 z2 ?: J5 B% J2 ?2 O
214-GameServer(9-27)* q7 }8 {# k/ F8 r! Q9 k% M
215-Card(9-27)
' t8 q& a5 z2 R216-测试出牌BUG 上部
- |& K8 v! G5 [2 m6 T; d. Z# P' ?% F6 {217-测试BUG 下部1 P' ~: g, n3 `. Q" {3 A) X, f
218-客户端+服务器(9-28)1 w! K" ^  W+ Q  s% ?
219-创建OverPanel代码脚本2 G+ ?+ d4 k1 i2 A& W
220-通过消息机制表现客户端的结束7 w* z" C! {0 N1 I! b& |' o
221-测试游戏结束8 L! T0 ^+ J$ D- k! @
222-创建背景音乐播放控制脚本. x6 g5 z8 P' }8 d
223-给前两个场景添加背景音乐
1 X: z# `% L( {6 N* f2 @3 {224-完结与未完6 W5 M% c" \+ Z- _$ k
225-Card(9-30)' G; {$ E0 V% \1 x1 T
226-GameServer(9-30), z& S3 V) n( O1 \- E3 `
227-扩展课之ProtoBuf
( f( a- D" ^6 s9 _. J228-扩展课之ProtoBuf(10-15)下载地址:
/ F; i: |, x. j8 {9 P
% @9 g& `4 ~$ x* Z/ {
游客,如果您要查看本帖隐藏内容请回复
0 w0 R. S2 @( b6 d, l2 a
' O+ f) d2 m- @2 K; n) \
回复

使用道具 举报

1

主题

501

帖子

1827

积分

VIP会员

积分
1827
发表于 2018-8-18 17:14:05 | 显示全部楼层
多人网络斗地主开发实战基于(Unity2017)
回复 支持 反对

使用道具 举报

0

主题

148

帖子

1259

积分

VIP会员

积分
1259
发表于 2018-8-23 14:39:08 | 显示全部楼层
感谢飞雪团队分享如此好的资源。
回复 支持 反对

使用道具 举报

0

主题

756

帖子

1728

积分

VIP会员

积分
1728
发表于 2018-8-24 05:12:38 | 显示全部楼层
实在是难得一见的好贴啊!
回复 支持 反对

使用道具 举报

0

主题

243

帖子

1557

积分

VIP会员

积分
1557
发表于 2018-8-26 10:15:01 | 显示全部楼层
感谢飞雪团队分享如此好的资源。
回复 支持 反对

使用道具 举报

0

主题

218

帖子

1391

积分

VIP会员

积分
1391
发表于 2018-8-26 22:13:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

247

帖子

2170

积分

VIP会员

积分
2170
发表于 2018-8-28 17:51:06 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

199

帖子

1404

积分

VIP会员

积分
1404
发表于 2018-8-29 00:24:38 | 显示全部楼层
感谢飞雪团队分享如此好的资源。
回复 支持 反对

使用道具 举报

57

主题

236

帖子

1376

积分

VIP会员

积分
1376
发表于 2018-10-25 21:23:29 | 显示全部楼层
感谢飞雪团队分享如此好的资源。
回复 支持 反对

使用道具 举报

0

主题

995

帖子

3805

积分

VIP会员

积分
3805
发表于 2018-11-4 16:36:46 | 显示全部楼层

/ u; h( c8 i& @- b1 z: `: N多人网络斗地主开发实战基于(Unity2017)
回复 支持 反对

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-22 00:26 , Processed in 0.089912 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表