舰_自定拆船脚本

--发布地址:http://sp2.moehex.com/2016/07/10/%e8%88%b0_%e8%87%aa%e5%ae%9a%e6%8b%86%e8%88%b9%e8%84%9a%e6%9c%ac/

--自定义脚本例子
--按照New排序拆掉20个船

--请注意一定要先锁定不拆的船!!!!
--请注意一定要先锁定不拆的船!!!!
--请注意一定要先锁定不拆的船!!!!
--请注意一定要先锁定不拆的船!!!!
--请注意一定要先锁定不拆的船!!!!
--请注意一定要先锁定不拆的船!!!!
--请注意一定要先锁定不拆的船!!!!
--请注意一定要先锁定不拆的船!!!!


--[2015.08.03]脚本会保留轻空母和水上机母舰这两种对空口粮
--[2015.08.04]优化船类型检测的速度
--[2015.08.04]不再随机选择船,而是按照顺序向下选择
--[2015.09.14]优化速度,基本等于人手操作
--[2015.10.30]支持保留正航口粮
--[2016.04.21]移除脚本确认提示!用于方便调用
--[2016.04.21]默认改为拆20个船
--[2016.04.21]拆船完成后会回到母港
--[2016.07.12]修正游戏UI调整会拆掉水母轻空母航母的问题
--[2017.06.07]修正会拆掉对空素材的问题
--[2018.01.09]支持多选

--需要1.2.6版本
local inspect = require([[base\inspect]])


m_max_count = 20
--拆船的次数


Base.SetColorDebug(false)

function IsColorAll(array) --请保持这个函数不要修改
	n=0
	ok=0
	while(array[n] ~= nil)
	do
		if Base.IsColor(array[n][0],array[n][1],array[n][2])==true then
			ok = ok + 1
		end
		n= n+1
	end
	
	if ok==n then
		return true
	else
		return false
	end
end

function IsFactory() --由工具KanAuto专用取色工具生成,请到论坛下载
    array = {};count = {};
    array = {[0]=291,246,3492493}; count[0] = array;
    array = {[0]=200,265,3029879}; count[1] = array;
    array = {[0]=202,238,3363487}; count[2] = array;
    array = {[0]=265,334,5016925}; count[3] = array;
    return IsColorAll(count)
end

function IsNew()--由工具KanAuto专用取色工具生成,请到论坛下载
    array = {};count = {};
	
    array = {[0]=579,108,13488566}; count[0] = array;
    array = {[0]=590,120,12040273}; count[1] = array;
    array = {[0]=592,114,9474092}; count[2] = array;
    array = {[0]=600,112,13488566}; count[3] = array;
    array = {[0]=578,110,10066495}; count[4] = array;
    array = {[0]=586,111,15922943}; count[5] = array;

    return IsColorAll(count)
end

function IsKanOk()--由工具KanAuto专用取色工具生成,请到论坛下载
    array = {};count = {};
	
    array = {[0]=734,425,11116845}; count[0] = array;
    array = {[0]=669,448,7233824}; count[1] = array;

    return IsColorAll(count)
end



function IsRunOk()--由工具KanAuto专用取色工具生成,请到论坛下载
    array = {};count = {};
	
    array = {[0]=551,449,14083822}; count[0] = array;
    array = {[0]=542,457,13886443}; count[1] = array;
    array = {[0]=582,455,14346736}; count[2] = array;
    array = {[0]=529,446,14149357}; count[3] = array;

    return IsColorAll(count)
end


function RetKanId(x,y)
	for i=1,10 do
		if Base.InRect(x,y,196,120 + ((i-1)*31),100,31) then
			return i
		end
	end
	return 0;
end
--判断是否是锁定的
function GetLockKanArray()
	t = {}
	for i=1,10 do
		if Base.IsColor(578, 140 + (i - 1) * 31, 9869808) then
			--Base.Print(string.format("%d = %s",i,"Lock"))
			t[i] = true;
		else
			t[i] = false;
		end
	end
	return t;
