[技术文章] 传奇GXXM2引擎LUA脚本程序代码的优势

[复制链接]
查看1942 | 回复1 | 2023-12-28 11:17:18 | 显示全部楼层 |阅读模式
GXX引擎 Lua脚本接口 >GXX引擎LUA脚本的优势优势:1、有别于其它引擎的LUA系统需要对NPC配置进行excel改造,GXX引擎LUA系统支持原始设计模式,GM学习成本低。
   2.png
  2、GXX引擎LUA系统支持混合编写。原生脚本和LUA脚本可在同一个txt文件中实现混编,简单逻辑可使用原生脚本,复杂逻辑可使用LUA高效实现。且两种类型的脚本可实现变量互通。

  3、GXX引擎LUA系统使用最新版本的LUA 5.4.4,处理效率较以往LUA版本提升了一个数量级(十倍)。

  4、GXX引擎LUA系统可对提供的对象任意挂接变量,变量可根据实际需要决定是否存盘。对变量的类型和数量不做限制。

  使用示例:;TXT脚本部分[@MAIN]#ACTOPENMERCHANTBIGDLG 62 1259 1 4 0 0 1 427 7 1#SAY\ \{狂暴系统:/SCOLOR=21}\{开启狂暴后,人物打怪伤害+50%,爆率+50%/SCOLOR=21}\{被玩家杀死后,属性消失,杀人者获得30跨服币/SCOLOR=21}\{被怪物杀死不受影响,开启狂暴需要:60跨服币/SCOLOR=21}\你当前跨服币为:<$GAMEGIRD>\  \  \<开启狂暴/@main_1>[@main_1];使用LUA脚本交互完成以下功能#ACTRUNLUASCRIPT LuaTestVar.lua TestDemo--LUA脚本部分 LuaTestVar.lua--gSyStem、gNPC、gObject、gPlayer 是参与此脚本执行的四个当前全局对象--引用LUA函数库require "string"require "io"--LUA脚本部分function TestDemo()

  --读取狂暴变量gPlayeroadVariables({ 'Berserker' })

  --如果玩家身上灵符大于59则执行以下操作if gPlayer.GameGird > 59 and not gPlayer.Berserker thengPlayer.GameGird = gPlayer.GameGird - 60--改变狂暴状态gPlayer.Berserker = false--保存狂暴状态gPlayer:SaveVariables({ 'Berserker' })

  --开启狂暴后给予货币、装备、技能--增加金币50000到玩家包裹gPlayer:IncGold(50000)

  --通知客户端刷新金币gPlayer:SendGoldChanged()

  --按物品名称创建物品local tmpItem = gSystem:CreateItemByName("在线回收(临时)")

  --如果用户物品对象存在if tmpItem then--向指定人物加物品到背包if gPlayer:AddItemToBag(tmpItem) then--如果添加成功,则向客户端发送添加物品消息。

  gPlayer:SendAddItem(tmpItem)

  endend--负重量上限+200gPlayer.WAbility = { ['MaxWearWeight'] = gPlayer.WAbility.MaxWearWeight + 200 }--背包扩展页数+1gNPC:EXTBAGPAGECOUNT(gObject, gPlayer, '+', 1)

  --扩展背包已开启格数+24gNPC:EXTBAGOPENITEMCOUNT(gObject, gPlayer, '+', 24)

  gPlayer:SysMsg("你的大背包已经扩展成功!", 254, 255, 1)

  --打开文件local tmpOpenFile = io.open(gSystem.M2Dir .. '\\Envir\\QuestDiary\\职业技能.txt', "r")

  assert(tmpOpenFile, "read file is nil")

  for tmpLine in tmpOpenFile:lines() do--按技能名称创建技能local tmpMagic = gSystem:CreateMagicByName(gPlayer, tmpLine)

  --用户技能对象存在if tmpMagic thentmpMagic.Level = 3--添加技能对象,成功返回创建技能索引,失败则返回-1if gPlayer:AddMagic(tmpMagic) >= 0 thengPlayer:SendAddMagic(tmpMagic)

  elsegPlayer:Free(tmpMagic)

  endendendio.close(tmpOpenFile)

  gSystem:SendTopBroadCastMsg('狂暴系统开启,被玩家杀死后,属性消失,被怪物杀死不受影响',249, 116, 10, 2, 1)

  gSystem:SendCenterMsg(string.format('恭喜玩家【%s】开启狂暴!', gPlayer.Name), 249,0, 10)

  elsegSystem:SendTopBroadCastMsg('你的跨服币不足或已经开启狂暴。', 253, 116, 10, 2, 1)

  endendLUA常用库:1.string:字符串处理库,提供了字符串的一些基本操作,比如查找、替换、格式化等。

  2.table:表处理库,提供了一些表的操作函数,比如插入、删除、排序、合并等。

  3.math:数学库,提供了一些常用的数学函数,比如三角函数、指数函数、对数函数等。

  4.io:I/O库,提供了对文件和流的读写操作。

  5.os:操作系统库,提供了一些与操作系统相关的函数,比如获取当前时间、创建删除文件等。

  6.debug:调试库,提供了一些用于调试的函数,比如获取函数调用栈信息、设置断点等。

  7.package: 模块管理库,提供了模块加载、模块路径配置等功能。

  除了以上的标准库,还有一些扩展库,它们不是默认加载的,需要通过调用require函数来加载,比如socket库用于网络编程、lfs库用于文件系统操作等。

  需要注意的是,标准库的函数都是以全局函数的形式存在的,可以直接调用,比如string.sub、table.sort等。如果要自定义函数,建议使用局部函数的形式定义,以避免污染全局命名空间。

回复

使用道具 举报

mswwkb | 2024-2-23 16:24:45 | 显示全部楼层
进来观瞻观瞻,学习学习!
回复

使用道具 举报

本版积分规则