19 12
发新话题
打印

[讨论] 初级魔力lua解析

6.如何创立MSG指令(例:/1 /2)
% |5 T& m' s) [; @魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表今天先来讲点简单的知识,顺便复习一下旧知识点中比较重要的获取(get)函数和设置(set)函数的区别,本帖停更也是由于深感自身讲的知识点先后顺序有些问题
- L* k+ K6 k/ [+ P( q) N) B% `- ~2 }( @bbs.mocwww.com魔力lua包含了三大块知识点妖城在线论坛  X# F' [% [4 s5 W* i& i
1:lua编程基础知识(不需要太深入的lua技术即可)
; j1 J7 z  V$ Q  G! w/ C( B魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2:mysql基础知识(不需要太深入的mysql技术,但要会节省资源和防止疯狂读写)
$ s/ r/ H* W- ^- s$ v3:魔力封包知识(高端lua开发必备)! c) D( R/ b2 Z9 B; p7 H6 y
" E+ Y+ ^2 G1 S
本帖只讲述lua在魔力中是如何运行的,这三块知识点都需要你们自己去学习妖城在线论坛: T% Q! ?0 K) y/ `# c

9 [3 {! @9 e4 J; ~) qbbs.mocwww.com下面我们进入今天的教学魔力私服,最新魔力宝贝私服技术交流$ f: ?+ A. ?. Y0 W
lua的远程指令主要依靠NL.RegTalkEvent(Dofile, FuncName)达成
- n& g' ]7 n4 \& Y7 ~" X, _  t+ @妖城在线论坛该函数的作用是[创建对话事件],它可以全局框架注册
8 m8 w6 B; \' w+ ^妖城在线论坛一般使用Delegate.RegDelTalkEvent("XXX")创建全局对话事件
4 W& a3 t4 r3 H1 b1 v/ jbbs.mocwww.comNL.RegTalkEvent的返回函数明细:
: c4 g6 J  {- c! p/ b魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表TalkEventCallBack(CharIndex, Msg, Color, Range, Size)魔力私服,最新魔力宝贝私服技术交流4 s9 n$ B( m- X" H7 v
参数说明—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート2 j9 w8 H8 \0 F" S+ a* R# ~
CharIndex: 数值型 响应事件的对象index,该值由Lua引擎传递给本函数。
9 C. E/ B. p8 U3 A! p! A* J魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Msg: 文本型 话的内容,该值由Lua引擎传递给本函数。
4 S: r; i/ B) j1 @' EColor: 数值型 说话颜色,该值由Lua引擎传递给本函数。
! q% L% m5 h7 K) X. I1 ]1 x. U魔力私服,最新魔力宝贝私服技术交流Range: 数值型 说话音量(范围),该值由Lua引擎传递给本函数。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' b: _" M. k. n/ X9 s
Size: 数值型 说话字体大小,该值由Lua引擎传递给本函数。
* B* h8 m  M  Y1 Bbbs.mocwww.com返回值
0 N" Q5 Q. o5 Q( V妖城在线论坛返回0拦截说话内容,返回1正常发送
# e+ A9 ~' H! |3 N, O魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表. x9 q& o; u* S2 p% o8 v% W- I* S5 C
小知识复习:当形参由lua引擎传递一个可用实参时,你不需要填写形参具体值,并且可以传递给其他函数的空白形参,让其拥有实际数值,传递时候要注意传参的类型,空白形参的函数中,空白形参若只能填写数值型魔力私服,最新魔力宝贝私服技术交流8 f  n6 E' A4 t7 w
传递过来的数值就必须是数值型(这种情况可以先设置一个变量   a=tonumber(lua引擎传递的字符串型传参) 然后把变量a填入空白形参的函数形参中)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート# z5 w5 \. U5 ?5 o: \1 d+ k
3 h, F2 D/ W+ j: v% _
文字太过干涩,下面用实例解释今天的知识点
% I- @) N4 z, m3 v& ^( \—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート该例实现了用指令整理身上的道具的功能
- z. W' R$ d9 N6 Y" u; i$ v/ ?魔力私服,最新魔力宝贝私服技术交流妖城在线论坛9 `: i0 k  l8 b, U) r# [, ]1 W( v! ^
local zhengli = "/zl"--整理指令,此处需要""把内容定义为字符串妖城在线论坛" O- c+ P" r" I3 H3 E: E2 O3 Y8 D- v
--  ***************************************************************************************************** --
- S. c! l9 k: p6 ]" p" w. ^' X魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Delegate.RegDelTalkEvent("zlTalkEvent");--全局注册对话事件函数魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表" u; ?4 u5 j2 \2 K$ h! _

