AI速胜困难模式三皇一体第一战

说是AI,其实就是把自己击败的流程用AI的方式来表达,既省去了思考和执行操作的时间,又降低了出错率。战术基于此贴【理论向】无连携击败三皇一体第一战(困难模式),但作了更加细致的调整。

视频展示

视频的几个关键节点:8:00附近,10:45附近,11:25附近,12:55附近
视频链接:https://www.bilibili.com/video/av6251621/

战前准备

  1. 夏侯练到29,其余人练到99(凌波可不管)。进入璇光幻境前就要练成(不然普通烤鸭不一定够用),利用普通烤鸭自杀。
  2. 夏侯在没有吃任何加速道具、没有任何加速装备的情况下身法应该是121。如果比此值大,等级还要降低直到等于或略小于121。
  3. 准备剑齿轮99个,幽檀凝心香10个,行军丹和金创药各5个,狼牌烤鸭3个,幻偶雾2个。
  4. 所有加力、运道具和全属性加成道具,包括司云崖赠送10点力,给瑕。加体和术的给夏侯(为了精神上限)。
  5. 全员续咒、仙身贰、仙身壹,除夏侯外猛力贰、蓄势、拼尽,除兰外猛力壹,兰用武灵。
  6. 兰用轩辕剑,瑕用绝阳赤霄,龙溟默认武器。衣服用符多的即可,给瑕五彩霞衣(为了一丢丢运势)。鞋子统一天罡仙履(夏侯不穿)。统一御鬼链2个。
  7. 以上道具、符咒、装备如果主线拿不到,去DLC里面刷。
  8. 开战前找一组怪,用普通烤鸭把兰姐和龙溟喂死,逃跑,然后再进入战斗,让兰姐普攻攒气。打死怪前逃跑,如此循环直到兰姐气满。
  9. 我这里兰姐血上限4805,则兰姐濒死血量至多1200,但行军丹*2回复1200,死亡时从战斗中脱出又有1点血,所以要想其他方法让其血量大于1000小于1201。比如说,用还魂香复活,然后等着被怪砍一刀。或者前面分配一点加体道具给兰也行。

战斗过程

本节描述需结合视频观看。

调整身法

前面提到的帖子一样,先将兰姐的身法调整好,与此同时兰姐在第一回合就开始击退。虽然开局夏侯只有回气3,但有武灵和一开始的气富余,仍然可以进入无限击退的循环。

第一次放毒

在伏羲的第一回合前,我们都使用毒蛊咒(兰在气满无事可做的时候也用毒蛊咒)。毒蛊咒和剑齿轮的区别是,毒蛊咒加3回合毒而剑齿轮4回合还附带200伤害。我们的计划是让敌人中毒两次,所以一开始加3回合毒,不然要等敌人行动4次以后才能继续放毒。伏羲的回合越多,我们的气上限就越低,维持无限击退的难度也就越大。
当神不足时,使用幽檀凝心香回复全体70%神。
夏侯的回合一直用天罡战气即可。

等待敌人行动3回合

待敌人中毒后,放任伏羲行动3回合。为了加快战斗进程,我把狼牌烤鸭的成功率改到100%,期间让瑕武爆->万殇->强袭普攻输出。注意记录瑕的强袭回合,小于等于1时龙溟放个天罡战气。
夏侯的回合可以用寒镜咒界。

第二次放毒

敌人3次行动后,兰姐先击退一次,然后回到第一次放毒时情形,不同的是我们可以先用剑齿轮,如果99个放完他还没中毒再换用毒蛊咒。期间特别注意夏侯的神如果小于50,用个幽檀凝心香。
夏侯的回合用天罡战气。

伏羲血量估计

如果伏羲中毒了,看看它的血条,如果估计超过30%了就不能放它行动。仍然像之前一样维持击退,瑕继续用武爆->万殇->强袭普攻输出。给瑕吃烤鸭的时候注意其气要不少于80,不然放不出来万殇就亏了。如果烤鸭用完了,瑕有时候可以和夏侯合击,其余时候还是和其他人一样普攻。

收尾

估计伏羲只有30%血量就可以放其行动了,注意提前加好血(夏侯加满,其余人超过500但要濒死)。伏羲行动一次后,可能还要加下血。期间不要停止输出,除非当时已经完全确认其血量小于30%。3回合后取得胜利。

相关文件

下载地址
需要搭载仙五前MOD增强工具运行。
这次上传文件比之前版本做了一些更新,包括将暮菖兰的武器符咒由猛力换成了积气以增加放毒的机会,将龙溟的武器符咒大幅替换,行动插入了技能的使用。

AI展示

公用

任何角色的回合开始均会调用此函数。

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
function begin_round()
id= battle.GetActingPlayerID()
if id~=90000 and WillDie() then --如果伏羲要死了
global.Print("伏羲已死,有事烧纸")
if not JiaXue() then --要么加血 要么跳过回合
battle.Skip()
end
return
end
if battle.CheckNpcStat(90000, 1)==1 and flag.GetBattleValue(90401)==0 then
flag.SetBattleValue(90401,1)
ui.Message(70100)
elseif battle.CheckNpcStat(90000,1)==0 and flag.GetBattleValue(90401)==1 then
flag.SetBattleValue(90401,0)
end
scriptIDs = {[1]=70, [2]=71, [8]=72, [64]=73, [90000]=74}
global.CallScript(scriptIDs[id])
end

