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

📄 missionsdk.lua

📁 top web admin panel (tales of pirates)
💻 LUA
📖 第 1 页 / 共 5 页
字号:
				if Profession[pf][n] == newpf then
					--该职业允许转职
					flag = 1
					break
				end
			end
			
			--判断是否可以转职
			if flag ~= 1 then
				PRINT( "CheckConvertProfession: return false" )
				return LUA_FALSE
			end
		else
			PRINT( "CheckConvertProfession: return false fo Profession[pf] == nil " )
			return LUA_FALSE
		end
	end
	
	PRINT( "CheckConvertProfession: Category check cat =, newpf = ", cat, newpf )
	--检测是否有体形限制
	if Category ~= nil and Category[cat] ~= nil then
		local flag = 0
		for n = 1, Category[cat].count, 1 do
			PRINT( "CheckConvertProfession:n = , newpf = , catpf = ", n, newpf, Category[cat][n] )
			if Category[cat][n] == newpf then
				PRINT( "CheckConvertProfession: return false" )
				flag = 1
				break
			end
		end
		
		if flag ~= 1 then
			PRINT( "CheckConvertProfession: return false" )
			return LUA_FALSE
		end
	else
		PRINT( "CheckConvertProfession: return false fo Category[cat] == nil " )
	end
	
	PRINT( "CheckConvertProfession: return true" )
	return LUA_TRUE
end

--中断任务
function CancelMission( character, id, sid )
	PRINT( "CancelMission, sid = ", sid )
	if sid == nil or Mission[sid] == nil then
		PRINT( "CancelMission: abandoned quest function parameter cannot be as null!sid = "..sid )
		SystemNotice( character, "CancelMission: abandoned quest function parameter cannot be as null!sid = "..sid )
		LG( "mission_error", "CancelMission: abandoned quest function parameter cannot be as null!sid = "..sid )
		local ret = ClearMission( character, id )
		if ret ~= LUA_TRUE then
			LG( "mission_error", "CancelMission: delete character target quest notice failed!charname = , id = , sid = ", GetCharName( character ), id, sid )
		else
			SystemNotice( character, "has cleared invalid quest notice !ID = "..sid )
			LG( "mission_error", "CancelMission: clear target character quest notice successful!charname = , id = , sid = ", GetCharName( character ), id, sid )
		end
		
		return LUA_FALSE
	end
	
	local mission = Mission[sid]
	
	PRINT( "CancelMission:mission.cancel", mission.cancel )
	if mission.tp == NOMAL_MISSION or mission.tp == WORLD_MISSION then
		if mission.cancel == nil then
			PRINT( "CancelMission: Target quest has not cancel operation. Return true" )
			return LUA_TRUE
		end
	
		local ret = NpcCancelTrigger( character,  mission.cancel, mission.id, mission.sid )
		if ret ~= LUA_TRUE then
			PRINT( "CancelMission:NpcCancelTrigger accept deliver quest trigger failed!" )
			SystemNotice( character, "CancelMission:NpcCancelTrigger accept deliver quest trigger failed!" )
			return LUA_FALSE
		end
		PRINT( "CancelMission: NpcTrigger, return true" ) 
	elseif mission.tp == RAND_MISSION then
		--初始化全局随机任务参数
		InitRandParam()
		
		--获取角色的随机任务配置信息
		PRINT( "CancelMission:GetRandMission, id = ", id  )
		local ret
		RandParam.id = id
		ret, RandParam.tp, RandParam.level, RandParam.exp, RandParam.money, RandParam.prizedata, RandParam.prizetp, RandParam.numdata = GetRandMission( character, id )
		if ret ~= LUA_TRUE then
			PRINT( "CancelMission:GetRandMission error." )
			SystemNotice( character, "CancelMission:GetRandMission error." )
			return LUA_FALSE
		end
		PRINT( "CancelMission:tp, level, exp, money, item, numdata",  RandParam.tp, RandParam.level, RandParam.exp, RandParam.money, RandParam.prizedata, RandParam.prizetp, RandParam.numdata )
		
		local index = GetRandMissionTypeIndex( mission, RandParam.tp )
		PRINT( "CancelMission:GetRandMissionTypeIndex index = ", index )
		if index == 0  then
			PRINT( "CancelMission: obtain random quest matching type notice failed!" )
			SystemNotice( character, "CancelMission: obtain random quest matching type notice failed!" )
			return LUA_FALSE
		end
	
		if mission.missionlist == nil or mission.missionlist[index] == nil then
			PRINT( "CancelMission:random quest: quest notice error!mission.missionlist = , tpindex = ", mission.missionlist, index )
			SystemNotice( character, "CancelMission:random quest: quest notice error!mission.missionlist = , tpindex = ", mission.missionlist, index )
			return LUA_FALSE
		end
		
		if mission.missionlist[index].cancel == nil then
			PRINT( "CancelMission: Target quest has not cancel operation. Return true" )
			return LUA_TRUE
		end
	
		ret = NpcCancelTrigger( character, mission.missionlist[index].cancel, mission.id, mission.sid )
		if ret ~= LUA_TRUE then
			PRINT( "CancelMission:NpcCancelTrigger accept deliver quest trigger failed!" )
			SystemNotice( character, "CancelMission:NpcCancelTrigger accept deliver quest trigger failed!" )
			return LUA_FALSE
		end
		PRINT( "CancelMission: random quest: NpcCancelTrigger, return true" )
	else
		PRINT( "CancelMission:incorrect quest type notice.ID = "..mission.sid )
		SystemNotice( character, "CancelMission:incorrect quest type notice.ID = "..mission.sid )
		return LUA_FALSE
	end
	
	return LUA_TRUE