6 e$ O! J( L* o魔力私服,最新魔力宝贝私服技术交流function zlTalkEvent(player,msg,color,range,size)--调用对话事件函数的返回函数
* y+ O  \3 H2 X- a1 p8 e& T3 |魔力私服,最新魔力宝贝私服技术交流        if(msg==zhengli) then--检测MSG=整理指令时则执行下述函数块内容
% H- X" e- ~6 k) o                NLG.SortItem(player)--调用GA封装的整理道具函数,其中NLG.SortItem(player)的(player)值由function zlTalkEvent(player,msg,color,range,size)这个返回函数赋予—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 p! Y& d; P' m, j$ b
        end妖城在线论坛3 w% {3 P3 M6 U. K1 e( {% e" H
end
) _7 \: W* p- i/ Q5 W+ m% f  g( S
. q+ p3 W2 }) t妖城在线论坛上述实例中,如果单独拿NLG.SortItem(player)出来,(player)的值会是nil,是没有任何数值的,它是一个标准的设置函数,需要从获取函数中获得形参的实值(魔力lua的函数的形参分为2种,获取函数(get)和设置函数(set))
7 p  K$ n4 N& A1 Y- C( F 教学用指令整理道具.7z (453 Bytes)
) D% C0 G$ i; A6 S
" G  F; s9 Q& }  Vbbs.mocwww.com[ 本帖最后由 王宫召唤士盖兹 于 2019-5-31 02:07 编辑 ]

TOP

引用:
原帖由 staki 于 2019-8-3 03:12 发表
, w' v( |9 \( v0 s( f% m! E建议出个GP的 GA好像在这身败名裂了
魔力私服,最新魔力宝贝私服技术交流$ T# D% ^6 _4 d, C5 [

; W+ \9 M! N! H妖城在线论坛GP没2键端无法操作,只是学lua基础都一样的妖城在线论坛+ ]/ M7 g; T' f+ t
我不更新就是涉及的具体操作太多,通用性不高,没有更新的必要
7 b( [, m1 s6 Z/ p& i魔力私服,最新魔力宝贝私服技术交流我本身秉持授人与鱼不如授人于渔的想法,才写了这个帖子
5 a; ~0 _% e" G/ K6 Y) X8 p: f魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表能看懂本帖之前写的内容,足够了
; @& ]5 O. @& v' D5 c) ~
( k( J! f# s4 s5 p0 O备注:bbs.mocwww.com/ _$ @; `; T' u+ e! H3 R2 G! q8 M  J
既然回帖了,就再讲一下魔力lua的基础运行流程:
% {' d! Q4 [, \妖城在线论坛1:GMSV启动时加载GMSV内置的魔力lua模块+ R1 u9 s3 I0 C# [0 w; ^
2:GMSV自动加载初始lua-init.lua   该lua是由GMSV自动加载的(无需写dofile加载)魔力私服,最新魔力宝贝私服技术交流5 Q: s, l" E* j6 @9 J0 n6 P# V
3:init.lua 加载运行内部代码    此时会有大量dofile,一般是加载基础框架相关的东西 有兴趣可以参考init.lua内部代码,包括框架全局注册这类关键脚本,都是此时加载的
9 S+ }/ ~& O# \% V7 }4 H( E- |4:init.lua中有一行dofile(Lua_Path.."Config.lua"),加载Cofig.lua
5 L0 [% i) ^  _& J8 l- Nbbs.mocwww.com5:Cofig.lua加载各种Module文件夹内的lua  (至于Cofig.lua内用于加载lua的Loadlua函数究竟是GA哪个脚本内写的,可以给大家当成一个最后的课后考题,找出他,能找到他,我相信你就会发现魔力LUA的运行逻辑是如此简单)bbs.mocwww.com  h5 h. j. A, Q3 Y6 X
提示:GP的Loadlua函数在  lua\include\Global.lua 这个文件内
6 t. b6 b9 e  C1 B) \  \/ F5 f, c6 |—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート提示2:GA的Loadlua函数在 lua\System某个文件夹内
/ @7 a9 |) ?3 e3 V4 K$ O魔力私服,最新魔力宝贝私服技术交流
' l5 Q, d# R2 ?* Zbbs.mocwww.com[ 本帖最后由 王宫召唤士盖兹 于 2019-8-3 12:59 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-20 20:44 发表 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート) f  ~: ]1 d+ |' n0 h
我看了在线修改人物名字的lua ,其实SQL是改数据库的,但是真正起作用的是最后两行,直接改对象的名字。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート7 N0 t: f# W- e, u# k
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表( g* r$ t4 j8 _' u- C1 \7 e, A
                local query = "Update tbl_character set `Name` = '".._data.."' Where Cdkey = '"..Char.GetData(_Pl ...
! [' p) T3 x3 X2 d6 u$ j魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート- a' r# S- i' f3 U7 ]" c5 j
lua修改玩家内存只是修改了GMSV内的内存,在玩家客户端内并没有显示,因此需要用UpChar函数更新玩家客户端显示bbs.mocwww.com2 l) }4 H2 y* y$ D" L* Y
同理还有NPC创建时候使用的UpChar函数,这个函数如果是由全局注册init来触发的,会导致你即使重载脚本,NPC也加载不出来,必须重启服务器(重新加载init)才行bbs.mocwww.com7 b" X6 D9 b$ {% w& d/ C
备注:创建NPC也可以用其他函数或者if,GE不要使用if,会有奇怪的错误魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表  V7 q  ]2 g4 e: Z) {! I0 L
魔力私服,最新魔力宝贝私服技术交流) k, |: M  w1 i! E, ]7 Y/ E; B
GE的教程和GA是互通的,他们只不过是文件夹不一样,文件名不一样,函数名不一样,但运行逻辑都是一样的,只是WIN7和WIN10的区别而已,只要能看懂本帖说的GA的内容,GE和GP自然就懂了妖城在线论坛9 g1 A5 y) d- Q* }4 k
妖城在线论坛% _* N: N9 x1 j" k1 t
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 11:22 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-30 15:47 发表
) H% [: K; ~6 S9 K9 C  f妖城在线论坛我知道更新完了,要UpChar函数刷新,但是现在遇到的问题,我想用sql函数直接改item表里面的  宠物卡  的字段,
8 I, Z1 D) @2 U3 i& t; @2 }—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート是直接update操作数据库,运行后看数据库也更新成功了,但是人物一退出又会重新保存未修改前的数据了。 ...
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 M5 V* [0 [2 X4 N/ }; a7 D
魔力私服,最新魔力宝贝私服技术交流* H! X$ {3 {: `" s: Q: |+ R& X
更新道具数据是另一个函数Item.UpItem,不是NLG.UpChar
/ I" R, b0 ~& x6 o8 F4 Y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートhttp://api.cgex.in/index.html#Item_UpItem  S7 E4 m1 F) ]4 Z* d
妖城在线论坛4 q1 O5 d" D* h, x4 |
备注:还有更新宠物信息,并对玩家客户端进行更新的Pet.UpPet(Player,Pos)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート) z- d' X+ p+ f) o7 G  M

% \- Q5 C1 `( n- B[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 16:05 编辑 ]

TOP

 19 12
发新话题