ShowMessage("百花缘任务脚本版本 $Rev: 300 $")



--[[
[author]
perday_max=1
]]--
script_name="百花缘"

-- 需要设置参数
local MAX_ROUND_BAIHUAYUAN = 20 -- 任务执行循环次数

local g_szMission = "百花缘"
local g_nParam = {}
local g_nIndex = -1
local g_idMission = 0
local g_idScript = 0
local g_dwNextTime = 0
local g_NpcInfo = {
	[0] = {szNpcName="阿里", fX=185, fY=65, nSceneID=2},
	[1] = {szNpcName="姜鲤", fX=224, fY=296, nSceneID=0},
}





function OnMission_808200_0()
	ShowMessage("脚本无法处理此类型子任务！")
end

local g_BaiHuaYuan_Pos = {
	[182] = { {x=69,y=42},{x=42,y=66},{x=56,y=147},{x=65,y=118},{x=62,y=87},{x=129,y=57},{x=133,y=143} },	-- 少林寺副本
	[184] = { {x=97,y=33},{x=42,y=36},{x=38,y=150},{x=158,y=140},{x=145,y=35},{x=97,y=92} },	-- 明教
	[185] = { {x=70,y=82},{x=100,y=128},{x=78,y=46},{x=94,y=59},{x=79,y=127},{x=75,y=135} },	-- 武当
	[186] = { {x=152,y=35},{x=42,y=43},{x=64,y=150},{x=149,y=154},{x=150,y=90} },	-- 天龙寺副本
	[187] = { {x=52,y=148},{x=89,y=124},{x=50,y=60},{x=142,y=42},{x=148,y=150} },	-- 逍遥
	[189] = { {x=67,y=143},{x=53,y=48},{x=95,y=50},{x=126,y=73},{x=140,y=93},{x=142,y=142},{x=95,y=127} },	-- 星宿
	[190] = { {x=95,y=141},{x=60,y=35},{x=74,y=67},{x=39,y=37},{x=41,y=145},{x=95,y=99},{x=146,y=140},{x=151,y=67} },	-- 天山
}

local g_BaiHuaYuan_Transfer = {
	[182] = {x=96,y=157},	-- 少林寺副本
	[184] = {x=98,y=163},	-- 明教
	[185] = {x=95,y=192},	-- 武当
	[186] = {x=95,y=140},	-- 天龙寺副本
	[187] = {x=39,y=130},	-- 逍遥
	[189] = {x=95,y=143},	-- 星宿
	[190] = {x=95,y=150},	-- 天山
}

local g_BaiHuaYuan_Opt = {
	[9] = "打木人锻炼",		-- 少林寺
	[11] = "去抵挡围剿",		-- 明教
	[12] = "去挑战心魔",		-- 武当
	[13] = "去大战傀儡",		-- 天龙寺
	[14] = "去见识天机傀儡",	-- 逍遥
	[16] = "打蜘蛛修炼",		-- 星宿
	[17] = "去歼灭雪怪",		-- 天山
}