end

--接受任务
function AcceptMission( character, npc, missionlist, tpindex )
	PRINT( "AcceptMission" )
	local npcid = GetCharID( npc )
	local ret, id, state, tp = GetMissionTempInfo( character, npcid )
	if ret ~= LUA_TRUE then 
		SystemNotice( character, "AcceptMission: obtain character dialogue temporary quest notice error!" )
		return LUA_FALSE
	end
	
	local mission
	if tp == WORLD_MISSION then
		if Mission[id] == nil then
			SystemNotice( character, "AcceptMission: Obtain character incorrect world quest index notice!ID = "..id )
			LG( "mission_error", "AcceptMission: Obtain character incorrect world quest index notice!ID = "..id )
			return LUA_FALSE
		end
		mission = Mission[id]
	else
		if missionlist[id] == nil then
			PRINT( "AcceptMission:obtain character incorrect common quest index notice!ID = "..id )
			SystemNotice( character, "AcceptMission:obtain character incorrect common quest index notice!ID = "..id )
			LG( "mission_error", "AcceptMission:obtain character incorrect common quest index notice!ID = "..id )
			return LUA_FALSE
		end
		if missionlist == nil then
			PRINT( "AcceptMission:Function parameter error!missionlist = "..missionlist )
			SystemNotice( character, "AcceptMission:Function parameter error!missionlist = "..missionlist )
			LG( "mission_error", "AcceptMission:Function parameter error!missionlist = "..missionlist )
			return LUA_ERROR
		end
		mission = missionlist[id]
	end
	
	if mission.begin == nil then
		PRINT( "AcceptMission: obtain character incorrect quest start trigger notice! ID = "..id )
		SystemNotice( character, "AcceptMission: obtain character incorrect quest start trigger notice!" )
		LG( "mission_error", "AcceptMission: obtain character incorrect quest start trigger notice! ID = "..id )
		return LUA_FALSE
	end
	
	PRINT( "AcceptMission:npcid = %d ", npcid )
	if mission.tp == NOMAL_MISSION or mission.tp == WORLD_MISSION then
		PRINT( "AcceptMission: Required number of empty slots in inventory: numgrid = ", mission.begin.baggrid )
		local ret = HasLeaveBagGrid( character, mission.begin.baggrid )
		if ret ~= LUA_TRUE then
			PRINT( "AcceptMission: insufficient inventory slot when character accept quest! num = ", mission.begin.baggrid )
			BickerNotice( character, "Inventory space insufficient, requires"..mission.begin.baggrid.."space. Activation of quest failed!" )
			return LUA_FALSE
		end
		
		local ret = NpcTrigger( character,  npc, mission.begin, mission.id, mission.sid )
		if ret ~= LUA_TRUE then
			PRINT( "AcceptMission:NpcTrigger accept quest trigger management failed!" )
			SystemNotice( character, "AcceptMission:NpcTrigger accept quest trigger management failed!" )
			return LUA_FALSE
		end		
		PRINT( "AcceptMission: NpcTrigger, return true" ) 
	elseif mission.tp == RAND_MISSION then
		if mission.missionlist == nil or mission.missionlist[tpindex] == nil or mission.missionlist[tpindex].begin.baggrid == nil then
			PRINT( "AcceptMission:random quest: quest notice error!mission.missionlist = , tpindex = ", mission.missionlist, tpindex )
			SystemNotice( character, "AcceptMission:random quest: quest notice error!mission.missionlist = , tpindex = ", mission.missionlist, tpindex )
			return LUA_FALSE
		end
		
		PRINT( "AcceptMission: Required number of empty slots in inventory: numgrid = ", mission.missionlist[tpindex].begin.baggrid )
		local numgrid = mission.missionlist[tpindex].begin.baggrid
		local ret = HasLeaveBagGrid( character, numgrid )
		if ret ~= LUA_TRUE then
			PRINT( "AcceptMission: insufficient inventory slot when character accept quest! num = ", numgrid )
			BickerNotice( character, "Inventory space insufficient, requires"..numgrid.."space. Activation of quest failed!" )
			return LUA_FALSE
		end
		
		ret = NpcTrigger( character,  npc, mission.missionlist[tpindex].begin, mission.id, mission.sid )
		if ret ~= LUA_TRUE then
			PRINT( "AcceptMission:NpcTrigger accept quest trigger management failed!" )
			SystemNotice( character, "AcceptMission:NpcTrigger accept quest trigger management failed!" )
			return LUA_FALSE
		end
		PRINT( "AcceptMission: Random quest: NpcTrigger, return true" )
	else
		PRINT( "AcceptMission: Incorrect quest type notice. ID = "..mission.sid )
		SystemNotice( character, "AcceptMission: Incorrect quest type notice. ID = "..mission.sid )
		return LUA_FALSE
	end

	if tp ~= WORLD_MISSION then
		ret = RefreshMissionState( character, npc )
		if ret ~= LUA_TRUE then
			PRINT( "AcceptMission:random quest: RefreshMissionState accept quest reset npc quest status failed!" )
			SystemNotice( character, "AcceptMission:random quest: RefreshMissionState accept quest change npc quest status failed!" )
			return LUA_FALSE
		end
	end
	
	return LUA_TRUE
