石器时代服务端LNS脚本实例教程

  • A+
所属分类:LUA脚本

石器时代服务端LNS脚本实例教程
首先在最开始先说明下这个实例脚本不是我本人写的是我转载的。虽然很简单但是通过这个例子,我想大家应该能对LNS脚本有个感性认识。同时我也在学习中,希望能和有共同爱好的朋友大家一起交流。今天我来教大家怎么写一个定时出现,然后在某个时间后自动消失的NPC,实现一个自动搞线上活动的NPC.
我们首先确定我们的NPC的功能和出现时段,每个星期7天,星期一到星期天,出现的时段是星期六、星期天的20:00 - 23:00 也就是3个小时了
为了节省时间我就把2天的活动内容全部统一了,有意思的朋友可以改成每天活动内容不同,好了下面我们来看看具体的实现方法
这里顺便提一下lua脚本不需要特别转成unix格式,不过转了也不会有什么影响
提醒一下各位,LUA脚本语法是大小写敏感的,只要有一个字符不相同LUA就认为是完全2个不同的东西
cycleactivities.lua
function CycleActivities_Init( MeIndex ) --设置NPC形象 Char.SetData(_MeIndex, %对象形象%, 100705);
Char.SetData(MeIndex, %对象原形%, 100705);

--设置NPC所在地图
Char.SetData(MeIndex, %对象地图%, 2000);

--设置X坐标
Char.SetData(_MeIndex, %对象_X%, 58);

--设置Y坐标
Char.SetData(_MeIndex, %对象_Y%, 58);

--设置NPC方向
Char.SetData(MeIndex, %对象方向%, %右下%);

--设置NPC名称
Char.SetData(MeIndex, %对象原名%, "周期活动使者");

--设置NPC进入隐身状态
Char.SetData(MeIndex, %对象隐身%, false);
--一个全局变量-用于控制活动模式是否为激活状态
M_CycleActivities_Flg = 0;

--响应循环事件 60秒循环一次
if (Char.SetLoopEvent(nil, "CycleActivities_LoopCallBack", _MeIndex, 60000) < 0) then
print("CycleActivities_LoopCallBack 注册事件失败。");
return false;
end

--最后要返回操作结果
return true;
end

function CycleActivities_LoopCallBack( _MeIndex)
--先获取现在是星期几
local TM_WeekDay = tonumber(os.date("%w", os.time())); --注意%w的大小写

--周日或周六
if(TM_WeekDay == 0 or TM_WeekDay == 6) then
--再获取现在的时间
local TM_Hour = tonumber(os.date("%H", os.time()));

--活动时间是20:00-22:00
if(TM_Hour >= 20 and TM_Hour <= 22) then
if(M_CycleActivities_Flg == 0) then
M_CycleActivities_Flg = 1;
--取消NPC的隐身状态并注册对话事件
Char.SetData(MeIndex, %对象隐身%, true);
--向NPC周围的玩家发送NPC数据更新封包
NLG.UpChar(MeIndex); Char.SetTalkedEvent(nil, "CycleActivities_TalkedCallBack", _MeIndex); --公告 NLG.TalkToCli(-1, "今天的周期活动正式开始了,我们有丰厚的奖品等着大家哦,欢迎大家踊跃参加。", %黄色%, 0, _MeIndex); end else M_CycleActivities_Flg = 0; --重新开启NPC的隐身状态并且取消对话事件的响应 Char.SetData(_MeIndex, %对象隐身%, false);
--向NPC周围的玩家发送NPC数据更新封包
NLG.UpChar(_MeIndex);
Char.SetTalkedEvent(nil, nil, _MeIndex);
--公告
NLG.TalkToCli(-1, "今天的周期活动已经结束了,谢谢大家的参与,我们下期再见。", %黄色%, 0, _MeIndex);
end
end
return 0;
end

function CycleActivities_TalkedCallBack( _MeIndex, _TalkIndex, _Msg, _Color, _Channel)
--这里检查玩家是否站在NPC面前
if(NLG.CheckInFront(_TalkIndex, _MeIndex, 1) == false) then
return ;
end

local TM_AddExpTime = Char.GetData(TalkIndex, %对象经余时%);

if(TM_AddExpTime == 0) then
Char.SetData(TalkIndex, %对象经加成%, 100);
--3个小时总共10800秒
Char.SetData(TalkIndex, %对象经余时%, 10800);
NLG.TalkToCli(_TalkIndex, "我已经帮您提升了100%的学习经验能力,时效剩馀180分钟。祝您游戏愉快。", _Color, 0, _MeIndex);
else
NLG.TalkToCli(_TalkIndex, "您还有剩余的经验时间哦。", _Color, 0, _MeIndex);
end
return ;
end

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

您必须登录才能发表评论!