使用全局变量和自定义函数 实现每日工资任务的脚本说明

需要的文档编辑器Notepad++载地址

https://www.123pan.com/s/7M3qVv-LwjGh.html   提取码:1234

首先我们要添加一个NPC脚本我这里定义一个脚本号588888 脚本文件为xb_meiri.lua 文件放在public/data/script目录下

内容如下

x588888_g_scriptId = 588888
--**********************************
--交互入口
--**********************************

function x588888_OnDefaultEvent(sceneId,selfId)
	
			BeginEvent(sceneId)
			local ntext="#G欢迎您来到本服务器,在我这里您可以领取每日工资任务福利。如果全部完成则奖励#Y10万元宝、10万绑定元宝、1000金币、1000交子和1000万经验。"
				
				--上面先给出一个提示 然后下面我们写每日完成情况
				local old_date=XB_Get_meiri(sceneId,selfId,XB_MR_Date) --读取上一次完成任务的日期
				local now_date=GetDayTime()		--获取今天日期
				if now_date ~= old_date then --判断今天是否做过这些任务
					XB_Set_meiri(sceneId,selfId,XB_MR_Date,now_date)  --如果今天没做过这些任务则记录今天的日期
					XB_Set_meiri(sceneId,selfId,XB_MR_QJ,0)    --下面开始清零所有任务次数为0
					XB_Set_meiri(sceneId,selfId,XB_MR_FZ,0)
					XB_Set_meiri(sceneId,selfId,XB_MR_XX,0)
					XB_Set_meiri(sceneId,selfId,XB_MR_WBT,0)
					XB_Set_meiri(sceneId,selfId,XB_MR_XB,0)
					XB_Set_meiri(sceneId,selfId,XB_MR_BPRW,0)
					
				end
				
				local qiju=XB_Get_meiri(sceneId,selfId,XB_MR_QJ)	--读取棋局完成任务次数
				local fanzei=XB_Get_meiri(sceneId,selfId,XB_MR_FZ)	--读取反贼完成任务次数
				local xiaoxiao=XB_Get_meiri(sceneId,selfId,XB_MR_XX)	--读取宵小完成任务次数
				local wabaotu=XB_Get_meiri(sceneId,selfId,XB_MR_WBT)	--读取挖宝图完成任务次数
				local xunbao=XB_Get_meiri(sceneId,selfId,XB_MR_XB)	--读取楼兰寻宝完成任务次数
				local bangpairw=XB_Get_meiri(sceneId,selfId,XB_MR_BPRW)	--读取帮派任务完成任务次数

				local wc_fz ="#Y不满足"
				local wc_qj ="#Y不满足"
				
				if qiju ==1 then --判断棋局参与次数如果参与过1次 则显示完成否则显示不满足
					 wc_qj="#G已满足"
				end
				
				if fanzei >=5 then --反贼参与次数是否为5  完成5次显示满足
					 wc_fz="#G已满足"
					 XB_Set_meiri(sceneId,selfId,XB_MR_FZ,5)--如果超过5次 则重置次数为5
					 fanzei=5
				end

				AddText(sceneId,ntext)
				AddText(sceneId," ")
				AddText(sceneId, "反贼完成次数: "..fanzei.."/5  "..wc_fz)
				AddText(sceneId," ")
				AddText(sceneId, "棋局参与次数: "..qiju.."/1  "..wc_qj)
				
				if qiju==1  then
					if fanzei==5 then
						AddNumText(sceneId, x588888_g_scriptId, "#G领取工资任务奖励", 6, 1)
					end 
				end
				
					
			EndEvent(sceneId)
			DispatchEventList(sceneId,selfId,-1)

end

