⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 missionsdk.lua

📁 top web admin panel (tales of pirates)
💻 LUA
📖 第 1 页 / 共 5 页
字号:
			end
			
			local ret = HasRandMissionCount( character, mission.id, mission.loopinfo[loopnum].num )
			if ret == LUA_TRUE then
				--清除该环任务计数,同时环计数增加
				ret = AddRandMissionNum( character, mission.id )
				if ret ~= LUA_TRUE then
					PRINT( "CompleteRandMission:AddRandMissionNum reset quest cycle calculation failed!id = ", mission.id  )
					LG( "randmission_error", "CompleteRandMission:AddRandMissionNum reset quest cycle count failed!id ", mission.id )
					SystemNotice( character, "CompleteRandMission:AddRandMissionNum reset quest cycle calculation failed!id = "..mission.id )
					return LUA_FALSE
				end
				if loopdata[loopnum + 1] == nil then
					--清除该随机任务计数因为已经跑环完毕,任务计数从头开始
					PRINT( "CompleteRandMission:ResetRandMissionNum: quest cycle completed!" )
					ResetRandMissionNum( character, mission.id )
					SystemNotice( character, "Quest cycle completed!" )
				end
			end
		end
		
	else
		PRINT( "CompleteMission: Parameter quest type unknown. Invalid!" )
		SystemNotice( character, "CompleteMission: Parameter quest type unknown. Invalid!" )
		return LUA_FALSE
	end
	
	if tp ~= WORLD_MISSION then
		PRINT( "CompleteMission:ResetMissionState" )
		ret = RefreshMissionState( character, npc )
		if ret ~= LUA_TRUE then
			PRINT( "CompleteMission:RefreshMissionState deliver quest reset npc quest status failed!" )
			SystemNotice( character, "CompleteMission:RefreshMissionState deliver quest change npc quest status failed!" )
			return LUA_FALSE
		end
	end
	
	PRINT( "CompleteMission: return true" )
	return LUA_TRUE
end

