19 12
发新话题
打印

[讨论] 初级魔力lua解析

6.如何创立MSG指令(例:/1 /2)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 {1 d# U% u) i1 W0 R8 G9 B
今天先来讲点简单的知识,顺便复习一下旧知识点中比较重要的获取(get)函数和设置(set)函数的区别,本帖停更也是由于深感自身讲的知识点先后顺序有些问题—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 z3 E% z; z, J+ }2 t
魔力lua包含了三大块知识点魔力私服,最新魔力宝贝私服技术交流4 W9 t: `  H. _) U6 G; {/ i( Y% g
1:lua编程基础知识(不需要太深入的lua技术即可)bbs.mocwww.com# }4 {- |2 l$ T
2:mysql基础知识(不需要太深入的mysql技术,但要会节省资源和防止疯狂读写)bbs.mocwww.com' \$ {) N+ _* x! t+ F" q! n( k
3:魔力封包知识(高端lua开发必备)' |4 T) [  D( ]0 H0 n6 V* i5 |0 y

# U! U* d* b( z! G; V8 lbbs.mocwww.com本帖只讲述lua在魔力中是如何运行的,这三块知识点都需要你们自己去学习bbs.mocwww.com! e0 z3 u4 M; q! m: w# p

/ _5 s4 x+ p" Q: S0 ]—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート下面我们进入今天的教学魔力私服,最新魔力宝贝私服技术交流9 W0 M4 F/ C+ \" W
lua的远程指令主要依靠NL.RegTalkEvent(Dofile, FuncName)达成
* E( G" w5 N  w% [4 X2 J- h: `魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表该函数的作用是[创建对话事件],它可以全局框架注册魔力私服,最新魔力宝贝私服技术交流1 a. R/ F4 Q$ A! v
一般使用Delegate.RegDelTalkEvent("XXX")创建全局对话事件—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート: o4 H& R6 Q0 l0 o$ U( ?
NL.RegTalkEvent的返回函数明细:
( g* I" W# y' C- xbbs.mocwww.comTalkEventCallBack(CharIndex, Msg, Color, Range, Size)bbs.mocwww.com3 K+ w9 z' g" L; b  k5 [
参数说明% T8 [( ~! u! B0 O4 G3 K* m
CharIndex: 数值型 响应事件的对象index,该值由Lua引擎传递给本函数。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( Q0 G& Z# s9 I! M+ H6 c
Msg: 文本型 话的内容,该值由Lua引擎传递给本函数。
' m3 A  t/ F1 c7 V+ RColor: 数值型 说话颜色,该值由Lua引擎传递给本函数。
% P0 `5 X" E6 L2 P- i8 _4 @bbs.mocwww.comRange: 数值型 说话音量(范围),该值由Lua引擎传递给本函数。魔力私服,最新魔力宝贝私服技术交流8 c( }, x9 T0 n- ~  l6 w
Size: 数值型 说话字体大小,该值由Lua引擎传递给本函数。
0 X" J$ c& S( k3 l; v# X& N* l1 r) nbbs.mocwww.com返回值bbs.mocwww.com2 c1 G0 X- s8 i3 @& V3 z2 g; ^2 j
返回0拦截说话内容,返回1正常发送
. F2 h; h7 Q# h1 G1 e7 ~4 j, p魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表妖城在线论坛" w+ G! w) r; R! M
小知识复习:当形参由lua引擎传递一个可用实参时,你不需要填写形参具体值,并且可以传递给其他函数的空白形参,让其拥有实际数值,传递时候要注意传参的类型,空白形参的函数中,空白形参若只能填写数值型魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表. z/ @1 O( p7 J
传递过来的数值就必须是数值型(这种情况可以先设置一个变量   a=tonumber(lua引擎传递的字符串型传参) 然后把变量a填入空白形参的函数形参中)妖城在线论坛9 N  T+ q' N  T) P" k  F8 f
bbs.mocwww.com- J2 K5 J6 e' @* b, l, m
文字太过干涩,下面用实例解释今天的知识点
& g4 ]1 m. ~) T7 Y6 N8 N该例实现了用指令整理身上的道具的功能魔力私服,最新魔力宝贝私服技术交流& b; t) I" p) u5 }& Y7 m, o0 d: j& {
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表) y4 t$ M- D) g0 I5 ~6 e8 Q6 w
local zhengli = "/zl"--整理指令,此处需要""把内容定义为字符串
0 @: E9 Q6 `( {4 ~8 g魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表--  ***************************************************************************************************** --bbs.mocwww.com6 ~7 u+ t, e0 a$ m3 y
Delegate.RegDelTalkEvent("zlTalkEvent");--全局注册对话事件函数bbs.mocwww.com! D. r8 j3 r/ Z4 B

. e9 _$ H: A! T7 o) zfunction zlTalkEvent(player,msg,color,range,size)--调用对话事件函数的返回函数妖城在线论坛% x' r# A9 s9 @% m/ D: T9 j
        if(msg==zhengli) then--检测MSG=整理指令时则执行下述函数块内容—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート& y0 ~% H( O- z1 _- A
                NLG.SortItem(player)--调用GA封装的整理道具函数,其中NLG.SortItem(player)的(player)值由function zlTalkEvent(player,msg,color,range,size)这个返回函数赋予魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 Y/ U. v2 ^5 E2 n' m7 H: C
        end—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート: N- }! w9 _6 O7 m5 t
end妖城在线论坛, ]7 @" o9 x* c6 y5 r' E
bbs.mocwww.com% j- v- ^3 ]' I" r  v# ^1 L
上述实例中,如果单独拿NLG.SortItem(player)出来,(player)的值会是nil,是没有任何数值的,它是一个标准的设置函数,需要从获取函数中获得形参的实值(魔力lua的函数的形参分为2种,获取函数(get)和设置函数(set))魔力私服,最新魔力宝贝私服技术交流' c- U% C1 K: T3 d! |6 w
教学用指令整理道具.7z (453 Bytes)
* B7 G9 i: B! g1 H1 p妖城在线论坛—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート1 L: p: O7 m. h5 s1 D
[ 本帖最后由 王宫召唤士盖兹 于 2019-5-31 02:07 编辑 ]

TOP

引用:
原帖由 staki 于 2019-8-3 03:12 发表 妖城在线论坛: v3 j5 a- {2 l( T8 _# M9 q3 b
建议出个GP的 GA好像在这身败名裂了
4 `9 Y) ~" u9 ~8 L1 L
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表- Q7 P) X7 X: v) x; n/ C& x
GP没2键端无法操作,只是学lua基础都一样的
5 Q% ~! H7 k7 e; q. Y8 `; A& _妖城在线论坛 我不更新就是涉及的具体操作太多,通用性不高,没有更新的必要魔力私服,最新魔力宝贝私服技术交流! n1 `5 g. m) f: j$ g
我本身秉持授人与鱼不如授人于渔的想法,才写了这个帖子% C5 t& N  e! p5 p6 N
能看懂本帖之前写的内容,足够了
  j( a6 V7 X# y% F: t—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
8 @" F6 D! j/ c  A: g* `魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表备注:
# Y& ^7 b% d. s* O0 ]# g6 [+ {( j妖城在线论坛既然回帖了,就再讲一下魔力lua的基础运行流程:
& s0 |, \; ]1 I6 ?$ ]1 M  k' x1:GMSV启动时加载GMSV内置的魔力lua模块魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表4 g1 Y2 }: p3 W$ X# U
2:GMSV自动加载初始lua-init.lua   该lua是由GMSV自动加载的(无需写dofile加载)
* ~7 l+ r% a/ ^2 K8 t2 ^/ B妖城在线论坛3:init.lua 加载运行内部代码    此时会有大量dofile,一般是加载基础框架相关的东西 有兴趣可以参考init.lua内部代码,包括框架全局注册这类关键脚本,都是此时加载的
  i& t' R9 z3 N( H4:init.lua中有一行dofile(Lua_Path.."Config.lua"),加载Cofig.lua
& c! {: x; a8 _  K妖城在线论坛5:Cofig.lua加载各种Module文件夹内的lua  (至于Cofig.lua内用于加载lua的Loadlua函数究竟是GA哪个脚本内写的,可以给大家当成一个最后的课后考题,找出他,能找到他,我相信你就会发现魔力LUA的运行逻辑是如此简单)
- J+ s6 S: R$ x$ F5 s' d' e1 j—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート提示:GP的Loadlua函数在  lua\include\Global.lua 这个文件内
- s2 \7 o; H- A) r/ ?0 Vbbs.mocwww.com提示2:GA的Loadlua函数在 lua\System某个文件夹内
3 V6 U. a2 k# @3 P5 o8 [bbs.mocwww.com魔力私服,最新魔力宝贝私服技术交流  a) N, ]$ S9 n2 f# b
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-3 12:59 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-20 20:44 发表 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート: b! U0 Z* b4 m& W2 n
我看了在线修改人物名字的lua ,其实SQL是改数据库的,但是真正起作用的是最后两行,直接改对象的名字。
5 a( ~* L( y" y, \1 q( i; o: \魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表# S0 s9 h! n6 ~7 k
                local query = "Update tbl_character set `Name` = '".._data.."' Where Cdkey = '"..Char.GetData(_Pl ...
0 Y$ ?: i4 Q2 \: S, `0 r( y' d
妖城在线论坛# u3 x: h9 z. K5 y1 H; ?
lua修改玩家内存只是修改了GMSV内的内存,在玩家客户端内并没有显示,因此需要用UpChar函数更新玩家客户端显示妖城在线论坛& ~# c0 f- X8 {& \+ w8 I! _) z% a
同理还有NPC创建时候使用的UpChar函数,这个函数如果是由全局注册init来触发的,会导致你即使重载脚本,NPC也加载不出来,必须重启服务器(重新加载init)才行bbs.mocwww.com' Q6 U& J0 Y2 X9 F2 D+ `8 [, n
备注:创建NPC也可以用其他函数或者if,GE不要使用if,会有奇怪的错误
( c* \) W3 r. c. i—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
& f7 A7 O: @  |( T魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表GE的教程和GA是互通的,他们只不过是文件夹不一样,文件名不一样,函数名不一样,但运行逻辑都是一样的,只是WIN7和WIN10的区别而已,只要能看懂本帖说的GA的内容,GE和GP自然就懂了魔力私服,最新魔力宝贝私服技术交流9 V. V1 g5 N7 z6 {$ l
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表& D* v9 C2 ]( _% A; u
[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 11:22 编辑 ]

TOP

引用:
原帖由 rolser 于 2019-8-30 15:47 发表 妖城在线论坛( W( C' Z4 g, V, p% L+ B( N
我知道更新完了,要UpChar函数刷新,但是现在遇到的问题,我想用sql函数直接改item表里面的  宠物卡  的字段,
2 K. ]4 _1 v! O" H6 F妖城在线论坛是直接update操作数据库,运行后看数据库也更新成功了,但是人物一退出又会重新保存未修改前的数据了。 ...
4 [) q2 }5 ?+ _
% i8 A) t, y5 J5 O
更新道具数据是另一个函数Item.UpItem,不是NLG.UpChar
+ T, r: C( @" ^7 x  p1 p+ t) [* Ybbs.mocwww.comhttp://api.cgex.in/index.html#Item_UpItem
5 u5 w- k( c  [$ y魔力私服,最新魔力宝贝私服技术交流
5 h; ?- p0 d  H; `8 Q* n魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表备注:还有更新宠物信息,并对玩家客户端进行更新的Pet.UpPet(Player,Pos)
! m8 H0 o# J8 W. F
5 M5 {* K& {: D[ 本帖最后由 王宫召唤士盖兹 于 2019-8-30 16:05 编辑 ]

TOP

 19 12
发新话题