function x588888_OnEventRequest( sceneId, selfId, targetId, eventId)
    local key = GetNumText()
	--满血满怒
	if key == 1 then
		YuanBao(sceneId,selfId,-1,1,100000)
		x588888_tips(sceneId, selfId, "成功领取10万元宝")
	
	--领取金币
	
			-- if x588888_CheckGMName(sceneId,selfId) == 0 then
				-- x588888_tips(sceneId, selfId, "你不是GM不能使用此功能")
				-- return
			-- end
        AddMoney(sceneId,selfId, 10000000)
        x588888_tips(sceneId, selfId, "角色成功增加1000金币")

	--领取1000万经验
	
		if GetLevel(sceneId, selfId) > 119 then
			x588888_tips(sceneId, selfId, "你等级过高!")
			return
		end
		
		for i = 1,10 do
			--修复错误经验一次最多获取70万 所以这里循环10次 一次获取1000万经验
			LuaFnAddExp(sceneId,selfId, 700000)
			LuaFnAddExp(sceneId,selfId, 300000)
		end
		
		x588888_tips( sceneId,selfId,"角色成功增加1000万经验")
 	
	--领取10000赠点
		ZengDian(sceneId,selfId,selfId,1,100000)
		x588888_tips( sceneId,selfId,"成功领取10万绑定元宝")
 	
	--领取1000交子
		AddMoneyJZ (sceneId,selfId, 10000000)
		x588888_tips( sceneId,selfId,"角色成功增加1000交子")
	end		

end


--**********************************
--提示函数
--**********************************
function x588888_tips(sceneId, selfId, Tip)
	BeginEvent(sceneId)
		AddText(sceneId, Tip)
	EndEvent(sceneId)
	DispatchMissionTips(sceneId, selfId)
end

现在我们去public/data目录下找到文件 script.dat 文件  在这个文件中将我们的脚本进行连接

588888=\xb_meiri.lua

然后打开服务端public/data/script目录下的ScriptGlobal.lua文件 添加如下内容

----雪宝科技添加开始-----------------
--定义每个数据变量名称和在数组中的位置 对应文件中的行数 以此类推行数
XB_MR_Date = 1  --定义日期 用来判断今天是否第一次做这个任务还是已经做过这些任务 对应文件中第一行
XB_MR_QJ=2	--定义棋局任务完成次数 文件中第二行
XB_MR_FZ=3	--定义反贼任务完成次数  文件中第三行
XB_MR_XX=4	--定义宵小任务完成次数  文件中第四行
XB_MR_XB=5	--定义楼兰寻宝任务完成次数 文件中第五行
XB_MR_WBT=6	--定义挖藏宝图完成次数 文件中第六行
XB_MR_BPRW=7	--定义帮派任务完成次数  文件中第七行
--注意我们这里一共向文件中读写7行数据那么下面每次读取 和写入数据时要循环7次

function XB_Get_meiri(sceneId,selfId,nIndex) --先写一个读取函数 注意nIndex是从程序中传递过来的
    local nGuid = LuaFnGetID(sceneId,selfId) --获取玩家ID
	--打开服务器ServerBD/MissIonData目录中XBMR+玩家ID.txt文件
    local handle = openfile("./ServerBD/MissIonData/XBMR"..nGuid..".txt", "r")
	--定义一个数组
	local nServerData = {}
	--判断文件是否存在 如果存在
	if handle and handle ~= nil then
		--如果存在则循环7次 这里就是我们上面定义的最大行数
	    for i = 1,7 do
			--每次循环会读取一行数据存到变量nData中
		    local nData = read(handle, "*l")
			--判断读变量nData是不是空的 
			if nData ~= nil then
				--如果读取到的nData不是空的则将变量转换成数字保存到数组中
				nServerData[i] = tonumber(nData)
			else
				--如果读取到的nData是空的 则对应数组设置为 0
				nServerData[i] = 0
			end
		end
		--关闭文件
	    closefile(handle)
	else
		--如果没有找到这个文件,因为玩家第一次登陆肯定没有创建这个文件
	    for i = 1,7 do
		--循环7次 将所有数组赋值 0
		    nServerData[i] = 0
		end
	end
    if nServerData[nIndex] == nil then
	    nServerData[nIndex] = 0
	end	
	return nServerData[nIndex]
