舰_2-3潜艇偷油

--[[ 
潜艇偷油脚本

[20161127] bug修正和增加双潜艇支持401
[20170209] 拆船设置改为每进行多少次出击后执行,支持在非出击时段内修船
[20180813] 移除即将弃用的API

注意事项
1.运行前请先把第一舰队清空,留一只船
2.请根据自行需要修改ChangeTeam中的潜艇的特征
3.一般喂满护甲,30级以上的潜艇就可以参与捞油了

]]
--###################################################################

--这里是设置区域!请仔细阅读!!!!! 然后再修改 
--如果设置区域读不懂 请按Alt+F4提高智商后再来

math.randomseed(os.time())
--随机数初始化 不要改

one_ss = false
--单舰模式开关,设置true开启后将使用1艘SS去偷,会增加较高的败率,不推荐

color_site = 3
--颜色误差值 如果总是找不到潜艇,可以适量改到5或6! 建议不要超过10
--自行添加特征教程 http://www.7moe.com/forum.php?mod=viewthread&tid=22037

page = 3
--潜艇是从按照船排序的第几页开始的 一般人可能从1开始

page_next = 6
--向后翻的页数 如page=2、page_next=4则是在2 3 4 5 6页面选择船

next_page_back = true
--让页面从后向前翻 如果设置的是start_page是6 则翻页 6 5 4 ...

