《传奇引擎脚本开发——检测与执行(第三课)》教案
一、课程基本信息
- 课程名称:传奇引擎脚本开发——检测与执行(第三课)
- 授课对象:传奇引擎脚本初学者(具备基础语法知识)
- 课时:90分钟
- 教学目标:
- 掌握按权重分配随机字符串的指令及应用场景;
- 学会使用批量检测与操作物品的指令(
check items
、text
);
- 理解循环指令(
while
)的逻辑与变量控制,掌握列表容器的挂载与应用;
- 能结合循环、容器与CSV表格实现批量功能(如地图传送按钮)。
二、教学重难点
- 重点:
- 按权重分配随机字符串的指令参数与计算逻辑;
- 批量检测指令(
check items
)的参数含义与实际应用;
- 循环指令(
while
)的结构与变量初始化/清空;
- 列表容器的挂载与循环生成批量按钮的方法。
- 难点:
- 权重分配中“总权重”与“随机范围”的计算关系;
- 循环指令中变量的作用域与传参逻辑(如按钮点击时传递循环变量值);
- 结合CSV表格与循环容器实现动态功能(如地图传送)的流程设计。
三、教学准备
- 软件:传奇引擎编辑器(如M2引擎)、VSCode(用于脚本编写与调试);
- 示例文件:CSV表格(含地图ID与名称)、批量物品检测脚本模板、循环按钮生成脚本模板;
- 教学PPT:包含指令语法图解、参数说明、流程示意图。
四、教学过程
1. 导入(10分钟)
- 回顾旧知:提问学生上节课内容(脚本命令讲解、CSV表格读取),确认学生对
read csv
、split string
等指令的掌握情况。
- 引入新课:通过实际需求引出本课主题:
- 场景1:游戏抽奖(按概率分配奖品)→ 需要“按权重随机字符串”;
- 场景2:批量发放奖励(检测背包是否有多个物品)→ 需要“批量检测指令”;
- 场景3:动态生成界面(如100个地图传送按钮)→ 需要“循环+容器”。
2. 新授(50分钟)
2.1 按权重分配随机字符串(20分钟)
- 指令语法:
getrandomstr(字符串#权重,分割符,随机范围参数,显示控制参数,剩余字符串存储变量)
- 参数详解(结合PPT图解):
字符串#权重
:待分配的字符串与对应权重(如“测试1#2000#测试2#1000#测试3#5000”);
分割符
:分隔字符串与权重的符号(默认#
);
随机范围参数
(0~1):
0
:等概率(每个字符串概率=1/总数量);
1
:按权重比例(总权重=各权重之和,随机数落在权重区间内);
显示控制参数
(0~3):控制是否显示权重值(0-显示,1-不显示参数4,2-不显示参数5,3-参数4不显示、参数5显示);
剩余字符串存储变量
:未选中部分的字符串(如总字符串为“a#10#b#20”,选中“a”则剩余“b#20”)。
- 实践演示(教师操作):
- 编写脚本测试不同权重下的概率(如“木剑#90#屠龙#2#裁决#8”,总权重100);
- 展示
显示控制参数=0
时输出“木剑#90”,参数=3时仅输出“木剑”;
- 总结应用场景:抽奖、开宝箱、回收物品等概率性功能。
2.2 批量检测与操作物品(15分钟)
- 指令1:批量检测物品(
check items
)
- 语法:
check items(物品名称#数量#分割符,检测类型)
;
- 参数说明:
- 物品名称:支持道具名或ID(需配合参数
0
/1
,默认道具名);
- 数量:检测的最小数量;
- 分割符:分隔多个物品的符号(默认
#
);
- 检测类型(可选):
0
(不检测绑定)、1
(检测非绑定)、2
(检测绑定)。
- 示例:
check items(乌木剑#5#魔血石#2,0)
→ 检测背包是否有至少5个乌木剑和2个魔血石(非绑定)。
- 指令2:批量扣除物品(
text
)
- 语法:
text(物品名称#数量#分割符)
;
- 作用:批量扣除背包内指定数量的物品(避免使用
take
多次导致服务器压力)。
- 实践演示(学生动手):
- 编写脚本检测背包是否有“乌木剑#5”,若有则提示“背包有5个乌木剑”;
- 使用
text
指令扣除5个乌木剑,观察背包变化。
2.3 循环与容器结合使用(15分钟)
- 循环指令(
while
):
- 语法:
while(变量 操作符 数值){循环体}
;
- 关键点:循环前需初始化变量(如
set N0 0
),避免无限循环;循环体内需更新变量(如inc N0 1
)。
- 列表容器(
list container
):
- 作用:批量管理同类型元素(如按钮、图标),减少重复代码;
- 挂载方式:通过
mount id
参数绑定循环变量(如mount N0
,N0为循环变量)。
- 实践演示(地图传送按钮):
- 步骤1:创建CSV表格(列1:地图ID,列2:地图名称);
- 步骤2:读取表格最大行数(
get csv row count
);
- 步骤3:循环生成按钮(
while(N0 < 行数){创建按钮,挂载N0}
);
- 步骤4:按钮点击事件(传参
N0
,读取表格对应行,传送至地图ID)。
- 学生观察:点击不同按钮时,打印对应的地图ID(验证传参逻辑)。
3. 巩固练习(15分钟)
- 任务1:使用
getrandomstr
实现“抽奖箱”(权重:一等奖#10,二等奖#30,三等奖#60),输出中奖结果及剩余字符串。
- 任务2:编写脚本检测背包是否有“屠龙刀#1”(绑定),若有则批量扣除并提示“成功扣除绑定屠龙刀”。
- 任务3:结合循环与列表容器生成5个按钮(显示“地图1”~“地图5”),点击按钮时打印对应地图名称(使用CSV表格存储地图数据)。
4. 总结(5分钟)
- 回顾核心知识点:
- 权重分配的核心是“总权重”与“随机范围”的计算;
- 批量指令(
check items
、text
)提升脚本效率;
- 循环+容器是实现动态界面的关键(减少重复代码)。
- 强调易错点:
- 循环变量需初始化并更新,避免死循环;
- 传参时注意变量作用域(循环内变量需通过参数传递到外部事件)。
五、作业布置
- 基础题:使用
getrandomstr
实现“装备掉落”(权重:普通装备#80,稀有装备#15,传说装备#5),输出掉落结果。
- 进阶题:结合循环、列表容器与CSV表格,生成10个按钮(显示“任务1”~“任务10”),点击按钮时打印对应任务名称(CSV表格存储任务ID与名称)。
六、教学反思(课后填写)
- 学生对权重分配的计算逻辑是否理解?是否需要补充示例?
- 循环与容器的结合是否清晰?学生能否独立完成动态按钮生成?
- 作业难度是否适中?是否需要提供更多模板代码?
备注:本教案可根据学生实际水平调整实践环节难度,重点关注学生对指令参数与逻辑流程的理解。