Skip to content

Commit 1cad218

Browse files
authored
Minor fixes (#84)
* Minor fixes * Bots dont need solution
1 parent 3ee12c0 commit 1cad218

10 files changed

Lines changed: 88 additions & 24 deletions

File tree

Bots/src/CardTierList.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,20 @@ public class CardTierList
148148
new CardTier("Ragpicker", PatronId.TREASURY, TierEnum.C),
149149
new CardTier("Tithe", PatronId.TREASURY, TierEnum.C),
150150
new CardTier("Writ of Coin", PatronId.TREASURY, TierEnum.D),
151-
new CardTier("Unknown", PatronId.TREASURY, TierEnum.UNKNOWN)
151+
new CardTier("Unknown", PatronId.TREASURY, TierEnum.UNKNOWN),
152+
// Added Saint Alessia
153+
new CardTier("Alessian Rebel", PatronId.SAINT_ALESSIA, TierEnum.C),
154+
new CardTier("Ayleid Defector", PatronId.SAINT_ALESSIA, TierEnum.B),
155+
new CardTier("Ayleid Quartermaster", PatronId.SAINT_ALESSIA, TierEnum.B),
156+
new CardTier("Chainbreaker Captain", PatronId.SAINT_ALESSIA, TierEnum.A),
157+
new CardTier("Chainbreaker Sergeant", PatronId.SAINT_ALESSIA, TierEnum.B),
158+
new CardTier("Morihuas Sacred Bull", PatronId.SAINT_ALESSIA, TierEnum.S),
159+
new CardTier("Morihuas the Archer", PatronId.SAINT_ALESSIA, TierEnum.A),
160+
new CardTier("Pelinal Whitestrake", PatronId.SAINT_ALESSIA, TierEnum.S),
161+
new CardTier("Priestess of the Eight", PatronId.SAINT_ALESSIA, TierEnum.B),
162+
new CardTier("Saints Wrath", PatronId.SAINT_ALESSIA, TierEnum.B),
163+
new CardTier("Soldier of the Empire", PatronId.SAINT_ALESSIA, TierEnum.C),
164+
new CardTier("Whitestrake Ascendant", PatronId.SAINT_ALESSIA, TierEnum.S),
152165
};
153166

154167
public static TierEnum GetCardTier(string cardName)

Engine/TalesOfTribute.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818

1919
<ItemGroup>
2020
<None Remove="Tests\**" />
21-
<None Update="cards.json">
22-
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
23-
</None>
21+
<None Remove="cards.json" />
22+
<EmbeddedResource Include="cards.json">
23+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
24+
</EmbeddedResource>
2425
</ItemGroup>
2526

2627
<ItemGroup>

Engine/src/Board/BoardManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public BoardManager(PatronId[] patrons, ulong seed)
2323
_rng = new SeededRandom(seed);
2424
Patrons = GetPatrons(patrons);
2525
var patronStarterCardsIds = Patrons.SelectMany(patron => patron.GetStarterCards()).ToArray();
26-
Tavern = new Tavern(GlobalCardDatabase.Instance.GetCardsByPatron(patrons, patronStarterCardsIds), _rng);
26+
Tavern = new Tavern(GlobalCardDatabase.Instance.GetCardsByPatron(patrons, patronStarterCardsIds, CardId.WRIT_OF_COIN), _rng);
2727
_playerContext = new PlayerContext(new Player(PlayerEnum.PLAYER1, _rng), new Player(PlayerEnum.PLAYER2, _rng));
2828
CardActionManager = new CardActionManager(_playerContext, Tavern);
2929
}

