Skip to content

Commit c308fb1

Browse files
committed
fea: update caravan play
1 parent fdbffb5 commit c308fb1

5 files changed

Lines changed: 408 additions & 79 deletions

File tree

autopcr/core/pcrclient.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,19 @@ async def caravan_dish_sell(self, season_id: int, block_id: int, dish_list: List
7979
req.surplus_dish_list = surplus_dish_list
8080
return await self.request(req)
8181

82+
async def caravan_spots_choice(self, season_id: int, choice: int):
83+
req = CaravanSpotsChoiceRequest()
84+
req.season_id = season_id
85+
req.choice = choice
86+
return await self.request(req)
87+
88+
async def caravan_dice_reroll(self, season_id: int, current_count: int, roll_num: int):
89+
req = CaravanDiceRerollRequest()
90+
req.season_id = season_id
91+
req.current_count = current_count
92+
req.roll_num = roll_num
93+
return await self.request(req)
94+
8295
async def caravan_dice_roll(self, season_id: int, current_num: int, roll_num: int):
8396
req = CaravanDiceRollRequest()
8497
req.season_id = season_id
@@ -135,6 +148,18 @@ async def caravan_gacha_block_exec(self, season_id: int, block_id: int, gacha_ty
135148
req.current_currency_num = current_currency_num
136149
return await self.request(req)
137150

151+
async def caravan_minigame_bs_start(self, season_id: int):
152+
req = CaravanMinigameCccBsStartRequest()
153+
req.season_id = season_id
154+
return await self.request(req)
155+
156+
async def caravan_minigame_bs_finish(self, season_id: int, play_id: int, items: Dict[int, int]):
157+
req = CaravanMinigameCccBsFinishRequest()
158+
req.season_id = season_id
159+
req.play_id = play_id
160+
req.object_list = [CccFinishItemCountInfo(ccc_object_id=item_id, count=count) for item_id, count in items.items()]
161+
return await self.request(req)
162+
138163
async def caravan_minigame_start(self):
139164
req = CaravanMinigameCccStartRequest()
140165
return await self.request(req)

autopcr/db/database.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ def redeem_unit(self) -> Dict[int, Dict[int, RedeemUnit]]:
6666
.to_dict(lambda x: x.key, lambda x: x.to_dict(lambda x: x.slot_id, lambda x: x))
6767
)
6868

69+
@lazy_property
70+
def caravan_buddy(self) -> Dict[int, CaravanBuddy]:
71+
with self.dbmgr.session() as db:
72+
return (
73+
CaravanBuddy.query(db)
74+
.to_dict(lambda x: x.buddy_id, lambda x: x)
75+
)
76+
6977
@lazy_property
7078
def caravan_dish(self) -> Dict[int, CaravanDish]:
7179
with self.dbmgr.session() as db:

autopcr/db/methods.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,14 @@ def get_effect_desc(self, lasting = True) -> str:
112112
lasting_msg = ""
113113
return lasting_msg
114114

115+
@method
116+
class CaravanBuddy(models.CaravanBuddy):
117+
def get_effect_desc(self, lasting = True) -> str:
118+
lasting_msg = f"持续{self.effect_turn}回合" if self.effect_turn > 0 else "一次性"
119+
if not lasting:
120+
lasting_msg = ""
121+
return f"{self.description.format(self.effect_value_1, self.effect_value_2)} {lasting_msg}"
122+
115123
@method
116124
class EnemyRewardDatum(models.EnemyRewardDatum):
117125
def get_rewards(self) -> Iterator[Reward]:

autopcr/model/handlers.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ async def update(self, mgr: datamgr, request):
7373
for item in self.reward_list:
7474
mgr.update_inventory(item)
7575

76+
@handles
77+
class CaravanMinigameCccBsFinishResponse(responses.CaravanMinigameCccBsFinishResponse):
78+
async def update(self, mgr: datamgr, request):
79+
if self.reward_list:
80+
for item in self.reward_list:
81+
mgr.update_inventory(item)
82+
7683
@handles
7784
class CaravanDishUseResponse(responses.CaravanDishUseResponse):
7885
async def update(self, mgr: datamgr, request):
@@ -83,6 +90,20 @@ async def update(self, mgr: datamgr, request):
8390
for item in self.sub_reward_list:
8491
mgr.update_inventory(item)
8592

93+
@handles
94+
class CaravanDiceRollResponse(responses.CaravanDiceRollResponse):
95+
async def update(self, mgr: datamgr, request):
96+
if self.buddy_reward_list:
97+
for item in self.buddy_reward_list:
98+
mgr.update_inventory(item)
99+
100+
@handles
101+
class CaravanProgressTurnResponse(responses.CaravanProgressTurnResponse):
102+
async def update(self, mgr: datamgr, request):
103+
if self.buddy_reward_list:
104+
for item in self.buddy_reward_list:
105+
mgr.update_inventory(item)
106+
86107
@handles
87108
class CaravanGachaBlockExecResponse(responses.CaravanGachaBlockExecResponse):
88109
async def update(self, mgr: datamgr, request):

0 commit comments

Comments
 (0)