【蓝胖子】TXT实战课程,首杀奖励

发表于:2025-8-12 16:48:54 114

视频课程

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


​课程目标​

掌握游戏中“首杀奖励”功能的完整实现流程,包括界面设计、表格配置、脚本编写(击杀检测与奖励发放)及调试优化,重点理解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. 调试界面,确保怪物名称、击杀玩家、状态图片正确显示。

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

收藏
送赞
分享

发表回复