--选择任务列表
function SelMissionList( character, npc, selindex, missionlist )
	local npcid = GetCharID( npc )
	local ret, id, state = GetMissionInfo( character, npcid, selindex )
	if ret ~= LUA_TRUE then
		PRINT( "SelMissionList: obtain quest notice failed!" )
		return SystemNotice( character, "MissionProc: obtain quest notice failed!" )
	end
	
	PRINT( "SelMissionList:id = %d, state = %d", id, state )
	if missionlist[id] == nil then
		PRINT( "SelMissionList: Server does not have requested quest notice error!" )
		return SystemNotice( character, "MissionProc: server does not have requested quest notice error!" )
	end
	
	ret = SetMissionTempInfo( character, npcid, id, state, missionlist[id].tp )
	if ret ~= LUA_TRUE then
		PRINT( "SelMissionList:set quest temporary data notice failed!" )
		return SystemNotice( character, "MissionProc: Set quest temporary data notice failed!" )
	end
	
	if missionlist[id].tp == NOMAL_MISSION then
		PRINT( "SelMissioinList:NomalMission type" )
		--根据任务状态发送任务的不同信息
		if state == MIS_DELIVERY then
			return SendDeliveryPage( character, npcid, missionlist[id], missionlist[id].id )
		elseif state == MIS_ACCEPT then
			return SendAcceptPage( character, npcid, missionlist[id], missionlist[id].id )
		elseif state == MIS_PENDING then
			return SendPendingPage( character, npcid, missionlist[id], missionlist[id].id )
		else
			PRINT( "SelMissionList: incorrect type of quest status notice!" )
			return SystemNotice( character, "SelMissionList: incorrect type of quest status notice!" )
		end
	elseif missionlist[id].tp == RAND_MISSION then
		PRINT( "SelMissioinList:RandMission type" )
		--判断是否已经接受了该随机任务,如果接受了则是来还任务得
		ret = HasRandMission( character, missionlist[id].id )
		if ret ~= LUA_TRUE then			
			--随机任务在选择时就已经产生并且玩家接受任务
			local ret = IsMissionFull( character )
			if ret == LUA_TRUE then
				return SystemNotice( character, "You quest log is full. Please abandon an existing quest before activating another!" )
			end
			
			local ret = NpcTriggerCheck( character, missionlist[id].begin )
			if ret ~= LUA_TRUE then
				PRINT( "SelMissionList:NpcTriggerCheck accept random quest condition trigger management failed!" )
				SystemNotice( character, "SelMissionList:NpcTriggerCheck accept random quest condition trigger management failed!" )
				return LUA_FALSE
			end
		
			PRINT( "SelMissionList:missionlist[id] = , id = ", missionlist[id], id )
			local ret, index = CreateRandMission( character, npc, missionlist[id] )
			if ret ~= LUA_TRUE then
				if index ~= nil then
					-- 表明背包容量不足
					return LUA_TRUE
				end
				
				PRINT( "SelMissionList:CreateRandMission, generate random quest failed!" )
				return LUA_FALSE
			end
			
			ret = AcceptMission( character, npc, missionlist, index )
			if ret ~= LUA_TRUE then
				PRINT( "SelMissionList:AcceptMission: accept quest failed!" )
				SystemNotice( character, "SelMissionList:AcceptMission: accept quest failed!" )
				return LUA_FALSE
			end
			
			--发送随机任务的交付页面信息
			local ret, randid, state = GetMissionInfo( character, npcid, selindex )
			if ret ~= LUA_TRUE or id ~= randid then
				ret, state = GetCharMission( character, npcid, id )
				if ret ~= LUA_TRUE then
					PRINT( "SelMissionList:GetCharMission obtain quest notice failed!" )
					return SystemNotice( character, "MissionProc:GetCharMission obtain quest notice failed!" )
				end
			end
			
			--if state == MIS_PENDING then
				PRINT( "SelMissionList:SendPendingPage, index =, mission = ", index, missionlist[id].missionlist[index] )
				return SendPendingPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
			--elseif state == MIS_DELIVERY then
				--PRINT( "SelMissionList:SendDeliveryPage, index = , mission = ", index, missionlist[id].missionlist[index] )
				--return SendDeliveryPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
			--else
				--PRINT( "SelMissionList:random quest accept response as PENDING or DELIVERY status, however test status incorrect. state = "..state )
				--return SystemNotice( character, "SelMissionList:random quest accept response as PENDING or DELIVERY status, however test status incorrect. state = "..state )
			--end
		else
			local ret, index = GetCharRandMission( character, missionlist[id].id, missionlist[id] )
			if ret ~= LUA_TRUE or index == 0 then
				--根据随机任务参数生成随机任务信息错误
				PRINT( "SelMissionList:GetcharRandMission, according to random quest parameter generate random quest notice error!" )
				return SystemNotice( character, "SelMissionList:GetcharRandMission, according to random quest parameter generate random quest notice error!" )
			end
			
			if state ~= MIS_DELIVERY then
				PRINT( "SelMissionList:SendPendingPage, index =, mission = ", index, missionlist[id].missionlist[index] )
				return SendPendingPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
			end
			
			PRINT( "SelMissionList:SendDeliveryPage, index = , mission = ", index, missionlist[id].missionlist[index] )
			return SendDeliveryPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
		end
		
	else
		PRINT( "SelMissionList: parameter quest type unknown, invalid!" )
		SystemNotice( character, "SelMissionList: parameter quest type unknown, invalid!" )
		return LUA_FALSE
	end
	
end

--任务处理
function MissionProc( character, npc, rpk, missionlist )
	if missionlist == nil then
		SystemNotice( character, "MissionProc: parameter error!" )
		return LUA_FALSE
	end
	
	local byCmd = ReadByte( rpk )
	if byCmd == MIS_SEL then
		local selindex = ReadByte( rpk )
		return SelMissionList( character, npc, selindex, missionlist )
	elseif byCmd == MIS_BTNACCEPT then
		local ret = IsMissionFull( character )
		if ret == LUA_TRUE then
			return BickerNotice( character, "Quest slots are all taken. Unable to obtain new quest!" )
		end
		return AcceptMission( character, npc, missionlist )
	elseif byCmd == MIS_BTNDELIVERY then
		local byParam1 = ReadByte( rpk )
		local byParam2 = ReadByte( rpk )
		local ret = CompleteMission( character, npc, missionlist, byParam1, byParam2 )
		--if ret == LUA_TRUE then
			--完成任务后继续下一个任务
			--local npcid = GetCharID( npc )
			--local ret, index, id, state = GetNextMission( character, npcid )
			--PRINT( "MissionProc:GetNextMission: ret, index, id, state", ret, index, id, state )
			--if ret == LUA_TRUE then
				--PRINT( "MissionProc:SelMissionList" )
				--return SelMissionList( character, npc, index, missionlist )
			--end
		--end
	--elseif byCmd == MIS_BTNPENDING then
	--elseif byCmd == MIS_TALK then
	else
		PRINT( "MissionProc:incorrect quest page command type!" )
		return SystemNotice( character, "MissionProc:incorrect quest page command type!" )
	end