Engine/src/Board/CardAction/ComplexEffectExecutor.cs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -226,17 +226,23 @@ public PlayResult Donate(Choice choice, List<UniqueCard> choices)
226226
}
227227
private void handleSaintAlessiaTriggers(List<UniqueCard> knockoutedCards)
228228
{
229-
if (!_enemyPlayer.AgentCards.Any(c => c.CommonId == CardId.MORIHAUS_SACRED_BULL || c.CommonId == CardId.MORIHAUS_THE_ARCHER))
230-
return;
231-
232-
foreach (var triggerCard in _enemyPlayer.AgentCards.Where(c => c.CommonId == CardId.MORIHAUS_SACRED_BULL || c.CommonId == CardId.MORIHAUS_THE_ARCHER).ToList())
229+
void HandleForPlayer(IPlayer player)
233230
{
234-
if (knockoutedCards.Any(c => c.UniqueId == triggerCard.UniqueId))
235-
continue;
236-
_enemyPlayer.CoinsAmount++;
237-
_parent.AddToCompletedActionsList(new CompletedAction(_enemyPlayer.ID, CompletedActionType.GAIN_COIN, triggerCard, 1));
231+
var morihausAgents = player.AgentCards
232+
.Where(c => c.CommonId == CardId.MORIHAUS_SACRED_BULL || c.CommonId == CardId.MORIHAUS_THE_ARCHER)
233+
.ToList();
234+
235+
foreach (var triggerCard in morihausAgents)
236+
{
237+
if (knockoutedCards.Any(c => c.UniqueId == triggerCard.UniqueId))
238+
continue;
239+
240+
player.CoinsAmount++;
241+
_parent.AddToCompletedActionsList(new CompletedAction(player.ID, CompletedActionType.GAIN_COIN, triggerCard, 1));
242+
}
238243
}
239-
240-
}
241244

245+
HandleForPlayer(_currentPlayer);
246+
HandleForPlayer(_enemyPlayer);
247+
}
242248
}

Engine/src/Board/Cards/UniqueCard.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public UniqueCard(string name, PatronId deck, CardId commonId, int cost, CardTyp
1818
public override string ToString()
1919
{
2020
return string.Format($"Card: {this.Name}, " +
21-
$"Deck: {this.Deck}, Cost: {this.Cost}, Type: {this.Type}, UniqueId: {UniqueId.Value}");
21+
$"Deck: {this.Deck}, Cost: {this.Cost}, Type: {this.Type}, UniqueId: {UniqueId.Value}");
2222
}
2323

2424
public override bool Equals(object? obj)

Engine/src/Board/Cards/UniqueEffect.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public UniqueEffect(EffectType type, int amount, int combo, UniqueCard parentCar
143143
ChoiceFollowUp.REFRESH_CARDS,
144144
context,
145145
amount,
146-
amount
146+
0
147147
), new List<CompletedAction>());
148148
}
149149
case EffectType.TOSS:
@@ -213,7 +213,7 @@ public UniqueEffect(EffectType type, int amount, int combo, UniqueCard parentCar
213213
ChoiceFollowUp.REFRESH_CARDS,
214214
context,
215215
agentsCount,
216-
agentsCount
216+
0
217217
), new List<CompletedAction>());
218218
case EffectType.DONATE:
219219
{
@@ -250,6 +250,7 @@ public override string ToString()
250250
EffectType.CREATE_SUMMERSET_SACKING => $"Create {Amount} Summerset Sacking cards and place it in CD pile",
251251
EffectType.HEAL => $"Heal this agent by {Amount}",
252252
EffectType.DONATE => $"Discard up to {Amount} cards from hand, draw {Amount} cards",
253+
EffectType.KNOCKOUT_ALL => $"Knockout all agents",
253254
_ => ""
254255
};
255256
}

Engine/src/utils/CardDatabase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public UniqueCard GetCard(CardId cardId)
1919
return card;
2020
}
2121

