孔7082 发表于 2023-10-24 01:53:00

[HERO引擎]增加支持Lua脚本

增加支持Lua脚本


功能:增加支持Lua脚本

Lua脚本用法:

       与之前所有NPC的脚本文件所放文件位置一样,原本脚本文件“NPC名字-地图编号.TXT”,用LUA就是“NPC名字-地图编号.LUA”。



注意: 当前M2脚本读取的方式是优先读取原本TXT脚本,在TXT脚本不存在时候去读取LUA脚本,如两种类型脚本都不存在则跳过此NPC脚本加载





Lua脚本例子: NPC名字-地图编号.LUA



   functionmain()

   localPlayer= GETOBJECT("PLAYER")

   NpcSay(Player.Name.." ,Hello,我是用LUA做成的NPC!\\<                              

倚天一出,谁与争锋!/AUTOCOLOR=253> \\<开始任务/@KAI>");                           

   //NPC对话内容

   end;



function KAI()      

   If Player.Level > 50 then                                                   

    //跳转的函数

   SetNewItemValue("1 1 + 5");

   SendMsg("5 你的武器增加了5点伤害!");

   end;

end;



function getIntPart(x)

   if x <= 0 then

      return math.ceil(x);

   end



      if math.ceil(x) == x then

      x = math.ceil(x);

   else

      x = math.ceil(x) - 1;

   end

   return x;

end






说明:

      遍现在NPC对话显示的内容需要用函数NpcSay来输出,对话内容支持以前脚本的字体、颜色、格式设置。

      同以前一样,函数跳转(脚本跳转)可用"@XXX"来跳转,需和要跳转的函数名完全一致,包括大小写。因为LUA脚本是严格区分大小写的。

      脚本执行函数(原#ACT)下的所有函数如带有参数,参数格式同原本脚本参数格式一致,如示例编写。

      LUA脚本的字符串连接符为“..”



LUA脚本的好处:

如果脚本编写者需要在脚本使用变量,类,函数,不需要再在M2上编写,

可以直接用脚本写出需要的东西,然后交由M2Q去解释处理就可以了



获取属性参考

Player.Name
人名

Player.Level
等级

Player.HP
当前血量

Player.MaxHP
血量上限

Player.MP
当前蓝量

Player.MaxMP
蓝量上限

Player.DC
攻击力

Player.MC
魔法力

Player.SC
道术力

Player.AC
防御力

Player.MAC
魔法防御力

Player.Weight
负重

Player.WearWeight
穿戴重量

Player.HandWeight
腕力

Player.CreditPoint
荣誉

Player.Gold
金币数量

Player.GameGold
元宝

Player.GameGlory
新荣誉

Player.nX
人物当前X坐标

Player.nY
人物当前Y坐标

Player.MapName
人物当前地图




一、概述:

    M2Server 已(初步)加入了对Lua 脚本的支持,而需注意的是,M2Server所支持的 Lua 格式脚本,

    较之官方的 Lua语法略有变化,如调经验指令CHANGEEXP,可能会带有2个参数,

    老脚本的写法类似“CHANGEEXP + 100”,按 Lua 的官方写法,应是CHANGEEXP(“+”, “100”),

    而 M2Server 作了变通,GM可以更熟悉的方式来编写脚本CHANGEEXP("+ 100"),至于参数解析等工作,

    全交由M2Server处理,GM 无需考虑,只需熟悉这种简单的语法即可。



二、新脚本示例:



function      main()



local      role      =      GETOBJECT("PLAYER")



      NPCSAY(role.Name.."("..role.Level.."),<你好/AUTOCOLOR=253>\\      <开始任务/@kai>

<check调试/@chkdbg>\\")      

end



function      kai()      



      CHANGEEXP("+      100")



SENDMSG("0      你的经验增加了100点!")



end

function      chkdbg()

      if    CHECKBAGSIZE("35")      then

            NPCSAY("你的背包至少有      35      个空位!\\      \\<返回/@main>")

else

      NPCSAY("你的背包已没有      35      个空位\\      \\<返回/@main>")



end



end




三、新脚本语法规则说明:



正如上文示例所示,新脚本的语法有需注意的地方,如下:



1)、每个新脚本文件(通用的库文件除外),都应有main入口函数;

2)、新脚本系统预定义及处理了数个“变量”和函数,它们皆大写

3)、调用预定义的函数时(如CHANGEEXP),所有参数以字符串形式书写传递(如"+      100"); …

N)、待补充。




四、预定义变量:(亦即由M2Server导出的可在脚本中引用的变量)列表



1)、PLAYER,代表当前的角色对象,应以类似role = GETOBJECT("PLAYER")的形式获取之;

2)、NPC,代表当前的NPC对象,应以类似npc= GETOBJECT("NPC ")的形式获取之;




五、预定义函数:(亦即由M2Server导出的可在脚本中引用的函数)列表



1)、GETOBJECT,获取某个变量,已支持获取当前角色及NPC对象(如上);

2)、NPCSAY

3)、SENDMSG

4)、所有支持的老脚本指令




六、角色属性列表



M2Server导出了一些可在脚本中以类似“role.XX”的形式引用的角色属性,以供方便快捷的读取角色信息,列表如下:



1)、Name
c7)、DC
13)、MaxWeight

2)、Level
8)、MC
14)、WearWeight

3)、HP
9)、SC
15)、MaxWearWeight

4)、MaxHP
10)、AC
16)、HandWeight

5)、MP
11)、MAC
17)、MaxHandWeight

6)、MaxMP
12)、Weight
18)、CreditPoint…等等。

注意:应先“role      =      GETOBJECT("PLAYER")”获取role对象,才可引用role的诸属性。

青妖专属 发表于 2023-11-20 16:50:53

感谢站长分享传奇教程,让我学习到很多知识。

龙牌沉默 发表于 2023-11-20 18:21:33

这个帖子不回对不起自己!

金币合击 发表于 2023-11-20 18:23:24

新手上路不用愁,碰到传奇架设问题可以来这搜索。

专属单职业 发表于 2023-11-20 18:49:14

新手上路不用愁,碰到传奇架设问题可以来这搜索。

终极吾辈 发表于 2023-11-20 19:08:57

感谢楼主提供这么好的论坛!

烈火合击 发表于 2023-11-20 22:18:06

感谢楼主提供这么好的论坛!

牛家村专属 发表于 2023-11-21 00:22:48

在这里可以学到很多传奇一条龙开区时遇到的问题。

风云合击 发表于 2023-11-21 02:02:12

感谢楼主提供这么好的论坛!

多情公益 发表于 2023-11-21 08:12:15

这个帖子不回对不起自己!
页: [1] 2 3 4
查看完整版本: 增加支持Lua脚本