end

--查询任务日志信息
function MissionLog( character, sid )
	PRINT( "MissionLog" )
	if sid == nil  or Mission[sid] == nil then
		PRINT( "MissionLog: cannot locate quest script notice, sid = "..sid )		
		LG( "mission_error", "MissionLog: cannot locate quest script notice, sid = "..sid )
		SystemNotice( character, "MissionLog: cannot locate quest script notice, sid = "..sid )
		return
	end
	
	if Mission[sid].tp == NOMAL_MISSION or Mission[sid].tp == WORLD_MISSION then
		SendMissionLog( character, Mission[sid], Mission[sid].id, Mission[sid].name )
	elseif Mission[sid].tp == RAND_MISSION then
		local ret, index, loopdata = GetCharRandMission( character, Mission[sid].id, Mission[sid] )
		if ret ~= LUA_TRUE or index == 0 then
			--根据随机任务参数生成随机任务信息错误
			PRINT( "MissionLog:GetcharRandMission, according to random quest parameter generated quest notice error!" )
			SystemNotice( character, "MissionLog:GetcharRandMission, according to random quest parameter generated quest notice error!" )
			return
		end
		
		PRINT( "MissionLog:SendMissionLog, index = , mission = ", index, Mission[sid].missionlist[index] )
		SendMissionLog( character, Mission[sid].missionlist[index], Mission[sid].id, Mission[sid].name )
	else
		PRINT( "MissionLog: parameter quest type unknown, invalid!ID = "..sid )
		SystemNotice( character, "SelMissionList: parameter quest type unknown, invalid!ID = "..sid )		
	end
end

--发送任务日志信息
function SendMissionLog( character, mission, id, name )
	PRINT( "SendMissionLog" )
	if id == nil or mission == nil then
		return SystemNotice( character, "Have not found target quest log notice, ID = "..id )		
	end
	
	local packet = GetPacket()
	WriteCmd( packet, CMD_MC_MISLOGINFO )
	WriteWord( packet, id )
	
	--发送任务需求信息
	WriteString( packet, name )
	PRINT( "SendMissionLog:misname = ", name )
	WriteByte( packet, mission.need.count )
	PRINT( "SendMissionLog:need count = "..mission.need.count )
	for n = 1, mission.need.count, 1 do
		PRINT( "SendMissionLog:need n = , tp, p1, p2, p3 ", n, mission.need[n].tp, mission.need[n].p1, mission.need[n].p2, mission.need[n].p3 )
		WriteByte( packet, mission.need[n].tp )
		if mission.need[n].tp == MIS_NEED_ITEM then
			WriteWord( packet, mission.need[n].p1 )
			WriteWord( packet, mission.need[n].p2 )
			--获取任务需求完成计数
			local ret, num = GetNeedItemCount( character, id, mission.need[n].p1 )
			PRINT( "SendMissionLog:GetNeedItemCount, num = ", num )
			if ret ~= LUA_TRUE then
				PRINT( "SendMissionLog:GetNeedItemCount,error. misid = , itemid = , num = ", id, mission.need[n].p1, mission.need[n].p2 )
				SystemNotice( character, "SendMissionLog: GetNeedItemCount,error." )
				LG( "mislog_error", "SendMissionLog:GetNeedItemCount,error. misid = , itemid = , num = ", id, mission.need[n].p1, mission.need[n].p2 )
				num = 0
			end
			WriteByte( packet, num )
		elseif mission.need[n].tp == MIS_NEED_KILL then
			WriteWord( packet, mission.need[n].p1 )
			WriteWord( packet, mission.need[n].p2 )
			--获取任务需求完成计数
			PRINT( "SendMissionLog:GetNumFlag:GetNumFalg, id, p1, p2", id, mission.need[n].p3, mission.need[n].p2 )
			WriteByte( packet, GetNumFlag( character, id, mission.need[n].p3, mission.need[n].p2 ) )	
		elseif mission.need[n].tp == MIS_NEED_DESP then
			WriteString( packet, mission.need[n].p1 )
		else
			PRINT( "SendMissionLog:unknown quest required type!mission id = ", id )
			SystemNotice( character, "SendMissionLog:unknown quest required type!mission id = ", id )
			return
		end
	end
	
	--发送任务奖励信息
	WriteByte( packet, mission.prize.seltp )
	WriteByte( packet, mission.prize.count )
	PRINT( "SendMissionLog:prize count = , seltype =", mission.prize.count, mission.prize.seltp )
	for i = 1, mission.prize.count, 1 do
		PRINT( "SendMissionLog:prize i = , tp, p1, p2 ", i, mission.prize[i].tp, mission.prize[i].p1, mission.prize[i].p2 )
		WriteByte( packet, mission.prize[i].tp )
		WriteWord( packet, mission.prize[i].p1 )
		WriteWord( packet, mission.prize[i].p2 )
	end
	
	--发送任务描述信息
	PRINT( "SendMissionLog:begin talk = "..mission.begin.talk )
	WriteString( packet, mission.begin.talk )
	SendPacket( character, packet )
