19 12
发新话题
打印

[讨论] 初级魔力lua解析

6.如何创立MSG指令(例:/1 /2)魔力私服,最新魔力宝贝私服技术交流6 A- ~& t* G" z/ r( y
今天先来讲点简单的知识,顺便复习一下旧知识点中比较重要的获取(get)函数和设置(set)函数的区别,本帖停更也是由于深感自身讲的知识点先后顺序有些问题
3 L: j) P; K1 O/ s魔力lua包含了三大块知识点4 Z$ y+ R6 o# e6 l
1:lua编程基础知识(不需要太深入的lua技术即可)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート; h5 d  {# Q3 i9 K5 A  P+ W! U
2:mysql基础知识(不需要太深入的mysql技术,但要会节省资源和防止疯狂读写)bbs.mocwww.com7 X. A' _) @/ w+ {7 E; n
3:魔力封包知识(高端lua开发必备)bbs.mocwww.com+ M) K/ T+ u/ d  W, \# q

, r+ t4 l8 a* u/ W% x5 \3 e妖城在线论坛本帖只讲述lua在魔力中是如何运行的,这三块知识点都需要你们自己去学习妖城在线论坛" F+ K* Z" c1 E* l

* N! P( r: x9 f* ~6 K5 ?/ D魔力私服,最新魔力宝贝私服技术交流下面我们进入今天的教学
( t) V; o9 C9 b" l0 o% @魔力私服,最新魔力宝贝私服技术交流lua的远程指令主要依靠NL.RegTalkEvent(Dofile, FuncName)达成—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート# s0 [/ g" Y0 _# L" c# L# c
该函数的作用是[创建对话事件],它可以全局框架注册bbs.mocwww.com' T0 \5 s: I! R/ C0 C; m# X& N
一般使用Delegate.RegDelTalkEvent("XXX")创建全局对话事件
' R: Q( n9 l' y$ j1 B0 ]—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートNL.RegTalkEvent的返回函数明细:, F+ I  H6 T8 u& D* s
TalkEventCallBack(CharIndex, Msg, Color, Range, Size)bbs.mocwww.com; d* D& q* U1 @5 J- {8 }
参数说明
1 I& Y5 ?( S) b1 ^: Q: g: m- Xbbs.mocwww.comCharIndex: 数值型 响应事件的对象index,该值由Lua引擎传递给本函数。
  t( I5 N0 v- C2 m; Q3 `—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートMsg: 文本型 话的内容,该值由Lua引擎传递给本函数。/ f, d" ^- k6 J& p. o
Color: 数值型 说话颜色,该值由Lua引擎传递给本函数。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート% A# d) H7 K- l$ [  ~. J' W% ~
Range: 数值型 说话音量(范围),该值由Lua引擎传递给本函数。9 P( f9 B0 r4 D( B
Size: 数值型 说话字体大小,该值由Lua引擎传递给本函数。
( `  Q) a5 T6 `) h7 ~9 q魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表返回值
2 `6 W$ G; }5 }- Hbbs.mocwww.com返回0拦截说话内容,返回1正常发送
4 s( V( c8 r+ x7 {
: x/ e7 r/ d4 l; m: m9 u) r- v—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート小知识复习:当形参由lua引擎传递一个可用实参时,你不需要填写形参具体值,并且可以传递给其他函数的空白形参,让其拥有实际数值,传递时候要注意传参的类型,空白形参的函数中,空白形参若只能填写数值型
5 n% A" q( [" Y: G6 j/ X5 ?魔力私服,最新魔力宝贝私服技术交流传递过来的数值就必须是数值型(这种情况可以先设置一个变量   a=tonumber(lua引擎传递的字符串型传参) 然后把变量a填入空白形参的函数形参中)
2 \; }3 Z4 q4 R0 p2 _3 Sbbs.mocwww.com
) J! x& ?+ ]0 ~" |+ o  b- `( l妖城在线论坛文字太过干涩,下面用实例解释今天的知识点
& r- t! H+ p# ?4 L魔力私服,最新魔力宝贝私服技术交流该例实现了用指令整理身上的道具的功能
; K+ i! q+ w) s5 l0 H+ E+ D—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート+ a0 p1 F6 S- [: R
local zhengli = "/zl"--整理指令,此处需要""把内容定义为字符串—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート, T; g/ V4 F" O
--  ***************************************************************************************************** --
- o4 w" J7 h& y2 P: C# R' W6 g( pDelegate.RegDelTalkEvent("zlTalkEvent");--全局注册对话事件函数魔力私服,最新魔力宝贝私服技术交流- @' z6 `2 K0 V* H) f

, N4 O, S9 u" B9 g- a5 H0 y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートfunction zlTalkEvent(player,msg,color,range,size)--调用对话事件函数的返回函数
7 r4 s  x9 a: ]$ b妖城在线论坛        if(msg==zhengli) then--检测MSG=整理指令时则执行下述函数块内容—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' }) }* j# r' T) l) c- }
                NLG.SortItem(player)--调用GA封装的整理道具函数,其中NLG.SortItem(player)的(player)值由function zlTalkEvent(player,msg,color,range,size)这个返回函数赋予魔力私服,最新魔力宝贝私服技术交流( G2 t" z* c  S3 d; u2 ?) }2 K$ a
        end—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート1 i" I( Y$ C2 ?- j) M% ~- c
end
+ }4 ~9 C* M) T. M$ o. t+ @—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
$ }% @& p6 @1 g2 I' e* |; e魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表上述实例中,如果单独拿NLG.SortItem(player)出来,(player)的值会是nil,是没有任何数值的,它是一个标准的设置函数,需要从获取函数中获得形参的实值(魔力lua的函数的形参分为2种,获取函数(get)和设置函数(set))- H8 b& L! g# J, n
教学用指令整理道具.7z (453 Bytes) 7 H6 G& N" Q9 n6 J# r/ {+ e6 w/ z( v
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート3 h% g* \9 A2 j( x% e# ]
[ 本帖最后由 王宫召唤士盖兹 于 2019-5-31 02:07 编辑 ]

TOP

引用:
原帖由 staki 于 2019-8-3 03:12 发表 妖城在线论坛. E+ L- L3 d  Q0 U. g; {
建议出个GP的 GA好像在这身败名裂了
5 Q  x3 a, M" _$ u9 z5 g- N6 ?0 v$ h7 y妖城在线论坛魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表! |) f" P* r6 C1 j9 o, X
GP没2键端无法操作,只是学lua基础都一样的
% O. v+ O5 E; A: y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート 我不更新就是涉及的具体操作太多,通用性不高,没有更新的必要9 `- A9 j/ d: j' s" l, ^( ]7 Q
我本身秉持授人与鱼不如授人于渔的想法,才写了这个帖子
$ u7 n" Z- D0 j  z. s妖城在线论坛能看懂本帖之前写的内容,足够了
" \; s/ v& ^" F% z0 r魔力私服,最新魔力宝贝私服技术交流
4 K. i7 L* b2 d3 m, B7 k备注:妖城在线论坛* A5 N8 h" R1 B" f# j
既然回帖了,就再讲一下魔力lua的基础运行流程:
; H+ j4 ?* o) E8 E- Z" [# l妖城在线论坛1:GMSV启动时加载GMSV内置的魔力lua模块bbs.mocwww.com; |' b( j0 B9 t: T% w5 Y% y8 U2 {
2:GMSV自动加载初始lua-init.lua   该lua是由GMSV自动加载的(无需写dofile加载)bbs.mocwww.com4 Q7 z  R4 q3 T
3:init.lua 加载运行内部代码    此时会有大量dofile,一般是加载基础框架相关的东西 有兴趣可以参考init.lua内部代码,包括框架全局注册这类关键脚本,都是此时加载的bbs.mocwww.com1 W% W9 Z* ^# s$ U/ W
4:init.lua中有一行dofile(Lua_Path.."Config.lua"),加载Cofig.lua魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表8 Y( ]  K. P8 p1 z
5:Cofig.lua加载各种Module文件夹内的lua  (至于Cofig.lua内用于加载lua的Loadlua函数究竟是GA哪个脚本内写的,可以给大家当成一个最后的课后考题,找出他,能找到他,我相信你就会发现魔力LUA的运行逻辑是如此简单)
6 W( i/ Z7 J6 x$ B& B魔力私服,最新魔力宝贝私服技术交流提示:GP的Loadlua函数在  lua\include\Global.lua 这个文件内魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表. ]! k! j6 H8 O4 r# k
提示2:GA的Loadlua函数在 lua\System某个文件夹内—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート$ ?, f' ~5 }4 v0 y3 c

- ?! `" ]9 y8 a2 y  T3 Y: l. d魔力私服,最新魔力宝贝私服技术交流[ 本帖最后由 王宫召唤士盖兹 于 2019-8-3 12:59 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-20 20:44 发表 妖城在线论坛6 E) x7 S. y; i" s7 c5 T
我看了在线修改人物名字的lua ,其实SQL是改数据库的,但是真正起作用的是最后两行,直接改对象的名字。bbs.mocwww.com7 D, O: \( H; ]$ x1 {

$ |9 E8 x9 l! L/ lbbs.mocwww.com                local query = "Update tbl_character set `Name` = '".._data.."' Where Cdkey = '"..Char.GetData(_Pl ...
- K0 s( H9 G0 d' R魔力私服,最新魔力宝贝私服技术交流魔力私服,最新魔力宝贝私服技术交流8 H+ U0 Y4 ^# t( Y. ~
lua修改玩家内存只是修改了GMSV内的内存,在玩家客户端内并没有显示,因此需要用UpChar函数更新玩家客户端显示魔力私服,最新魔力宝贝私服技术交流- G; y9 m4 O8 D
同理还有NPC创建时候使用的UpChar函数,这个函数如果是由全局注册init来触发的,会导致你即使重载脚本,NPC也加载不出来,必须重启服务器(重新加载init)才行魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表) t9 u5 u5 L" u; @9 ]. y- R
备注:创建NPC也可以用其他函数或者if,GE不要使用if,会有奇怪的错误
( S+ B% \' D8 b1 d魔力私服,最新魔力宝贝私服技术交流: ?8 V7 Y" J! p3 l% T1 m
GE的教程和GA是互通的,他们只不过是文件夹不一样,文件名不一样,函数名不一样,但运行逻辑都是一样的,只是WIN7和WIN10的区别而已,只要能看懂本帖说的GA的内容,GE和GP自然就懂了
9 D. ?) d* {) @0 b—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
* y, t) r  W! o  h2 Y) n[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 11:22 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-30 15:47 发表 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート4 B3 s6 w6 f- S, _0 _2 B, T/ Y
我知道更新完了,要UpChar函数刷新,但是现在遇到的问题,我想用sql函数直接改item表里面的  宠物卡  的字段,
! I) Y: [3 S/ ^. V; A5 Q) [3 N魔力私服,最新魔力宝贝私服技术交流是直接update操作数据库,运行后看数据库也更新成功了,但是人物一退出又会重新保存未修改前的数据了。 ...
1 ?; Y7 T. c: |6 A9 E) K魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表bbs.mocwww.com+ w) L7 \) j6 o7 Y
更新道具数据是另一个函数Item.UpItem,不是NLG.UpChar妖城在线论坛. o% j; w. P  y! Z4 B
http://api.cgex.in/index.html#Item_UpItem妖城在线论坛, ~1 b, q6 M( K" L% t$ }; }: X4 b
bbs.mocwww.com: `- V1 |) ?, @# W4 P9 E
备注:还有更新宠物信息,并对玩家客户端进行更新的Pet.UpPet(Player,Pos)
# e  f  f0 L0 n3 G) h/ v! O( ?* o魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
# s1 v2 b/ s3 d! rbbs.mocwww.com[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 16:05 编辑 ]

TOP

 19 12
发新话题