小妖

- UID
- 43204
- 精华
- 0
- 积分
- 33
- 威望
- 0 度
|
11楼
大 中
小 发表于 2019-2-27 17:27 显示全部帖子
五:关于如何创建一个luaNPC —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート8 `) G% e Z. E# E+ D
本章节比较偏向于实用,而不是基础知识,因此,我们直接上脚本实例给大家看,如果大家觉得论坛排版太过混乱,就下载文件用编译器打开观看(强烈推荐)
) E' l( L' u+ y' h3 ?9 f妖城在线论坛
教学用声望(fram)牌.7z (2.97 KB)
妖城在线论坛5 x" ^6 \: g9 _5 N6 y" L, `# c
红色为实际代码,紫色为注释
* Z; i6 l0 J9 ]" g# H: p" o魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表. V! J# A$ v& S
Delegate.RegInit("farm_Init");
. s8 q. d: w1 Ibbs.mocwww.com--注册全局函数RegInit,每次创建lua的NPC都需要先注册
/ d- D( ^4 A0 ]( I/ o8 w7 ?妖城在线论坛
, E" K- w a: k7 i7 d( {妖城在线论坛function farm_Init()--调用全局函数RegInit妖城在线论坛, R0 h' I! U6 e% q+ Y( `1 `
fram_create();--创建一个函数,此处是为了让下面能调用到,不需要写具体功能,具体功能由下方赋予,赋予它后,它负责传递给全局函数RegInit,然后让RegInit运行函数
1 W/ A; w6 v6 u: H—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート --在一般lua中,函数书写完毕后,必须调用才会运行,魔力lua引擎常常省略这步,但创建NPC时无法省略) A* ^/ S @/ o3 m& }1 B; f' f$ ]* n
return 0;--返回值填非负数的任意值即可,此处必填,没有返回值时lua的NPC会创建失败
( x- i8 h& D$ q2 C+ u+ d$ P0 y O8 |魔力私服,最新魔力宝贝私服技术交流end
% t' H l5 `' q妖城在线论坛; o' N' d6 ~$ {$ p
function fram_create() --声望查询
( M5 a$ ~! F' r6 m5 N妖城在线论坛 if (chuangjianNPC == nil) then--如果没有NPC则创建NPC! U, y& \( V& }+ G5 S, p' b1 w5 M2 s
chuangjianNPC = NL.CreateNpc(nil, "farm_Init");
4 P- E6 L0 u" i魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 --NL.CreateNPC(Dofile, InitFuncName)- s- ~" f# H" d$ y6 ^
--函数功能
( m g6 S9 s7 I$ m: rbbs.mocwww.com --使用Lua脚本创建NPC,并执行Dofile文件中的InitFuncName函数。(也就是运行一次该函数,不运行是会失败的)
) U: ?+ n7 `' Y" Y# [% C' L魔力私服,最新魔力宝贝私服技术交流 --Dofile: 要加载的脚本文件名,如果为当前文件,则定义nil即可魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表& j; m, _. l7 s, e
--InitFuncName: Init函数的名称,NPC创建后执行的函数,也就是我们第一行的全局注册函数RegInit的名称9 D/ ^; H& f5 u2 i' ]
Char.SetData(chuangjianNPC,%对象_形象%,10414);妖城在线论坛9 V. O. @3 |5 \
Char.SetData(chuangjianNPC,%对象_原形%,10414);
- I8 ^. F, G0 M9 ^8 \3 d% Zbbs.mocwww.com Char.SetData(chuangjianNPC,%对象_X%,231);
! x6 v8 K! {) c# W7 y7 z: {& w" N Char.SetData(chuangjianNPC,%对象_Y%,84);
& j% o9 M6 i! L0 i" ibbs.mocwww.com Char.SetData(chuangjianNPC,%对象_地图%,1000);
1 V+ \1 n' S0 D% L& E& i—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート Char.SetData(chuangjianNPC,%对象_方向%,4);bbs.mocwww.com" u) l- g- ?+ }0 @: C; e* u
Char.SetData(chuangjianNPC,%对象_名字%,"阿蒙的声望查询牌");
# ~0 h' P3 m7 H) K妖城在线论坛 NLG.UpChar(chuangjianNPC);魔力私服,最新魔力宝贝私服技术交流9 N" \6 A* \" j
--NLG.UpChar(CharIndex)魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 P0 N. B! L+ o, b
--检查CharIndex对象的改变并且向所有有关联的玩家发送该对象的数据更新封包。(不发送封包玩家客户端处见不到这个NPC的形象,因为图档属于客户端内容)魔力私服,最新魔力宝贝私服技术交流/ p9 ~5 a. Y, e L1 H( m
Char.SetTalkedEvent(nil, "Framchuangkou", chuangjianNPC);--创建对话事件,仅作选择对话窗口类型和显示MSG效果之用
2 ^1 j1 F1 g @: t9 t6 ^魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 Char.SetWindowTalkedEvent(nil, "Framgongneng", chuangjianNPC);--创建对话事件的回馈,写具体的luaNPC功能
* b: _, H' u' n& |8 j5 ~魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 end --创建↑上述2个事件后就可以调用他们的返回函数,分别为:
# v9 C4 y, }6 W \# \妖城在线论坛 --CharTalkedCallBack(CharIndex, TalkerCharIndex)9 a) p6 p1 {9 L7 t
--CharWindowTalkedCallBack(CharIndex, TalkerCharIndex,SeqNo,Select,Data)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート/ ?4 Z$ X1 r' D! R7 a
end
& h" w/ U# K" f* H5 ]魔力私服,最新魔力宝贝私服技术交流--[[Char.SetTalkedEvent(Dofile,FuncName,CharIndex)bbs.mocwww.com- p9 e3 P; q( @; s/ P
函数功能:为对象index设置对话开启事件的回调函数,对象在开启对话的时候会触发该函数,由Lua引擎将Callback的参数传递给指定的Callback并执行。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 V1 } f9 Z5 T6 x6 F, s
Dofile: 要加载的脚本文件名,如果为当前文件,则定义nil即可 备注:如果写加载的脚本文件名别忘了加"",即"文件名"
( e# ~# j4 k& m% l M7 v魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表FuncName: 触发的Lua函数的名称,本功能里面为"Framchuangkou"
1 m) ? C) Q, m! ?0 E" B7 z—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートCharIndex:触发这个函数的对象index。本功能里面为chuangjianNPCbbs.mocwww.com* a' L0 o4 v8 G) y( K" y$ m
]]
! L. S' }9 v& q7 _" Abbs.mocwww.com--[[Char.SetWindowTalkedEvent(Dofile,FuncName,CharIndex)
- W) X. v& Z1 [; v7 n7 \% a) p* D' qbbs.mocwww.com函数功能:为对象index设置对话事件的回调函数,对象在进行对话交互的时候会触发该函数,由Lua引擎将Callback的参数传递给指定的Callback并执行。bbs.mocwww.com: r4 p3 F/ P# ^& A! T' F* T1 J& c4 V
Dofile: 要加载的脚本文件名,如果为当前文件,则定义nil即可 备注:如果写加载的脚本文件名别忘了加"",即"文件名"bbs.mocwww.com3 n4 j7 Y/ H- _$ V9 T# J& U
FuncName: 触发的Lua函数的名称,本功能里面为"Framgongneng"
2 d* `# l6 `$ J& x9 k妖城在线论坛CharIndex: 设置的对象index。本功能里面为chuangjianNPC魔力私服,最新魔力宝贝私服技术交流1 I! X2 G; k9 v
]]妖城在线论坛4 K: j+ h# j8 P- j3 z" g0 H
/ y6 {( L" P2 O' l. }# F! s0 wfunction Framchuangkou(_NpcIndex,_PlayerIndex)--调用返回函数CharTalkedCallBack(CharIndex, TalkerCharIndex)
0 l: u$ o! U3 M5 {—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート --CharIndex: 响应事件的对象index,该值由Lua引擎传递给本函数。(一般是NPC)妖城在线论坛( O$ J: v4 `8 e; f
--TalkerCharIndex: 触发事件的对象index,该值由Lua引擎传递给本函数。(一般是玩家)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート* w& A( Z* ?2 A# G8 g ?$ ^
--(_NpcIndex,_PlayerIndex)这类形参名字不重要,下方或者上方代码调用时候一致即可,实际值会由LUA引擎自动填写并传递—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート w& X! W0 H% k8 [
if (NLG.CanTalk(_NpcIndex,_PlayerIndex) == true) then--用NLG.CanTalk判断两个对象(_NpcIndex,_PlayerIndex)是否在可交谈范围内(距离两格以内)魔力私服,最新魔力宝贝私服技术交流8 m0 G" F- v) U+ r6 x
WindowMsg = "1\\n第一行只能写MSG不能选择\\n 你来找我有什么事情吗?\\n第三行\\nHi,我想查查我现在有多少声望啦!\\n第五行\\n(⊙o⊙)…点错了……\\n第七行\\n第八行\\n第九行";
$ x+ O4 x1 G6 U妖城在线论坛 NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_选择框%,%按钮_关闭%,1,WindowMsg);
7 f6 h' | U% a+ Z: Tbbs.mocwww.com --%窗口_选择框%的格式:先写非选择行数(1-8,不能为0,最小为1行)\\n内容MSG(空行需要自己加\\n,最多有9行内容可写)
2 Z) d( o' N, S --NLG.ShowWindowTalked函数自己查白皮书吧,很简单,此处WindowMsg是个变量,赋值了一段MSG,也可以直接写在NLG.ShowWindowTalked内,由于对话框类普遍文字较多,推荐写个变量,比较美观
$ ?' e; e, \% N) q# h5 N—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート --%窗口_选择框%是个窗口常量,可以自行查阅白皮书窗口常量类型,替换成其他窗口(例如%窗口_巨信息框%)
6 e5 N; f d0 @9 `魔力私服,最新魔力宝贝私服技术交流 --每个窗口常量都有自己的书写方式,这和魔力data里的写法是一样的,参考魔力脚本即可
+ M0 g+ j: f1 z; |( W( L W' Z2 D妖城在线论坛 end: _" R, u% h) \. Q. M) O
return;魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 G- Z2 t. {' C7 ^
end
# S3 u" r4 l! q; f D% P—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
- U! n% J4 N+ {" H( D魔力私服,最新魔力宝贝私服技术交流function Framgongneng(_NpcIndex,_PlayerIndex,_SqeNo,_select,_data)--调用返回函数CharWindowTalkedCallBack(CharIndex, TalkerCharIndex,SeqNo,Select,Data)' m! F* N- f K9 t! c: t. j
--CharIndex: 响应事件的对象index,该值由Lua引擎传递给本函数。(一般是NPC)
" N2 p' l. U" X3 K- y) q. [8 X/ j --TalkerCharIndex: 触发事件的对象index,该值由Lua引擎传递给本函数。(一般是玩家)魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 c$ v1 n& z- p
--SeqNo: 来源对话框的ID,该值由Lua引擎传递给本函数。(不用写实际值,写个形参即可)魔力私服,最新魔力宝贝私服技术交流0 i4 X9 u$ L, `) I
--Select: 玩家所按下的按钮的值或选择框中的选项的值。6 i& s" C$ W2 W- U
--Data: 客户端所传递回来的值,这个值将根据不同的窗口类型而不同。魔力私服,最新魔力宝贝私服技术交流. g5 D1 n& i+ l
--(_NpcIndex,_PlayerIndex,_SqeNo,_select,_data)这类形参名字不重要,下方或者上方代码调用时候一致即可,实际值会由LUA引擎自动填写并传递魔力私服,最新魔力宝贝私服技术交流" t/ B, [1 D1 U: o" b4 ]
local selectitem = tonumber(_data) ;--tonumber函数默认功能是把()内的值(可以是数值型字符串或者16进制数值)转换为10进制数值,这边用是因为_data在lua引擎内返回的是string(字符串类型),需要转换为number(数值类型)妖城在线论坛/ c# F4 Z: Q5 R0 K3 \5 s
--延伸介绍:tonumber(e [, base]):写法tonumber(需要转换的值,需要转换的进制)进制可写2-36进制,不填为默认10进制,本处脚本就是默认把lua引擎返回的_data转换为10进制数字9 L" u) j( G9 m1 R+ M' c! D
--详细解释:这个函数会尝试将它的参数转换为数字,如果参数已经是一个数字或者是一个可以转换成数字的字符串,那么这个函数就会返回转换后的数字,否者返回nil表示无法转换。这个函数有一个额外的参数base可以来指定参数的进制,它的取值范围是[2,36],当这个参数超过10的时候,使用A代表10(大小写都可以),B代表11,以此类推最后Z代表35,默认的这个参数是10,数字能有一个小数部分,也会有一个指数部分,只有可识别的整数可以被接受。
$ H5 }6 Y4 H3 A$ S6 e8 B' J魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 --selectitem是个自定义变量,此处看不懂请先抽出几小时看lua基础视频教程魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表$ S5 I8 l2 ^! G6 h* W. b
if (selectitem == 1) then--_data返回值为%窗口_选择框%的具体行数,一共是0-8九行,0为第一行,但选择框在魔力里面第一行是无法使用的,故正常都从1-8开始返回,此处得看你上面的非选择行数值填了几
: s G4 `: \/ [% d魔力私服,最新魔力宝贝私服技术交流 NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,"没啥事");
" |- n- C+ W7 y: b" `—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート end魔力私服,最新魔力宝贝私服技术交流+ t& I! V! G* j8 F% r; _
if (selectitem == 2) then
$ ]) r# k% _! I X) Z- ?魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,"显示_select数值和数值类型" .. _select .. type(_select) .. "!");2 I E% M5 I* e5 T* g2 m
end
0 s1 ^3 C2 Y0 `' R( G if (selectitem == 3) then
1 h' \8 }5 L" Q8 Q魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 Msg = "\\n\\n你现在已经有"..Char.GetData(_PlayerIndex,%对象_声望%).."点声望噢!\\n\\n没达到目标的话不要灰心,继续努力噢";
# y$ J' ^/ R. B) b4 g妖城在线论坛 NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,Msg);魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表9 U; c; g2 X1 }% p7 ~* y
end
: ?0 N, E" _5 ?# J) y, F, C E妖城在线论坛 if (selectitem == 4) then
% Z8 |2 e& `0 I' B; z/ D3 ~ NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,"显示_data数值和数值类型" .. _data .. type(_data) .. "!");魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 Z. A4 r/ m: F1 I4 Q8 a% `
end妖城在线论坛. @ ^, Y/ y6 K" @5 s, r: ?
if (selectitem == 5) then5 u5 t; K4 B8 m2 r$ \: G
NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,"\\n\\n不要乱点人家嘛~人家可是很忙的!");
! P3 Q, t! u# R6 U; Q; C: p# h, x魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 end
) X2 B. D& {8 N妖城在线论坛 if (selectitem == 6) thenbbs.mocwww.com- v/ [" m: k% f- S* V8 E3 m: Z
NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,"显示_PlayerIndex数值和数值类型" .. _PlayerIndex .. type(_PlayerIndex) .. "!");魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表" R- k- s0 N% e% h2 E7 l& M+ B
end—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート+ `& \# P7 E$ U( O! k" ~% h
if (selectitem == 7) then
* R6 K1 G- j @2 @bbs.mocwww.com NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,"这是_data数值".._data);—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート, C2 c* q8 c* G* C; G
end
+ @) \, O _/ i" e魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 if (selectitem == 8) then魔力私服,最新魔力宝贝私服技术交流- h- ]* O% g) {. v" S+ |( n
NLG.ShowWindowTalked(_PlayerIndex,_NpcIndex,%窗口_信息框%,%按钮_关闭%,1,"这是_data数值".._data);
; F$ _" o- }6 W& c3 n, g8 D—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート end
' Z' I( j, F. x0 hbbs.mocwww.comend
- D3 S" F/ I6 I! k妖城在线论坛--选择窗口最多可写8条,当然,也可以不用全部写出来,只要上方MSG直接空2行(\\n\\n),下面选择框selectitem不写即可(selectitem == 空的那行的数值 的这条直接不写)
4 H) ]- y) L4 p9 {+ N9 i—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート" ~% Q5 O* W- u P8 s
能看懂本实例就能明白如何创建一个Lua的NPC,然后我们可以利用该NPC,去实现各种功能,例如宠物算档,匹配组队(创建一个NPC到777地图,利用指令,比如/1,让玩家和NPC远程对话,实现功能)
4 ~% A5 @% Z* @6 T5 z$ Q- X—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート下面附加一份没注释版本的声望牌lua 代码经过了优化,有兴趣的可以对比一下原版声望牌lua
6 Y# x$ g2 R' {妖城在线论坛
优化代码后的fram-无注释版.7z (943 Bytes)
! J+ d5 @, p. M9 R1 x0 ~6 N
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 ]" E1 f* O2 q( T9 l: g; I
本节中就利用了上面说过的tonumber函数,课外习题,如果不用tonumber函数,最后选择框的代码 ) l+ d/ r; y3 D# U0 z
if (selectitem == 2) then
* J" B9 Y6 f9 R& _: o" S; Q. o4 a妖城在线论坛之中的(selectitem == 2)应该怎么写?
. _6 b7 ]4 U/ n: h—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
0 v: x6 l" J. Z: s" u5 xbbs.mocwww.com下一节我们讲如何创立/1/2这类远程指令  依然是不负责任的看心情更新
- \. D! U( ^6 @$ T" L魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
* L" K1 r. q% p妖城在线论坛[ 本帖最后由 王宫召唤士盖兹 于 2019-2-27 17:36 编辑 ]
|