22-
public List<UniqueCard> GetCardsByPatron(PatronId[] patrons, CardId[] starterCardsId)
22+
public List<UniqueCard> GetCardsByPatron(PatronId[] patrons, CardId[] starterCardsId, params CardId[] excludeCards)
2323
{
2424
var allCardsGrouped = from card in _allCards
25-
where patrons.Contains(card.Deck) && !starterCardsId.Contains(card.CommonId) && card.Type != CardType.CURSE
25+
where patrons.Contains(card.Deck) && !starterCardsId.Contains(card.CommonId) && !excludeCards.Contains(card.CommonId) && card.Type != CardType.CURSE
2626
select Enumerable.Range(0, card.Copies).Select(_ => card.CreateUniqueCopy()).ToList();
2727

2828
return allCardsGrouped.SelectMany(c => c).ToList();

Engine/src/utils/GlobalCardDatabase.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace ScriptsOfTribute;
1+
using System.Reflection;
2+
3+
namespace ScriptsOfTribute;
24

35
public class GlobalCardDatabase
46
{
@@ -10,7 +12,17 @@ public static CardDatabase Instance
1012
{
1113
if (_instance != null) return _instance.Value;
1214

13-
var data = File.ReadAllText("cards.json");
15+
var assembly = Assembly.GetExecutingAssembly();
16+
const string resourceName = "TalesOfTribute.cards.json";
17+
using Stream? stream = assembly.GetManifestResourceStream(resourceName);
18+
19+
if (stream == null)
20+
{
21+
throw new InvalidOperationException($"Cant find resource'{resourceName}' in DLL. Available resources: {string.Join(", ", assembly.GetManifestResourceNames())}");
22+
}
23+
24+
using StreamReader reader = new StreamReader(stream);
25+
string data = reader.ReadToEnd();
1426
var parser = new Parser(data);
1527
_instance = new ThreadLocal<CardDatabase>(() => new CardDatabase(parser.CreateAllCards()));
1628

Tests/Board/SaintAlessiaTests.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void TestDonateEffect()
6767
br.CurrentPlayer.Hand.Add(priestess);
6868
br.CurrentPlayer.Hand.Add(sote);
6969
br.CurrentPlayer.Hand.Add(armory);
70-
70+
7171
var chainbreaker = GlobalCardDatabase.Instance.GetCard(CardId.CHAINBREAKER_CAPTAIN);
7272
var morihaus = GlobalCardDatabase.Instance.GetCard(CardId.MORIHAUS_SACRED_BULL);
7373
br.CurrentPlayer.DrawPile.Add(chainbreaker);
@@ -200,4 +200,35 @@ void TestRefreshTopAgents()
200200
Assert.Equal(BoardState.NORMAL, br.CardActionManager.State);
201201
Assert.Contains(chainbreaker_sergeant, br.CurrentPlayer.DrawPile);
202202
}
203+
204+
[Fact]
205+
void TestMorihausTriggersBothPlayers()
206+
{
207+
var br = new BoardManager([PatronId.TREASURY, PatronId.PELIN, PatronId.RED_EAGLE, PatronId.ANSEI, PatronId.SAINT_ALESSIA], 123);
208+
209+
var morihaus1 = Agent.FromCard(GlobalCardDatabase.Instance.GetCard(CardId.MORIHAUS_SACRED_BULL));
210+
var morihaus2 = Agent.FromCard(GlobalCardDatabase.Instance.GetCard(CardId.MORIHAUS_THE_ARCHER));
211+
var soldier1 = Agent.FromCard(GlobalCardDatabase.Instance.GetCard(CardId.SOLDIER_OF_THE_EMPIRE));
212+
var soldier2 = Agent.FromCard(GlobalCardDatabase.Instance.GetCard(CardId.SOLDIER_OF_THE_EMPIRE));
213+
214+
br.CurrentPlayer.Agents.Add(morihaus1);
215+
br.CurrentPlayer.Agents.Add(soldier1);
216+
217+
br.EnemyPlayer.Agents.Add(morihaus2);
218+
br.EnemyPlayer.Agents.Add(soldier2);
219+
220+
var black_sacrament = GlobalCardDatabase.Instance.GetCard(CardId.BLACK_SACRAMENT);
221+
br.CurrentPlayer.Hand.Add(black_sacrament);
222+
223+
br.PlayCard(black_sacrament);
224+
225+
var knockout = br.CardActionManager.PendingChoice!.PossibleCards
226+
.Where(card => card.CommonId == CardId.SOLDIER_OF_THE_EMPIRE && br.EnemyPlayer.Agents.Any(a => a.RepresentingCard.UniqueId == card.UniqueId))
227+
.ToList();
228+
229+
br.CardActionManager.MakeChoice(knockout);
230+
231+
Assert.Equal(1, br.EnemyPlayer.CoinsAmount);
232+
Assert.Equal(1, br.CurrentPlayer.CoinsAmount);
233+
}
203234
}

gRPC/Services/AIService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public PatronId SelectPatron(List<PatronId> availablePatrons, int round)
4444
};
4545

4646
request.AvailablePatrons.AddRange(availablePatrons.Select(patronId => (PatronIdProto)(patronId)).ToList());
47-
47+
4848
var response = _client.SelectPatron(request);
4949
return (PatronId)(response.PatronId);
5050
}

0 commit comments

Comments
 (0)