Skip to content

Commit

Permalink
fixing card mastery
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewmiglio committed Dec 17, 2023
1 parent 437865e commit 2548123
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 81 deletions.
3 changes: 1 addition & 2 deletions src/pyclashbot/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ def make_job_dictionary(values: dict[str, str | int]) -> dict[str, str | int]:
"open_chests_user_toggle": values["open_chests_user_toggle"],
"request_user_toggle": values["request_user_toggle"],
"donate_toggle": values["donate_toggle"],
# "card_mastery_user_toggle": values["card_mastery_user_toggle"],
"card_mastery_user_toggle": False,
"card_mastery_user_toggle": values["card_mastery_user_toggle"],
"free_offer_user_toggle": values["free_offer_user_toggle"],
"1v1_battle_user_toggle": values["1v1_user_toggle"],
"2v2_battle_user_toggle": values["2v2_user_toggle"],
Expand Down
153 changes: 83 additions & 70 deletions src/pyclashbot/bot/card_mastery_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,29 @@
get_to_card_page_from_clash_main,
get_to_clash_main_from_card_page,
)
from pyclashbot.detection.image_rec import check_line_for_color
from pyclashbot.detection.image_rec import check_line_for_color, pixel_is_equal
from pyclashbot.memu.client import click
from pyclashbot.utils.logger import Logger
import numpy
from pyclashbot.memu.client import screenshot

CARD_MASTERY_ICON = (257, 504)
FIRST_CARD_MASTERY_REWARD_CARD = (99, 182)

CARD_MASTERY_ICON = (275,476)
FIRST_CARD_MASTERY_REWARD_CARD = (99,170)
CARD_MASTERY_REWARD_COORD_LIST = [
(206, 308),
(216, 398),
(224, 485),
(202,290),
(202,300),
(202,320),
(202,340),
(202,360),
(202,380),
(202,400),
(202,430),
(202,460),
]
CARD_PAGE_DEADSPACE: tuple[Literal[21], Literal[355]] = (21, 355)
CARD_PAGE_DEADSPACE: tuple[Literal[21], Literal[355]] = (5, 355)