end

--完成任务
function CompleteMission( character, npc, missionlist, selitem, param )
	PRINT( "CompleteMission" )
	if missionlist == nil then
		SystemNotice( character, "CompleteMission:Function parameter error!" )
		return LUA_ERROR
	end
	
	local npcid = GetCharID( npc )
	local ret, id, state, tp = GetMissionTempInfo( character, npcid )
	if ret ~= LUA_TRUE then 
		SystemNotice( character, "CompleteMission:obtain character dialogue quest notice error!" )
		return LUA_FALSE
	end

	local mission	
	if tp == WORLD_MISSION then
		if Mission[id] == nil then
			SystemNotice( character, "CompleteMission: Obtain character error world quest index notice! ID = "..id )
			LG( "mission_error", "CompleteMission: Obtain character error world quest index notice! ID = "..id )
			return LUA_FALSE
		end
		mission = Mission[id]
	else		
		if missionlist[id] == nil then
			SystemNotice( character, "CompleteMission:obtain character incorrect common quest index notice!ID = "..id )
			LG( "mission_error", "CompleteMission:obtain character incorrect common quest index notice!ID = "..id )
			return LUA_FALSE
		end
		mission = missionlist[id]
	end
	
	local ret = HasMisssionFailure( character, mission.id )
	if ret == LUA_TRUE then
		BickerNotice( character, "Quest\""..mission.name.."\" has failed, please select to abandon to clear quest log!" )
		return LUA_TRUE
	end
	
	if mission.tp == NOMAL_MISSION or mission.tp == WORLD_MISSION then
		PRINT( "CompleteMission: empty slot of inventory required: numgrid = ", mission.result.baggrid )
		local ret = HasLeaveBagGrid( character, mission.result.baggrid )
		if ret ~= LUA_TRUE then
			PRINT( "CompleteMission: insufficient inventory slot when character completes quest! num = ", mission.result.baggrid )
			BickerNotice( character, "Inventory space insufficient, requires"..mission.result.baggrid.."1 slot. Completion of quest failed!" )
			return LUA_FALSE
		end
		
		local ret = NpcTrigger( character,  npc, mission.result, mission.id, mission.sid )
		if ret ~= LUA_TRUE then
			PRINT( "CompleteMission:NpcTriggerfunction manage delievery trigger failed!" )
			SystemNotice( character, "CompleteMission:NpcTriggerfunction manage delievery trigger failed!" )
			return LUA_FALSE
		end
		
		PRINT( "CompleteMission:prize count = "..mission.prize.count )
		if mission.prize.count > 0 then
			local ret = MisPrizeProc( character, npc, mission, selitem, param )
			if ret ~= LUA_TRUE then
				PRINT( "CompleteMission:MisPrizeProcfunction manage quest reward failed!" )
				SystemNotice( character, "CompleteMission:MisPrizeProcfunction manage quest reward failed!" )
			end
		end
	elseif mission.tp == RAND_MISSION then
		local ret, index, loopdata = GetCharRandMission( character, mission.id, mission )
		if ret ~= LUA_TRUE or index == 0 then
			--根据随机任务参数生成随机任务信息错误
			PRINT( "CompleteMission:GetcharRandMission, according to random quest parameter generate random quest notice error!" )
			SystemNotice( character, "CompleteMission:GetcharRandMission, according to random quest parameter generate random quest notice error!" )
			return LUA_FALSE
		end
		
		PRINT( "CompleteMission: empty slot of inventory required: numgrid = ", mission.missionlist[index].result.baggrid )
		local numgrid = mission.missionlist[index].result.baggrid
		local ret = HasLeaveBagGrid( character, numgrid )
		if ret ~= LUA_TRUE then
			PRINT( "CompleteMission: insufficient inventory slot when character accept quest! num = ", numgrid )
			BickerNotice( character, "Inventory space insufficient, requires"..numgrid.."1 slot. Completion of quest failed!" )
			return LUA_FALSE
		end
		
		local ret = NpcTrigger( character,  npc, mission.missionlist[index].result, mission.id, mission.sid )
		if ret ~= LUA_TRUE then
			PRINT( "CompleteMission:random quest: NpcTriggerfunction manage deliver quest trigger failed!" )
			SystemNotice( character, "CompleteMission:random quest: NpcTriggerfunction manage deliver quest trigger failed!" )
			return LUA_FALSE
		end
		
		PRINT( "CompleteMission:prize count = "..mission.missionlist[index].prize.count )
		if mission.missionlist[index].prize.count > 0 then
			local ret = MisPrizeProc( character, npc, mission.missionlist[index], selitem, param )
			if ret ~= LUA_TRUE then
				PRINT( "CompleteMission:MisPrizeProcfunction manage quest reward failed!" )
				SystemNotice( character, "CompleteMission:MisPrizeProcfunction manage quest reward failed!" )
			end
		end
		
		PRINT( "CompleteMission:CompleteRandMission, id = ", mission.id )
		ret = CompleteRandMissionCount( character, mission.id )
		if ret ~= LUA_TRUE then
			PRINT( "CompleteRandMission:random quest completion completes calculation function transfer failed: misid = ", mission.id )
			LG( "randmission_error", "CompleteRandMission:random quest completion completes calculation function transfer failed: misid = ", mission.id )
		end
		
		--判断是否跑环结束
		local ret, loopnum = GetRandMissionNum( character, mission.id )
		if ret ~= LUA_TRUE then
			PRINT( "CompleteRandMission:GetRandMissionNum function transfer failed. Unable to obtain character random quest loop count!id = ", id )
			LG( "randmission_error", "CompleteRandMission:GetRandMissionNum function transfer failed. Unable to obtain character random quest loop count!id = ", id )
			SystemNotice( character, "CompleteRandMission:GetRandMissionNum function transfer failed. Unable to obtain character random quest loop count!id = "..id )
			--清除该角色该随机任务计数
			ResetRandMissionNum( character, mission.id )
		else
			loopnum = loopnum + 1 --转换为lua数组索引
			PRINT( "CompleteRandMission:loopnum, loopinfo", loopnum, mission.loopinfo[loopnum] )
			
			if loopdata == nil or mission.loopinfo[loopnum] == nil then
				PRINT( "CompleteRandMission: quest cycle data error!loopnum = "..loopnum.." id = "..mission.id.." loopdata = "..loopdata )
				LG( "randmission_error", "CompleteRandMission: quest cycle data error!loopnum = "..loopnum.." id = "..mission.id.." loopdata = "..loopdata )
				SystemNotice( character, "CompleteRandMission: quest cycle data error!loopnum = "..loopnum.." id = "..mission.id.." loopdata = "..loopdata )
				ResetRandMissionNum( character, mission.id )
				return LUA_FALSE

⌨️ 快捷键说明

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