Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
W
windbot
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
神之吹息
windbot
Commits
aa31628f
Commit
aa31628f
authored
Nov 27, 2017
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge
https://github.com/IceYGO/windbot
parents
d0bf8485
bc692f39
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
123 additions
and
51 deletions
+123
-51
BotWrapper/bot.conf
BotWrapper/bot.conf
+16
-16
Decks/AI_Lightsworn.ydk
Decks/AI_Lightsworn.ydk
+2
-2
Game/AI/Decks/LightswornExecutor.cs
Game/AI/Decks/LightswornExecutor.cs
+77
-6
Game/AI/DefaultExecutor.cs
Game/AI/DefaultExecutor.cs
+2
-13
Game/GameBehavior.cs
Game/GameBehavior.cs
+12
-7
README.md
README.md
+13
-6
WindBotInfo.cs
WindBotInfo.cs
+1
-1
No files found.
BotWrapper/bot.conf
View file @
aa31628f
...
@@ -2,79 +2,79 @@
...
@@ -2,79 +2,79 @@
# !name
# !name
# command
# command
# description
# description
# flag
( 0x1=SUPPORT_MASTER_RULE_3 , 0x2=SUPPORT_NEW_MASTER_RULE
)
# flag
s (avail flags: SUPPORT_MASTER_RULE_3, SUPPORT_NEW_MASTER_RULE
)
!谜之剑士
LV4
-龙骑星爆
!谜之剑士
LV4
-龙骑星爆
Name
=谜之剑士
LV4
Deck
=
Dragunity
Dialog
=
swordsman
.
zh
-
CN
Name
=谜之剑士
LV4
Deck
=
Dragunity
Dialog
=
swordsman
.
zh
-
CN
龙骑轴星尘龙爆裂体卡组。
龙骑轴星尘龙爆裂体卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!谜之剑士
LV4
-
R5
!谜之剑士
LV4
-
R5
Name
=谜之剑士
LV4
Deck
=
'Rank V'
Dialog
=
swordsman
.
zh
-
CN
Name
=谜之剑士
LV4
Deck
=
'Rank V'
Dialog
=
swordsman
.
zh
-
CN
5
阶超量卡组。
5
阶超量卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!谜之剑士
LV4
-异热同心武器
!谜之剑士
LV4
-异热同心武器
Name
=谜之剑士
LV4
Deck
=
'Zexal Weapons'
Dialog
=
swordsman
.
zh
-
CN
Name
=谜之剑士
LV4
Deck
=
'Zexal Weapons'
Dialog
=
swordsman
.
zh
-
CN
神装电光皇卡组。
神装电光皇卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!琪露诺-彩虹
!琪露诺-彩虹
Name
=琪露诺
Deck
=
Rainbow
Dialog
=
cirno
.
zh
-
CN
Name
=琪露诺
Deck
=
Rainbow
Dialog
=
cirno
.
zh
-
CN
全属性凡骨卡组。
全属性凡骨卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!琪露诺-饼蛙
!琪露诺-饼蛙
Name
=琪露诺
Deck
=
'Toadally Awesome'
Dialog
=
cirno
.
zh
-
CN
Name
=琪露诺
Deck
=
'Toadally Awesome'
Dialog
=
cirno
.
zh
-
CN
大师规则三的全盛饼蛙卡组。
大师规则三的全盛饼蛙卡组。
1
SUPPORT_MASTER_RULE_3
!复制植物-青眼
!复制植物-青眼
Name
=复制植物
Deck
=
Blue
-
Eyes
Dialog
=
copy
.
zh
-
CN
Name
=复制植物
Deck
=
Blue
-
Eyes
Dialog
=
copy
.
zh
-
CN
青眼卡组。
青眼卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!复制植物-十二兽
!复制植物-十二兽
Name
=复制植物
Deck
=
Zoodiac
Dialog
=
copy
.
zh
-
CN
Name
=复制植物
Deck
=
Zoodiac
Dialog
=
copy
.
zh
-
CN
大师规则三的十四兽卡组。
大师规则三的十四兽卡组。
1
SUPPORT_MASTER_RULE_3
!尼亚-妖仙兽
!尼亚-妖仙兽
Name
=尼亚
Deck
=
Yosenju
Dialog
=
near
.
zh
-
CN
Name
=尼亚
Deck
=
Yosenju
Dialog
=
near
.
zh
-
CN
妖仙兽卡组。
妖仙兽卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!尼亚-机壳
!尼亚-机壳
Name
=尼亚
Deck
=
Qliphort
Dialog
=
near
.
zh
-
CN
Name
=尼亚
Deck
=
Qliphort
Dialog
=
near
.
zh
-
CN
机壳卡组。
机壳卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!永远之魂-削血
!永远之魂-削血
Name
=永远之魂
Deck
=
Burn
Dialog
=
soul
.
zh
-
CN
Name
=永远之魂
Deck
=
Burn
Dialog
=
soul
.
zh
-
CN
老式削血卡组。
老式削血卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!永远之魂-青蛙
!永远之魂-青蛙
Name
=永远之魂
Deck
=
Frog
Dialog
=
soul
.
zh
-
CN
Name
=永远之魂
Deck
=
Frog
Dialog
=
soul
.
zh
-
CN
老式青蛙卡组。
老式青蛙卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!永远之魂-荷鲁斯
!永远之魂-荷鲁斯
Name
=永远之魂
Deck
=
Horus
Dialog
=
soul
.
zh
-
CN
Name
=永远之魂
Deck
=
Horus
Dialog
=
soul
.
zh
-
CN
老式龙族卡组。
老式龙族卡组。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!悠悠
!悠悠
Name
=悠悠
Deck
=
MokeyMokey
Dialog
=
mokey
.
zh
-
CN
Name
=悠悠
Deck
=
MokeyMokey
Dialog
=
mokey
.
zh
-
CN
沙包。
沙包。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!悠悠王
!悠悠王
Name
=悠悠王
Deck
=
MokeyMokeyKing
Dialog
=
mokey
.
zh
-
CN
Name
=悠悠王
Deck
=
MokeyMokeyKing
Dialog
=
mokey
.
zh
-
CN
大沙包。
大沙包。
3
SUPPORT_MASTER_RULE_3
SUPPORT_NEW_MASTER_RULE
!试作型机器人
1732
!试作型机器人
1732
Name
=试作型机器人
1732
Deck
=
ST1732
Dialog
=
zh
-
CN
Name
=试作型机器人
1732
Deck
=
ST1732
Dialog
=
zh
-
CN
由三盒
ST17
和三盒
SD32
组成的卡组。
由三盒
ST17
和三盒
SD32
组成的卡组。
2
SUPPORT_NEW_MASTER_RULE
Decks/AI_Lightsworn.ydk
View file @
aa31628f
#created by ...
#created by ...
#main
#main
77558536
18144506
57774843
57774843
57774843
57774843
57774843
57774843
...
@@ -9,7 +11,6 @@
...
@@ -9,7 +11,6 @@
59019082
59019082
77558536
77558536
77558536
77558536
77558536
22624373
22624373
22624373
22624373
67696066
67696066
...
@@ -34,7 +35,6 @@
...
@@ -34,7 +35,6 @@
691925
691925
691925
691925
5133471
5133471
18144506
32807846
32807846
73594093
73594093
94886282
94886282
...
...
Game/AI/Decks/LightswornExecutor.cs
View file @
aa31628f
...
@@ -120,12 +120,18 @@ namespace WindBot.Game.AI.Decks
...
@@ -120,12 +120,18 @@ namespace WindBot.Game.AI.Decks
private
bool
ReinforcementOfTheArmyEffect
()
private
bool
ReinforcementOfTheArmyEffect
()
{
{
if
(!
Bot
.
HasInHand
(
CardId
.
Goblindbergh
))
if
(!
Bot
.
HasInHand
(
CardId
.
Raiden
))
AI
.
SelectCard
(
CardId
.
Goblindbergh
);
{
else
if
(!
Bot
.
HasInHand
(
CardId
.
Raiden
))
AI
.
SelectCard
(
CardId
.
Raiden
);
AI
.
SelectCard
(
CardId
.
Raiden
);
return
true
;
return
true
;
}
}
else
if
(!
Bot
.
HasInHand
(
CardId
.
Goblindbergh
))
{
AI
.
SelectCard
(
CardId
.
Goblindbergh
);
return
true
;
}
return
false
;
}
private
bool
ChargeOfTheLightBrigadeEffect
()
private
bool
ChargeOfTheLightBrigadeEffect
()
{
{
...
@@ -157,9 +163,9 @@ namespace WindBot.Game.AI.Decks
...
@@ -157,9 +163,9 @@ namespace WindBot.Game.AI.Decks
private
bool
GoblindberghSummon
()
private
bool
GoblindberghSummon
()
{
{
foreach
(
ClientCard
card
in
Bot
.
Hand
)
foreach
(
ClientCard
card
in
Bot
.
Hand
.
GetMonsters
()
)
{
{
if
(
card
!=
Card
&&
card
.
IsMonster
(
)
&&
card
.
Level
==
4
)
if
(
!
card
.
Equals
(
Card
)
&&
card
.
Level
==
4
)
return
true
;
return
true
;
}
}
return
false
;
return
false
;
...
@@ -178,6 +184,32 @@ namespace WindBot.Game.AI.Decks
...
@@ -178,6 +184,32 @@ namespace WindBot.Game.AI.Decks
return
true
;
return
true
;
}
}
private
bool
LuminaEffect
()
{
if
(!
Bot
.
HasInGraveyard
(
CardId
.
Raiden
)
&&
Bot
.
HasInHand
(
CardId
.
Raiden
))
{
AI
.
SelectCard
(
CardId
.
Raiden
);
}
else
if
(!
ClownUsed
&&
Bot
.
HasInHand
(
CardId
.
PerformageTrickClown
))
{
AI
.
SelectCard
(
CardId
.
PerformageTrickClown
);
}
else
{
AI
.
SelectCard
(
new
[]
{
CardId
.
Wulf
,
CardId
.
Felis
,
CardId
.
Minerva
,
CardId
.
ThousandBlades
});
}
AI
.
SelectNextCard
(
new
[]
{
CardId
.
Raiden
,
CardId
.
Felis
});
return
true
;
}
private
bool
PerformageTrickClownEffect
()
private
bool
PerformageTrickClownEffect
()
{
{
ClownUsed
=
true
;
ClownUsed
=
true
;
...
@@ -185,9 +217,48 @@ namespace WindBot.Game.AI.Decks
...
@@ -185,9 +217,48 @@ namespace WindBot.Game.AI.Decks
return
true
;
return
true
;
}
}
private
bool
MinervaTheExaltedEffect
()
{
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
return
true
;
}
else
{
IList
<
ClientCard
>
targets
=
new
List
<
ClientCard
>();
ClientCard
target1
=
AI
.
Utils
.
GetBestEnemyMonster
();
if
(
target1
!=
null
)
targets
.
Add
(
target1
);
ClientCard
target2
=
AI
.
Utils
.
GetBestEnemySpell
();
if
(
target2
!=
null
)
targets
.
Add
(
target2
);
foreach
(
ClientCard
target
in
Enemy
.
GetMonsters
())
{
if
(
targets
.
Count
>=
3
)
break
;
if
(!
targets
.
Contains
(
target
))
targets
.
Add
(
target
);
}
foreach
(
ClientCard
target
in
Enemy
.
GetSpells
())
{
if
(
targets
.
Count
>=
3
)
break
;
if
(!
targets
.
Contains
(
target
))
targets
.
Add
(
target
);
}
if
(
targets
.
Count
==
0
)
return
false
;
AI
.
SelectNextCard
(
targets
);
return
true
;
}
}
private
bool
HonestEffect
()
private
bool
HonestEffect
()
{
{
return
Duel
.
Phase
!=
DuelPhase
.
Main1
;
return
Duel
.
Phase
!=
DuelPhase
.
Main1
;
}
}
}
}
}
}
\ No newline at end of file
Game/AI/DefaultExecutor.cs
View file @
aa31628f
...
@@ -147,18 +147,7 @@ namespace WindBot.Game.AI
...
@@ -147,18 +147,7 @@ namespace WindBot.Game.AI
if
(
Card
.
Location
==
CardLocation
.
Grave
)
if
(
Card
.
Location
==
CardLocation
.
Grave
)
{
{
selected
=
Enemy
.
SpellZone
.
GetFloodgate
();
selected
=
AI
.
Utils
.
GetBestEnemySpell
(
true
);
if
(
selected
==
null
)
{
foreach
(
ClientCard
card
in
spells
)
{
if
(!
card
.
IsFacedown
())
{
selected
=
card
;
break
;
}
}
}
}
}
else
else
{
{
...
@@ -187,7 +176,7 @@ namespace WindBot.Game.AI
...
@@ -187,7 +176,7 @@ namespace WindBot.Game.AI
if
(
AI
.
Utils
.
IsAllEnemyBetter
(
true
))
if
(
AI
.
Utils
.
IsAllEnemyBetter
(
true
))
{
{
ClientCard
monster
=
Enemy
.
GetMonsters
().
GetHighestAttackMonster
();
ClientCard
monster
=
Enemy
.
GetMonsters
().
GetHighestAttackMonster
();
if
(
monster
!=
null
&&
monster
.
HasType
(
CardType
.
Effect
)
&&
(
monster
.
HasType
(
CardType
.
Xyz
)
||
monster
.
Level
>
4
))
if
(
monster
!=
null
&&
monster
.
HasType
(
CardType
.
Effect
)
&&
!
monster
.
HasType
(
CardType
.
Link
)
&&
(
monster
.
HasType
(
CardType
.
Xyz
)
||
monster
.
Level
>
4
))
{
{
AI
.
SelectCard
(
monster
);
AI
.
SelectCard
(
monster
);
return
true
;
return
true
;
...
...
Game/GameBehavior.cs
View file @
aa31628f
...
@@ -281,17 +281,22 @@ namespace WindBot.Game
...
@@ -281,17 +281,22 @@ namespace WindBot.Game
packet
.
ReadByte
();
packet
.
ReadByte
();
packet
.
ReadByte
();
packet
.
ReadByte
();
packet
.
ReadByte
();
packet
.
ReadByte
();
int
code
=
packet
.
ReadInt32
();
int
p
code
=
packet
.
ReadInt32
();
if
(
msg
==
2
)
//ERRMSG_DECKERROR
if
(
msg
==
2
)
//ERRMSG_DECKERROR
{
int
code
=
pcode
&
0xFFFFFFF
;
int
flag
=
pcode
>>
28
;
if
(
flag
<=
5
)
//DECKERROR_CARDCOUNT
{
{
NamedCard
card
=
NamedCard
.
Get
(
code
);
NamedCard
card
=
NamedCard
.
Get
(
code
);
if
(
card
!=
null
)
if
(
card
!=
null
)
_ai
.
OnDeckError
(
card
.
Name
);
_ai
.
OnDeckError
(
card
.
Name
);
else
if
(
code
==
1
)
_ai
.
OnDeckError
(
"DECK"
);
else
else
_ai
.
OnDeckError
(
"Unknown Card"
);
_ai
.
OnDeckError
(
"Unknown Card"
);
}
}
else
_ai
.
OnDeckError
(
"DECK"
);
}
//Connection.Close();
//Connection.Close();
}
}
...
...
README.md
View file @
aa31628f
...
@@ -71,7 +71,7 @@ WindBot can run as a "server", provide a http interface to create bot.
...
@@ -71,7 +71,7 @@ WindBot can run as a "server", provide a http interface to create bot.
*
ST1732
*
ST1732
*
Toadally Awesome (old lflist)
*
Toadally Awesome (old lflist
, master rule 3 only
)
*
Yosenju
*
Yosenju
...
@@ -99,7 +99,7 @@ WindBot can run as a "server", provide a http interface to create bot.
...
@@ -99,7 +99,7 @@ WindBot can run as a "server", provide a http interface to create bot.
WindBot can run as a "server", provide a http interface to create bot.
WindBot can run as a "server", provide a http interface to create bot.
eg.
`http://127.0.0.1:2399/?name=%E2%91%A8&deck=Blue-Eyes&host=127.0.0.1&port=7911&dialog=cirno.zh-CN
&version=4928
`
eg.
`http://127.0.0.1:2399/?name=%E2%91%A8&deck=Blue-Eyes&host=127.0.0.1&port=7911&dialog=cirno.zh-CN`
In this situation, it will be multi-threaded. This can be useful for servers, since it don't use large amount memory.
In this situation, it will be multi-threaded. This can be useful for servers, since it don't use large amount memory.
...
@@ -113,6 +113,17 @@ The parameters are same as commandlines, but low cased.
...
@@ -113,6 +113,17 @@ The parameters are same as commandlines, but low cased.
### Changelog
### Changelog
#### v0x1341 (2017-11-27)
-
Update YGOPro protrol to 0x1341
-
Change the program to x86 only
-
Add BotWrapper for YGOPro bot mode
-
Add
`AI.SelectMaterials`
,
`OnSelectFusionMaterial`
,
`OnSelectPendulumSummon`
,
`AI.Utils.SelectPreferredCards`
etc.
-
Fix
`AI.Utils.GetBestEnemySpell`
to not return normal spell currently activating
-
Fix AI don't attack defense Crystal Wing or S39
-
Fix ZexalWeapons AI don't change defense S39 back
-
Minor updates
#### v0x1340 (2017-11-06)
#### v0x1340 (2017-11-06)
-
Update YGOPro protrol to 0x1340
-
Update YGOPro protrol to 0x1340
...
@@ -153,12 +164,8 @@ The parameters are same as commandlines, but low cased.
...
@@ -153,12 +164,8 @@ The parameters are same as commandlines, but low cased.
*
`AI.SelectZone`
*
`AI.SelectZone`
*
`AI.SelectMaterials`
which select a set of cards for F/S/X/L summon
*
`AI.SelectTribute`
*
`AI.SelectTribute`
*
Select cards to pendulum summon in executor.
*
Get equip of card.
*
Get equip of card.
*
Get attack target.
*
Get attack target.
...
...
WindBotInfo.cs
View file @
aa31628f
...
@@ -21,7 +21,7 @@ namespace WindBot
...
@@ -21,7 +21,7 @@ namespace WindBot
Host
=
"127.0.0.1"
;
Host
=
"127.0.0.1"
;
Port
=
7911
;
Port
=
7911
;
HostInfo
=
""
;
HostInfo
=
""
;
Version
=
0x134
0
;
Version
=
0x134
1
;
Hand
=
0
;
Hand
=
0
;
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment