找回密码
 注册传奇版本库账号
搜索
热搜: DBC2000 1.76 1.80
查看: 934|回复: 0

[技术文章] 传奇GXX引擎LUA脚本的优势

[复制链接]
  • TA的每日心情
    开心
    2024-8-3 11:14
  • 1387

    主题

    204

    回帖

    112万

    积分

    管理员

    积分
    1121510
    发表于 2023-12-28 11:12:39 | 显示全部楼层 |阅读模式

     GXX引擎 Lua脚本接口 >GXX引擎LUA脚本的优势优势:1、有别于其它引擎的LUA系统需要对NPC配置进行excel改造,GXX引擎LUA系统支持原始设计模式,GM学习成本低。

      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等。如果要自定义函数,建议使用局部函数的形式定义,以避免污染全局命名空间。





    上一篇:传奇GXX引擎手游 Lua脚本接口
    下一篇:传奇手游架设配置nginx服务端教程GXX引擎
    回复

    使用道具 举报

    本版积分规则

    QQ:2444100141|网站地图|传奇标签|手机版|小黑屋|传奇版本服务端

    GMT+8, 2024-11-1 07:24 , Processed in 0.727635 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表