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
alstroemeria-silentlove
windbot
Commits
5f953faa
Commit
5f953faa
authored
May 01, 2020
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:moecube/windbot
parents
2697deab
cdb22dba
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
57 additions
and
45 deletions
+57
-45
Dialogs/verre.zh-CN.json
Dialogs/verre.zh-CN.json
+8
-7
Game/AI/Decks/AltergeistExecutor.cs
Game/AI/Decks/AltergeistExecutor.cs
+1
-6
Game/AI/Decks/TrickstarExecutor.cs
Game/AI/Decks/TrickstarExecutor.cs
+1
-6
Game/AI/Decks/WitchcraftExecutor.cs
Game/AI/Decks/WitchcraftExecutor.cs
+29
-23
Game/AI/Enums/Floodgate.cs
Game/AI/Enums/Floodgate.cs
+7
-1
Game/AI/Enums/ShouldBeDisabledBeforeItUseEffectMonster.cs
Game/AI/Enums/ShouldBeDisabledBeforeItUseEffectMonster.cs
+1
-0
Game/ClientCard.cs
Game/ClientCard.cs
+5
-0
Game/GameBehavior.cs
Game/GameBehavior.cs
+5
-2
No files found.
Dialogs/verre.zh-CN.json
View file @
5f953faa
{
"welcome"
:
[
"啊~~让我再睡一会嘛~"
,
"你要加入公会吗?"
,
"AI功能正在测试中,遇到问题请及时反馈。"
],
"deckerror"
:
[
...
...
@@ -12,7 +13,7 @@
],
"newturn"
:
[
"我的回合,抽卡!"
,
"
我抽了一张卡。
"
"
魔力补充!
"
],
"endturn"
:
[
"不想干活怎么办……"
,
...
...
@@ -24,7 +25,7 @@
"快走开,我要回去睡觉了。"
,
],
"attack"
:
[
"{0},攻击{1}
,我来为你加油
!"
,
"{0},攻击{1}!"
,
"{0},替我打倒{1}!"
],
"ondirectattack"
:
[
...
...
@@ -35,11 +36,10 @@
],
"facedownmonstername"
:
"怪兽"
,
"activate"
:
[
"我发动{0}的效果。"
,
"{0}效果发动。"
"{0}的效果发动!"
],
"summon"
:
[
"
我召唤{0}。
"
,
"
召唤{0}!
"
,
"出来吧,{0}!"
,
"{0},来帮我一下。"
],
...
...
@@ -47,7 +47,8 @@
"……"
],
"chaining"
:
[
"我使用{0}的力量。"
,
"等一下,我发动{0}。"
"发动{0}!"
,
"等一下,我发动{0}。"
,
"要不是有{0},我都快睡着了。"
]
}
Game/AI/Decks/AltergeistExecutor.cs
View file @
5f953faa
...
...
@@ -324,12 +324,7 @@ namespace WindBot.Game.AI.Decks
public
int
SelectSTPlace
(
ClientCard
card
=
null
,
bool
avoid_Impermanence
=
false
)
{
List
<
int
>
list
=
new
List
<
int
>();
list
.
Add
(
0
);
list
.
Add
(
1
);
list
.
Add
(
2
);
list
.
Add
(
3
);
list
.
Add
(
4
);
List
<
int
>
list
=
new
List
<
int
>
{
0
,
1
,
2
,
3
,
4
};
int
n
=
list
.
Count
;
while
(
n
--
>
1
)
{
...
...
Game/AI/Decks/TrickstarExecutor.cs
View file @
5f953faa
...
...
@@ -193,12 +193,7 @@ namespace WindBot.Game.AI.Decks
public
int
SelectSTPlace
()
{
List
<
int
>
list
=
new
List
<
int
>();
list
.
Add
(
0
);
list
.
Add
(
1
);
list
.
Add
(
2
);
list
.
Add
(
3
);
list
.
Add
(
4
);
List
<
int
>
list
=
new
List
<
int
>
{
0
,
1
,
2
,
3
,
4
};
int
n
=
list
.
Count
;
while
(
n
--
>
1
)
{
...
...
Game/AI/Decks/WitchcraftExecutor.cs
View file @
5f953faa
...
...
@@ -88,6 +88,10 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
RelinquishedAnima
);
// counter & quick effect
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Schmietta
,
DeckSSWitchcraft
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Pittore
,
DeckSSWitchcraft
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Potterie
,
DeckSSWitchcraft
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Genni
,
DeckSSWitchcraft
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
PSYGamma
,
PSYGammaActivate
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MaxxC
,
MaxxCActivate
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
GolemAruru
,
GolemAruruActivate
);
...
...
@@ -132,10 +136,6 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Patronus
,
PatronusActivate
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
MagiciansRestage
,
MagiciansRestageActivate
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Holiday
,
HolidayActivate
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Schmietta
,
DeckSSWitchcraft
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Pittore
,
DeckSSWitchcraft
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Potterie
,
DeckSSWitchcraft
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
Genni
,
DeckSSWitchcraft
);
// summon
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
Schmietta
,
WitchcraftSummon
);
...
...
@@ -227,7 +227,7 @@ namespace WindBot.Game.AI.Decks
// MagiciansLeftHand / MagicianRightHand
if
(!
MagicianRightHand_used
&&
card
.
IsSpell
()
&&
card
.
Controller
==
1
)
{
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
c
=>
(
c
.
Race
&
(
int
)
CardRace
.
SpellCaster
)
!=
0
)
!=
null
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
c
=>
c
.
HasRace
(
CardRace
.
SpellCaster
)
)
!=
null
&&
Bot
.
HasInSpellZone
(
CardId
.
MagicianRightHand
,
true
))
{
Logger
.
DebugWriteLine
(
"MagicianRightHand negate: "
+
card
.
Name
??
"???"
);
...
...
@@ -236,7 +236,7 @@ namespace WindBot.Game.AI.Decks
}
if
(!
MagiciansLeftHand_used
&&
card
.
IsTrap
()
&&
card
.
Controller
==
1
)
{
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
c
=>
(
c
.
Race
&
(
int
)
CardRace
.
SpellCaster
)
!=
0
)
!=
null
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
c
=>
c
.
HasRace
(
CardRace
.
SpellCaster
)
)
!=
null
&&
Bot
.
HasInSpellZone
(
CardId
.
MagiciansLeftHand
,
true
))
{
Logger
.
DebugWriteLine
(
"MagiciansLeftHand negate: "
+
card
.
Name
??
"???"
);
...
...
@@ -422,7 +422,8 @@ namespace WindBot.Game.AI.Decks
{
return
base
.
OnSelectPosition
(
cardId
,
positions
);
}
if
((
Duel
.
Player
==
1
&&
(
cardId
==
CardId
.
MadameVerre
||
if
(!
Enemy
.
HasInMonstersZone
(
_CardId
.
BlueEyesChaosMAXDragon
)
&&
(
Duel
.
Player
==
1
&&
(
cardId
==
CardId
.
MadameVerre
||
Util
.
GetOneEnemyBetterThanValue
(
Data
.
Attack
+
1
)
!=
null
))
||
cardId
==
CardId
.
MaxxC
||
cardId
==
CardId
.
AshBlossom_JoyousSpring
)
{
...
...
@@ -490,7 +491,7 @@ namespace WindBot.Game.AI.Decks
int
discardable_hands
=
0
;
int
count_witchcraftspell
=
Bot
.
Hand
.
GetMatchingCardsCount
(
card
=>
(
card
.
IsSpell
()
&&
(
card
.
HasSetcode
(
Witchcraft_setcode
))
&&
card
!=
except
));
int
count_remainhands
=
CheckRemainInDeck
(
CardId
.
MagiciansLeftHand
,
CardId
.
MagicianRightHand
);
int
count_MagiciansRestage
=
Bot
.
Hand
.
Get
CardCount
(
CardId
.
MagiciansRestage
);
int
count_MagiciansRestage
=
Bot
.
Hand
.
Get
MatchingCardsCount
(
card
=>
card
.
Id
==
CardId
.
MagiciansRestage
&&
card
!=
except
);
int
count_MetalfoesFusion
=
Bot
.
Hand
.
GetCardCount
(
CardId
.
MetalfoesFusion
);
int
count_WitchcrafterBystreet
=
Bot
.
SpellZone
.
GetMatchingCardsCount
(
card
=>
card
.
IsFaceup
()
&&
card
.
Id
==
CardId
.
WitchcrafterBystreet
&&
!
card
.
IsDisabled
());
if
(
count_MagiciansRestage
>
0
)
...
...
@@ -859,12 +860,7 @@ namespace WindBot.Game.AI.Decks
/// <param name="avoid_list">Whether need to avoid set in this place</param>
public
void
SelectSTPlace
(
ClientCard
card
=
null
,
bool
avoid_Impermanence
=
false
,
List
<
int
>
avoid_list
=
null
)
{
List
<
int
>
list
=
new
List
<
int
>();
list
.
Add
(
0
);
list
.
Add
(
1
);
list
.
Add
(
2
);
list
.
Add
(
3
);
list
.
Add
(
4
);
List
<
int
>
list
=
new
List
<
int
>
{
0
,
1
,
2
,
3
,
4
};
int
n
=
list
.
Count
;
while
(
n
--
>
1
)
{
...
...
@@ -890,6 +886,7 @@ namespace WindBot.Game.AI.Decks
// Spell&trap's set
public
bool
SpellSet
(){
if
(
Duel
.
Phase
==
DuelPhase
.
Main1
&&
Bot
.
HasAttackingMonster
()
&&
Duel
.
Turn
>
1
)
return
false
;
if
(
Card
.
Id
==
CardId
.
CrossoutDesignator
&&
Duel
.
Turn
>=
5
)
return
false
;
// set condition
int
[]
activate_with_condition
=
{
CardId
.
Masterpiece
,
CardId
.
Draping
};
...
...
@@ -1118,7 +1115,14 @@ namespace WindBot.Game.AI.Decks
if
(
SpellNegatable
())
return
false
;
if
(
CheckDiscardableSpellCount
()
<=
1
)
return
false
;
if
((
Card
.
Id
==
CardId
.
ThatGrassLooksGreener
||
Card
.
Id
==
CardId
.
Reasoning
)
&&
CheckWhetherWillbeRemoved
())
return
false
;
if
(
Card
.
Id
==
CardId
.
MagiciansLeftHand
||
Card
.
Id
==
CardId
.
MagicianRightHand
)
{
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
card
=>
card
.
HasRace
(
CardRace
.
SpellCaster
))
==
null
&&
(
summoned
||
Bot
.
Hand
.
GetFirstMatchingCard
(
card
=>
card
.
HasRace
(
CardRace
.
SpellCaster
)
&&
card
.
Level
<=
4
)
==
null
))
{
return
false
;
}
}
SelectSTPlace
(
Card
,
true
);
return
true
;
}
...
...
@@ -1132,12 +1136,11 @@ namespace WindBot.Game.AI.Decks
if
((
Card
.
Id
==
CardId
.
ThatGrassLooksGreener
||
Card
.
Id
==
CardId
.
Reasoning
)
&&
CheckWhetherWillbeRemoved
())
return
false
;
if
(
Card
.
Id
==
CardId
.
MagiciansLeftHand
||
Card
.
Id
==
CardId
.
MagicianRightHand
)
{
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
card
=>
(
card
.
Race
&
(
int
)
CardRace
.
SpellCaster
)
!=
0
)
==
null
&&
(
summoned
||
Bot
.
Hand
.
GetFirstMatchingCard
(
card
=>
(
card
.
Race
&
(
int
)
CardRace
.
SpellCaster
)
!=
0
)
==
null
))
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
card
=>
card
.
HasRace
(
CardRace
.
SpellCaster
)
)
==
null
&&
(
summoned
||
Bot
.
Hand
.
GetFirstMatchingCard
(
card
=>
card
.
HasRace
(
CardRace
.
SpellCaster
)
&&
card
.
Level
<=
4
)
==
null
))
{
return
false
;
}
}
SelectSTPlace
(
Card
,
true
);
return
true
;
...
...
@@ -1301,6 +1304,7 @@ namespace WindBot.Game.AI.Decks
{
AI
.
SelectNextCard
(
CardId
.
Haine
,
CardId
.
MadameVerre
,
CardId
.
GolemAruru
);
}
UseSSEffect
.
Add
(
Card
.
Id
);
return
true
;
}
...
...
@@ -1919,7 +1923,7 @@ namespace WindBot.Game.AI.Decks
int
code
=
Util
.
GetLastChainCard
().
Id
;
if
(
code
==
0
)
return
false
;
if
(
CheckCalledbytheGrave
(
code
)
>
0
||
CrossoutDesignatorTarget
==
code
)
return
false
;
if
(
Enemy
.
Graveyard
.
GetFirstMatchingCard
(
card
=>
card
.
IsMonster
()
&&
card
.
I
d
==
code
)
!=
null
)
if
(
Enemy
.
Graveyard
.
GetFirstMatchingCard
(
card
=>
card
.
IsMonster
()
&&
card
.
I
sOriginalCode
(
code
)
)
!=
null
)
{
if
(!(
Card
.
Location
==
CardLocation
.
SpellZone
))
{
...
...
@@ -2011,9 +2015,11 @@ namespace WindBot.Game.AI.Decks
{
if
(
NegatedCheck
(
true
)
||
CheckLastChainNegated
())
return
false
;
// negate
if
(
Duel
.
LastChainPlayer
==
1
)
if
(
Duel
.
LastChainPlayer
==
1
&&
Util
.
GetLastChainCard
()
!=
null
)
{
int
code
=
Util
.
GetLastChainCard
().
Id
;
int
alias
=
Util
.
GetLastChainCard
().
Alias
;
if
(
alias
!=
0
&&
alias
-
code
<
10
)
code
=
alias
;
if
(
code
==
0
)
return
false
;
if
(
CheckCalledbytheGrave
(
code
)
>
0
||
CrossoutDesignatorTarget
==
code
)
return
false
;
if
(
CheckRemainInDeck
(
code
)
>
0
)
...
...
@@ -2065,7 +2071,7 @@ namespace WindBot.Game.AI.Decks
{
return
false
;
}
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
card
=>
(
card
.
Race
&
(
int
)
CardRace
.
SpellCaster
)
!=
0
)
==
null
)
if
(
Bot
.
MonsterZone
.
GetFirstMatchingCard
(
card
=>
card
.
HasRace
(
CardRace
.
SpellCaster
)
)
==
null
)
{
return
false
;
}
...
...
@@ -2204,7 +2210,7 @@ namespace WindBot.Game.AI.Decks
// negate monsters
if
((
LastChainCard
==
null
||
LastChainCard
.
Controller
!=
1
||
LastChainCard
.
Location
!=
CardLocation
.
MonsterZone
||
LastChainCard
.
IsDisabl
ed
()
||
LastChainCard
.
IsShouldNotBeTarget
()
||
LastChainCard
.
IsShouldNotBeSpellTrapTarget
()))
||
CheckLastChainNegat
ed
()
||
LastChainCard
.
IsShouldNotBeTarget
()
||
LastChainCard
.
IsShouldNotBeSpellTrapTarget
()))
return
false
;
if
(
Card
.
Location
==
CardLocation
.
SpellZone
)
{
...
...
@@ -2468,7 +2474,7 @@ namespace WindBot.Game.AI.Decks
// banish hands
if
(
Card
.
Location
==
CardLocation
.
MonsterZone
)
{
if
(
Duel
.
Player
==
1
||
Bot
.
HasInMonstersZone
(
CardId
.
PSYLambda
))
if
(
Duel
.
Player
==
1
||
Bot
.
HasInMonstersZone
(
CardId
.
PSYLambda
)
||
(
Util
.
IsChainTarget
(
Card
))
)
{
return
true
;
}
else
...
...
Game/AI/Enums/Floodgate.cs
View file @
5f953faa
...
...
@@ -100,6 +100,12 @@
RedSupernovaDragon
=
99585850
,
NumberF0UtopicFutureDragon
=
26973555
,
InvokedAugoeides
=
97300502
,
DragonmaidStrahl
=
24799107
DragonmaidStrahl
=
24799107
,
RavenousCrocodragonArchethys
=
87188910
,
AdamancipatorRisenRaptite
=
73079836
,
AdamancipatorRisenDragite
=
9464441
,
TeardroptheRikkaQueen
=
33779875
,
CeruleanSkyFire
=
54828837
,
SacredBeastAwakening
=
53701259
}
}
Game/AI/Enums/ShouldBeDisabledBeforeItUseEffectMonster.cs
View file @
5f953faa
...
...
@@ -50,6 +50,7 @@
HoarrGeneraiderBossofRumbling
=
68199168
,
RedFamiliar
=
8372133
,
AccesscodeTalker
=
86066372
,
ChaosSummoningBeast
=
27439792
,
CosmoBrain
=
85679527
,
ShiranuiSolitaire
=
94801854
,
...
...
Game/ClientCard.cs
View file @
5f953faa
...
...
@@ -251,6 +251,11 @@ namespace WindBot.Game
return
(
Attribute
&
(
int
)
attribute
)
!=
0
;
}
public
bool
HasRace
(
CardRace
race
)
{
return
(
Race
&
(
int
)
race
)
!=
0
;
}
public
bool
HasSetcode
(
int
setcode
)
{
if
(
Data
==
null
)
return
false
;
...
...
Game/GameBehavior.cs
View file @
5f953faa
...
...
@@ -530,14 +530,17 @@ namespace WindBot.Game
int
final
=
_duel
.
Fields
[
player
].
LifePoints
-
packet
.
ReadInt32
();
if
(
final
<
0
)
final
=
0
;
if
(
_debug
)
Logger
.
WriteLine
(
"("
+
player
.
ToString
()
+
" got damage , LifePoint left= "
+
final
.
ToString
()
+
")"
);
Logger
.
WriteLine
(
"("
+
player
.
ToString
()
+
" got damage , LifePoint left
= "
+
final
.
ToString
()
+
")"
);
_duel
.
Fields
[
player
].
LifePoints
=
final
;
}
private
void
OnRecover
(
BinaryReader
packet
)
{
int
player
=
GetLocalPlayer
(
packet
.
ReadByte
());
_duel
.
Fields
[
player
].
LifePoints
+=
packet
.
ReadInt32
();
int
final
=
_duel
.
Fields
[
player
].
LifePoints
+
packet
.
ReadInt32
();
if
(
_debug
)
Logger
.
WriteLine
(
"("
+
player
.
ToString
()
+
" got healed , LifePoint left = "
+
final
.
ToString
()
+
")"
);
_duel
.
Fields
[
player
].
LifePoints
=
final
;
}
private
void
OnLpUpdate
(
BinaryReader
packet
)
...
...
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