function OnMission_808200_1()

	local nCurScene = GetActiveDataSceneID()

	-- 设置AI为采集
	AI:SetAI("采集")
	AI:SetParameter("初始化")
	-- 设置采集对象名称
	AI:SetParameter("目标", "添加", "稀有的花盆")
	
	if g_BaiHuaYuan_Pos[nCurScene] ~= nil then

		if nCurScene == 189 then
			MoveTo(95, 133, -1, "", 1)
		end

		AI:SetParameter("地图", nCurScene)

		local CaiJi = g_BaiHuaYuan_Pos[nCurScene]

		for i, v in ipairs(CaiJi) do
			AI:SetParameter("坐标", "添加", v.x, v.y)
		end

		AI:Start(false)
		while true  do
			if DataPool:IsMissionCanCommit(g_idMission) or GetActiveDataSceneID() ~= nCurScene then
				break
			end
			System:Sleep(200)
		end
		AI:Stop()

	else

		local szPosString = DataPool:GetPlayerMission_StrList(g_nIndex , g_nParam[6])

		if szPosString == nil then
			ShowMessage("百花缘任务：无法要取得访问的NPC超级链接字符串")
			return
		end

		local fX = 0
		local fY = 0
		local nSceneID = 0
		local szNpcName = ""

		-- 特殊处理，取得超级连接的地址
		if string.find(szPosString, "_INFOAIM") then	-- 该物品没有超级链接，返回空值
			
			szPosString = string.gsub(szPosString, "_INFOAIM", "")

			 _, _, fX, fY, nSceneID, szNpcName = string.find(szPosString, "{(%d+),(%d+),(%d+),(.+)}")

			if szNpcName == "-1" then
				szNpcName = ""
			end
		end

		if szNpcName == "" then
			ShowMessage("百花缘任务：无法要访问的NPC数据")
			return
		end

		MoveToNPC(tonumber(fX), tonumber(fY), tonumber(nSceneID), szNpcName)

		if g_BaiHuaYuan_Opt[nCurScene] == nil then
			ShowMessage("百花缘任务：没有找到对话选项[%d]。", nCurScene)
		else
			QuestFrameOptionClicked(g_BaiHuaYuan_Opt[nCurScene], CMP_PART_MATCH)
		end

		-- 由于系统捕捉不到这个MessageBox所以只能特殊处理一下
		if UI:IsWindowShow("MessageBox_Self") then
			DoLuaString("MessageBox_Self_Env", "MessageBox_Self_OK_Clicked()")
			System:Sleep(1000)
		end
	end
end

function OnMission_808200_2()

	local nSceneID = DataBase:GetSceneID("太湖")

	if GetActiveDataSceneID() ~= nSceneID then
		MoveTo(215, 270, nSceneID)
	end
	
	-- 设置AI为采集
	AI:SetAI("采集")
	AI:SetParameter("初始化")
	-- 设置采集对象名称
	AI:SetParameter("目标", "添加", "百合花")
	AI:SetParameter("地图", nSceneID)
	-- 设置采集巡逻坐标点
	AI:SetParameter("坐标", "添加", 215, 270)
	AI:SetParameter("坐标", "添加", 138, 261)
	AI:SetParameter("坐标", "添加", 40, 276)
	AI:SetParameter("坐标", "添加", 113, 210)
	AI:SetParameter("坐标", "添加", 144, 141)
	AI:SetParameter("坐标", "添加", 114, 38)
	AI:SetParameter("坐标", "添加", 198, 65)
	AI:SetParameter("坐标", "添加", 185, 148)
	AI:SetParameter("坐标", "添加", 245, 230)
	AI:SetParameter("坐标", "添加", 275, 66)

	AI:Start(false)
	while true  do
		if DataPool:IsMissionCanCommit(g_idMission) or GetActiveDataSceneID() ~= nSceneID then break end
		System:Sleep(200)
	end
	AI:Stop()

end

function OnMission_808200_3()

	local szPosString = DataPool:GetPlayerMission_StrList(g_nIndex , g_nParam[6])

	if szPosString == nil then
		ShowMessage("百花缘任务：无法要取得访问的NPC超级链接字符串")
		return
	end

	DbgPrintf("%s", szPosString)

	local fX, fY, nSceneID, szNpcName

	-- 特殊处理，取得超级连接的地址
	if string.find(szPosString, "_INFOAIM") then	-- 该物品没有超级链接，返回空值
		
		szPosString = string.gsub(szPosString, "_INFOAIM", "")

		 _, _, fX, fY, nSceneID, szNpcName = string.find(szPosString, "{(%d+),(%d+),(%d+),(.+)}")

		if szNpcName == "-1" then
			szNpcName = ""
		end
	end

	if szNpcName == "" then
		ShowMessage("百花缘任务：无法要访问的NPC数据。")
		return
	end

	if ( tonumber(nSceneID) == 1 and tonumber(fX) == 166 and tonumber(fY) == 311 ) then
		-- 防止卡点
		ShowMessage("寻找苏轼，走 157 , 356 点以防止卡点")
		MoveTo( 157 , 356 , 1 , "" , 1 )
		ShowMessage("到达中转坐标")
		local xNow, yNow = Player:GetPos()
		DbgPrintf("当前坐标 %d %d" , xNow , yNow)
		System:Sleep(2000)
	end
	MoveToNPC(tonumber(fX), tonumber(fY), tonumber(nSceneID), szNpcName)
	QuestFrameOptionClicked(g_szMission, CMP_PART_MATCH)	-- 选择选项
	System:Sleep(1000)
