diff --git a/crates/game-service/src/battle_session.rs b/crates/game-service/src/battle_session.rs index 7ec52a3..17c74c9 100644 --- a/crates/game-service/src/battle_session.rs +++ b/crates/game-service/src/battle_session.rs @@ -325,10 +325,11 @@ impl BattleSession { .position(|id| *id == account) .map(|index| index as i32) } - pub fn next_instance(&mut self) -> i32 { - let instance = self.next_instance; - self.next_instance += 1; - instance + pub fn next_instance(&self) -> i32 { + self.next_instance + } + pub fn reserve_instances(&mut self, count: usize) { + self.next_instance += count.max(1) as i32; } pub fn deck_card(&self, owner: i32, slot: i32) -> Option { let deck = self.mode.battle.decks.get(owner.max(0) as usize)?.as_ref()?; @@ -379,6 +380,7 @@ impl BattleRegistry { session.advance_to_now(); if let Some((card, position, instance)) = session.take_bot_play() { let entries = summon(&card, position, crate::bot::BOT_OWNER_INDEX, instance); + session.reserve_instances(entries.len()); if !entries.is_empty() { tracing::debug!(card = %card, count = entries.len(), "the bot played a card"); for entry in entries { @@ -457,6 +459,7 @@ impl BattleRegistry { let cost = card.data().map(|row| row.int("ManaCost")).unwrap_or(0); session.spend_mana(owner, cost); let entries = summon(&card, position, owner, session.next_instance()); + session.reserve_instances(entries.len()); let spawned = entries.len(); session.queue(at_tick, entries); spawned