发新话题
打印

[魔力私服分享] GMSV LUA脚本解析器 功能预览1 - NPC循环事件

GMSV LUA脚本解析器 功能预览1 - NPC循环事件

经过长达一年的测试,gmsvplus正式问世了咯,详情请见http://bbs.mocwww.com/viewthread.php?tid=27866&extra=page%3D1
8 _; ~# H4 M) W1 b, K妖城在线论坛—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート! u9 Q* Z/ L+ \! z" C* m
LUA是一款轻量级的脚本语言,很多目前市面上的游戏都有引用这款脚本语言,比如魔兽世界的客户端插件等魔力私服,最新魔力宝贝私服技术交流; ~) z' |3 @- _6 {, n+ `2 h0 V
本次的GMSV LUA脚本解析器,则是将LUA语言直接植入了GMSV中,让GMSV除了有自身的脚本功能外,还能增加更多的扩展性功能2 ^: \- Z6 t, Q1 ~  ]
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 y0 ~( J. V! z: o
本次展示的功能是 NPC的循环事件,展示的方式是 NPC的随机走动
( M# U( c) [! c5 o3 e用户在gmsv的目录下新建两个文件
' W1 I1 c. s0 j# m6 v# s1. hello.lua( W% |0 d# A/ a$ Z! f
这个文件是lua脚本引擎的初始化脚本,内容如下
复制内容到剪贴板
代码:
--生成NPC的函数
function GMSV_NPC_Init()
        if (TestNpc_index == nil) then        --如果NPC没有被生成过 则进行生成
                --创建NPC 第一个参数是 TestNpc_Init函数 所在的文件 第二个参数是NPC初始化时候会调用的函数
                TestNpc_index = NL.CreateNpc("testnpc.lua", "TestNpc_Init");
        end
        --创建成功后,对NPC进行一些初始化操作
        Char.SetData(TestNpc_index,%对象_形象%,105508);        --设置NPC的形象为105508
        Char.SetData(TestNpc_index ,%对象_原形%,105508);--同上
        Char.SetData(TestNpc_index ,%对象_MAP%,0);        --设置NPC的MAP ID为0
        Char.SetData(TestNpc_index ,%对象_地图%,1000);        --设置NPC的Floor ID为1000,即法兰城
        Char.SetData(TestNpc_index ,%对象_X%,72);        --设置NPC的X坐标为72
        Char.SetData(TestNpc_index ,%对象_Y%,88);        --设置NPC的Y坐标为88
        NLG.UpChar(TestNpc_index);                        --更新NPC的设置信息,并且发送给周围玩家
        --给NPC注册一个循环事件,循环调用TestNpc_Loop_Func函数,循环间隔为1000毫秒(1秒)
        if (Char.SetLoopEvent(nil, "TestNpc_Loop_Func", TestNpc_index, 1000) < 0) then
                print("TestNpc_Loop_Func 注册事件失败。");
        end
end

--调用生成NPC的函数
GMSV_NPC_Init();
2.testnpc.lua妖城在线论坛$ b6 b" R0 x: W5 H  B8 k
这个文件包含了几个npc的事件
复制内容到剪贴板
代码:
--NPC初始化的函数,不需要特别做说明,直接返回成功(true)既可
function TestNpc_Init( _MeIndex )
        return true;
end
--NPC的循环函数,即随机走路函数
function TestNpc_Loop_Func(_MeIndex)
        --定义一个随机数种子,这样取的随机数每次都会不一样
        math.randomseed(os.time());
        --取一个0-7的随机数,代表NPC移动的方向
        local dir= math.random(0, 7);
        --设置NPC状态为走路
        local walk = 1;
        NLG.SetAction(_MeIndex,walk);
        --让NPC走一步
        NLG.WalkMove(_MeIndex,dir);
        --获取当前NPC的新的坐标
        local x = Char.GetData(_MeIndex,%对象_X%);
        local y = Char.GetData(_MeIndex,%对象_Y%);
        --定义一个NPC的说话内容,汇报自己的位置
        local buf = "我目前的位置是["..x..","..y.."]哦."
        --让NPC把这句话告诉给所有玩家,-1表示对所有玩家,0,0表示字体和颜色,这里是普通字体和白色字
        NLG.TalkToCli(-1,_MeIndex,buf,0,0);
end
gmsv在启动过程中会自动执行这些脚本 不影响原本的NPC生成和触发
+ L7 \# z" H2 Q以下是上面的脚本的执行效果,即一个NPC每秒随机走一步,并且将坐标发送给所有玩家
  n( m' x4 S5 Q1 y' Dbbs.mocwww.com[flash]http://www.tudou.com/v/5prCZQXpips/&rpid=79180957/v.swf[/flash]bbs.mocwww.com2 H& L& ^2 L7 |7 S4 H" s/ C  m
妖城在线论坛  X* I% I. l) E4 G  T
[ 本帖最后由 freefs 于 2012-4-2 21:04 编辑 ]
本帖最近评分记录
魔力宝贝开发者论坛
http://www.cgdev.me/

TOP

引用:
原帖由 茶叶的茶 于 2011-4-26 10:26 发表 妖城在线论坛3 I1 i( w5 s& [" `- f- @$ [" w  J# _
一般人也不会用
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' Q) Y" o+ Y+ }9 S$ A) G
肯学习的就不算一般人
魔力宝贝开发者论坛
http://www.cgdev.me/

TOP

引用:
原帖由 亚亚 于 2011-4-26 13:44 发表
# Z7 p$ Z  M% e6 r" p, N如果把NPC名字放到头上,然后去掉NPC自己发送当前坐标的功能好像好一点.不知道能不能做到了.
魔力私服,最新魔力宝贝私服技术交流1 K, b: y8 r9 R# [! O/ d
名字放头上只需要把NPC的类型设置为1就行了
4 ?& L9 L3 W- C2 ~妖城在线论坛NLG.TalkToCli(-1,_MeIndex,buf,0,0);这句删了就不会发送坐标了
魔力宝贝开发者论坛
http://www.cgdev.me/

TOP

发新话题