【蓝胖子】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, "全局")-- 声明全局变量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 检查字符串(怪物名称, "首杀怪物名单.txt", 1) == 1 then
-- 检测是否已击杀(A80中无该怪物键值)
本地 A80_值 = 获取键值(A80, 怪物名称)
if A80_值 == "" then
-- 记录击杀信息(怪物名称→玩家名称)
修改键值(A80, 怪物名称, 获取玩家名称())
-- 发放奖励(通过CSV嵌套获取物品名和数量)
本地 物品名 = CSV常量("首杀奖励表.csv", "怪物名称", 怪物名称, "奖励物品", 0)
本地 物品数量 = CSV常量("首杀奖励表.csv", "怪物名称", 怪物名称, "奖励数量", 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常量("表名", "列1", 值, "列2", 行号)</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]