end


function CheckKanType()
kan_type = {}

cvl = Base.FindColorAllBin(15,145,{196,121,130,312},"1R0S0FE,1RVTF", "10RVVVD,1RVU8")
cvs = Base.FindColorAllBin(12,145,{196,121,130,312},"1NVDJO0,1DLBV", "1NVDVRM,1TK3V")
cv =  Base.FindColorAllBin(12,145,{196,121,130,312},"1RNVC3V,1VTNF", "1RGC1RF,1GTVF")

--Base.Print("CVL:" .. inspect(t))

if cvl ~= nil then
	Base.Print("-----")
	--输出坐标
	for key, value in pairs(cvl) do  
		id = RetKanId(value["x"],value["y"])
		Base.Print(string.format("%d = %s",id,"cvl"))
		kan_type[id] = "cvl"
	end  
end

if cvs ~= nil then
	Base.Print("-----")
	--输出坐标
	for key, value in pairs(cvs) do  
		id = RetKanId(value["x"],value["y"])
		Base.Print(string.format("%d = %s",id,"cvs"))
		kan_type[id] = "cvs" 
	end  
end


if cv ~= nil then
	Base.Print("-----")
	--输出坐标
	for key, value in pairs(cv) do  
		id = RetKanId(value["x"],value["y"])
		Base.Print(string.format("%d = %s",id,"cv"))
		kan_type[id] = "cv" 
	end  
end

return kan_type
end


--脚本从这里开始向下执行

--CheckKanType()
--Base.SleepSec(10)
--

Kan.WaitHomeEx(2000,120*1000) --等待母港

Base.ClickRect(281,358) --点击工厂


Base.Print("等待工厂界面...")
while IsFactory() == false do --等待工厂界面载入
	Base.Sleep(1000)
end
Base.Sleep(500)

Base.ClickRectEx(199,253) --点击解体按钮


Base.Print("等待切换排序...")
while IsNew() == false do --等待New排序
	Base.ClickRect(590,111) --点击切换排序
	Base.Sleep(500)
end

Base.Sleep(500)

m_count = 0

while true do 
	kan_type = {}
	Base.Print("检查船类型...")
	Base.Print(m_last_ok_id)
	--for i=1,100 do
	--	Base.Move(196,138 + i * 3)
	--	Base.Sleep(3)
	--end
	Base.ClickRect(185,118)
	Base.Sleep(150)
	kan_lock = GetLockKanArray()
	kanType = CheckKanType() --返回一个船类型列表
	Base.Print("锁定状态:" .. inspect(kan_lock))
	Base.Print("船类型:" .. inspect(kanType))
	--扫描列表
	--Base.Print(string.format("选择船ID:%d", kan_id))
	
	Base.Sleep(500)
	Base.Print("检查是否可以拆掉")
	err_count = 0;

	selectCount = 0;

	for i=1, 10 do
		Base.Sleep(333)
		if kanType[i] == nil and kan_lock[i] == false then
			Base.Print(string.format("选择船ID:%d", i))
			Base.ClickRect(240 , 120 + ((i-1)*31) +15)
			selectCount = selectCount + 1;
		end
		
	end
	
	if selectCount == 0 then break end 
	
	Base.Print("解体!")
	Base.Sleep(200)
	Base.ClickRectEx(708,435) --点击解体
	Base.Sleep(200)
	Base.Print("等待解体...")
	while IsRunOk() == false do --等待拆船
		Base.Sleep(100)
	end
	
	
	--拆了一个船
	
	m_count=m_count+1
	if m_count == m_max_count then break end
	
	Base.Sleep(100)
end

while IsRunOk() == false do --等待拆船完成界面
	Base.Sleep(100)
end
Base.Sleep(500)
Kan.GoHome() --回到母港
Kan.WaitHome() 


Base.Print("脚本结束")

Last updated