19 12
发新话题
打印

[讨论] 初级魔力lua解析

6.如何创立MSG指令(例:/1 /2)妖城在线论坛; e& t) ?5 g& w$ r/ m% U5 o
今天先来讲点简单的知识,顺便复习一下旧知识点中比较重要的获取(get)函数和设置(set)函数的区别,本帖停更也是由于深感自身讲的知识点先后顺序有些问题
" ~0 z0 x# o  M5 t+ i% L. `# t& g魔力私服,最新魔力宝贝私服技术交流魔力lua包含了三大块知识点
9 d) |. I! w- H$ z2 t# X) C1:lua编程基础知识(不需要太深入的lua技术即可)
8 D  a& o3 a) Q" ]$ n1 |0 Q2 }魔力私服,最新魔力宝贝私服技术交流2:mysql基础知识(不需要太深入的mysql技术,但要会节省资源和防止疯狂读写)' a, }! o8 R* |' W
3:魔力封包知识(高端lua开发必备)
" Q$ Q" d! B- N7 ^* J# A* e—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート. z' b/ V- ?1 ?& k+ V: J; v' p
本帖只讲述lua在魔力中是如何运行的,这三块知识点都需要你们自己去学习
8 R) Q4 {) s7 l—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート妖城在线论坛: K6 o; L. Y. @! s2 u) d
下面我们进入今天的教学
# b& Q) P9 m4 ]% [7 M& mlua的远程指令主要依靠NL.RegTalkEvent(Dofile, FuncName)达成妖城在线论坛9 u" g6 S2 ]! H% V* s8 K
该函数的作用是[创建对话事件],它可以全局框架注册
# V+ r1 h% r9 i8 B6 ~0 j妖城在线论坛一般使用Delegate.RegDelTalkEvent("XXX")创建全局对话事件妖城在线论坛$ v5 c; ~* Z2 c1 }
NL.RegTalkEvent的返回函数明细:
) m# s1 }. V8 R, M; y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートTalkEventCallBack(CharIndex, Msg, Color, Range, Size)妖城在线论坛, }( {7 S3 B% |9 l
参数说明bbs.mocwww.com% \: D& o9 i' t" o
CharIndex: 数值型 响应事件的对象index,该值由Lua引擎传递给本函数。
9 c$ S$ n9 v. o8 Y魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Msg: 文本型 话的内容,该值由Lua引擎传递给本函数。
0 J% U, Z6 D4 f9 Sbbs.mocwww.comColor: 数值型 说话颜色,该值由Lua引擎传递给本函数。
6 I9 S7 V/ U6 L" S2 o  l2 s4 {妖城在线论坛Range: 数值型 说话音量(范围),该值由Lua引擎传递给本函数。
2 n- U8 b  Y- C  K& T魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Size: 数值型 说话字体大小,该值由Lua引擎传递给本函数。魔力私服,最新魔力宝贝私服技术交流3 H  u& N: O& Z& {& ?. d
返回值
. D3 _) C0 V) t+ ?1 z—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート返回0拦截说话内容,返回1正常发送—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( U% S6 g* g2 K! m* u! P2 Y7 _

, R4 \8 E- Z; v, I2 a0 h魔力私服,最新魔力宝贝私服技术交流小知识复习:当形参由lua引擎传递一个可用实参时,你不需要填写形参具体值,并且可以传递给其他函数的空白形参,让其拥有实际数值,传递时候要注意传参的类型,空白形参的函数中,空白形参若只能填写数值型魔力私服,最新魔力宝贝私服技术交流0 T3 D  s6 E" G6 C6 l5 A
传递过来的数值就必须是数值型(这种情况可以先设置一个变量   a=tonumber(lua引擎传递的字符串型传参) 然后把变量a填入空白形参的函数形参中)
4 _; c9 [- `4 r# Q3 u& r. `8 k妖城在线论坛
; E" \- o8 J  z2 X7 ?3 b魔力私服,最新魔力宝贝私服技术交流文字太过干涩,下面用实例解释今天的知识点
- w5 J4 C8 o/ Gbbs.mocwww.com该例实现了用指令整理身上的道具的功能
' V" E  T! y# n8 B+ N) j妖城在线论坛; Q) o  O% d1 r
local zhengli = "/zl"--整理指令,此处需要""把内容定义为字符串魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 {" v; E; I$ m0 Z
--  ***************************************************************************************************** --
6 u* b- Y( `* g* [) h3 ~7 @魔力私服,最新魔力宝贝私服技术交流Delegate.RegDelTalkEvent("zlTalkEvent");--全局注册对话事件函数
: d. }  k2 q/ O! Y1 Zbbs.mocwww.com
: n  g. S; \" G& q" |8 a" F, Q魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表function zlTalkEvent(player,msg,color,range,size)--调用对话事件函数的返回函数
0 a. ]$ C# E: F, X. Z/ h# M魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表        if(msg==zhengli) then--检测MSG=整理指令时则执行下述函数块内容—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート2 f5 M7 x( Q, O
                NLG.SortItem(player)--调用GA封装的整理道具函数,其中NLG.SortItem(player)的(player)值由function zlTalkEvent(player,msg,color,range,size)这个返回函数赋予
) x  R& R4 q$ A魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表        end魔力私服,最新魔力宝贝私服技术交流. e( r/ T8 \/ n. I% P; @0 G
end
' l" f  e% W# }, |—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート0 I  J1 p3 ~; I: O4 i
上述实例中,如果单独拿NLG.SortItem(player)出来,(player)的值会是nil,是没有任何数值的,它是一个标准的设置函数,需要从获取函数中获得形参的实值(魔力lua的函数的形参分为2种,获取函数(get)和设置函数(set))
  d: L% ?$ V! H! J( P 教学用指令整理道具.7z (453 Bytes)
, }& H9 @0 m' D2 p" V魔力私服,最新魔力宝贝私服技术交流
1 I& A5 a% v3 K( p, o) E魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表[ 本帖最后由 王宫召唤士盖兹 于 2019-5-31 02:07 编辑 ]

TOP

引用:
原帖由 staki 于 2019-8-3 03:12 发表 $ [! Y) Q5 r: W# i: S
建议出个GP的 GA好像在这身败名裂了
魔力私服,最新魔力宝贝私服技术交流4 P. ~2 j- g" z! ]

$ f+ M! [% I- u4 I: M2 Y魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表GP没2键端无法操作,只是学lua基础都一样的
- k" E% p8 A" c, [! h% z4 n—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート 我不更新就是涉及的具体操作太多,通用性不高,没有更新的必要魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表$ d# V6 A, q% n" F- a) \
我本身秉持授人与鱼不如授人于渔的想法,才写了这个帖子魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表- t8 Y( V5 i% ^- Q; F  C  i
能看懂本帖之前写的内容,足够了妖城在线论坛4 k+ }! V6 A0 a* M2 J# K5 W

8 m# T' |/ N5 s3 C6 d3 ^+ C' u3 v魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表备注:5 P7 a% }: }3 X0 v
既然回帖了,就再讲一下魔力lua的基础运行流程:bbs.mocwww.com/ ^  Y) u+ o$ [  m. `
1:GMSV启动时加载GMSV内置的魔力lua模块
* D' S3 V4 `1 ^- T魔力私服,最新魔力宝贝私服技术交流2:GMSV自动加载初始lua-init.lua   该lua是由GMSV自动加载的(无需写dofile加载)
5 f8 k* m, T) s. {% w/ ]' u: C3:init.lua 加载运行内部代码    此时会有大量dofile,一般是加载基础框架相关的东西 有兴趣可以参考init.lua内部代码,包括框架全局注册这类关键脚本,都是此时加载的
: Y/ g( u1 Z6 ], T9 P9 g% N% X4:init.lua中有一行dofile(Lua_Path.."Config.lua"),加载Cofig.lua魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表( Z0 X2 c/ f0 _( }
5:Cofig.lua加载各种Module文件夹内的lua  (至于Cofig.lua内用于加载lua的Loadlua函数究竟是GA哪个脚本内写的,可以给大家当成一个最后的课后考题,找出他,能找到他,我相信你就会发现魔力LUA的运行逻辑是如此简单)$ s0 O3 W; A: m$ Z& E. m, K
提示:GP的Loadlua函数在  lua\include\Global.lua 这个文件内
! X1 @& O5 _+ [bbs.mocwww.com提示2:GA的Loadlua函数在 lua\System某个文件夹内bbs.mocwww.com; ^6 X7 z/ Q" ~) n) M4 v  P/ @
- b/ X. ]& K8 p* h* o
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-3 12:59 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-20 20:44 发表
5 P( Q: h" s$ T8 N/ `  v9 A: B" \妖城在线论坛我看了在线修改人物名字的lua ,其实SQL是改数据库的,但是真正起作用的是最后两行,直接改对象的名字。
( E  i- d) f  ~) l6 w—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
9 C# G) J+ `! q; h" \$ y7 Y7 cbbs.mocwww.com                local query = "Update tbl_character set `Name` = '".._data.."' Where Cdkey = '"..Char.GetData(_Pl ...
妖城在线论坛" S' p* @4 I( |, K: P
3 F6 ^5 ]" P, ~' i( s9 K
lua修改玩家内存只是修改了GMSV内的内存,在玩家客户端内并没有显示,因此需要用UpChar函数更新玩家客户端显示魔力私服,最新魔力宝贝私服技术交流8 f2 w5 S; P" W8 u5 `
同理还有NPC创建时候使用的UpChar函数,这个函数如果是由全局注册init来触发的,会导致你即使重载脚本,NPC也加载不出来,必须重启服务器(重新加载init)才行—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート; Q; Q* x/ H- ~- _. z( _
备注:创建NPC也可以用其他函数或者if,GE不要使用if,会有奇怪的错误—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート& T3 j4 R9 _+ A0 }+ s, Z$ \

8 [8 z4 J" z) l1 q% b, N—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートGE的教程和GA是互通的,他们只不过是文件夹不一样,文件名不一样,函数名不一样,但运行逻辑都是一样的,只是WIN7和WIN10的区别而已,只要能看懂本帖说的GA的内容,GE和GP自然就懂了—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' e6 I+ i! M$ `
bbs.mocwww.com3 o7 B7 o; e' G: _
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 11:22 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-30 15:47 发表 魔力私服,最新魔力宝贝私服技术交流/ x6 T7 j8 T+ x$ U8 P$ _& p, C! u
我知道更新完了,要UpChar函数刷新,但是现在遇到的问题,我想用sql函数直接改item表里面的  宠物卡  的字段,
; O" M6 @+ H' D1 v: l( u是直接update操作数据库,运行后看数据库也更新成功了,但是人物一退出又会重新保存未修改前的数据了。 ...
# D- u1 d' M& V! X3 {" s# v魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表$ `: w' R% R5 a; @1 I
更新道具数据是另一个函数Item.UpItem,不是NLG.UpChar
: N$ G/ s' _6 o, A9 z% O: ]http://api.cgex.in/index.html#Item_UpItem
1 P! n. T% k9 o& {  s. r$ }3 G5 a魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力私服,最新魔力宝贝私服技术交流$ [! V) A# f9 r+ c% o
备注:还有更新宠物信息,并对玩家客户端进行更新的Pet.UpPet(Player,Pos)
5 @6 w  x7 z- Z4 D; v" }/ s—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート妖城在线论坛/ H. Q3 V9 Y* w3 I
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 16:05 编辑 ]

TOP

 19 12
发新话题