--分配90500以上作为公用
--90500: 记录加血目标ID

function Atk() --普攻
battle.AtkToNpc(90000)
end

function JCL() --使用剑齿轮
if player.GetItemCount(101)==0 then
global.Print("剑齿轮用光了")
return false
end
player.AddItem(101,-1,0)
battle.MagicToNpc(90000,1602,2)
return true
end

function KY() --使用烤鸭
if player.GetItemCount(38)==0 then
global.Print("烤鸭用光了")
return false
end
player.AddItem(38,-1,0)
battle.MagicToPlayer(2,1600,1) --这里用2会没有反应
return true
end

function HOW() --使用幻偶雾
if player.GetItemCount(74)==0 then return false end
player.AddItem(74,-1,0)
battle.MagicToPlayer(8,1601,1)
return true
end

function YTNXX() --使用幽檀凝心香
if player.GetItemCount(13)==0 then
global.Print("幽檀凝心香用光了")
return false
end
player.AddItem(13,-1,0)
battle.MagicToPlayer(0,1604,1)
return true
end

function DGZ() --使用毒蛊咒 如无MP 返回false
id = battle.GetActingPlayerID()
local mp = player.GetMP(id, 0)
if mp<50 then return false end
player.ChangeMP(0,0,id,-50)
battle.MagicToNpc(90000,33,1)
return true
end

function TGZQ() --天罡战气
local mp = player.GetMP(1,0)
if mp<50 then return false end
player.ChangeMP(0,0,1,-50)
flag.SetBattleValue(90101, 5) --给瑕加上5回合强袭
battle.MagicToPlayer(0,5,1)
return true
end

function TouDu() --投毒
t = true
if GetRound(90000)>=3 then
if not JCL() then
t = DGZ()
end
else
t = DGZ()
end
return t or YTNXX() --t为false代表使用剑齿轮和毒蛊咒均失败
end

function JiaXue() --加血,自动判定加血对象,如无合适者返回false
for pis=1,9 do
if battle.CheckPlayerPlace(pis)==1 then --判断有人
pid=battle.GetPlacePlayerID(pis) --位置人id
hp = player.GetHP(pid, 0)
if pid == 1 and hp < 700 then
flag.SetBattleValue(90500, 1)
battle.MagicToPlayer(1, 1605, 1)
return true
elseif pid > 1 and hp < 500 then
flag.SetBattleValue(90500, pid)
battle.MagicToPlayer(pid, 1605, 1)
return true
end
end
end
return false
end

function GetRound(id) --获取某id角色的已行动回合数(不包括当前回合)
if id==nil then id=battle.GetActingPlayerID() end
rounds = {[1]=90000, [2]=90100, [8]=90200, [64]=90300, [90000]=90400}
return flag.GetBattleValue(rounds[id])
end

function AddRound() --当前行动角色加上回合
id = battle.GetActingPlayerID()
round = GetRound(id) + 1
name = {[1]="夏侯瑾轩", [2]="瑕", [8]="暮菖兰", [64]="龙溟", [90000]="伏羲"}
rounds = {[1]=90000, [2]=90100, [8]=90200, [64]=90300, [90000]=90400}
flag.SetBattleValue(rounds[id], round)
global.Print(name[id]..'的第'..round..'回合开始')
end

function SetXHAction(bool) --设置夏侯刚刚的行动
if bool then
flag.SetBattleValue(90001, 1)
else
flag.SetBattleValue(90001, 0)
end
end

function GetXHAction() --刚刚夏侯是否行动过?(要不要击退)
return flag.GetBattleValue(90001)==1
end

function GetQXRound() --获取瑕的强袭剩余回合数
return flag.GetBattleValue(90101)
end

function WillDie() --看看伏羲老儿是不是要死了
local n = GetRound(90000)
local hp = npc.GetHP(90000, 1)
return n>=3 and hp<=10*(6-n) and battle.CheckNpcStat(90000,1)==1
end

夏侯瑾轩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--90000~90099
--90000:自身回合数
--90001:行动标记(为了击退)

function xh()
local round = GetRound() + 1
AddRound()
SetXHAction(true)

if not ShouldJiTui() and GetRound(90000)~=0 and GetRound(90000)~=5 then --看看兰姐会不会放伏羲动(伏羲的第1和6回合无伤害)
HJZJ() --寒镜咒界
else
TGZQ() --天罡战气
end

end

function HJZJ() --寒镜咒界
local mp = player.GetMP(1,0)
if mp<50 then return false end
player.ChangeMP(0,0,1,-50)
battle.MagicToPlayer(0,11,1)
return true
end

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
--90100~90199
--90100:自身回合数
--90101:强袭剩余回合数

function xia()
local round = GetRound() + 1
AddRound()
DecQXRound() --自身强袭回合数减少

