设为首页收藏本站
  • 官方微信
    lmkj_wx 微信公众号 添加方式:
    1:扫描左侧二维码
  • 手机访问
    lmkj_sj
  •  找回密码
     立即注册

    QQ登录

    只需一步,快速开始

    查看: 18|回复: 0

    如何在GEE引擎中校验数据格式

    [复制链接]
    avatar
    • 打卡等级:魔龙套勇士
    • 打卡总天数:130
    • 打卡月天数:23
    • 打卡总奖励:14868
    • 最近打卡:2025-08-23 00:38:01

    7084

    主题

    150

    回帖

    8650

    积分

    管理员

    本站站长

    积分
    8650
    online_admin 发表于 2025-8-7 18:37:17 | 显示全部楼层 |阅读模式
    在 GEE 引擎中校验数据格式,核心是通过脚本函数对数据的字段完整性、类型合法性、数值范围进行检查,避免因格式错误导致排行榜、任务系统等功能异常。以下是具体实现方法、常用函数及完整案例:
    一、数据校验的核心目标
    针对结构化数据(通常用|分隔字段,如玩家ID|角色名|等级|金币),需验证:

    字段数量正确(如等级榜必须包含 3 个字段:ID | 名称 | 等级);
    数据类型匹配(如玩家 ID、等级必须为数字,角色名不能含特殊字符);
    数值范围有效(如等级≥1、金币≥0,避免负数或异常值)。
    二、GEE 引擎常用校验函数
    函数        功能说明        示例       
    SPLIT <源字符串> <分隔符> <变量1> <变量2>...        按分隔符拆分字符串到变量        `SPLIT %Data "        " %UID %Name %Lev`
    STRISNUM <字符串> <结果变量>        判断字符串是否为纯数字(1 = 是,0 = 否)        STRISNUM %Lev %IsNum       
    CHECKFILE <文件路径>        检查文件是否存在(返回真 / 假)        CHECKFILE Rank\Wealth.txt       
    LOADTEXT <文件路径> <行号> <变量>        读取文件指定行内容到变量        LOADTEXT Rank\Wealth.txt 1 %Line1       
    DELTEXT <文件路径> <行号>        删除文件指定行        DELTEXT Rank\Wealth.txt 5       
    WRITETEXT <文件路径> <内容> [A]        写入内容到文件(A = 追加模式)        WRITETEXT Log.txt "错误日志" A       
    三、完整校验流程(以财富榜为例)
    财富榜数据格式要求:玩家ID|角色名|金币数量,需校验:

    必须包含 3 个字段;
    玩家 ID 和金币为纯数字;
    金币≥0。
    1. 脚本文件与执行时机
    在AutoRunQuest.txt中配置定时校验(每 10 分钟执行一次),避免高频消耗资源:

    ini
    #IF
    TIMETICK 600  ; 每600秒(10分钟)执行一次
    #ACT
    ; 调用校验子函数
    GOSUB CheckWealthData  ; 跳转到校验逻辑
    2. 校验子函数实现
    ini
    ; 子函数:校验财富榜数据
    Sub CheckWealthData
        ; 步骤1:检查数据文件是否存在,不存在则创建
        CHECKFILE Rank\Wealth.txt
        #IF
        NOT TRUE  ; 文件不存在
        #ACT
        WRITETEXT Rank\Wealth.txt ""  ; 创建空文件
        WRITETEXT Rank\CheckLog.txt "[%TIME%] 财富榜文件不存在,已创建空文件" A
        #ELSE
        ; 步骤2:遍历文件每行数据(假设最多50行)
        FOR %Line 1 50
            LOADTEXT Rank\Wealth.txt %Line %Data  ; 读取第%Line行
            #IF
            %Data = ""  ; 空行(已到文件末尾)
            #ACT
            BREAK  ; 跳出循环
            #ELSE
            ; 步骤3:拆分字段(玩家ID|角色名|金币)
            SPLIT %Data "|" %UID %Name %Gold

            ; 步骤4:校验字段数量(必须为3个)
            #IF
            %UID = "" OR %Name = "" OR %Gold = ""  ; 存在空字段
            #ACT
            ; 记录错误日志
            WRITETEXT Rank\ErrorLog.txt "[%TIME%] 行%Line:字段不完整,数据:%Data" A
            DELTEXT Rank\Wealth.txt %Line  ; 删除错误行
            CONTINUE  ; 继续下一行
            #ELSE
            ; 步骤5:校验玩家ID是否为纯数字
            STRISNUM %UID %IsUIDNum
            #IF
            %IsUIDNum = 0  ; 非数字
            #ACT
            WRITETEXT Rank\ErrorLog.txt "[%TIME%] 行%Line:玩家ID非数字,数据:%Data" A
            DELTEXT Rank\Wealth.txt %Line
            CONTINUE
            #ELSE
            ; 步骤6:校验金币是否为数字且≥0
            STRISNUM %Gold %IsGoldNum
            #IF
            %IsGoldNum = 0 OR %Gold < 0  ; 非数字或负数
            #ACT
            WRITETEXT Rank\ErrorLog.txt "[%TIME%] 行%Line:金币无效(需≥0的数字),数据:%Data" A
            DELTEXT Rank\Wealth.txt %Line
            CONTINUE
            #ELSE
            ; 所有校验通过,无需处理
            #ENDIF
            #ENDIF
            #ENDIF
        ENDFOR

        ; 步骤7:记录校验完成日志
        WRITETEXT Rank\CheckLog.txt "[%TIME%] 财富榜校验完成,共检查%Line行" A
        #ENDIF
    Return  ; 结束子函数
    四、关键逻辑解析
    字段拆分与完整性检查:
    通过SPLIT函数将每行数据按|拆分到变量,若任何变量为空(如%UID = ""),则判定为 “字段不完整”,删除该行并记录日志。
    数字类型校验:
    用STRISNUM判断玩家 ID(%UID)和金币(%Gold)是否为纯数字,防止因字符串混入导致排序错误(如 “abc” 无法与 “123” 比较)。
    数值范围限制:
    针对金币、等级等属性,通过%Gold < 0等条件排除负数(玩家不可能有负金币),确保数据符合游戏逻辑。
    异常处理:
    错误数据直接删除(DELTEXT),避免影响排行榜排序;同时写入ErrorLog.txt,便于后续排查(如外挂篡改、脚本 BUG)。
    五、扩展与优化
    角色名特殊字符过滤:
    若需限制角色名格式(如仅字母 / 数字),可结合STRISNAME函数(GEE 部分版本支持):
    ini
    STRISNAME %Name %IsValid  ; 1=合法名称,0=含特殊字符
    #IF
    %IsValid = 0
    #ACT
    ; 记录错误并删除

    批量处理大文件:
    若数据超过 50 行,可动态获取文件总行数(需结合FILELINES函数),避免固定循环上限导致漏检。
    实时校验补充:
    在数据采集时(如玩家获得金币)加入即时校验,减少后续批量校验的压力:
    ini
    ; 玩家获得金币时立即校验
    #IF
    GIVEGOLD  ; 获得金币事件
    #ACT
    GETGOLD %Gold
    #IF
    %Gold < 0  ; 异常金币值
    #ACT
    SETGOLD 0  ; 强制修正为0
    WRITETEXT Rank\ErrorLog.txt "[%TIME%] 玩家%Name金币异常,已修正" A


    通过以上方法,可在 GEE 引擎中实现稳定的数据格式校验,确保排行榜、任务等依赖结构化数据的功能准确运行。核心是 “提前定义规则→拆分字段→逐字段校验→异常处理 + 日志” 的流程,可根据具体需求(如战力榜、等级榜)调整校验规则。

    您需要登录后才可以回帖 登录 | 立即注册 qq_login

    本版积分规则

    QQArchiver 手机版 小黑屋 39传奇素材网 ( 蜀ICP备2022016510号-3 )

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