《天降财神活动制作》教案
一、教学目标
- 知识目标:掌握游戏中“天降财神”活动的核心制作流程,包括活动规则设计、界面搭建、脚本逻辑(定时器触发、条件判断、奖励发放)及数据表配置。
- 能力目标:能独立完成活动界面设计、脚本编写(含全局定时器、多条件判断)、奖励规则配置及功能调试。
- 情感目标:理解游戏活动设计的用户导向(如防挂机、提升活跃),培养逻辑思维与问题解决能力(如定时器触发异常排查)。
二、教学重难点
- 重点:活动规则配置(开区天数与等级限制)、全局定时器触发逻辑、多条件判断脚本编写、奖励随机发放实现。
- 难点:全局定时器与玩家脚本的联动(通过GM指令下发)、多条件判断的逻辑顺序(开区天数与等级的组合验证)、界面倒计时关闭功能实现。
三、教学准备
- 开发工具:游戏引擎(如M2引擎)、脚本编辑器、CSV表格编辑器、VS Code(用于批量编辑表格)。
- 辅助材料:示例“天降财神”界面模板、预置CSV表(含活动规则:天数、等级、奖励)、常见物品列表(黄宝石、元宝等)。
- 学生基础:熟悉基础脚本语法(变量、循环、条件判断),了解游戏全局/个人定时器区别及GM指令使用。
四、教学过程
环节1:课程导入(5分钟)
- 提问互动:“游戏中常见的限时活动有哪些形式?‘天降财神’这类活动需要满足哪些核心需求?”(引导学生思考:界面交互、触发条件、奖励发放、防挂机)
- 明确目标:本节课将完成“天降财神”活动的全流程制作,覆盖规则设计→界面搭建→脚本逻辑→调试优化。
环节2:活动规则与数据表配置(15分钟)
目标:设计活动规则表,明确触发条件(开区天数、玩家等级)与奖励内容。
-
规则分析:
- 触发条件:开区天数(1天、7天、30天)与玩家等级(15级、22级、38级)组合限制。
- 奖励内容:随机物品(如黄宝石、元宝),数量与等级/天数挂钩。
-
CSV表配置(天降财神.csv
):
开服天数 |
所需等级 |
奖励物品ID |
奖励数量 |
1 |
15 |
1001 |
5 |
2 |
22 |
1002 |
10 |
7 |
25 |
1003 |
15 |
30 |
38 |
1004 |
20 |
说明:后续可扩展更多天数/等级规则,通过“最大行数”实现动态扩展。
环节3:界面设计与组件搭建(15分钟)
目标:搭建活动弹出界面,包含物品展示区、抽奖按钮及倒计时提示。
-
界面布局:
- 背景图:选择喜庆风格背景(如
bg_treasure.png
),调整尺寸适配屏幕(1024×768)。
- 标题与提示:添加“天降财神”标题(金色字体,30号),下方添加温馨提示(白色字体,20号,如“每日1次抽奖机会,10秒内点击领取”)。
- 物品展示区:使用列表容器(位置:X=200,Y=150,宽=600,高=300),动态加载奖励物品图标与数量。
- 抽奖按钮:添加“点击抽奖”按钮(黄色背景,25号字体,位置:底部居中),绑定点击事件。
-
动态组件配置:
- 物品图标:通过循环读取CSV表,动态加载奖励物品图标(如
item_1001.png
)。
- 倒计时提示:添加文本组件(如“剩余10秒”),初始隐藏,抽奖后显示并倒计时。
环节4:脚本逻辑编写(30分钟)
子环节4.1:全局定时器触发
- 目标:通过全局定时器每分钟触发活动,下发脚本至所有玩家。
-
全局定时器配置:
-- 服务器启动触发(QF)
if (IsServerStart()) then
-- 开启全局定时器(5号,每60秒执行一次)
StartGlobalTimer(5, 60, "天降财神触发");
end
-- 全局定时器回调函数
function 天降财神触发()
-- 向全服玩家下发GM指令,执行活动脚本
GMEX("天降财神开始提问", 0, 0, 0, 0, 0, 0);
end
说明:全局定时器面向服务器,需通过GMEX
指令将脚本下发至玩家个人执行。
子环节4.2:活动条件判断与界面弹出
- 目标:检测玩家开服天数与等级,符合条件则弹出活动界面。
-
条件判断逻辑:
-- 仅当玩家满足条件时执行
if (CheckCondition()) then
-- 弹出活动界面(自定义按钮101)
ShowButton(101, "天降财神界面", 300, 200);
-- 初始化倒计时(10秒)
StartCountdown(10, "关闭界面");
else
ShowMessage("未满足活动条件!");
end
-- 条件判断函数(开服天数与等级)
function CheckCondition()
local openDays = GetGlobalVar("G12"); -- 获取开服天数(全局变量G12每日+1)
local playerLevel = GetLevel(); -- 获取玩家等级
-- 读取活动规则表(天降财神.csv)
local ruleTable = ReadCSV("天降财神");
local maxRow = GetTableMaxRow(ruleTable);
-- 遍历规则表,匹配当前开服天数
for i = 1, maxRow do
local row = ruleTable[i];
local requiredDays = row[1]; -- 开服天数条件
local requiredLevel = row[2]; -- 所需等级条件
-- 匹配天数与等级
if (openDays == requiredDays and playerLevel >= requiredLevel) then
return true; -- 符合条件
end
end
return false; -- 不符合条件
end
子环节4.3:抽奖逻辑与奖励发放
- 目标:玩家点击抽奖后,随机发放奖励并关闭界面。
-
抽奖逻辑:
-- 点击抽奖按钮事件
if (GetClickButtonID() == 101) then
local ruleTable = ReadCSV("天降财神");
local maxRow = GetTableMaxRow(ruleTable);
-- 生成随机奖励行数(1~maxRow)
local randomRow = Rand(1, maxRow);
local rewardItemID = ruleTable[randomRow][3]; -- 奖励物品ID
local rewardCount = ruleTable[randomRow][4]; -- 奖励数量
-- 发放奖励
GiveItem(rewardItemID, rewardCount);
ShowMessage("恭喜获得:"..GetItemName(rewardItemID).."×"..rewardCount);
-- 关闭活动界面
DeleteButton(101);
StopCountdown(); -- 停止倒计时
end
子环节4.4:倒计时与界面关闭
-
倒计时逻辑:
-- 倒计时函数(剩余时间,回调)
function StartCountdown(seconds, callback)
SetTimer(1, seconds, function()
if (seconds > 0) then
UpdateCountdownText(seconds); -- 更新倒计时文本
StartCountdown(seconds - 1, callback);
else
callback(); -- 时间到,执行关闭
end
end);
end
-- 更新倒计时文本
function UpdateCountdownText(seconds)
local text = "剩余"..seconds.."秒";
SetButtonText(102, text); -- 假设102是倒计时文本组件ID
end
-- 关闭界面回调
function CloseInterface()
DeleteButton(101); -- 删除抽奖按钮
DeleteButton(102); -- 删除倒计时文本
end
环节5:调试与常见问题(10分钟)
- 问题1:全局定时器未触发→检查定时器索引(0~4是否被占用),确认
StartGlobalTimer
参数正确(索引、间隔、回调)。
- 问题2:条件判断失败→打印
openDays
和playerLevel
,确认CSV表规则与变量名(如G12是否为开服天数)。
- 问题3:奖励未发放→检查
GiveItem
参数(物品ID、数量),确认CSV表奖励物品存在。
- 调试技巧:使用
Print()
函数输出关键变量(如Print(openDays)
),逐步排查逻辑错误。
环节6:课堂练习与总结(5分钟)
- 练习任务:在教师指导下,尝试修改活动规则(如增加“开服15天需40级”),并调试运行。
- 总结:“天降财神”活动的核心是“规则驱动+定时器联动+玩家交互”,需关注触发条件的准确性(天数与等级)和用户体验(倒计时提示)。
板书设计:
天降财神活动流程:
规则设计(CSV表) → 界面搭建(背景/按钮/倒计时) → 脚本逻辑(定时器触发→条件判断→抽奖→奖励) → 调试优化
课后反思:通过实操演示与问题调试,学生需掌握全局定时器与玩家脚本的联动,后续可扩展至“限时活动”“跨服活动”等复杂功能。