use_speed = false
--修理大破船是否使用桶 如果桶很多可以考虑使用 当前潜艇如果也很多可以用量来代替
--想要不用桶连刷,估计需要3页潜艇吧(大概

use_speed_mid = false
--修理中破船是否使用桶 

run_hour = '["9:10-12:01", "14:20-17:10", "19:20-21:40"]'
--出击的时间设置 默认"[[0,23]]"为全天随时都执行,1.5.3版本KCA才可以使用
--设置举例:"[8,10,[20,22]]" 为8、10、20、21、22为脚本出击时间

reset_battle_count = true 
--是否在每次等待到可执行的时间后重置战斗次数,1.5.3版本KCA才可以使用
--比如"[8,10,[20,22]]"的设置,会在8点,10点,20点进行重置

deleteKanAtBattleCount = 40
--在每进行多少次出击后执行拆船 如果设置0 则不会拆船

notBattleTimeRepair = true
--是否在非战斗时段修船

battle_count = 200
--偷油出击次数 30-50 (如果设置定时清0的话,这里没必要随机了)

battle_count_change = 3
--一个队伍最多打几场就换船 如果设置0 则直到大破中破才会换船

Kan.DelBattleInfo()
Kan.AddBattleInfo(1, 阵型.单纵, 否, false) --第一个点 不进夜战
Kan.AddBattleInfo(2, 阵型.单纵, 是, false) --第二个点 进夜战
Kan.AddBattleInfo(3, 阵型.单纵, 是, false) --第三个点 进夜战
--如果是过任务,可以把所有点都设置夜战

Kan.AddBattleInfoPoint(436, 80, 阵型.单纵, 是, false, false) --
Kan.AddBattleInfoPoint(596,127, 阵型.单纵, 否, false, false) --Boss点 不夜战


-----------------------------------------------------------------------------
k2_conquest = C.長距離練習航海_ID2
k3_conquest = C.東京急行_ID37
k4_conquest = C.北方鼠輸送作戦_ID21
--1.可自行新建一个远征脚本复制出这几行数据
--2.可输入C.会弹出输入提示,下拉可找到相应远征

--Kan.EasyConquestInit(60*6, 60*12)
--设置简易远征,每5-10分钟进行一次检测,1.5.3版本KCA才可以使用

if next_page_back == true then
	Base.SetConfig("ChangePageEndStart",1)
end

--###################################################################
m_now_team = 0
Base.MinVer(135, true)
m_now_battle_count = 0
m_lastRepairTime = 0

function ChangeTeam()
	if one_ss == true then
		return ChangeTeamOneSS()
	else
		return ChangeTeamTwoSS()
	end
end

--每达到某个时间点后重设当前战斗次数
function ReSetBattleCount() 
	if reset_battle_count == true then
		Win.Print("战斗次数清零,并清理")
		f_count_now = 0
	end
end

function ChangeTeamTwoSS() --双SS的船配置
	m_now_team = 1
	last_change_battle_count = f_count_now 
	
	--如果你不想用某些船 ,请在相应的船特征前面加--注释掉,比如改后的船修理时间长什么的
	--自行添加特征教程 http://www.7moe.com/forum.php?mod=viewthread&tid=22037

	Kan.DelAllKanChangeColor()
	
	--luigi Torelli
	Kan.AddKanChangeColorEx(3, 145, true, "1VFTTRN,1NFVF", "1VFTTRO,1NFVF",0,2)
    --i26
	Kan.AddKanChangeColorEx(3, 145, true, "1VFVUVR,1RVVV", "1VFNVFR,1VVVV",0,2)
	
	Kan.AddKanChangeColorEx(3, 145, true, "1T01TFF,1NTVVVV,1VVVV", "1TURTFN,1NTVVVV,1VVVV",0,2)                            --401
	Kan.AddKanChangeColorEx(color_site,145,true,"11101111101111111111101110111101111111111111111111","11101100000001111111101110111101111111111111111111",0,2) --伊58
	Kan.AddKanChangeColorEx(color_site,145,true,"11110011111011011110110111111111111111111111111111","11111010001111111111111111111111111111111111111111",0,2) --伊8
	Kan.AddKanChangeColorEx(color_site,145,true,"11110111110111111111110111011110111011101101111111","11110110000000111111110111011110111011111001011111",0,2) --伊58改
	Kan.AddKanChangeColorEx(color_site,145,true,"11101100000001110111101110111110010111111111111111","10101111101101111100111110111010110111111111111111",0,2) --伊8改
	
Kan.AddKanChangeColorEx(3, 145, true, "1VFRNRV,1VTRF", "1VFRNRV,1VTRV",0,2) --ut25

 
	Kan.AddKanChangeColorEx(color_site,145,true,"11110111110111111111011111101111111101111011111111","11110110000000111111011111101111011101111011111111",0,1) --伊168
--Kan.AddKanChangeColorEx(color_site,145,true,"11110110000000111111011111110001011111111111111111","11010111110110111111011111100111011111111111111111",0,1) --伊19
	Kan.AddKanChangeColorEx(color_site,145,true,"10000000000111111110111011111011101111101111111111","11111011111111011101111011111011101111101111111111",0,1) --吕500
	Kan.AddKanChangeColorEx(color_site,145,true,"01000000000111110111111011111111011110111111010011","01111101101111110111111101111111011110111111010000",0,1) --伊168改
	Kan.AddKanChangeColorEx(color_site,145,true,"11101100000001111110111111100010111011111101011111","10101111101101111110111111001110111011101011111111",0,1) --伊19改


	
	ret = Kan.ChangeDIY(page,C.TEAM_1,0,page_next,false) --更换第二个船的位置
	
	Kan.DelAllKanChangeColor()
	
	Base.Print("成功替换"..ret.."个潜艇")
	
	if ret == 2 then --可以改写失败了换别的船
		return true
	end
	
	return false
end

function ChangeTeamOneSS() --单SS的船配置
	m_now_team = 1
	last_change_battle_count = f_count_now 
	
	--如果你不想用某些船 ,请在相应的船特征前面加--注释掉,比如改后的船修理时间长什么的
	--自行添加特征教程 http://www.7moe.com/forum.php?mod=viewthread&tid=22037

	Kan.DelAllKanChangeColor()
	Kan.AddKanChangeColorEx(color_site,145,true,"11101111101111111111101110111101111111111111111111","11101100000001111111101110111101111111111111111111",0,1) --伊58
	Kan.AddKanChangeColorEx(color_site,145,true,"11110011111011011110110111111111111111111111111111","11111010001111111111111111111111111111111111111111",0,1) --伊8
	Kan.AddKanChangeColorEx(color_site,145,true,"11110111110111111111110111011110111011101101111111","11110110000000111111110111011110111011111001011111",0,1) --伊58改
	Kan.AddKanChangeColorEx(color_site,145,true,"11101100000001110111101110111110010111111111111111","10101111101101111100111110111010110111111111111111",0,1) --伊8改
 
	Kan.AddKanChangeColorEx(color_site,145,true,"11110111110111111111011111101111111101111011111111","11110110000000111111011111101111011101111011111111",0,1) --伊168
	Kan.AddKanChangeColorEx(color_site,145,true,"11110110000000111111011111110001011111111111111111","11010111110110111111011111100111011111111111111111",0,1) --伊19
	Kan.AddKanChangeColorEx(color_site,145,true,"10000000000111111110111011111011101111101111111111","11111011111111011101111011111011101111101111111111",0,1) --吕500
	Kan.AddKanChangeColorEx(color_site,145,true,"01000000000111110111111011111111011110111111010011","01111101101111110111111101111111011110111111010000",0,1) --伊168改
	Kan.AddKanChangeColorEx(color_site,145,true,"11101100000001111110111111100010111011111101011111","10101111101101111110111111001110111011101011111111",0,1) --伊19改
	
	ret = Kan.ChangeDIY(page,队伍.队伍1,0,page_next,false) --更换第二个船的位置
	
	Kan.DelAllKanChangeColor()
	
	Base.Print("成功替换"..ret.."个潜艇")
	

	if ret == 1 then --可以改写失败了换别的船
		return true
	end
	
	return false
end

--在非执行时段时 每间隔大于300秒进行一次修理
function FuncRepairBottom()
	if notBattleTimeRepair == false then return; end;
	
	if os.time() - m_lastRepairTime > 300 then
		m_lastRepairTime = os.time();
		FuncRepair(true);
	end
end

function FuncRepair(_bottom_to_top)
	speed = 0
	if use_speed == true then			
		speed = speed + 入渠.大破
	end
	
	if use_speed_mid == true then			
		speed = speed + 入渠.中破
	end
	Kan.RepairEx(4,speed,入渠.擦伤 + 入渠.小破 + 入渠.中破 + 入渠.大破, _bottom_to_top) 
	--除了设置里要用桶的 其他慢慢修
end

function FuncNoKan(_min)
	Win.Print("没有可替换的船了,等待远征#1")
	if _min == nil then
		Base.Sleep(1000* 60* 5)
	else
		Base.Sleep(1000* 60* nil)
	end
	
	FuncRepair(true)
end


function CheckLv() --统计等级
	count = Base.GetValueInt("LastBattleCount")
	Base.Print("LastBattleCount:"..count)
	if count > 0 then
		m_lv.ALL = m_lv.ALL+count
		for n=1,count do
			ret = Base.GetValueInt("Battle_Lv_"..n)
			if ret == C.WIN_SS then
				m_lv.SS = m_lv.SS+1
			elseif  ret == C.WIN_S then
				m_lv.S = m_lv.S+1
			elseif  ret == C.WIN_A then
				m_lv.A = m_lv.A+1
			elseif  ret == C.WIN_B then
				m_lv.B = m_lv.B+1
			elseif  ret == C.WIN_C then
				m_lv.C = m_lv.C+1
			elseif  ret == C.WIN_D then
				m_lv.D = m_lv.D+1
			elseif  ret == C.WIN_ERROR then
				m_lv.ERROR = m_lv.ERROR+1
			end
			
		end
	end

	Win.SetState("累计战斗:"..m_lv.ALL.." SS:"..m_lv.SS.."  S:"..m_lv.S.."  A:"..m_lv.A.."  B:"..m_lv.B.."  C:"..m_lv.C.."  D:"..m_lv.D)
end

m_lv = {SS=0,S=0,A=0,B=0,C=0,D=0,ALL=0,ERROR=0}


s1 = os.time() 
--取现在时间的时间戳


f_count_now = 0 ; run_count = 0;
--当前战斗次数,请勿修改

last_change_battle_count = 0
--最后一次替换船时战斗的次数


Kan.EasyConquestRun(false) --首次启动的时候执行一次远征

math.randomseed(os.time())


--出击和战斗函数
function GoMapAndBattle () 
	if f_count_now <= battle_count then
		--出击目标 2-3
		Kan.Sally(2, 3) 
		--第一舰队/出击三次(A点)/不夜战/阵型1单纵(并不会选,因为俩船不需要选阵型)
		if Kan.BattleEx(1, 3, false) == false then 
			Win.Print('可能无法出击或道中大破')
		end
		CheckLv()
		--每次战斗增加1
		f_count_now = f_count_now  + 1 
		Win.Print('已完成'..f_count_now..'次战斗')
		Win.Print('本队完成'..(f_count_now - last_change_battle_count)..'次战斗')
		Kan.WaitHome(2000)
		Base.Sleep(2000)
	else
		Kan.WaitHome(2000)
		Win.Print('战斗次数达到'..f_count_now..',等待5分后执行远征')
		Base.Sleep(1000*60*5)
		if math.random(1,2) == 1 then
			Kan.Repair(4)
		end	
	end
end


--主循环 无限
while true do 
kanState = true;
--判断是否在设置的脚本执行时间段内
Base.WaitRunHour(run_hour, true, "FuncRepairBottom", "ReSetBattleCount")
run_count = run_count + 1
Win.Print("开始第" .. run_count .. "次")

if deleteKanAtBattleCount ~= 0 and run_count % deleteKanAtBattleCount == 1 then
	dofile(".\\example\\舰_自定拆船脚本.lua")
end

if m_now_team == 0 then
	Win.Print("首次运行,切换到潜艇队伍")
	if ChangeTeam() == false then
		FuncNoKan(min) --等待远征
		Kan.EasyConquestWaitNextRun() --执行远征
		kanState = false;
	end
end

--如果设置了一个组合打多少次换船(即使没有大破) 执行换船
if battle_count_change ~= nil and battle_count_change > 0 then
	if f_count_now - last_change_battle_count >= battle_count_change then
		Win.Print("场次满足,执行换人")
		if ChangeTeam() == false then
			FuncNoKan(min) --等待远征
			Kan.EasyConquestWaitNextRun() --执行远征
			kanState = false;
		end
		FuncRepair(true)
	else
		Win.Print("场次不满足,不换人")
	end
end

--补给全部并返回所有舰队及船数据
ret = Kan.SupplyAllT();

kanState1 = ret.kan11
kanState2 = ret.kan12

--当前队伍第一和第二位置有维修中的船 切换队伍
if kanState1 == 补给.修理中 or kanState2 == 补给.修理中 then 
	if m_now_team ~= 3 then
		Win.Print("切换到第3队伍")
		if ChangeTeam() == false then
			FuncNoKan(min) --等待远征
			Kan.EasyConquestWaitNextRun() --执行远征
		end
		Kan.SupplyAllT() --换到的船不一定是满资源 所以补给
		FuncRepair()
	else 
		FuncNoKan(min) --等待远征
		Kan.EasyConquestWaitNextRun() --执行远征
	end
	kanState = false;
	
--有潜艇中破或者大破了 换队伍 并且将换下的维修
elseif (kanState1 < 3 and kanState1 > 0) or (kanState2 < 3 and kanState2 > 0) then 
	
	if ChangeTeam() == false then
		FuncNoKan(min) --等待远征
		Kan.EasyConquestWaitNextRun() --执行远征
		kanState = false;
	end
	Kan.SupplyAllT() --换到的船不一定是满资源 所以补给
	FuncRepair(true) --修理
end

--换船没有失败的情况下出击战斗
if kanState == true then
	GoMapAndBattle();
end

Base.Sleep(2000)

--是否到了远征的时间,是的话去搞一次远征
if conquest_open == true then
	Kan.EasyConquestWaitNextRun() --执行远征
end

end

Kan.EasyConquestEnterLoop()

Win.Pop('脚本执行完毕!',true)

Last updated