end

function OnMission_808200_4()

	local nItemTableID = 30101039	-- 扒鸡

	-- 判断是否可以购买物品
	if Player:GetData("MONEY") < 1497 and Player:GetData("JIAOZI") < 1497 then
		ShowMessage(string.format("百花缘任务：金币不足，无法购买物品！"))
		MissionBlockProcess(g_idScript)
		return
	end

	if DataPool:UserBag_CountItemByIDTable(nItemTableID) < 1 then

		MoveToNPC(g_NpcInfo[1].fX, g_NpcInfo[1].fY, g_NpcInfo[1].nSceneID, g_NpcInfo[1].szNpcName)
		QuestFrameOptionClicked("买", CMP_PART_MATCH)
		ShopBuy(nItemTableID, 1)
	end
end

function OnMission_808200_5()

	local nCurScene = GetActiveDataSceneID()

	AI:SetAI("杀怪")
	AI:SetParameter("初始化")
	
	if g_BaiHuaYuan_Pos[nCurScene] ~= nil then

		AI:SetParameter("地图", nCurScene)

		local CaiJi = g_BaiHuaYuan_Pos[nCurScene]

		for i, v in ipairs(CaiJi) do
			AI:SetParameter("坐标", "添加", v.x, v.y)
		end
		AI:SetParameter("拾取" , "指定" , "遗失的小铲子")

		AI:Start(false)
		while true  do
			if DataPool:IsMissionCanCommit(g_idMission) or GetActiveDataSceneID() ~= nCurScene then
				break
			end
			System:Sleep(200)
		end
		AI:Stop()

	else

		local szPosString = DataPool:GetPlayerMission_StrList(g_nIndex , g_nParam[6])

		if szPosString == nil then
			ShowMessage("百花缘任务：无法要取得访问的NPC超级链接字符串")
			return
		end

		local fX = 0
		local fY = 0
		local nSceneID = 0
		local szNpcName = ""

		-- 特殊处理，取得超级连接的地址
		if string.find(szPosString, "_INFOAIM") then	-- 该物品没有超级链接，返回空值
			
			szPosString = string.gsub(szPosString, "_INFOAIM", "")

			 _, _, fX, fY, nSceneID, szNpcName = string.find(szPosString, "{(%d+),(%d+),(%d+),(.+)}")

			if szNpcName == "-1" then
				szNpcName = ""
			end
		end

		if szNpcName == "" then
			ShowMessage("百花缘任务：无法要访问的NPC数据")
			return
		end

		MoveToNPC(tonumber(fX), tonumber(fY), tonumber(nSceneID), szNpcName)

		if g_BaiHuaYuan_Opt[nCurScene] == nil then
			ShowMessage("百花缘任务：没有找到对话选项[%d]。", nCurScene)
		else
			QuestFrameOptionClicked(g_BaiHuaYuan_Opt[nCurScene], CMP_PART_MATCH)
		end

		-- 由于系统捕捉不到这个MessageBox所以只能特殊处理一下
		if UI:IsWindowShow("MessageBox_Self") then
			DoLuaString("MessageBox_Self_Env", "MessageBox_Self_OK_Clicked()")
			System:Sleep(1000)
		end
	end
