Spaces:
Sleeping
Sleeping
| 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") | |