print("STARTING SCRIPT") from engine.game.game_state import initialize_game from engine.models.enums import Area, Group def test_nonfiction_ability_1_center_cost_diff(): # {{live_start.png|ライブ開始時}}自分のセンターエリアにいる『Liella!』のメンバーのコストが、相手のセンターエリアにいるメンバーより高い場合、このカードのスコアを+1する。 state = initialize_game(use_real_data=True) p0 = state.players[0] p1 = state.players[1] # Setup Live Card: Nonfiction card_no = "PL!SP-bp4-024-L" card_id = -1 for cid, c in state.live_db.items(): if c.card_no == card_no: card_id = cid break assert card_id != -1, "Card not found" # Inject a mock high cost center for P0 p0_center_id = 9999 import numpy as np from engine.models.card import MemberCard # P0 Center: Liella (Group 3), Cost 5 p0_member = MemberCard( card_id=p0_center_id, card_no="test-p0", name="Kanon", cost=5, hearts=np.zeros(7, dtype=np.int32), blade_hearts=np.zeros(7, dtype=np.int32), blades=1, groups=[Group.LIELLA], ) state.member_db[p0_center_id] = p0_member # P1 Center: Cost 2 p1_center_id = 9998 p1_member = MemberCard( card_id=p1_center_id, card_no="test-p1", name="Rival", cost=2, hearts=np.zeros(7, dtype=np.int32), blade_hearts=np.zeros(7, dtype=np.int32), blades=1, ) state.member_db[p1_center_id] = p1_member # Area.CENTER is 1 p0.stage[Area.CENTER] = p0_center_id p1.stage[Area.CENTER] = p1_center_id # Play Nonfiction to Live Zone p0.live_zone = [card_id] # Ability 1 ability = state.live_db[card_id].abilities[0] # Trigger manually print("DEBUG: Triggering Ability 1") state.triggered_abilities.append((0, ability, {"card_id": card_id})) state._process_rule_checks() print("DEBUG: Finished _process_rule_checks Ability 1") # Check if score boosted in live_score_bonus assert p0.live_score_bonus == 1 # Case 2: Cost is Lower p0.live_score_bonus = 0 p0_member.cost = 1 print("DEBUG: Triggering Ability 1 (Case 2)") state.triggered_abilities.append((0, ability, {"card_id": card_id})) state._process_rule_checks() print("DEBUG: Finished _process_rule_checks Ability 1 (Case 2)") # Should fail condition, no boost assert p0.live_score_bonus == 0 def test_nonfiction_ability_2_left_side_hearts(): # {{live_start.png|ライブ開始時}}自分のステージの左サイドエリアにいる『Liella!』のメンバーが{{heart_02.png|heart02}}を3つ以上持つ場合、そのメンバーは、ライブ終了時まで、{{icon_blade.png|ブレード}}{{icon_blade.png|ブレード}}を得る。 state = initialize_game(use_real_data=True) p0 = state.players[0] card_no = "PL!SP-bp4-024-L" card_id = -1 for cid, c in state.live_db.items(): if c.card_no == card_no: card_id = cid break # Setup Left Side Member (Area.LEFT = 0) left_id = 8888 import numpy as np from engine.models.card import MemberCard from engine.models.enums import Group # Liella member, has Heart02 x3 # Heart02 assumed Red (Index 1) hearts = np.zeros(7, dtype=np.int32) hearts[1] = 3 # 3 Red Hearts left_member = MemberCard( card_id=left_id, card_no="test-left", name="Kekeru", cost=2, hearts=hearts, blade_hearts=np.zeros(7, dtype=np.int32), blades=1, groups=[Group.LIELLA], ) state.member_db[left_id] = left_member p0.stage[Area.LEFT] = left_id p0.live_zone = [card_id] # Ability 2 ability = state.live_db[card_id].abilities[1] from engine.models.ability import TriggerType assert ability.trigger == TriggerType.ON_LIVE_START # Execute print("DEBUG: Triggering Ability 2") state.triggered_abilities.append((0, ability, {"card_id": card_id})) state._process_rule_checks() print("DEBUG: Finished _process_rule_checks Ability 2") # Check Buff base_blades = left_member.blades # 1 # Use PlayerState method for effective blades current_blades = p0.get_effective_blades(Area.LEFT, state.member_db) assert current_blades == base_blades + 2 print("DEBUG: Ability 2 Test Passed") if __name__ == "__main__": test_nonfiction_ability_1_center_cost_diff() test_nonfiction_ability_2_left_side_hearts() print("ALL TESTS PASSED")