Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
W
Windbot-408
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-408
Commits
72bf1203
Commit
72bf1203
authored
Oct 26, 2023
by
苍蓝
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix 救火女
parent
5ebbbd4f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
112 additions
and
47 deletions
+112
-47
Decks/AI_Mituzi.ydk
Decks/AI_Mituzi.ydk
+6
-6
Game/AI/Decks/ExcutieExecutor.cs
Game/AI/Decks/ExcutieExecutor.cs
+56
-26
Game/AI/Decks/MituziExecutor.cs
Game/AI/Decks/MituziExecutor.cs
+43
-15
Game/AI/Enums/DangerousMonster.cs
Game/AI/Enums/DangerousMonster.cs
+7
-0
No files found.
Decks/AI_Mituzi.ydk
View file @
72bf1203
#created by ...
#main
1202
38019
1202
47063
120199020
120199020
120199020
...
...
@@ -12,9 +12,9 @@
120155002
120155002
120155002
120
155001
120
155001
120
155001
120
247046
120
247046
120
247046
120192010
120192010
120192010
...
...
@@ -36,8 +36,8 @@
120194004
120155042
120155042
120
151033
120
151033
120
247058
120
247058
120155054
120155053
120198003
...
...
Game/AI/Decks/ExcutieExecutor.cs
View file @
72bf1203
...
...
@@ -42,7 +42,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
紧急事态
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
幻影咆哮
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
救火女
,
救火女
Sp
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
夜魔女
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
光天女
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
细剑女
);
...
...
@@ -52,7 +52,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
SpellSet
,
_CardId
.
黑洞
);
AddExecutor
(
ExecutorType
.
SpellSet
,
_CardId
.
圣防
);
AddExecutor
(
ExecutorType
.
SpellSet
,
_CardId
.
傲慢之壶
);
AddExecutor
(
ExecutorType
.
SpSummon
,
CardId
.
救火女
,
救火女
Sp
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
花草女
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
遥控女
,
遥控女
Effect1
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
浮游女
,
浮游女
Effect
);
...
...
@@ -82,7 +82,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
遥控女
,
遥控女
Effect2
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
救火女
,
救火女
Effect2
);
AddExecutor
(
ExecutorType
.
Activate
,
DefaultDontChainMyself
);
//
AddExecutor(ExecutorType.Activate, DefaultDontChainMyself);
AddExecutor
(
ExecutorType
.
Repos
,
DefaultMonsterRepos
);
AddExecutor
(
ExecutorType
.
Repos
,
CardId
.
花草女
,
圣防
Repos
);
...
...
@@ -104,6 +104,23 @@ namespace WindBot.Game.AI.Decks
{
atkup
=
false
;
}
public
override
BattlePhaseAction
OnSelectAttackTarget
(
ClientCard
attacker
,
IList
<
ClientCard
>
defenders
)
{
int
minAttack
=
1450
;
foreach
(
ClientCard
defender
in
defenders
)
{
if
(
defender
.
IsAttack
()
&&
defender
.
Attack
<
minAttack
)
minAttack
=
defender
.
Attack
;
}
foreach
(
ClientCard
defenderCard
in
defenders
)
if
(
defenderCard
.
IsAttack
()
&&
defenderCard
.
Attack
==
minAttack
)
{
return
AI
.
Attack
(
attacker
,
defenderCard
);
}
return
base
.
OnSelectAttackTarget
(
attacker
,
defenders
);
}
private
IList
<
int
>
targets
=
new
[]
{
CardId
.
夜魔女
,
CardId
.
光天女
,
CardId
.
细剑女
,
CardId
.
救火女
,
CardId
.
浮游女
,
CardId
.
遥控女
,
CardId
.
主存女
,
CardId
.
花草女
};
...
...
@@ -115,8 +132,7 @@ namespace WindBot.Game.AI.Decks
private
bool
救火女
Sp
()
{
int
topattack
=
(
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
)
+
Enemy
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
))
*
600
+
1700
;
if
(
Util
.
IsOneEnemyBetter
()
&&
!
atkup
&&
Util
.
GetBestAttack
(
Enemy
)
<
topattack
)
if
(
Util
.
IsOneEnemyBetter
()
&&
!
atkup
&&
Util
.
GetBestAttack
(
Enemy
)
<
topattack
)
return
true
;
return
false
;
}
...
...
@@ -164,40 +180,42 @@ namespace WindBot.Game.AI.Decks
private
bool
救火女
Effect1
()
{
int
topattack
=
(
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
)
+
Enemy
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
))
*
600
+
1700
;
if
(
Util
.
IsOneEnemyBetter
()
&&
!
atkup
&&
Util
.
GetBestAttack
(
Enemy
)
<
topattack
)
if
((
Util
.
IsOneEnemyBetter
()
&&
!
atkup
&&
Util
.
GetBestAttack
(
Enemy
)
<
topattack
)
||
(
Enemy
.
HasAttackingMonster
()
&&
Enemy
.
GetMonsters
().
Any
(
card
=>
card
?.
Data
==
null
))
)
{
foreach
(
ClientCard
m
in
Bot
.
Hand
)
AI
.
SelectCard
(
m
);
atkup
=
true
;
return
true
;
}
return
false
;
}
private
bool
救火女
Effect2
()
{
if
(!
atkup
&&
Enemy
.
HasAttackingMonster
())
{
int
topattack
=
(
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
)
+
Enemy
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
))
*
600
+
1700
;
if
(
Util
.
GetTotalAttackingMonsterAttack
(
0
)
<
topattack
||
(
topattack
>=
Enemy
.
LifePoints
+
Enemy
.
GetMonsters
().
GetLowestAttackMonster
().
Attack
))
{
int
topattack
=
(
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
)
+
Enemy
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
==
6
))
*
600
+
1700
;
ClientCard
enemymon
=
Enemy
.
GetMonsters
().
GetLowestAttackMonster
();
if
(
enemymon
!=
null
&&
!
atkup
&&
Enemy
.
HasAttackingMonster
()
&&
!
Util
.
IsOneEnemyBetter
())
{
if
(
Util
.
GetTotalAttackingMonsterAttack
(
0
)
+
100
<=
topattack
||
Enemy
.
LifePoints
+
enemymon
.
Attack
<=
topattack
)
{
foreach
(
ClientCard
m
in
Bot
.
Hand
)
AI
.
SelectCard
(
m
);
atkup
=
true
;
atkup
=
true
;
return
true
;
}
}
return
false
;
}
return
false
;
}
private
bool
光天女
Effect
()
{
var
mon
=
Enemy
.
MonsterZone
.
GetMatchingCards
(
card
=>
card
.
Level
==
7
||
card
.
Level
==
8
).
OrderByDescending
(
card
=>
card
.
Attack
).
FirstOrDefault
();
ClientCard
mon
=
Enemy
.
MonsterZone
.
GetMatchingCards
(
card
=>
card
.
Level
==
7
||
card
.
Level
==
8
).
OrderByDescending
(
card
=>
card
.
Attack
).
FirstOrDefault
();
if
(
mon
!=
null
)
{
AI
.
SelectCard
(
tar
);
AI
.
Select
Next
Card
(
mon
);
AI
.
SelectCard
(
mon
);
return
true
;
}
return
false
;
...
...
@@ -227,8 +245,8 @@ namespace WindBot.Game.AI.Decks
private
bool
遥控女
Effect1
()
{
var
mon
=
Enemy
.
MonsterZone
.
GetHighestAttackMonster
(
);
if
(
mon
.
Attack
>
1800
&&
mon
.
Defense
<
Util
.
GetBestBotMonster
().
Attack
&&
Bot
.
HasInGraveyard
(
targets
))
ClientCard
mon
=
Util
.
GetOneEnemyBetterThanValue
(
1800
);
if
(
mon
!=
null
&&
mon
.
Defense
<
Util
.
GetBestBotMonster
().
Attack
&&
Bot
.
HasInGraveyard
(
targets
))
AI
.
SelectCard
(
targets
);
AI
.
SelectNextCard
(
mon
);
return
true
;
...
...
@@ -255,19 +273,31 @@ namespace WindBot.Game.AI.Decks
}
private
bool
劈裂史莱姆
Effect
()
{
var
mon
=
Enemy
.
MonsterZone
.
GetHighestAttackMonster
();
int
att
=
Bot
.
MonsterZone
.
GetHighestAttackMonster
().
Attack
;
if
(
mon
.
Attack
<=
att
+
1000
&&
mon
.
Attack
>
att
)
ClientCard
mon
=
Enemy
.
GetMonsters
()
.
GetHighestAttackMonster
();
ClientCard
m
=
Bot
.
GetMonsters
().
GetHighestAttackMonster
()
;
if
(
mon
!=
null
&&
m
!=
null
&&
mon
.
Attack
<=
m
.
Attack
+
1000
&&
mon
.
Attack
>
m
.
Attack
)
{
AI
.
SelectCard
(
tar
);
AI
.
SelectNextCard
(
mon
);
AI
.
SelectThirdCard
(
_CardId
.
幻影之龙
);
return
true
;
if
(
Bot
.
HasInGraveyard
(
_CardId
.
幻影之龙
))
{
AI
.
SelectYesNo
(
true
);
AI
.
SelectThirdCard
(
_CardId
.
幻影之龙
);
}
return
true
;
}
if
((
Bot
.
HasInMonstersZone
(
CardId
.
花草女
)
||
Bot
.
HasInMonstersZone
(
CardId
.
主存女
))
&&
Bot
.
HasInGraveyard
(
_CardId
.
幻影之龙
))
if
(
mon
!=
null
&&
m
!=
null
&&
(
Bot
.
HasInMonstersZone
(
CardId
.
花草女
)
||
Bot
.
HasInMonstersZone
(
CardId
.
主存女
))
&&
Bot
.
HasInGraveyard
(
_CardId
.
幻影之龙
))
{
AI
.
SelectCard
(
CardId
.
花草女
,
CardId
.
主存女
);
AI
.
SelectNextCard
(
mon
);
AI
.
SelectYesNo
(
true
);
AI
.
SelectThirdCard
(
_CardId
.
幻影之龙
);
return
true
;
}
if
(
mon
!=
null
&&
Bot
.
HasInMonstersZone
(
_CardId
.
幻影之龙
))
{
AI
.
SelectCard
(
_CardId
.
幻影之龙
);
AI
.
SelectNextCard
(
mon
);
AI
.
SelectYesNo
(
true
);
AI
.
SelectThirdCard
(
_CardId
.
幻影之龙
);
return
true
;
}
...
...
Game/AI/Decks/MituziExecutor.cs
View file @
72bf1203
...
...
@@ -15,6 +15,7 @@ namespace WindBot.Game.AI.Decks
{
public
class
CardId
{
public
const
int
幻煌
=
120247063
;
public
const
int
起重龙
=
120199020
;
public
const
int
幻龙重骑
=
120155022
;
public
const
int
建造龙
=
120155024
;
...
...
@@ -24,7 +25,7 @@ namespace WindBot.Game.AI.Decks
public
const
int
荒废蟠龙
=
120192011
;
public
const
int
风车鳞虫
=
120183034
;
public
const
int
丰沃蟠龙
=
120170037
;
public
const
int
钻头蜥蜴
=
120155001
;
public
const
int
高空工龙
=
120247046
;
public
const
int
镐头龙
=
120155025
;
public
const
int
贯通
=
120120037
;
public
const
int
阴阳封阵
=
120183053
;
...
...
@@ -34,13 +35,13 @@ namespace WindBot.Game.AI.Decks
public
const
int
幻刃复归
=
120151033
;
public
const
int
幻刃急攻
=
120155053
;
public
const
int
幻刃封锁
=
120155054
;
public
const
int
幻坏奥义
=
120247058
;
public
const
int
暗黑释放
=
120105013
;
}
public
int
[]
priList
=
{
CardId
.
起重龙
,
CardId
.
建造龙
,
CardId
.
幻龙重骑
,
CardId
.
幻刃破龙
};
public
int
[]
rePriList
=
{
CardId
.
幻刃破龙
,
CardId
.
幻龙重骑
,
CardId
.
建造龙
,
CardId
.
起重龙
,
};
public
int
[]
priList
=
{
CardId
.
起重龙
,
CardId
.
建造龙
,
CardId
.
幻龙重骑
,
CardId
.
幻煌
,
CardId
.
幻刃破龙
};
public
int
[]
rePriList
=
{
CardId
.
幻刃破龙
,
CardId
.
幻
煌
,
CardId
.
幻
龙重骑
,
CardId
.
建造龙
,
CardId
.
起重龙
,
};
public
MituziExecutor
(
GameAI
ai
,
Duel
duel
)
:
base
(
ai
,
duel
)
{
...
...
@@ -51,6 +52,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
落穴
,
落穴
Effect
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
激流葬
,
激流葬
Effect
);
AddExecutor
(
ExecutorType
.
Activate
,
_CardId
.
圣防
,
圣防
Effect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
幻坏奥义
,
奥义
Effect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
阴阳封阵
,
阴阳封阵
Effect
);
AddExecutor
(
ExecutorType
.
SpellSet
,
CardId
.
阴阳封阵
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
透幻乡险峻
,
DefaultField
);
...
...
@@ -63,6 +65,7 @@ namespace WindBot.Game.AI.Decks
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
起重龙
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
建造龙
,
建造龙
Effect
);
AddExecutor
(
ExecutorType
.
Activate
,
CardId
.
镐头龙
,
镐头龙
Effect
);
AddExecutor
(
ExecutorType
.
Summon
,
CardId
.
幻煌
,
DefaultMonsterSummon
);
AddExecutor
(
ExecutorType
.
Summon
,
_CardId
.
伟大魔兽
,
伟大魔兽
Summon
);
AddExecutor
(
ExecutorType
.
Summon
,
幻刃急攻
Summon
);
...
...
@@ -296,7 +299,7 @@ namespace WindBot.Game.AI.Decks
private
bool
镐头龙
Summon
()
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
幻刃破龙
)
&&
Bot
.
HasInHand
(
CardId
.
建造龙
)
&&
Bot
.
HasInHand
(
CardId
.
起重龙
))
if
(
Bot
.
HasInMonstersZone
(
CardId
.
幻刃破龙
)
||
(
Bot
.
HasInMonstersZone
(
CardId
.
幻煌
))
&&
Bot
.
HasInHand
(
CardId
.
建造龙
)
&&
Bot
.
HasInHand
(
CardId
.
起重龙
))
return
Discord1Draw1Eff
(
CardRace
.
Wyrm
,
false
,
true
);
return
Discord1Draw1Eff
(
CardRace
.
Wyrm
,
false
,
false
);
}
...
...
@@ -415,17 +418,15 @@ namespace WindBot.Game.AI.Decks
{
if
(
_card
.
Level
<
5
)
return
true
;
int
tributeAllow
=
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
<
5
);
if
(
_card
.
Id
==
CardId
.
建造龙
)
if
(
Bot
.
SpellZone
.
GetMatchingCardsCount
(
card
=>
card
.
HasType
(
CardType
.
Field
))
+
Enemy
.
SpellZone
.
GetMatchingCardsCount
(
card
=>
card
.
HasType
(
CardType
.
Field
))
>
0
)
{
if
(
_card
.
Id
==
CardId
.
建造龙
)
tributeAllow
+=
Bot
.
HasInMonstersZone
(
CardId
.
幻刃破龙
)
?
1
:
0
;
if
(
Bot
.
SpellZone
.
GetMatchingCardsCount
(
card
=>
card
.
HasType
(
CardType
.
Field
))>
0
||
Enemy
.
SpellZone
.
GetMatchingCardsCount
(
card
=>
card
.
HasType
(
CardType
.
Field
))
>
0
)
{
tributeAllow
+=
Bot
.
HasInMonstersZone
(
CardId
.
幻龙重骑
)
?
1
:
0
;
}
tributeAllow
+=
Bot
.
HasInMonstersZone
(
CardId
.
幻煌
)
?
1
:
0
;
if
(
_card
.
Id
==
CardId
.
起重龙
||
Bot
.
HasInMonstersZone
(
CardId
.
起重龙
))
tributeAllow
+=
Bot
.
HasInMonstersZone
(
CardId
.
建造龙
)
?
1
:
0
;
}
if
(
_card
.
Id
==
CardId
.
幻龙重骑
)
tributeAllow
+=
Bot
.
HasInMonstersZone
(
CardId
.
幻刃破龙
)
?
1
:
0
;
if
(
_card
.
Id
!=
CardId
.
幻刃破龙
&&
Bot
.
Hand
.
GetMatchingCardsCount
(
card
=>
card
.
Level
>
6
)
>
2
&&
if
((
_card
.
Id
!=
CardId
.
幻刃破龙
||
_card
.
Id
!=
CardId
.
幻煌
)
&&
Bot
.
Hand
.
GetMatchingCardsCount
(
card
=>
card
.
Level
>
6
)
>
2
&&
Bot
.
Hand
.
GetMatchingCardsCount
(
card
=>
card
.
Level
<
5
)
+
Bot
.
MonsterZone
.
GetMatchingCardsCount
(
card
=>
card
.
Level
<
5
)
<
2
)
tributeAllow
=
Bot
.
GetMonsterCount
();
return
tributeAllow
>=
(
_card
.
Level
>
6
?
2
:
1
);
...
...
@@ -467,7 +468,7 @@ namespace WindBot.Game.AI.Decks
}
private
bool
镐头龙
Effect
()
{
if
(
Bot
.
HasInMonstersZone
(
CardId
.
幻刃破龙
)
&&
Bot
.
HasInHand
(
CardId
.
建造龙
)
&&
Bot
.
HasInHand
(
CardId
.
起重龙
))
if
(
Bot
.
HasInMonstersZone
(
CardId
.
幻刃破龙
)
||
(
Bot
.
HasInMonstersZone
(
CardId
.
幻煌
))
&&
Bot
.
HasInHand
(
CardId
.
建造龙
)
&&
Bot
.
HasInHand
(
CardId
.
起重龙
))
return
Discord1Draw1Eff
(
CardRace
.
Wyrm
,
true
,
true
);
return
Discord1Draw1Eff
(
CardRace
.
Wyrm
,
true
,
false
);
}
...
...
@@ -604,6 +605,33 @@ namespace WindBot.Game.AI.Decks
}
return
false
;
}
private
bool
奥义
Effect
()
{
var
cards
=
Bot
.
Graveyard
.
GetMatchingCards
(
card
=>
(
card
.
Race
&
(
int
)
CardRace
.
Wyrm
)
>
0
);
int
totalLevel
=
cards
.
Sum
(
card
=>
card
.
Level
);
if
(
totalLevel
>=
16
)
{
var
sortedCards
=
cards
.
OrderBy
(
card
=>
card
.
Level
).
ToList
();
var
ttl
=
0
;
var
targets
=
new
List
<
ClientCard
>();
for
(
int
i
=
0
;
i
<
sortedCards
.
Count
()
&&
ttl
<
16
;
i
++)
{
targets
.
Add
(
sortedCards
[
i
]);
ttl
+=
sortedCards
[
i
].
Level
;
}
if
(
ttl
>=
16
)
{
if
(
Util
.
GetTotalAttackingMonsterAttack
(
1
)
>=
1900
&&
(
Enemy
.
GetMonsters
().
GetImmuneTrapMonster
()
==
null
)
||
Util
.
GetTotalAttackingMonsterAttack
(
1
)
-
Util
.
GetTotalAttackingMonsterAttack
(
0
)
>
Bot
.
LifePoints
&&
!
Bot
.
HasDefendingMonster
())
{
AI
.
SelectCard
(
targets
);
return
true
;
}
}
}
return
false
;
}
private
bool
贯通
Effect
()
{
...
...
@@ -651,7 +679,7 @@ namespace WindBot.Game.AI.Decks
{
if
(
isAISelect
)
{
int
[]
localList
=
new
int
[]
{
CardId
.
建造龙
,
CardId
.
幻刃破龙
,
CardId
.
起重龙
};
int
[]
localList
=
new
int
[]
{
CardId
.
建造龙
,
CardId
.
幻刃破龙
,
CardId
.
幻煌
,
CardId
.
起重龙
};
if
(
Bot
.
HasInMonstersZone
(
CardId
.
建造龙
)
&&
建造龙
Effect
(
true
,
false
))
{
if
(
Bot
.
HasInGraveyard
(
localList
[
0
])
||
Bot
.
HasInGraveyard
(
localList
[
1
]))
...
...
Game/AI/Enums/DangerousMonster.cs
View file @
72bf1203
...
...
@@ -33,14 +33,21 @@
超魔机神
=
120150002
,
超魔机神
2
=
120231005
,
超魔辉兽
=
120217002
,
超魔辉兽
2
=
120239005
,
超魔轨道
=
120239002
,
灰霸炎神
=
120170015
,
大恐龙驾
=
120151007
,
终焰魔神
=
120231007
,
焰魔神
=
120231011
,
深渊杀戮者
=
120249023
,
三日月之剑豪将军
=
120196033
,
剑黎
=
120246080
,
新种掠夺萝卜
=
120228035
,
武枪
=
120231052
,
苍救之幻影
=
120235041
,
流星黑龙兽
=
120253047
,
极乐鹰巨人
=
120227001
,
鹰身三姐妹
=
120247002
,
}
}
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