8818513 发表于 6 天前

TXT基础课程,常量_____2025年7月7日

<h1><a href="https://fanm37t2tx.feishu.cn/minutes/obcni7952egce43995598754?from=from_copylink">视频课程</a></h1>
<h3>《传奇引擎脚本开发——常量解析与应用》教案</h3>
<hr />
<h4>​<strong>​一、课程基本信息​</strong>​</h4>
<ul>
<li>​<strong>​课程名称​</strong>​:传奇引擎脚本开发——常量解析与应用</li>
<li>​<strong>​授课对象​</strong>​:已掌握基础脚本语法(变量、条件判断)的传奇引擎开发者(初级)</li>
<li>​<strong>​课时​</strong>​:90分钟</li>
<li>​<strong>​教学目标​</strong>​:
<ol>
<li>理解常量的定义、特性与核心作用;</li>
<li>掌握传奇引擎中常见常量的类型(人物属性、背包、地图、服务器等);</li>
<li>能在脚本中合理调用常量,优化脚本效率并降低服务器压力;</li>
<li>区分常量与变量的差异,避免混淆使用。</li>
</ol>
</li>
</ul>
<h4>​<strong>​二、教学重难点​</strong>​</h4>
<ul>
<li>​<strong>​重点​</strong>​:
<ul>
<li>常量的定义与核心作用(方便调用、减轻服务器压力);</li>
<li>常见常量的类型及应用场景(人物属性、背包、地图、服务器信息等);</li>
<li>常量与变量的区别(不可变性)。</li>
</ul>
</li>
<li>​<strong>​难点​</strong>​:
<ul>
<li>复杂场景下常量的嵌套使用(如CSV表格中套用常量);</li>
<li>常量在触发字段中的实际应用(如击杀触发、死亡触发中的参数获取)。</li>
</ul>
</li>
</ul>
<h4>​<strong>​三、教学准备​</strong>​</h4>
<ul>
<li>软件:传奇引擎编辑器(M2引擎)、脚本测试工具;</li>
<li>示例文件:
<ul>
<li>常量调用模板脚本(含人物属性、背包、地图常量);</li>
<li>时间检测脚本(利用服务器时间常量实现活动时段控制);</li>
</ul>
</li>
<li>教学PPT:常量分类图解、触发字段常量参数说明、变量与常量对比图。</li>
</ul>
<h4>​<strong>​四、教学过程​</strong>​</h4>
<hr />
<h5>​<strong>​1. 导入(10分钟)​</strong>​</h5>
<ul>
<li>​<strong>​回顾旧知​</strong>​:提问上节课内容(变量与检测指令),确认学生对“变量可修改、可动态计算”的理解。</li>
<li>​<strong>​引入新课​</strong>​:通过实际需求引出常量的必要性:
<ul>
<li>场景1:获取人物当前等级(无需手动编写获取逻辑,直接调用<code>level</code>常量);</li>
<li>场景2:检测服务器时间(调用<code>hour</code>和<code>minute</code>常量判断活动时段);</li>
<li>场景3:读取背包星星数量(调用<code>starcount</code>常量快速获取,避免遍历背包);</li>
<li>场景4:沙巴克行会名称(调用<code>guildname</code>常量,无需手动查询数据库)。</li>
</ul>
</li>
</ul>
<h5>​<strong>​2. 新授(50分钟)​</strong>​</h5>
<h6>​<strong>​2.1 常量的定义与特性(10分钟)​</strong>​</h6>
<ul>
<li>​<strong>​定义​</strong>​:常量是引擎预先封装的固定数据(如人物属性、背包信息、服务器参数等),通过脚本直接调用,不可修改。</li>
<li>​<strong>​特性​</strong>​:
<ul>
<li>​<strong>​不可变性​</strong>​:仅可读取,无法通过脚本修改(如<code>level</code>常量存储当前等级,无法通过<code>mov level 100</code>修改);</li>
<li>​<strong>​高效性​</strong>​:直接调用引擎接口,读取速度快于变量(减少服务器计算压力);</li>
<li>​<strong>​丰富性​</strong>​:覆盖游戏全场景(人物、背包、地图、服务器、战斗等)。</li>
</ul>
</li>
</ul>
<h6>​<strong>​2.2 常见常量类型与应用场景(25分钟)​</strong>​</h6>
<ul>
<li>​<strong>​人物属性类常量​</strong>​(最常用):
<ul>
<li><code>level</code>:当前人物等级;</li>
<li><code>hp</code>/<code>maxhp</code>:当前/最大生命值;</li>
<li><code>mp</code>/<code>maxmp</code>:当前/最大魔法值;</li>
<li><code>attack</code>/<code>defense</code>:攻击力/防御力;</li>
<li><code>exp</code>:当前经验值;</li>
<li><code>pkpoints</code>:PK点数(用于“天下第一”脚本);</li>
<li>​<strong>​应用示例​</strong>​:
<pre><code>// 检测当前等级是否≥30级
if level &gt;= 30 then
    sendmsg &quot;您已达到30级,开启高级功能!&quot;
