19 12
发新话题
打印

[讨论] 初级魔力lua解析

6.如何创立MSG指令(例:/1 /2)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート/ r: I. y  t- a. W
今天先来讲点简单的知识,顺便复习一下旧知识点中比较重要的获取(get)函数和设置(set)函数的区别,本帖停更也是由于深感自身讲的知识点先后顺序有些问题
1 M. d7 Q& {! R/ q: mbbs.mocwww.com魔力lua包含了三大块知识点
. K+ }  B2 a* [  ?1 t) l* J魔力私服,最新魔力宝贝私服技术交流1:lua编程基础知识(不需要太深入的lua技术即可)  K% m4 f2 Z' J
2:mysql基础知识(不需要太深入的mysql技术,但要会节省资源和防止疯狂读写)
1 c$ M. i8 H- K/ x! a4 w9 X0 b. e4 D$ `9 i魔力私服,最新魔力宝贝私服技术交流3:魔力封包知识(高端lua开发必备)
9 }. X8 `0 P7 M魔力私服,最新魔力宝贝私服技术交流魔力私服,最新魔力宝贝私服技术交流/ O5 g3 s' ^* I4 F
本帖只讲述lua在魔力中是如何运行的,这三块知识点都需要你们自己去学习0 A: {/ }/ Z+ m1 x3 f5 `* {

* `9 K' k/ z- Z5 j7 b  ~魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表下面我们进入今天的教学, j% A! F! r! e% `& [
lua的远程指令主要依靠NL.RegTalkEvent(Dofile, FuncName)达成
7 k' d( N5 @, B4 w$ [魔力私服,最新魔力宝贝私服技术交流该函数的作用是[创建对话事件],它可以全局框架注册
) q$ |+ }' N2 u& M3 p* R魔力私服,最新魔力宝贝私服技术交流一般使用Delegate.RegDelTalkEvent("XXX")创建全局对话事件魔力私服,最新魔力宝贝私服技术交流3 }& [/ O8 |' z% k
NL.RegTalkEvent的返回函数明细:魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表1 x$ e4 r2 v! y% I$ V% y  b2 R
TalkEventCallBack(CharIndex, Msg, Color, Range, Size)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート, d4 G5 m  N& c, K# [/ I
参数说明bbs.mocwww.com( p0 K# t: [" I# [' ~
CharIndex: 数值型 响应事件的对象index,该值由Lua引擎传递给本函数。魔力私服,最新魔力宝贝私服技术交流6 W# h% G. a- C% e" e- G
Msg: 文本型 话的内容,该值由Lua引擎传递给本函数。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表, J7 _  Y: Y( `: Q
Color: 数值型 说话颜色,该值由Lua引擎传递给本函数。bbs.mocwww.com* x' [/ E# C8 J/ L( b% k
Range: 数值型 说话音量(范围),该值由Lua引擎传递给本函数。+ }# x0 C5 I8 T7 R
Size: 数值型 说话字体大小,该值由Lua引擎传递给本函数。
% W( C# f) U% m/ I魔力私服,最新魔力宝贝私服技术交流返回值魔力私服,最新魔力宝贝私服技术交流- o/ X2 s0 b* G' P+ j" G
返回0拦截说话内容,返回1正常发送
/ X1 y9 T6 O# s& G+ T: j  ?+ f3 \8 I魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力私服,最新魔力宝贝私服技术交流- X. v2 r% t4 f
小知识复习:当形参由lua引擎传递一个可用实参时,你不需要填写形参具体值,并且可以传递给其他函数的空白形参,让其拥有实际数值,传递时候要注意传参的类型,空白形参的函数中,空白形参若只能填写数值型
4 I5 A  S8 p9 V. o( H& b魔力私服,最新魔力宝贝私服技术交流传递过来的数值就必须是数值型(这种情况可以先设置一个变量   a=tonumber(lua引擎传递的字符串型传参) 然后把变量a填入空白形参的函数形参中)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート3 i4 X  D: K6 {- c+ s
bbs.mocwww.com7 K6 g+ p2 }) |( `! X2 E3 J6 _
文字太过干涩,下面用实例解释今天的知识点—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート* G1 M/ k7 U4 ]) M
该例实现了用指令整理身上的道具的功能
2 w! ]+ p; L, W6 M& g$ i魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
5 a. u' v8 Q" T魔力私服,最新魔力宝贝私服技术交流local zhengli = "/zl"--整理指令,此处需要""把内容定义为字符串魔力私服,最新魔力宝贝私服技术交流8 W7 b2 H8 X( m6 P2 X
--  ***************************************************************************************************** --
) B5 h- B  p% u3 k魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Delegate.RegDelTalkEvent("zlTalkEvent");--全局注册对话事件函数妖城在线论坛, h8 x; k& S# X5 l
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート0 |2 N/ B0 H+ K$ h) @/ F# B
function zlTalkEvent(player,msg,color,range,size)--调用对话事件函数的返回函数bbs.mocwww.com$ f% [& |( f/ N7 }' w6 V) h) ~
        if(msg==zhengli) then--检测MSG=整理指令时则执行下述函数块内容妖城在线论坛+ l; {, E9 }2 L* K/ s* x
                NLG.SortItem(player)--调用GA封装的整理道具函数,其中NLG.SortItem(player)的(player)值由function zlTalkEvent(player,msg,color,range,size)这个返回函数赋予妖城在线论坛# t( j1 G; v0 L' x8 S1 H
        end—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( {. J# Z6 a! K( \# {( N6 ~
endbbs.mocwww.com$ _% t  i6 p! f9 @
bbs.mocwww.com. y) H. J. S5 M. ?
上述实例中,如果单独拿NLG.SortItem(player)出来,(player)的值会是nil,是没有任何数值的,它是一个标准的设置函数,需要从获取函数中获得形参的实值(魔力lua的函数的形参分为2种,获取函数(get)和设置函数(set))
& ?6 V9 d9 U9 k魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 教学用指令整理道具.7z (453 Bytes) 魔力私服,最新魔力宝贝私服技术交流% l2 N5 l9 H" s
  ?. V6 S; A( a3 U! V
[ 本帖最后由 王宫召唤士盖兹 于 2019-5-31 02:07 编辑 ]

TOP

引用:
原帖由 staki 于 2019-8-3 03:12 发表
8 W2 x' B- d* n- E* a, A& d6 G妖城在线论坛建议出个GP的 GA好像在这身败名裂了
5 U- J7 m+ E8 e
- O+ C) L5 n6 c. c' ^魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表GP没2键端无法操作,只是学lua基础都一样的) c. I) }3 u3 ^3 M
我不更新就是涉及的具体操作太多,通用性不高,没有更新的必要魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 M+ T, J* X8 T" W) @2 d
我本身秉持授人与鱼不如授人于渔的想法,才写了这个帖子
. `7 X% Q& Q9 c2 Z, ^! T# Rbbs.mocwww.com能看懂本帖之前写的内容,足够了
) d3 C7 V( D9 t/ l: z4 |4 {bbs.mocwww.com魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表& z* J7 r. t" v' N, g' g
备注:—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート  p: ^" F) U3 q: ?: K% N
既然回帖了,就再讲一下魔力lua的基础运行流程:
8 }. {* o. o. U' c9 r魔力私服,最新魔力宝贝私服技术交流1:GMSV启动时加载GMSV内置的魔力lua模块魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表& g9 k9 ~: b1 p. s) W; J8 C
2:GMSV自动加载初始lua-init.lua   该lua是由GMSV自动加载的(无需写dofile加载)bbs.mocwww.com8 t2 `6 r0 x+ Y, y
3:init.lua 加载运行内部代码    此时会有大量dofile,一般是加载基础框架相关的东西 有兴趣可以参考init.lua内部代码,包括框架全局注册这类关键脚本,都是此时加载的) a% ~4 `) a; q1 y% x4 U- Z
4:init.lua中有一行dofile(Lua_Path.."Config.lua"),加载Cofig.lua—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート2 s# M4 L6 [9 {  S  T5 c" [
5:Cofig.lua加载各种Module文件夹内的lua  (至于Cofig.lua内用于加载lua的Loadlua函数究竟是GA哪个脚本内写的,可以给大家当成一个最后的课后考题,找出他,能找到他,我相信你就会发现魔力LUA的运行逻辑是如此简单)
0 @2 ?' H, }/ s) Z3 `* w提示:GP的Loadlua函数在  lua\include\Global.lua 这个文件内
1 Q$ T. X1 n: l魔力私服,最新魔力宝贝私服技术交流提示2:GA的Loadlua函数在 lua\System某个文件夹内—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート$ `  i: d7 m8 x

% G7 ?9 ^! @4 M4 D6 w! u( x妖城在线论坛[ 本帖最后由 王宫召唤士盖兹 于 2019-8-3 12:59 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-20 20:44 发表
& b7 M- X- F9 qbbs.mocwww.com我看了在线修改人物名字的lua ,其实SQL是改数据库的,但是真正起作用的是最后两行,直接改对象的名字。
* ]& I2 t6 u" v/ x3 x( T魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表bbs.mocwww.com0 U6 u. D, Q9 H: l* ~
                local query = "Update tbl_character set `Name` = '".._data.."' Where Cdkey = '"..Char.GetData(_Pl ...
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート) d$ d0 S. A1 F  K/ s4 `

% V7 N/ O$ G: n; e; \—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートlua修改玩家内存只是修改了GMSV内的内存,在玩家客户端内并没有显示,因此需要用UpChar函数更新玩家客户端显示—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート9 m8 j4 }7 W  w
同理还有NPC创建时候使用的UpChar函数,这个函数如果是由全局注册init来触发的,会导致你即使重载脚本,NPC也加载不出来,必须重启服务器(重新加载init)才行魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表& c. {% w" H" g% c" i
备注:创建NPC也可以用其他函数或者if,GE不要使用if,会有奇怪的错误/ T# d! n* n1 O& M6 m$ l0 X+ n+ W
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 T+ a5 J. P; \9 ~, X
GE的教程和GA是互通的,他们只不过是文件夹不一样,文件名不一样,函数名不一样,但运行逻辑都是一样的,只是WIN7和WIN10的区别而已,只要能看懂本帖说的GA的内容,GE和GP自然就懂了
! t( ~9 o* V5 E6 u0 G魔力私服,最新魔力宝贝私服技术交流魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表% W5 H" [* t- _1 J# i# ~
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 11:22 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-30 15:47 发表 bbs.mocwww.com6 N) F+ ~* l: W7 B; {. b$ Z
我知道更新完了,要UpChar函数刷新,但是现在遇到的问题,我想用sql函数直接改item表里面的  宠物卡  的字段,妖城在线论坛% u# r' g4 V0 F; Z1 b  j
是直接update操作数据库,运行后看数据库也更新成功了,但是人物一退出又会重新保存未修改前的数据了。 ...
妖城在线论坛4 z/ v" o9 c& ~! |9 u4 p" ^9 \+ X

9 s7 h6 m% i+ C1 O' Hbbs.mocwww.com更新道具数据是另一个函数Item.UpItem,不是NLG.UpChar
+ G. S: R" E4 Y3 e; m, c$ q—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートhttp://api.cgex.in/index.html#Item_UpItem
1 c3 R0 N8 _8 ^& U6 W  ?9 L$ fbbs.mocwww.com—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( G4 J) m' N& Q) z; x/ ?
备注:还有更新宠物信息,并对玩家客户端进行更新的Pet.UpPet(Player,Pos)魔力私服,最新魔力宝贝私服技术交流$ X7 \5 [1 ~2 i! P" A
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート9 v0 V# y1 }  M) a
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 16:05 编辑 ]

TOP

 19 12
发新话题