找回密码
 立即注册
    查看: 16|回复: 0

    TXT实战课程,首杀奖励

    [复制链接]

    73

    主题

    2

    回帖

    335

    积分

    积分
    335
    发表于 昨天 04:48 PM | 显示全部楼层 |阅读模式

    视频课程

    ​《游戏首杀奖励功能实现》教案​


    ​课程目标​

    掌握游戏中“首杀奖励”功能的完整实现流程,包括界面设计、表格配置、脚本编写(击杀检测与奖励发放)及调试优化,重点理解CSV表循环读取、变量嵌套使用及高性能检测逻辑。


    ​课程准备​

    1. ​工具与环境​
      • 开发工具:资源工具(表格导出/导入)、游戏引擎(含UI编辑器)。
      • 核心表格:首杀奖励表(CSV格式,存储怪物名称、奖励物品/数量等信息)。
      • 版本特性:传3引擎对容器挂载、变量嵌套的支持,TXT文本的高效检测特性。
    2. ​前置知识​
      • 熟悉CSV表结构与循环读取(MOV N0循环、MAXROW获取最大行数)。
      • 掌握容器挂载(容器挂载指令)与子控件间隔调整。
      • 理解变量(s$)与常量(CSV常量嵌套)的使用逻辑。

    ​核心内容:首杀奖励功能实现步骤​

    ​步骤1:界面设计(UI配置)​

    首杀奖励界面需展示怪物名称、击杀玩家、击杀状态(已/未击杀)及奖励提示,设计逻辑如下:

    1. ​展示形式选择​
      • 简化设计:放弃怪物模型(大小不一易导致界面混乱),采用文字展示怪物名称。
      • 关键元素:怪物名称(黄色)、击杀玩家(绿色)、击杀状态(图片:未击杀59/已击杀60)、奖励提示。
    2. ​容器与子控件配置​
      • 主容器:使用列表容器(列表容器)挂载所有首杀奖励条目,支持动态扩展。
      • 子控件:每个条目包含3个文本控件(怪物名称、玩家名字、击杀状态)和1个图片控件(击杀状态)。
      • 间距调整:设置子控件间隔为10像素(避免拥挤),通过坐标(x=340, y=100)定位主容器,调整y轴间距至50像素优化排版。
    3. ​素材准备​
      • 击杀状态图片:从资源路径(如IES/陈总/聚福/dev/手刹SSS回收宠物.img)获取“未击杀”(59)和“已击杀”(60)图片。

    ​步骤2:表格配置(CSV表与TXT文本)​

    首杀奖励数据存储于CSV表(首杀奖励表.csv),并通过TXT文本记录需检测的怪物名称,优化服务器性能。

    1. ​CSV表结构​
      • 列定义:第1列(怪物名称)、第2列(奖励物品名称)、第3列(奖励数量)。
      • 示例数据:
        骷髅教主,屠龙刀,1  
        温馨教主,裁决之杖,1  
        沃玛教主,骨玉权杖,1
        
    2. ​TXT文本(高效检测)​
      • 文件路径:首杀怪物名单.txt,内容为需记录击杀的怪物名称(每行一个),如:
        骷髅教主  
        温馨教主  
        沃玛教主
        
      • 作用:通过检查字符串是否在TXT文本中指令快速判断怪物是否属于首杀范围,避免循环遍历CSV表(减少服务器压力)。

    ​步骤3:脚本编写(击杀检测与奖励发放)​

    通过杀怪触发脚本(杀怪触发)实现首杀检测、状态记录及奖励发放,核心逻辑如下:

    1. ​变量声明(全局变量)​

      • 启动服务器触发中声明全局变量A80(键值对存储:怪物名称→击杀玩家),用于记录已击杀的怪物及玩家。
      • 示例:
        -- 启动服务器触发  
        变量声明(A80, "全局")  -- 声明全局变量A80(键值对)
        
    2. ​杀怪触发逻辑​

      • ​检测怪物是否属于首杀范围​​:通过检查字符串是否在TXT文本中指令判断当前击杀怪物是否在首杀怪物名单.txt中。
      • ​记录击杀信息​​:若怪物属于首杀范围且未被击杀过(A80中无对应键值),则将怪物名称作为主键、玩家名称作为值存入A80
      • ​发放奖励​​:通过CSV常量嵌套获取该怪物对应的奖励物品及数量(如第N行第2列=物品名,第N行第3列=数量),通过邮件发放给玩家。
      • ​更新界面状态​​:根据A80中是否存在该怪物名称,切换击杀状态图片(59未击杀/60已击杀)。

      示例代码片段:

      -- 杀怪触发  
      if 杀怪触发 == 1 then  
          本地 怪物名称 = 获取击杀怪物名称()  -- 获取当前击杀怪物名称  
          -- 检测怪物是否在首杀名单TXT中  
          if 检查字符串(怪物名称, "首杀怪物名单.txt", 1) == 1 then  
              -- 检测是否已击杀(A80中无该怪物键值)  
              本地 A80_值 = 获取键值(A80, 怪物名称)  
              if A80_值 == "" then  
                  -- 记录击杀信息(怪物名称→玩家名称)  
                  修改键值(A80, 怪物名称, 获取玩家名称())  
                  -- 发放奖励(通过CSV嵌套获取物品名和数量)  
                  本地 物品名 = CSV常量("首杀奖励表.csv", "怪物名称", 怪物名称, "奖励物品", 0)  
                  本地 物品数量 = CSV常量("首杀奖励表.csv", "怪物名称", 怪物名称, "奖励数量", 0)  
                  发放邮件(物品名, 物品数量)  -- 邮件发放奖励  
              end  
          end  
      end
      

    ​步骤4:调试与优化​

    1. ​界面显示问题​
      • 问题:怪物名称文本未正确挂载到列表容器。
      • 解决:检查容器挂载指令,确保主容器ID(a)与子控件ID(bc)正确绑定,调整坐标(x=340, y=100)和子控件间隔(10像素)。
    2. ​脚本未触发问题​
      • 问题:击杀怪物后未触发奖励发放。
      • 解决:
        • 确认启动服务器触发中已声明全局变量A80,并重启服务器生效。
        • 检查检查字符串指令的TXT文件路径是否正确(首杀怪物名单.txt需与游戏运行路径一致)。
    3. ​性能优化​
      • 避免循环遍历CSV表检测击杀怪物,改用TXT文本匹配(检查字符串指令),减少服务器计算压力。

    ​关键注意事项​

    1. ​CSV表与TXT文本的选择​​:首杀范围怪物较少时,TXT文本匹配更高效;若怪物数量大,需结合CSV表循环(需优化循环逻辑)。
    2. ​变量嵌套与常量使用​​:CSV常量("表名", "列1", 值, "列2", 行号)需正确嵌套,确保获取到目标列值(如第N行第2列的物品名)。
    3. ​全局变量声明​​:A80需在启动服务器触发中声明为全局变量,否则无法跨触发持久化存储。
    4. ​界面调试​​:调整子控件间隔和坐标时,优先使用主容器统一管理,避免单个控件坐标混乱。

    ​总结与练习​

    • ​总结​​:首杀奖励功能需完成“界面设计→表格配置→脚本编写→调试优化”四步,核心是通过TXT文本高效检测击杀怪物,结合变量嵌套实现状态记录与奖励发放。
    • ​练习​​:
      1. 配置首杀奖励表.csv,添加3个怪物(如“祖玛教主”“赤月恶魔”“魔龙教主”)及对应奖励。
      2. 编写杀怪触发脚本,实现“击杀祖玛教主后发放屠龙刀”功能,并通过TXT文本检测。
      3. 调试界面,确保怪物名称、击杀玩家、状态图片正确显示。

    ​课后思考​​:若需支持“跨服首杀”(多个服务器共享首杀记录),脚本需如何调整?

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

    本版积分规则