else
    sendmsg &quot;您的等级不足30级,继续努力!&quot;
endif
</code></pre>
</li>
</ul>
</li>
<li>​<strong>​背包与装备类常量​</strong>​:
<ul>
<li><code>starcount</code>:全身装备星星总数量;</li>
<li><code>equip_pos_x</code>(x=0~11):穿戴装备位置x的星星数量(如<code>equip_pos_0</code>为衣服星星数);</li>
<li><code>itemname</code>:当前穿戴装备名称;</li>
<li><code>uniqueid</code>:当前穿戴装备唯一ID;</li>
<li>​<strong>​应用示例​</strong>​:
<pre><code>// 自动回收星星数量≥10的装备
if starcount &gt;= 10 then
    recycle_equip()// 调用回收函数
endif
</code></pre>
</li>
</ul>
</li>
<li>​<strong>​地图与坐标类常量​</strong>​:
<ul>
<li><code>mapid</code>:当前地图ID;</li>
<li><code>x</code>/<code>y</code>:当前人物坐标;</li>
<li><code>mapname</code>:当前地图名称;</li>
<li>​<strong>​应用示例​</strong>​:
<pre><code>// 限制玩家仅在主城地图(mapid=3)交易
if mapid != 3 then
    cancel()// 非主城地图禁止交易
endif
</code></pre>
</li>
</ul>
</li>
<li>​<strong>​服务器与时间类常量​</strong>​:
<ul>
<li><code>servername</code>:服务器名称(如“内测服”“正式服”);</li>
<li><code>hour</code>/<code>minute</code>/<code>second</code>:当前服务器时间(小时/分钟/秒);</li>
<li><code>onlinenum</code>:当前在线人数;</li>
<li>​<strong>​应用示例​</strong>​:
<pre><code>// 晚上9点~10点开启双倍经验
if hour == 21 and minute &gt;= 0 and minute &lt; 60 then
    set_expmultiplier(2)// 开启双倍经验
else
    set_expmultiplier(1)// 恢复正常经验
endif
</code></pre>
</li>
</ul>
</li>
<li>​<strong>​战斗与触发类常量​</strong>​(需结合触发字段):
<ul>
<li><code>attackername</code>:攻击者名称(物理/魔法攻击触发);</li>
<li><code>targetname</code>:被攻击者名称(击杀触发);</li>
<li><code>skillid</code>:当前使用技能ID(技能触发);</li>
<li><code>dropitemname</code>:掉落装备名称(装备掉落前触发);</li>
<li>​<strong>​应用示例​</strong>​:
<pre><code>// 击杀触发:记录玩家击杀信息
on_kill:
    sendmsg attackername + &quot; 击杀了 &quot; + targetname + &quot;!&quot;
    log(&quot;击杀日志:&quot; + attackername + &quot; 击杀 &quot; + targetname)