end

--发送任务交付页信息
function SendDeliveryPage( character, npcid, mission, id )
	PRINT( "SendDeliveryPage" )

	--发送报文信息
	local packet = GetPacket()
	WriteCmd( packet, CMD_MC_MISPAGE )
	WriteByte( packet, MIS_BTNDELIVERY )
	WriteDword( packet, npcid )	
	WriteString( packet, mission.name )
	PRINT( "SenddeliveryPage:missionname = ", mission.name )
	PRINT( "SendDeliveryPage:need = ", mission.need )
	
	--发送任务需求信息
	--完成任务页不发送任务需求消息
	WriteByte( packet, 0 )
	--WriteByte( packet, mission.need.count )
	--PRINT( "SendDeliveryPage:need count = "..mission.need.count )
	--for n = 1, mission.need.count, 1 do
		--PRINT( "SendDeliveryPage:need n = , tp, p1, p2, p3 ", n, mission.need[n].tp, mission.need[n].p1, mission.need[n].p2, mission.need[n].p3 )
		--WriteByte( packet, mission.need[n].tp )
		--if mission.need[n].tp == MIS_NEED_ITEM then
			--WriteWord( packet, mission.need[n].p1 )
			--WriteWord( packet, mission.need[n].p2 )
			----获取任务需求完成计数
			--local ret, num = GetNeedItemCount( character, id, mission.need[n].p1 )
			--PRINT( "SendDeliveryPage:GetNeedItemCount, num = ", num )
			--if ret ~= LUA_TRUE then
				--PRINT( "SendDeliveryPage:GetNeedItemCount,error.itemid = , num = ", mission.need[n].p1, mission.need[n].p2 )
				--SystemNotice( character, "SendDeliveryPage:GetNeedItemCount,error." )
				--LG( "mislog_error", "SendDeliveryPage:GetNeedItemCount,error.itemid = , num = ", mission.need[n].p1, mission.need[n].p2 )
				--num = 0
			--end
			--WriteByte( packet, num )
		--elseif mission.need[n].tp == MIS_NEED_KILL then
			--WriteWord( packet, mission.need[n].p1 )
			--WriteWord( packet, mission.need[n].p2 )
			----获取任务需求完成计数
			--PRINT( "SendDeliveryPage:GetNumFlag:GetNumFalg, id, p1, p2", id, mission.need[n].p3, mission.need[n].p2 )
			--WriteByte( packet, GetNumFlag( character, id, mission.need[n].p3, mission.need[n].p2 ) )	
		--elseif mission.need[n].tp == MIS_NEED_DESP then
			--WriteString( packet, mission.need[n].p1 )
		--else
			--PRINT( "SendDeliveryPage:unknown quest required type!mission id = ", id )
			--SystemNotice( character, "SendDeliveryPage:unknown quest required type!mission id = ", id )
			--return
		--end
	--end
	
	--发送任务奖励信息
	WriteByte( packet, mission.prize.seltp )
	WriteByte( packet, mission.prize.count )
	PRINT( "SendDeliveryPage:prize count = , seltype =", mission.prize.count, mission.prize.seltp )
	for i = 1, mission.prize.count, 1 do
		PRINT( "SendDeliveryPage:prize i = , tp, p1, p2 ", i, mission.priz

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -