蓝胖子 发表于 2025-8-12 16:48:54

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

<h1><a href="https://fanm37t2tx.feishu.cn/minutes/obcn8o31a7qn4ed8r2a5ou49?from=from_copylink">视频课程</a></h1>
<h3>​<strong>​《游戏首杀奖励功能实现》教案​</strong>​</h3>
<hr />
<h4>​<strong>​课程目标​</strong>​</h4>
<p>掌握游戏中“首杀奖励”功能的完整实现流程,包括界面设计、表格配置、脚本编写(击杀检测与奖励发放)及调试优化,重点理解CSV表循环读取、变量嵌套使用及高性能检测逻辑。</p>
<hr />
<h3>​<strong>​课程准备​</strong>​</h3>
<ol>
<li>​<strong>​工具与环境​</strong>​
<ul>
<li>开发工具:资源工具(表格导出/导入)、游戏引擎(含UI编辑器)。</li>
<li>核心表格:<code>首杀奖励表</code>(CSV格式,存储怪物名称、奖励物品/数量等信息)。</li>
<li>版本特性:传3引擎对容器挂载、变量嵌套的支持,TXT文本的高效检测特性。</li>
</ul>
</li>
<li>​<strong>​前置知识​</strong>​
<ul>
<li>熟悉CSV表结构与循环读取(<code>MOV N0</code>循环、<code>MAXROW</code>获取最大行数)。</li>
<li>掌握容器挂载(<code>容器挂载</code>指令)与子控件间隔调整。</li>
<li>理解变量(<code>s$</code>)与常量(<code>CSV</code>常量嵌套)的使用逻辑。</li>
</ul>
</li>
</ol>
<hr />
<h3>​<strong>​核心内容:首杀奖励功能实现步骤​</strong>​</h3>
<h4>​<strong>​步骤1:界面设计(UI配置)​</strong>​</h4>
<p>首杀奖励界面需展示怪物名称、击杀玩家、击杀状态(已/未击杀)及奖励提示,设计逻辑如下:</p>
<ol>
<li>​<strong>​展示形式选择​</strong>​
<ul>
<li>简化设计:放弃怪物模型(大小不一易导致界面混乱),采用文字展示怪物名称。</li>
<li>关键元素:怪物名称(黄色)、击杀玩家(绿色)、击杀状态(图片:未击杀59/已击杀60)、奖励提示。</li>
</ul>
</li>
<li>​<strong>​容器与子控件配置​</strong>​
<ul>
<li>主容器:使用列表容器(<code>列表容器</code>)挂载所有首杀奖励条目,支持动态扩展。</li>
<li>子控件:每个条目包含3个文本控件(怪物名称、玩家名字、击杀状态)和1个图片控件(击杀状态)。</li>
<li>间距调整:设置子控件间隔为10像素(避免拥挤),通过坐标(x=340, y=100)定位主容器,调整y轴间距至50像素优化排版。</li>
</ul>
</li>
<li>​<strong>​素材准备​</strong>​
<ul>
<li>击杀状态图片:从资源路径(如<code>IES/陈总/聚福/dev/手刹SSS回收宠物.img</code>)获取“未击杀”(59)和“已击杀”(60)图片。</li>
</ul>
</li>
</ol>
<hr />
<h4>​<strong>​步骤2:表格配置(CSV表与TXT文本)​</strong>​</h4>
<p>首杀奖励数据存储于CSV表(<code>首杀奖励表.csv</code>),并通过TXT文本记录需检测的怪物名称,优化服务器性能。</p>
<ol>
<li>​<strong>​CSV表结构​</strong>​
<ul>
<li>列定义:第1列(怪物名称)、第2列(奖励物品名称)、第3列(奖励数量)。</li>
<li>示例数据:
<pre><code>骷髅教主,屠龙刀,1
温馨教主,裁决之杖,1
沃玛教主,骨玉权杖,1
</code></pre>
</li>
</ul>
</li>
<li>​<strong>​TXT文本(高效检测)​</strong>​
<ul>
<li>文件路径:<code>首杀怪物名单.txt</code>,内容为需记录击杀的怪物名称(每行一个),如:
<pre><code>骷髅教主
温馨教主
沃玛教主
</code></pre>
</li>
<li>作用:通过<code>检查字符串是否在TXT文本中</code>指令快速判断怪物是否属于首杀范围,避免循环遍历CSV表(减少服务器压力)。</li>
</ul>
</li>
</ol>
<hr />
<h4>​<strong>​步骤3:脚本编写(击杀检测与奖励发放)​</strong>​</h4>
<p>通过杀怪触发脚本(<code>杀怪触发</code>)实现首杀检测、状态记录及奖励发放,核心逻辑如下:</p>
<ol>
<li>
<p>​<strong>​变量声明(全局变量)​</strong>​</p>
<ul>
<li>在<code>启动服务器触发</code>中声明全局变量<code>A80</code>(键值对存储:怪物名称→击杀玩家),用于记录已击杀的怪物及玩家。</li>
<li>示例:
<pre><code>-- 启动服务器触发
变量声明(A80, &quot;全局&quot;)-- 声明全局变量A80(键值对)
</code></pre>
</li>
</ul>
</li>
<li>
<p>​<strong>​杀怪触发逻辑​</strong>​</p>
<ul>
<li>​<strong>​检测怪物是否属于首杀范围​</strong>​:通过<code>检查字符串是否在TXT文本中</code>指令判断当前击杀怪物是否在<code>首杀怪物名单.txt</code>中。</li>
<li>​<strong>​记录击杀信息​</strong>​:若怪物属于首杀范围且未被击杀过(<code>A80</code>中无对应键值),则将怪物名称作为主键、玩家名称作为值存入<code>A80</code>。</li>
<li>​<strong>​发放奖励​</strong>​:通过<code>CSV常量嵌套</code>获取该怪物对应的奖励物品及数量(如第N行第2列=物品名,第N行第3列=数量),通过邮件发放给玩家。</li>
<li>​<strong>​更新界面状态​</strong>​:根据<code>A80</code>中是否存在该怪物名称,切换击杀状态图片(59未击杀/60已击杀)。</li>
</ul>
<p>示例代码片段:</p>
<pre><code>-- 杀怪触发
if 杀怪触发 == 1 then
    本地 怪物名称 = 获取击杀怪物名称()-- 获取当前击杀怪物名称
    -- 检测怪物是否在首杀名单TXT中
    if 检查字符串(怪物名称, &quot;首杀怪物名单.txt&quot;, 1) == 1 then
      -- 检测是否已击杀(A80中无该怪物键值)
      本地 A80_值 = 获取键值(A80, 怪物名称)
      if A80_值 == &quot;&quot; then
            -- 记录击杀信息(怪物名称→玩家名称)
            修改键值(A80, 怪物名称, 获取玩家名称())
            -- 发放奖励(通过CSV嵌套获取物品名和数量)
            本地 物品名 = CSV常量(&quot;首杀奖励表.csv&quot;, &quot;怪物名称&quot;, 怪物名称, &quot;奖励物品&quot;, 0)
            本地 物品数量 = CSV常量(&quot;首杀奖励表.csv&quot;, &quot;怪物名称&quot;, 怪物名称, &quot;奖励数量&quot;, 0)
            发放邮件(物品名, 物品数量)-- 邮件发放奖励
      end
    end