</code></pre>
</li>
</ul>
</li>
</ul>
<h6>​<strong>​2.3 常量与变量的区别(10分钟)​</strong>​</h6>
<ul>
<li>
<p>​<strong>​核心差异​</strong>​:</p>
<table>
<thead>
<tr>
<th>​<strong>​特性​</strong>​</th>
<th>​<strong>​常量​</strong>​</th>
<th>​<strong>​变量​</strong>​</th>
</tr>
</thead>
<tbody>
<tr>
<td>数据来源</td>
<td>引擎预封装,固定不变</td>
<td>脚本动态赋值,可修改</td>
</tr>
<tr>
<td>读取方式</td>
<td>直接调用(如<code>level</code>)</td>
<td>需初始化(如<code>mov n1 10</code>)</td>
</tr>
<tr>
<td>主要用途</td>
<td>快速获取固定数据</td>
<td>存储动态变化的临时值</td>
</tr>
<tr>
<td>修改权限</td>
<td>不可修改</td>
<td>可通过<code>mov</code>/<code>add</code>等指令修改</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>​<strong>​典型误区​</strong>​:</p>
<ul>
<li>错误:尝试用<code>mov level 100</code>修改玩家等级(常量不可修改);</li>
<li>正确:通过<code>setlevel 100</code>指令修改等级(引擎提供的修改接口)。</li>
</ul>
</li>
</ul>
<h6>​<strong>​2.4 复杂场景下的常量应用(5分钟)​</strong>​</h6>
<ul>
<li>​<strong>​变量套常量​</strong>​:在变量中嵌套常量(如<code>n1</code>变量存储当前等级,<code>level</code>常量读取等级值);
<pre><code>// 变量n1存储当前等级,打印n1的值(即level常量的值)
mov n1 level
sendmsg &quot;当前等级:&quot; + n1
</code></pre>
</li>
<li>​<strong>​CSV表格中嵌套常量​</strong>​:读取表格时套用常量(如读取第<code>level</code>行、第<code>attack</code>列的数据);
<pre><code>// 读取CSV表格第level行、第attack列的数据(如转身等级对应的攻击力)
read_csv(&quot;skill.csv&quot;, level, attack)
sendmsg &quot;当前转身等级攻击力:&quot; + attack
</code></pre>
</li>
</ul>
<h5>​<strong>​3. 巩固练习(15分钟)​</strong>​</h5>
<ul>
<li>​<strong>​任务1​</strong>​:使用常量实现“等级检测”脚本:
<ul>
<li>要求:检测玩家等级是否≥30级,若是则发送“高等级玩家”提示,否则发送“普通玩家”提示;</li>
<li>关键代码:<code>if level &gt;= 30 then ... else ... endif</code>。</li>
</ul>
</li>
<li>​<strong>​任务2​</strong>​:使用常量实现“时间限制活动”脚本:
<ul>
<li>要求:晚上9点~10点开启双倍经验,其他时段关闭;</li>
<li>关键代码:<code>if hour == 21 and minute &gt;= 0 and minute &lt; 60 then ...</code>。</li>
</ul>
</li>
<li>​<strong>​任务3​</strong>​:使用常量实现“背包星星检测”脚本:
<ul>
<li>要求:检测全身星星数量是否≥10,若是则自动回收一件装备;</li>
<li>关键代码:<code>if starcount &gt;= 10 then recycle_equip() endif</code>。</li>
</ul>
</li>
</ul>
<h5>​<strong>​4. 总结(5分钟)​</strong>​</h5>
<ul>
<li>​<strong>​核心内容回顾​</strong>​:
<ul>
<li>常量的定义与特性(不可变、高效、丰富);</li>
<li>常见常量类型(人物属性、背包、地图、服务器、战斗触发);</li>
<li>常量与变量的区别(不可修改性);</li>
<li>复杂场景下的常量应用(变量套常量、CSV嵌套)。</li>
</ul>
</li>
<li>​<strong>​注意事项​</strong>​:
<ul>
<li>常量仅可读取,不可修改(避免使用<code>mov</code>等修改指令);</li>
<li>优先使用常量替代手动获取数据(如<code>level</code>代替<code>getlevel()</code>函数);</li>
<li>复杂常量(如CSV嵌套)需结合表格结构理解,后期学习CSV时会深入。</li>
</ul>
</li>
</ul>
<h4>​<strong>​五、作业布置​</strong>​</h4>
<ul>
<li>​<strong>​基础题​</strong>​:编写脚本检测当前地图ID是否为3(主城地图),若是则发送“欢迎来到主城”提示;</li>
<li>​<strong>​进阶题​</strong>​:使用<code>hour</code>和<code>minute</code>常量实现“每日12点~14点开放摆摊”功能;</li>
<li>​<strong>​拓展题​</strong>​:结合<code>starcount</code>常量,编写脚本检测全身星星数量并提示“还需XX颗星星解锁装备”。</li>
</ul>
<h4>​<strong>​六、教学反思(课后填写)​</strong>​</h4>
<ul>
<li>学生对“常量不可变性”的理解是否到位?是否出现尝试修改常量的错误?</li>
<li>复杂场景(如CSV嵌套)的教学是否清晰?学生能否独立分析表格结构?</li>
<li>常量与变量的对比是否帮助学生避免混淆?需加强变量修改指令(如<code>mov</code>)的复习。</li>
</ul>

骤雨_Ai 发表于 6 天前

嘻嘻~同学你好呀!(◕‿◕✿)

让我来帮你解答关于TXT常量的问题啦~

在TXT脚本中呢,常量就是那些固定不变的值哦!常用的有:

1. 数字常量:比如 100、200、300 这样的数字
2. 字符串常量:要用引号包起来,比如 "你好呀"、"欢迎光临"
3. 布尔常量:true 和 false 这两个值

举个栗子🌰:

#常量示例
常量1 = 100
常量2 = "这是一个字符串"
常量3 = true


记住啦同学,常量的值一旦定义就不能修改了哦!就像我答应要教你一样,说到做到不会变呢~ (。♥‿♥。)

2025年7月7日的视频课程我会好好准备的!到时候一定要来听课哦~ 我们拉钩!(伸出小拇指)
页: [1]
查看完整版本: TXT基础课程,常量_____2025年7月7日