end

function _SMain(...)

	local IsGetFollowerSeed = false 
	if arg.n == 1 then
		MAX_ROUND_BAIHUAYUAN = arg[1]
	end

	if Player:GetData("LEVEL") < 30 then
		ShowMessage("百花缘任务需要人物30级！")
		return
	end

	while true do

		g_nIndex, g_idMission, g_idScript = DataPool:GetPlayerMission(g_szMission)

		if g_nIndex ~= -1 then

			DbgPrintf("%s Index:%d MissionID:%d ScriptID:%d", g_szMission, g_nIndex, g_idMission, g_idScript)

			-- 取得任务参数
			for i=0,7 do
				g_nParam[i] = DataPool:GetPlayerMission_Variable(g_nIndex, i)
				DbgPrintf("[%d]%d", i, g_nParam[i])
			end

			if DataPool:IsMissionCanCommit(g_idMission) then

				-- 完成任务
				DbgPrintf("任务已完成")
				
				local nSceneID = GetActiveDataSceneID()

				MoveToNPC(g_NpcInfo[0].fX, g_NpcInfo[0].fY, g_NpcInfo[0].nSceneID, g_NpcInfo[0].szNpcName)
				QuestFrameOptionClicked("获得花肥和花种", CMP_PART_MATCH)	-- 选择选项
				QuestFrameOptionClicked(g_szMission, CMP_PART_MATCH)	-- 选择选项
				QuestFrameMissionComplete()
				QuestFrameMissionClose()
				System:Sleep(1000)
				if FindDebugMessage( "道具栏空间不足" ) == true then
					ShowMessage( "无法交任务,自动停止脚本" )
					break
				end

			else
				-- 判断当前环数
				local nRound = GetMissionRound(g_nIndex)
				if nRound > MAX_ROUND_BAIHUAYUAN then
					QuestFrameMissionAbnegate(g_idScript)
					ShowMessage(string.format("%s：今日已经完成%d次任务！", g_szMission, MAX_ROUND_BAIHUAYUAN))
					System:UpdateRecord( script_name )
					break
				end

				local nFunc = g_nParam[4]

				if nFunc == 0 then

					OnMission_808200_0()

				elseif nFunc == 1 then
					
					OnMission_808200_1()

				elseif nFunc == 2 then
					
					OnMission_808200_2()

				elseif nFunc == 3 then
					
					OnMission_808200_3()

				elseif nFunc == 4 then
					
					OnMission_808200_4()

				elseif nFunc == 5 then
					
					OnMission_808200_5()
				end
			end
		else
			if IsGetFollowerSeed == false then
				if IsMsgCold( "LingQuHuaZhong" , 15*60*1000 ) then
					UpdateMsg( "LingQuHuaZhong" )
					MoveToNPC(g_NpcInfo[0].fX, g_NpcInfo[0].fY, g_NpcInfo[0].nSceneID, g_NpcInfo[0].szNpcName)
					QuestFrameOptionClicked("领取花种", CMP_PART_MATCH)	-- 选择选项
					System:Sleep(2000)
					if FindQuestFrameText("你已经领取过" , CMP_PART_MATCH) == true then
						IsGetFollowerSeed = true
					end
				end
			end

			-- 领取任务
			MoveToNPC(g_NpcInfo[0].fX, g_NpcInfo[0].fY, g_NpcInfo[0].nSceneID, g_NpcInfo[0].szNpcName)
			QuestFrameOptionClicked("获得花肥和花种", CMP_PART_MATCH)	-- 选择选项
			QuestFrameOptionClicked(g_szMission, CMP_PART_MATCH)	-- 选择选项
			--QuestFrameMissionContinue()	-- 继续
			QuestFrameMissionClose()
		end

		System:Sleep(200)
	end
end

_SMain(20)