end
</code></pre>
</li>
</ol>
<hr />
<h4>​<strong>​步骤4:调试与优化​</strong>​</h4>
<ol>
<li>​<strong>​界面显示问题​</strong>​
<ul>
<li>问题:怪物名称文本未正确挂载到列表容器。</li>
<li>解决:检查<code>容器挂载</code>指令,确保主容器ID(<code>a</code>)与子控件ID(<code>b</code>、<code>c</code>)正确绑定,调整坐标(x=340, y=100)和子控件间隔(10像素)。</li>
</ul>
</li>
<li>​<strong>​脚本未触发问题​</strong>​
<ul>
<li>问题:击杀怪物后未触发奖励发放。</li>
<li>解决:
<ul>
<li>确认<code>启动服务器触发</code>中已声明全局变量<code>A80</code>,并重启服务器生效。</li>
<li>检查<code>检查字符串</code>指令的TXT文件路径是否正确(<code>首杀怪物名单.txt</code>需与游戏运行路径一致)。</li>
</ul>
</li>
</ul>
</li>
<li>​<strong>​性能优化​</strong>​
<ul>
<li>避免循环遍历CSV表检测击杀怪物,改用TXT文本匹配(<code>检查字符串</code>指令),减少服务器计算压力。</li>
</ul>
</li>
</ol>
<hr />
<h3>​<strong>​关键注意事项​</strong>​</h3>
<ol>
<li>​<strong>​CSV表与TXT文本的选择​</strong>​:首杀范围怪物较少时,TXT文本匹配更高效;若怪物数量大,需结合CSV表循环(需优化循环逻辑)。</li>
<li>​<strong>​变量嵌套与常量使用​</strong>​:<code>CSV常量(&quot;表名&quot;, &quot;列1&quot;, 值, &quot;列2&quot;, 行号)</code>需正确嵌套,确保获取到目标列值(如第N行第2列的物品名)。</li>
<li>​<strong>​全局变量声明​</strong>​:<code>A80</code>需在<code>启动服务器触发</code>中声明为全局变量,否则无法跨触发持久化存储。</li>
<li>​<strong>​界面调试​</strong>​:调整子控件间隔和坐标时,优先使用主容器统一管理,避免单个控件坐标混乱。</li>
</ol>
<hr />
<h3>​<strong>​总结与练习​</strong>​</h3>
<ul>
<li>​<strong>​总结​</strong>​:首杀奖励功能需完成“界面设计→表格配置→脚本编写→调试优化”四步,核心是通过TXT文本高效检测击杀怪物,结合变量嵌套实现状态记录与奖励发放。</li>
<li>​<strong>​练习​</strong>​:
<ol>
<li>配置<code>首杀奖励表.csv</code>,添加3个怪物(如“祖玛教主”“赤月恶魔”“魔龙教主”)及对应奖励。</li>
<li>编写杀怪触发脚本,实现“击杀祖玛教主后发放屠龙刀”功能,并通过TXT文本检测。</li>
<li>调试界面,确保怪物名称、击杀玩家、状态图片正确显示。</li>
</ol>
</li>
</ul>
<hr />
<p>​<strong>​课后思考​</strong>​:若需支持“跨服首杀”(多个服务器共享首杀记录),脚本需如何调整?</p>
页: [1]
查看完整版本: 【蓝胖子】TXT实战课程,首杀奖励