飞雪团队

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

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

[复制链接]

8366

主题

8454

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27428
发表于 2018-8-18 15:58:40 | 显示全部楼层 |阅读模式
下载地址
下载地址: 加入VIP查看下载地址!
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。. F* M- }( a8 E$ g& V. L$ l
服务器采用:c# 开发  
( W) A& o" S  J0 k# I客户端采用:Unity20179 |9 E1 C- j; R& H
6 W% z  ?" V2 ]/ I- M6 F; S
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
/ H+ E2 A7 Q) x$ m* }& ?# \: }$ ^课程每天会有更新,难免有一些特殊情况望理解。
1 S' ~" `6 L1 m* F/ l个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。% j+ s4 v7 E1 f, \$ I5 x
; n/ z5 g/ L6 d  A/ d( V, A
严格意义上来说,本课程应该是两个课程合二为一了。
6 b$ ?- U) P" |, C9 t5 V: Y第一个课程就是《从计算机网络都服务器编程》。
5 E& T- p- S' l, u+ m关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:& p" X3 b& F3 W% M: A0 }( L
什么是因特网?
$ w* d& e# c& J什么是协议?, ?+ }* b9 X$ c  T
什么是应用层?应用层协议?
  x% G( P% D% `6 h- m( |2 \什么是运输层?运输层协议?2 R. r$ Y# w- |8 j! p
什么是TCP协议?什么是UDP协议?/ L+ r' Z/ Z. W' i/ C" }
等等···
4 X, ~' n* m3 e+ y* @(很深层次的知识,大家根据兴趣来进一步自己学习)
9 ]; M& \" z1 d; S9 q知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。
2 t0 r  t6 U* a: V, m
9 ^0 F% H7 H! I第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
9 a4 {4 k9 X' V斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。4 N+ o; y: t1 D6 v+ B

4 C. F' Y" p% D. o- ]$ C! U
, Q) X; U4 S. p% V) V7 ?0 m001-课程介绍
; r; ?" d# e2 {2 X  {! `3 W003-因特网和协议( p5 Z3 n$ e$ e
004-分层体系结构
  M: ~# I2 x: m  T7 B006-进程和套接字
6 A* u* K' W  i: B007-运输层协议TCP和UDP
8 w" `. \& o7 G& W" q- z008-应用层协议HTTP
$ l) P" O; s+ E, w. k009-socket服务端
' |% V1 ^6 e0 m0 s7 y010-socket客户端
- x5 A1 }' e: ?3 i% a011-验证连接
2 z/ D% p5 v- b0 X$ Z  B; u5 w012-SocketDemo# h* k7 V4 ^% F# b: p
013-实现接收连接的异步事件: {, o3 G: q4 P
014-添加限制连接数的信号" z* a4 A- R. a, M
015-封装客户端连接对象和编写连接池
- F; {1 w& f4 Y1 F1 }: {% {& u4 R! U016-GameServer(8-1)
6 ]6 p% g4 M# f/ C5 u; j8 K' j% Y017-粘包拆包问题介绍
$ W: R' A6 @5 Z6 a: t018-采用包头+包尾的方式解决粘包和拆包
" y; |& U1 L% ^$ n. p019-GameServer(8-3)
) k* C' ?7 _  [$ F020实现异步网络接受数据
' F) s4 U6 v; O021-客户端对自身接收的数据进行解析
8 e" p: k* N* j2 D022-构造SocketMsg负责网络消息的传递- O% a: ]- ]2 o
023-实现soceketMsg与byte[]的转化$ y' N/ A) x6 U& ]: c( m  P% v
024-对象的序列化和反序列化
; {, I. _1 C6 T5 j, ~( u- u; ^  }& t3 u025-GameServer(8-3)_2) E% y+ L) {7 }3 ]3 A  s$ y
026-实现客户端断开连接8 Y3 U) v3 a; h: ]$ N& A
027-实现发送数据
9 e7 v1 k, P# ~" o( u028-助学篇:带大家回忆一下所开发的内容$ P2 @0 e+ K7 f# c
029-抽象出应用层, i; n! m( `! G
030-GameServer(8-4)
8 z. r& f6 c/ A7 v031-开发定时任务功能(计时器),编写任务模型
$ i4 C: k% g3 E$ |% O! I032-创建计时器管理类,监听到达间隔触发的事件
; {, |4 N3 |" {; v" E" l033-控制定时任务(计时器)的触发时间
; ^% E1 h( f7 I034-开发线程安全的INT类型
% z" e: }2 b( z# S035-GameServer(8-6)  @+ H+ f7 y; h+ S
036-实现单线程池
% e2 d  K  e; b' ?0 v037-Unity2017下载; r1 W6 b/ }$ n% T, _; g4 z3 ]' f; \
038-创建工程导入素材3 n5 @, V7 N& a. @
039-Res  ~& J; U& D4 p( O) d
040-Card(8-7)
& D* }! ?3 r/ k' _4 E041-GameServer(8-7)
4 S* ]0 o: t* V043-根据策划创建面板
" [+ t8 V/ m/ L1 s* v: i% ?044-导入客户端框架,创建PlayPanel脚本
  v/ G& {' q& i045-完成开始面板
( [$ j' T% s/ t3 }1 E046-完成注册面板
  ?3 E0 B. t, O: E2 {2 |& M047-Card(8-8)
& `/ M) S3 D# Q+ T( L049-服务器架构介绍
8 o9 R! N3 g% l3 \! p) {2 j3 ?050-按照架构实现服务器
" a) K5 G9 I+ ?! F8 q0 ]7 ^- S  }051-在客户端封装Socket,使其连接到服务器
  ^! i9 ]* K3 c8 K+ g1 |052-测试客户端服务器的连接