def card_mastery_collection_state(vm_index: int, logger: Logger, next_state: str):
Expand All @@ -30,9 +41,11 @@ def card_mastery_collection_state(vm_index: int, logger: Logger, next_state: str
if clash_main_check is not True:
logger.log("Not on clash main for the start of card_mastery_collection_state()")

logger.log(f'There are the pixels the bot saw after failing to find clash main:')
logger.log(
f"There are the pixels the bot saw after failing to find clash main:"
)
for pixel in clash_main_check:
logger.log(f' {pixel}')
logger.log(f" {pixel}")

return "restart"

Expand All @@ -44,46 +57,10 @@ def card_mastery_collection_state(vm_index: int, logger: Logger, next_state: str
return "restart"

# while there are rewards to collect, run the collect loop
while check_for_card_mastery_rewards_icon_with_delay(vm_index):
while check_for_card_mastery_rewards_icon(vm_index):
logger.change_status(status="There are mastery rewards to collect")
collect_first_card_mastery_reward(vm_index, logger)

# click card mastery reward button
logger.change_status(status="Clicking card mastery reward button")
click(
vm_index,
CARD_MASTERY_ICON[0],
CARD_MASTERY_ICON[1],
)
time.sleep(1.5)

# click first card
logger.change_status(status="Clicking first card mastery reward")
click(
vm_index,
FIRST_CARD_MASTERY_REWARD_CARD[0],
FIRST_CARD_MASTERY_REWARD_CARD[1],
)
time.sleep(1.5)

# click the reward coords
logger.change_status(status="Clicking rewards")
for coord in CARD_MASTERY_REWARD_COORD_LIST:
click(vm_index, coord[0], coord[1])
time.sleep(0.5)

logger.add_card_mastery_reward_collection()

# click deadspace a bunch
logger.change_status(
status="Clicking deadspace to skip through mastery rewards"
)
click(
vm_index=vm_index,
x_coord=CARD_PAGE_DEADSPACE[0],
y_coord=CARD_PAGE_DEADSPACE[1],
clicks=21,
interval=0.33,
)

logger.change_status(status="Done collecting mastery rewards")

Expand All @@ -96,37 +73,73 @@ def card_mastery_collection_state(vm_index: int, logger: Logger, next_state: str
return next_state


def check_for_card_mastery_rewards_icon_with_delay(vm_index) -> bool | None:
start_time: float = time.time()
while 1:
if time.time() - start_time > 4:
return False

if check_for_card_mastery_rewards_icon(vm_index=vm_index):
return True
def collect_first_card_mastery_reward(vm_index, logger):
# click card mastery reward button
logger.change_status(status="Clicking card mastery reward button")
click(
vm_index,
CARD_MASTERY_ICON[0],
CARD_MASTERY_ICON[1],
)
time.sleep(3)

# click first card
logger.change_status(status="Clicking first card mastery reward")
click(
vm_index,
FIRST_CARD_MASTERY_REWARD_CARD[0],
FIRST_CARD_MASTERY_REWARD_CARD[1],
)
time.sleep(3)

# click the reward coords
logger.change_status(status="Clicking rewards")
for coord in CARD_MASTERY_REWARD_COORD_LIST:
click(vm_index, coord[0], coord[1])

logger.add_card_mastery_reward_collection()

# click deadspace a bunch
logger.change_status(
status="Clicking deadspace to skip through mastery rewards"
)
click(
vm_index=vm_index,
x_coord=CARD_PAGE_DEADSPACE[0],
y_coord=CARD_PAGE_DEADSPACE[1],
clicks=21,
interval=0.33,
)


def check_for_card_mastery_rewards_icon(vm_index) -> bool:
if not check_if_on_card_page(vm_index=vm_index):
return False

lines: list[bool] = [
check_line_for_color(
vm_index=vm_index, x_1=241, y_1=483, x_2=242, y_2=527, color=(255, 188, 42)
),
check_line_for_color(
vm_index=vm_index, x_1=234, y_1=520, x_2=281, y_2=519, color=(255, 160, 8)
),
check_line_for_color(
vm_index=vm_index, x_1=264, y_1=482, x_2=283, y_2=500, color=(236, 8, 56)
),
check_line_for_color(
vm_index=vm_index, x_1=263, y_1=499, x_2=283, y_2=481, color=(236, 8, 56)
),
iar = numpy.asarray(screenshot(vm_index))

pixels = [
iar[460][280],
iar[462][280],
iar[463][280],
iar[62][36],
]

return all(lines)
colors = [
[56, 8, 235],
[57, 9, 236],
[57, 9, 236],
[86, 44, 10],
]

for i, p in enumerate(pixels):
if not pixel_is_equal(p, colors[i], tol=15):
return False
return True


if __name__ == "__main__":
pass
vm_index = 11
logger = Logger(None)

card_mastery_collection_state(vm_index, logger, 'next_state')
13 changes: 5 additions & 8 deletions src/pyclashbot/interface/joblist.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,11 @@ def job_check_box(text: str, element_key: str, default_value=True) -> sg.Checkbo
[
job_check_box("Donates", "donate_toggle"),
],

#TODO fix Card Mastery Collection (broken since 12/13/23 update)
#keep checkbox disabled for now
# [
# job_check_box(
# "Card Mastery Collection", "card_mastery_user_toggle"
# ),
# ],
[
job_check_box(
"Card Mastery Collection", "card_mastery_user_toggle"
),
],
[
job_check_box(
"Free Offer Collection",
Expand Down
2 changes: 1 addition & 1 deletion src/pyclashbot/interface/layout.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ def get_random_donate_image_path():
"open_chests_user_toggle",
"request_user_toggle",
'donate_toggle',
#DISABLED: "card_mastery_user_toggle",
DISABLED: "card_mastery_user_toggle",
'disable_win_track_toggle',
"free_offer_user_toggle",
"1v1_user_toggle",
Expand Down

0 comments on commit 2548123

Please sign in to comment.