end

function XB_Set_meiri(sceneId,selfId,nIndex,insetData)
    local nServerData = XB_GET_ExData(sceneId,selfId)
	local nTextData = ""
    local nGuid = LuaFnGetID(sceneId,selfId)
    local handle = openfile("./ServerBD/MissIonData/XBMR"..nGuid..".txt", "wb")
	nServerData[nIndex] = insetData
	for i = 1,7 do
	    nTextData = nTextData..nServerData[i].."\n"
	end
	if nTextData ~= "" then
	    write(handle, nTextData)
		closefile(handle);
	end
end
--读取所有数据返回数组
function XB_GET_ExData(sceneId,selfId)
    local nGuid = LuaFnGetID(sceneId,selfId)
    local handle = openfile("./ServerBD/MissIonData/XBMR"..nGuid..".txt", "r")
	local nServerData = {}
	if handle and handle ~= nil then
	    for i = 1,7 do
		    local nData = read(handle, "*l")
			if nData ~= nil then
				nServerData[i] = tonumber(nData)
			else
				nServerData[i] = 0
			end
		end
	    closefile(handle)
	else
	    for i = 1,7 do
		    nServerData[i] = 0
		end
	end
    return nServerData	
end
----大鹏添加结束-----------------

现在我们在需要的副本脚本添加我们写的函数

这里以棋局 和反贼为例来讲解

找到棋局副本脚本路径 /public/data/script/fuben/efuben_1_zhenlong_huodong.lua

然后搜索 SetMissionData(sceneId, memId,  

20240503193602267-202309061693997722196202

找到后我们添加如下脚本内容

--这里添加上我们添加的日期 即写入今天日期
		XB_Set_meiri(sceneId,memId,XB_MR_Date,day)
		XB_Set_meiri(sceneId,memId,XB_MR_QJ,1) --棋局每天只需要完成一次那么我们这里就直接设置1

这里我们棋局脚本就做好了  现在去找反贼副本所在位置

/public/data/script/xunhuan/eDynamicNPC_ThiefSoldier.lua

然后搜索 x050013_CreateBoss( sceneId, CurLevel )

20240503193653504-11

这里我们要添加如下脚本

local now_date=GetDayTime()	--读取今天日期
		local old_date=XB_Get_meiri(sceneId,selfId,Date) --读取文件中记录的上次日期
		local fanzei=XB_Get_meiri(sceneId,selfId,XB_MR_FZ)	--读取刷反次数
		if old_date~=now_date then	--判断今天日期和文件中记录的日期是否相同 
			XB_Set_meiri(sceneId,selfId,XB_MR_Date,now_date) --如果不同 则写入今天日期
			XB_Set_meiri(sceneId,selfId,XB_MR_FZ,1)	--如果不同则写入今天刷反次数 1
		else
			XB_Set_meiri(sceneId,selfId,XB_MR_FZ,fanzei+1) --如果相同则说明今天已经刷过一次反贼 则在原来的次数上+1
		end

对了我们还要建立一个NPC来指向我们创建的588888脚本

打开服务端/public/Scene目录 因为我们回城点是在洛阳 那么就找到洛阳的NPC设置文件

luoyang_monster.ini

然后把第一行 monstercount=223 这个数字加1

在文件最后加上下面代码

[monster223]
guid=16223372
type=49296
name=#b#e660066#gffff00工资任务
title=每日工资任务
pos_x=93
pos_z=177
dir=27
script_id=588888
respawn_time=1000
group_id=-1
team_id=-1
base_ai=3
ai_file=0
patrol_id=-1
shop0=-1
shop1=-1
shop2=-1
shop3=-1
ReputationID=-1
level=3

到此我们脚本就做好了可以登录游戏来测试了

请登录后发表评论

    没有回复内容

activityactivity
站长

站长

点击联系站长

在线时间
12:00 - 22:00