if round == 1 then
HOW()
elseif battle.CheckPlayerStat(2,36)==1 then --自身武爆
if player.GetHP(2,1)>=25 then
global.Print("万殇准备输出")
WS()
else
global.Print("武爆大输出")
Atk()
end
elseif battle.CheckNpcStat(90000,1)==1 then --伏羲有毒
if player.GetItemCount(38)==0 then --烤鸭用光了
global.Print("没烤鸭了,试试合击")
if not JXHJ() then --瑾瑕合击不能发动
global.Print("合击不能发动,准备打杂")
if GetRound(90000)==0 or GetRound(90000)==5 or not JiaXue() then --看看要不要加血(伏羲第1和6回合无输出)
Atk() --普攻
end
end
elseif player.GetDP(2)<80 then --不能万殇,于是不要吃烤鸭
global.Print("气不够,攒够再吃烤鸭")
Atk()
else --有气有烤鸭
global.Print("食用烤鸭")
KY()
end
else --伏羲没毒
global.Print("日常投毒")
TouDu()
end

end

function DecQXRound() --减少强袭回合数
local n = flag.GetBattleValue(90101)
if n>0 then
flag.SetBattleValue(90101,n-1)
global.Print('瑕的强袭剩余'..(n-1).."回合")
end
end

function WS() --万殇
local dp = player.GetDP(2)
if dp<80 then return false end
player.ChangeDP(0,2,-80)
battle.MagicToNpc(0,74,2) --万殇没有施法动作
return true
end

function JXHJ() --瑾瑕合击(瑕发动)
if player.GetDP(2)<50 or player.GetDP(1)<25 or battle.GetNext()~=1 then return false end
player.ChangeDP(0,2,-50)
player.ChangeDP(0,1,-25)
battle.MagicToNpc(0,1606,2) --没有施法动作
return true
end

暮菖兰

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
--90200~90299
--90200:自身回合数
--90201:伏羲的3回合过后,自身第一次行动

function mcl()
local round = GetRound()+1
AddRound()

if round == 1 then
FHBXJ()
elseif GetRound(90000)==3 and flag.GetBattleValue(90201)==0 then
flag.SetBattleValue(90201,1)
FHBXJ()
elseif GetXHAction() and ShouldJiTui() then --是否应该击退?
global.Print("需要击退")
if not FHBXJ() then
global.Print("无法击退..尴尬")
end
elseif player.GetDP(8) < GetMaxDP() then
global.Print('气不足,普攻')
Atk()
elseif battle.CheckNpcStat(90000,1)==1 then
global.Print("无事干,打杂")
if GetRound(90000)==0 or GetRound(90000)==5 or not JiaXue() then
Atk()
end
else --没中毒 气又是满的
global.Print("多余回合投毒")
TouDu()
end

SetXHAction(false)

end

function FHBXJ() --飞花伴霞剑
local dp = player.GetDP(8)
if dp < 68 then return false end
player.ChangeDP(0,8,-68)
battle.MagicToNpc(90000,83,1)
return true
end

function ShouldJiTui() --看看击退还是放伏羲行动
hp = npc.GetHP(90000,0)
round = GetRound(90000)
if battle.CheckNpcStat(90000,1)==0 then return true end
-- 没毒时也不放他行动
if round <= 3 then return false end
--有毒的话 3回合可让其行动
r = 7 - round --伏羲剩余行动次数
hp = hp - r * 999999 --中毒的扣血
hp = hp - (r-1) * 200000 --假设烤鸭已经用完(还可以再细化) 我方在其行动一轮间隙内输出20W(随便写的 可以留着修 此值可过小不可大)
return hp > 0
end

function GetMaxDP() --气上限
local fx_round = GetRound(90000)
return math.max(80, 100 - 5 * fx_round)

end

龙溟

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
--90300~90399
--90300:自身回合数

function lm()
local round = GetRound()+1
AddRound()
if round==3 then
HOW()
elseif battle.CheckPlayerStat(2,36)==1 and player.GetHP(2,1)<25 and GetQXRound()<=1 then
global.Print("给瑕强袭,准备猛攻")
TGZQ() --瑕武爆待命却无强袭时 天罡战气
elseif player.GetMP(64,0)<100 or player.GetMP(1,0)<100 then
global.Print("神已不足,全体回神")
YTNXX()
elseif battle.CheckNpcStat(90000,1)==0 then
global.Print("投毒")
TouDu() --boss无毒时投毒
elseif player.GetDP(2)>=80 and KY() then
--无内容
elseif GetRound(90000)==0 or GetRound(90000)==5 or not JiaXue() then--打杂
global.Print("无需加血,随意行动")
if battle.CheckPlayerStat(8,10)==0 then
TGZQ()
else
Atk()
end
end

end

伏羲

1
2
3
4
5
6
7
8
9
10
11
12
13
--90400~90499
--90400:自身回合数
--90401:自身中毒标记
--AI, 玄网->小招->小招->小招->大招->结束

function fx()
local round = GetRound()+1
AddRound()
if battle.GetSelfHP(1) >0 then
local n = math.floor(battle.GetSelfHP(2))
ui.Message(70000+n)
end
end