3 B) h7 M. ?# A6 j9 g! g' g& h053-解决BUG6 Q* ^6 _7 L4 o, k  ^/ U9 @
054-Card(8-9)* ]# P! y' e/ O8 P( M
055-GameServer(8-9)  }: r$ E$ [9 g
056-修改客户端的链接方法7 f0 }" j: Y: D+ S/ w- c' Z7 J
056-修改客户端的链接方法_20171124142335, V/ @$ b8 e* i+ d; `: H# ^
057-定义操作码、子操作码,演示客户端如何给服务器发送请求9 D4 {' M# }/ x  K
058-测试数据传输是否正确
- ~0 H( [/ l; J& c; g059-Card(8-10)
/ @3 w7 u) b4 y0 E) a7 L060-GameServer(8-10)
' C5 Y3 N0 J% o5 c. g; d+ y) F. v061-创建账号缓存层,实现注册的一些方法
# W% f5 d# h/ R061-创建账号缓存层,实现注册的一些方法_201711241423347 z0 o* k* s+ e& X
062-完成账号缓存的所有方法( [% k  ?2 J7 Q4 ?# q5 a( U
062-完成账号缓存的所有方法_201711241423344 q. w1 V7 C  D4 X
063-实现账号逻辑层
4 Q$ m& K* O1 M1 c7 U0 r064-解决今日BUG
6 l. V7 `9 c5 @" A8 Z* m065-Card(8-11)
/ W" r3 w, j5 }( {2 R066-GameServer(8-11)
) V0 n- o8 H9 P: p4 P0 s3 ~067-开发提示面板
! A# H$ m8 {+ t: }3 l6 q068-给登录和注册面板添加提示
! @( S" }9 c2 k7 H069-处理接收到的服务器发来的消息、优化发送网络消息的方法; ^$ B: |( q. ~3 g/ L/ q* G2 ~
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
  z0 b; N! G+ a$ p9 ~0 z7 H2 b071-优化服务器,改变传输结果5 D( L- _; u2 N9 G9 l; h. j
072-Card(8-14)
' [2 T* ?0 q% [* H073-GameServer(8-14)8 q- _- Y1 Q/ b: M2 o( P
074-初步实现场景管理器,融入到框架中$ P# t' g+ N  T& N
075-增加当场景加载完成的时候调用的方法
! m3 K/ n7 z! ~2 x% i# l076-实现登录成功跳转场景5 b- Z7 _( K& S
077-设计UI之主界面的信息面板
+ _& h: K9 I0 B% v0 ?0 i" }5 v078-设计UI之主界面的匹配面板( ?) w# c! u8 g1 E8 r
079-设计UI之主界面的设置面板
  m5 e1 f8 @6 l4 ~6 {. H0 B  o080-设计UI之主界面的创建面板
" o: Y$ ]  X3 V081-Card(8-15)9 X: r( p8 {6 Y' F, O" ]
082.编写信息面板5 f; w2 C5 E* U. q" B2 B! E' L
083开发匹配面板
# k5 O. [+ c5 m# a, l$ L084.修改默认创建的脚本
$ X% Z# S$ X1 `, T- d085.开发设置面板% e3 j( S5 r1 m7 v" c( |3 J* ]
086.开发创建面板6 @6 d" Z( }8 C
087-Card(8-16)
; u: h6 ^3 _% s( V0 V9 P, N088.创建角色数据模型
, g6 w- H' a5 L/ G/ K) _7 D089.开发角色数据的缓存层
" g) O% u! [5 N+ ]* H  S5 M090.完成角色数据缓存层
* C. y! H/ M* x/ [  x! T+ ?091-GameServer(8-17)
, H! O% h) m% v: x" Y; N092创建有关角色的操作码
1 Q5 k$ R# v7 g2 D$ G8 |093.实现用户逻辑层& B) v" Q6 n+ c6 B4 l1 f
094.向服务器获取信息,在客户端创建用户处理类
% h5 D+ z1 [; Z095.客户端处理获取角色信息的响应( |+ M) p6 q6 D/ w) ^9 w5 ^
096.保存接收到的角色信息并且处理角色上线响应1 m4 J5 ^" S2 \3 b! \5 {" `
097.发起创建请求和处理创建响应
" Q  \6 K' S% S% `8 Z: d4 m098.演示本日BUG5 [0 @$ M. q4 y8 w. A
099-GameServer(8-20); H' J2 y- f& U2 D/ d) g8 k
100-Card(8-20)' u' t& Y) W" O
101.更新客户端视图  e" l- M; {( |6 h8 Y1 ]: u# o9 |+ h8 y
102-编写匹配操作码, }1 K( l7 G, G
103-定义匹配房间的数据模型- t) q" l6 F8 y! l/ Y5 X! J
104-创建匹配缓存层,实现进入匹配队列) U" H) K. t0 g, e3 \
105-实现匹配缓存其他所有的功能8 P2 z  S  y, ^% [' X
106-创建匹配逻辑类,实现进入匹配房间功能' D" ]( \0 S1 V) B( P$ e7 B
107-优化服务器之群发消息- _( h  ~5 T: @  H% l. g, x
108-创建匹配房间的传输模型,在逻辑层进行构造8 O+ W" m9 J* i: o# T
109-实现离开匹配房间功能; {, Q4 h6 I- |$ ?$ W0 U
110-GameServer(8-24)  E& w/ Q$ q8 w
111-实现玩家准备
4 R/ Y: V$ r/ P2 v2 s112-在客户端发起匹配请求  W4 c9 O9 g4 t/ F! ?
113-GameServer(8-25)+ V7 C+ f  f- }5 T/ z
114-Card(8-25)1 L: D% Z% [4 g& m. g
115-创建MatchHandler,接收服务器的响应
. {. K/ m( f. A( T116-保存房间信息,他人进入房间广播处理8 D2 {; X3 W& N; J! b
117-玩家离开
9 S1 H' w2 z" R/ @1 O9 V118-玩家准备和开始游戏的处理7 ]! c' j2 @& h2 L$ R) f8 B* Z
119-GameServer(8-29)
2 s( h' `% V6 O4 ^$ j- \120-Card(8-39) (1)) h+ E6 A' s1 z# O5 b; h6 q, g3 f
121-搭建战斗界面的左、右角色状态面板& ^, l( G, @1 U- K) f
122-搭建战斗界面自我的状态面板
( h* `- m" x9 @( l; y8 M0 K% t( ^123-搭建战斗界面上边的底牌面板  V0 _/ F0 g$ B% G9 G
124-搭建战斗界面下边的快捷聊天面板
. d0 v6 o) p7 [- K125-搭建提示面板和结束面板* Z8 Q5 w2 [+ J1 h4 ]
126-Card(8-30)
0 ]" p- f* s: t8 i1 u2 p) r127-创建出牌点,实现进入房间按钮功能2 E" J$ p3 Q2 W2 `# k/ G
128-控制底牌显示,编写代码0 i: f$ s+ e  a$ w- y
129-在服务器工程内创建卡牌的传输模型类$ ?/ P* [, w5 g, q9 t9 ?
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)" ~9 Y- h' e. K
131-分别创建左、右角色的状态类(有破音)- @" d. W! s; r
132-ard(9-2)& Q' ]: g: P3 I9 i
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
, V+ @. {7 \2 M9 a$ F9 L134-如何控制玩家左、右玩家位置?(有破音)
7 l/ P5 A* C! ?! P  }135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)1 i- M, V) H9 U- d) ^
136-Card(9-4)
1 J- X9 n& ~& M! H) I137-GameServer(9-4)) O9 L9 ^' D3 W4 N
138-解决左、右的代码重复部分
: {" c; p" T& c5 J) l139-创建自身的状态面板(有破音)
1 y& p$ }5 _$ _$ a; x' ~140-完善自身进入更新状态面板
& n5 j+ ^! s3 m! w7 M3 u% X141-CardGame(9-5)
" Y7 w8 E1 q2 v4 |7 w3 p3 _8 i142-找之前的BUG(一). n, X! h% f! ?7 W
143-找之前的bug(二)
' N; T4 |8 M7 ^# u144-Card(9-6)9 T; W5 r8 `6 [4 w6 E* S2 X
145-GameServer(9-6)
, f4 |5 x# P9 M& ^4 e- ^146-发送自身准备的请求
2 p  j7 k) ~3 H147-创建下边的面板的脚本
" Y% k( E6 X# r) C* o$ }5 y% C) W# _148-Card(9-7)
5 [" s7 N  T, o+ T  r' H149-创建聊天操作码,在客户的发起请求% _2 ~, M8 z) }0 P& M) F
150-服务器处理聊天的请求,创建聊天传输模型3 o1 G/ n% ?) X9 G6 p  I
151-创建聊天文字的常量类
3 O; E" _5 X4 Q6 ?; y& ]  [6 U152-Card(9-9)
$ w, m* _+ N3 q; \% A$ ^3 S6 ?+ d153-GameServer(9-9)- n, Y" ]( l1 O+ H, y: X+ y
154-客户端接收响应,显示聊天文字
" G6 U% ^8 V  f155-聊天声音的播放( x+ l8 B5 Y& E( S
156-测试聊天BUG
  `' l3 F0 w* b% }2 X6 y( R! `157-Card(9-10)
7 u, F  P* N& e1 `6 V! x158-GameServer(9-10)
# _3 A, \/ `& U' v  c159-所有人准备完毕开始游戏,使用中介者模式触发
/ X% L- i/ w1 f160-逐层分析,创建玩家数据的传输模型. g2 S4 k3 W, H! ]8 i9 m( E. P7 V
161-创建并初始化牌库,创建花色的常量类
# u7 u& \2 L3 H) r: o; i% Z162-创建权值的常量类,完成创建牌库的过程! C$ U& h  E9 |1 z& u& U
163-洗牌算法,完成牌库类6 c5 [  h+ O0 ?6 J, p9 o; x* h
164-创建回合管理类
' V) b2 j% B. w: v, M165-GameServer(9-12)
) h: v4 q4 G4 j! N  D; t166-初始化战斗房间,添加第一个方法:转换出牌
- }1 x: U" N$ B% K9 o& q3 ]5 t167-创建出牌类型,判断能不能管牌
1 }* }0 ]# _# @) u5 z168-如果出牌判断成功就移除玩家的手牌$ }/ b- ~; C) [* K2 \# ^& H- k
169-增加倍数和更新回合信息
( Z6 X1 z# y& Z2 k1 p, d170-发牌
' g" |( D; k: m/ R2 `+ _8 c171-设置地主身份,创建身份的常量类
" H: U8 N  d2 s( L/ G# x9 d172-补充一些辅助方法,完成战斗房间所有内容
$ x9 p9 M# R" S" }173-GameServer(9-13). G6 t. c" @( X
174-创建战斗缓存层, |6 E  w7 O7 s
175-定义战斗的一些操作码
& I" o% e. a' B8 I. n5 D# n176-编写开始战斗的逻辑: F) `8 \+ a9 l+ e! ~$ ]
177-关于发送卡牌集合还是卡牌id的解释+ F1 g2 ?7 K  x
178-GameServer(9-16)
! r! _2 V) e. {/ t, Q% ~179-实现抢地主的方法2 A$ S$ t$ s5 }5 P+ d9 H
180-创建出牌的传输模型,获取选中牌的权值! u! V$ e* H0 w. t8 S
181-判断各种卡牌类型
, q) ^$ P: N8 d* R. S8 i182-完成编写出牌的传输模型3 D9 |- R; Z/ r0 C
183-GameServer(9-18)* b6 Q$ [) h5 |$ s, ^& a1 \
184-玩家出牌在服务器的处理
) m& |  q) t& E7 c& |- U185-转换出牌的实现! T1 n9 G# p  C3 a2 h
186-游戏结束的处理( g0 I$ i% I) h1 N
187-不出的处理
3 w+ Y) @3 _, S* `' n: A8 F188-玩家掉线的处理* z7 x- `# I% ]  W" h' L8 E
189-GameServer(9-20)
3 n1 F( ~( S" s190-在客户端创建战斗的处理类,编写获取卡牌的处理/ R4 W# Z! W) j
191-创建客户端的卡牌控制类% v1 Q, c1 v* P7 V$ p, ~2 _( d
192-创建自身角色控制类,管理卡牌的创建
) d) r2 D( s2 e* V' p. p# q193-创建左、右玩家的控制类,管理卡牌的创建8 I) W9 Z& H2 m% @' M9 ~4 [8 ~: w
194-Card(9-21)) Q& f0 K  m% ?
195-给大家录制BUG过程8 [* x( t4 f+ Y! C
196-GameServer(9-23)
; ]+ p7 }; g% j; U  v5 E' ]$ ~197-开始处理抢地主的响应. u7 M- Z: _( |/ c6 o$ \
198-发送抢地主请求和抢地主成功的处理; \2 {& l9 C8 f; y5 q$ ^
199-自身的玩家添加三张底牌的处理
4 Q; j" [5 q. b3 j" @$ E1 y200-抢地主成功的处理完毕8 p# y# ^7 o! z
201-测试抢地主并修改BUG' w+ y9 B# z7 i
202-Card(9-24)
% I- r/ U( W) D, n! |. J- j1 V* \203-GameServer(9-24)
% @& Y0 l7 q1 t) Y# k8 Z4 ^" {. r7 |204-接收来自服务器的出牌命令
% `0 z, [) w7 g0 M$ i205-客户端出牌的处理
' {+ D+ W: R( i3 b* P9 D9 Y206-向服务器发送不出的请求* r( N! K9 ]/ q
207-GameServer(9-25)
; R6 a( m0 D5 I% f$ a; d208-Card(9-25)3 @) d) K8 K0 I
209-给卡片添加碰撞器让他能点击1 }+ p! q0 i. @: l, p- d" Q
210-解决出牌BUG
2 T; D1 a9 ~" }% S% H6 X211-移除出完的手牌
/ c' r& w( q7 H" k& L4 R212-管理桌面的牌显示
3 F# B! g6 V) H4 a213-出牌特效声音的播放* o" F4 l* i6 N6 C/ m* m3 l
214-GameServer(9-27)
$ C8 s; |7 o( F4 C215-Card(9-27)
' Z+ C4 z! g/ d' a' S2 L216-测试出牌BUG 上部
4 P. P+ J/ p' [' X. [2 ]: v3 q4 P217-测试BUG 下部
0 J: Q8 [9 C. B! |0 \218-客户端+服务器(9-28)" U' E" w" g+ |; e# B! t1 M
219-创建OverPanel代码脚本4 T9 v' w$ v& L, H& v
220-通过消息机制表现客户端的结束3 s% T1 C4 [0 J
221-测试游戏结束& ]% Z/ e8 o) C1 a- B  ?
222-创建背景音乐播放控制脚本9 X* R  ~) Q' w
223-给前两个场景添加背景音乐
4 J9 y* U, T- w224-完结与未完
9 v" D. L0 b; d+ h225-Card(9-30)
' J7 i1 v5 Z6 Y* Z* y/ x% G226-GameServer(9-30)& U0 Y4 [. E. |; ^$ a9 E
227-扩展课之ProtoBuf7 [" I) n2 m  @( g2 ^- c* q- l
228-扩展课之ProtoBuf(10-15)下载地址:4 |) _/ J% G' b. Y1 f" r
7 m, S0 o, v( i) i$ W
游客,如果您要查看本帖隐藏内容请回复
. r9 a3 F$ t, Y5 E" S( a$ i0 s

) e6 i/ f  o& o# O. f" @
回复

使用道具 举报

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% y2 V: {8 c* ?# o
多人网络斗地主开发实战基于(Unity2017)
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-3-8 10:20 , Processed in 0.081065 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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