-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1-5-A+远征.lua
209 lines (181 loc) · 4.81 KB
/
1-5-A+远征.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
--=========================参数设置===========================
--肝船列表,第一位是打手
shipList = {
{name="轻巡洋舰五十铃改二",minLv=54,maxLv=64},
{name="驱逐舰朝潮改",minLv=62,maxLv=70},
{name="驱逐舰晓改",minLv=53,maxLv=64},
{name="驱逐舰响改",minLv=35,maxLv=45}
}
--设定想要进行的远征
k2_conquest = C.海上護衛任務_ID5
k3_conquest = C.防空射撃演習_ID6
k4_conquest = C.北方鼠輸送作戦_ID21
--战斗次数 50-70 随机
math.randomseed(os.time())
f_count = math.random(30,50)
Win.Print("开始运行,本次将出击"..f_count.."次")
--每10-15分钟检测一次远征
Kan.EasyConquestInit(60*10,60*15)
--所有延时随机增加1-100
Base.SetConfig("Sleep+?",100)
--出击连续失败计数
consecFail = 0
--是否是完整队伍
fullteam = true
--轮换计数
roster = 0
--上轮出击是否有中破+
notGood = false
--统计出击结果
m_lv = {SS=0,S=0,A=0,B=0,C=0,D=0,ALL=0,ERROR=0}
--=========================调用函数===========================
--统计战斗评级
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
--解析Supply函数返回值
function SupplyStringMatch(_str)
local t2 = { string.match(_str , "^(%d+),(%d+),(%d+),(%d+),(%d+),(%d+)") }
--将返回的数据匹配到表中
t = {}
for key, value in pairs(t2) do
table.insert(t,tonumber(value))
end --转为数值
return t
end
--编入所有舰娘
--_shipList是舰娘列表,_good表示是插入完好舰娘还是所有舰娘
function changeAll(_shipList,_good)
Kan.DelAllKanChangeColor()
for i=1,#_shipList do
--旗舰首先尝试添加不再闪的打手,然后按定义顺序尝试加入舰娘
if i==1 then
--添加不闪打手
Kan.AddKanChangeName(_shipList[1].name,_shipList[1].minLv,_shipList[1].maxLv,false,2,i,false,true)
--末位首先尝试添加闪打手,然后按定义顺序尝试加入舰娘
elseif i==#_shipList then
--添加闪打手
Kan.AddKanChangeName(_shipList[1].name,_shipList[1].minLv,_shipList[1].maxLv,false,1,i)
end
--其他位置随意添加其他舰娘
for j=2,#_shipList do
Kan.AddKanChangeName(_shipList[j].name,_shipList[j].minLv,_shipList[j].maxLv,_good,0,i)
end
--确保打手被编入队伍
Kan.AddKanChangeName(_shipList[1].name,_shipList[1].minLv,_shipList[1].maxLv,false,0,i)
end
--别忘记运行换船
ret = Kan.ChangeDIY(1,1,C.SORT_LV,3,true)
return ret
end
--=========================程序本体===========================
--初始化数据和显示
CheckLv()
--初始化舰娘
changeAll(shipList,false)
--开始远征
Kan.EasyConquestRun(false)
--出击计数器
f_count_now = 1
--开始主体循环
--两层循环,用于实现类似continue的效果
while true do
while true do
Win.Print("开始第"..f_count_now.."次出击..")
--补给
ret = Base.CallFunc("Kan.Supply")
t = SupplyStringMatch(ret)
for i=1,#t do
if t[i] ~= C.KAN_STATE_OK and t[i] ~= C.KAN_STATE_MIN then
notGood = true
break
end
end
if notGood == true then
ret = changeAll(shipList,true)
notGood = false
--如果只换上了一艘船,则跳过当前循环,并且连续失败次数加一
if ret <= 1 then
Win.Print("编队中人数过少,尝试修理所有单位后再出击")
Kan.RepairEx(4,0,1+2+4+8)
consecFail = consecFail + 1
break
end
end
--准备就绪,开始肝
Kan.Sally(1,5)
--出击,如果失败,则
if Kan.Battle(1,2,false,5) == false then
Win.Print("出击失败..")
Kan.RepairEx(4,0,4+8)
consecFail = consecFail + 1
--如果出击成功,则
else
Win.Print("第"..f_count_now.."次出击成功")
--更新状态
CheckLv()
--出击成功则次数+1
f_count_now = f_count_now + 1
--重置连续失败计数
consecFail = 0
end
if consecFail >= 3 then
Win.Print("出击连续失败,等待一次远征后再出击")
Kan.EasyConquestWaitNextRun()
consecFail = 0
else
Win.Print("远征一次")
--尝试一次远征
Kan.EasyConquestRun(false)
end
--如果队伍之前不是满的或者已到轮换次数,那么重新填满队伍
if fullteam == false or roster > 4 then
changeAll(shipList,false)
roster = 0
--如果只换上了一艘船,则跳过当前循环,并且连续失败次数加一
if ret <= 1 then
Kan.RepairEx(4,0,4+8)
consecFail = consecFail + 1
break
end
else
Win.Print("距离轮换还有"..4-roster.."场")
roster = roster + 1
end
if f_count_now > f_count then
Win.Print("到达出击次数上限,不再出击!")
break
end
end
--跳出第二个循环,彻底结束
if f_count_now > f_count then
Win.Print("到达出击次数上限,不再出击!")
break
end
end
--不再肝船,只远征
Win.Print("开始专心远征...")
Kan.EasyConquestEnterLoop()