File size: 2,637 Bytes
463f868
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
print("STARTING DEBUG SCRIPT")
import numpy as np

from engine.game.game_state import initialize_game
from engine.models.card import MemberCard
from engine.models.enums import Area, Group


def debug_ability_2():
    # {{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

    print(f"Found card_id: {card_id}")

    # Setup Left Side Member (Area.LEFT = 0)
    left_id = 8888

    # Liella member, has Heart02 x3 (Red hearts)
    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]
    print(f"Ability trigger: {ability.trigger}")

    # Execute
    print("DEBUG: Triggering Ability 2")
    state.triggered_abilities.append((0, ability, {"card_id": card_id}))
    state._process_rule_checks()  # This processes the ability queue
    print("DEBUG: Finished _process_rule_checks Ability 2")

    # Check Buff
    base_blades = left_member.blades
    breakdown = p0.get_blades_breakdown(Area.LEFT, state.member_db)
    current_blades = p0.get_effective_blades(Area.LEFT, state.member_db)

    import json

    def default_serializer(obj):
        return str(obj)

    print(f"Base blades: {base_blades}")
    print(f"Current blades: {current_blades}")
    print(f"Breakdown: {json.dumps(breakdown, indent=2, default=default_serializer)}")

    print(f"Continuous effects: {json.dumps(p0.continuous_effects, indent=2, default=default_serializer)}")

    if current_blades != base_blades + 2:
        print("FAILURE: Buff not applied correctly.")
    else:
        print("SUCCESS")


if __name__ == "__main__":
    try:
        debug_ability_2()
    except Exception:
        import traceback

        traceback.print_exc()