Skip to content

Commit

Permalink
Waiting Room: Ensure target member is cleared from all team decks.
Browse files Browse the repository at this point in the history
  • Loading branch information
MikuAuahDark committed Apr 19, 2024
1 parent a38cdb5 commit d5b6739
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 27 deletions.
1 change: 1 addition & 0 deletions npps4/game/unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ async def unit_wait(context: idol.SchoolIdolUserParams, request: UnitWaitOrActiv
for removable_skill_id in unit_sis:
await unit.detach_unit_removable_skill(context, unit_data, removable_skill_id)

await unit.detach_from_all_deck(context, current_user, unit_data)
# Move to waiting room
unit_data.active = False

Expand Down
71 changes: 44 additions & 27 deletions npps4/system/unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,40 +233,57 @@ async def get_unit_skill_level_up_pattern(context: idol.BasicSchoolIdolContext,
return list(result.scalars())


def detach_from_deck_2(unit_owning_user_id: int, deck: main.UnitDeck):
has = False
if deck.unit_owning_user_id_1 == unit_owning_user_id:
deck.unit_owning_user_id_1 = 0
has = True
elif deck.unit_owning_user_id_2 == unit_owning_user_id:
deck.unit_owning_user_id_2 = 0
has = True
elif deck.unit_owning_user_id_3 == unit_owning_user_id:
deck.unit_owning_user_id_3 = 0
has = True
elif deck.unit_owning_user_id_4 == unit_owning_user_id:
deck.unit_owning_user_id_4 = 0
has = True
elif deck.unit_owning_user_id_5 == unit_owning_user_id:
deck.unit_owning_user_id_5 = 0
has = True
elif deck.unit_owning_user_id_6 == unit_owning_user_id:
deck.unit_owning_user_id_6 = 0
has = True
elif deck.unit_owning_user_id_7 == unit_owning_user_id:
deck.unit_owning_user_id_7 = 0
has = True
elif deck.unit_owning_user_id_8 == unit_owning_user_id:
deck.unit_owning_user_id_8 = 0
has = True
elif deck.unit_owning_user_id_9 == unit_owning_user_id:
deck.unit_owning_user_id_9 = 0
has = True

return has


async def detach_from_all_deck(context: idol.SchoolIdolParams, /, user: main.User, unit_data: main.Unit):
# Remove from deck first
q = sqlalchemy.select(main.UnitDeck).where(main.UnitDeck.user_id == user.id)
result = await context.db.main.execute(q)

for deck in result.scalars():
if detach_from_deck_2(unit_data.id, deck) and user.active_deck_index == deck.deck_number:
raise idol.error.by_code(idol.error.ERROR_CODE_IGNORE_MAIN_DECK_UNIT)


async def remove_unit(context: idol.SchoolIdolParams, user: main.User, unit_data: main.Unit):
validate_unit(user, unit_data)

if user.center_unit_owning_user_id == unit_data.id:
raise idol.error.by_code(idol.error.ERROR_CODE_UNIT_NOT_DISPOSE)

# Remove from deck first
q = sqlalchemy.select(main.UnitDeck).where(main.UnitDeck.user_id == user.id)
result = await context.db.main.execute(q)

for deck in result.scalars():
if deck.unit_owning_user_id_1 == unit_data.id:
deck.unit_owning_user_id_1 = 0
elif deck.unit_owning_user_id_2 == unit_data.id:
deck.unit_owning_user_id_2 = 0
elif deck.unit_owning_user_id_3 == unit_data.id:
deck.unit_owning_user_id_3 = 0
elif deck.unit_owning_user_id_4 == unit_data.id:
deck.unit_owning_user_id_4 = 0
elif deck.unit_owning_user_id_5 == unit_data.id:
deck.unit_owning_user_id_5 = 0
elif deck.unit_owning_user_id_6 == unit_data.id:
deck.unit_owning_user_id_6 = 0
elif deck.unit_owning_user_id_7 == unit_data.id:
deck.unit_owning_user_id_7 = 0
elif deck.unit_owning_user_id_8 == unit_data.id:
deck.unit_owning_user_id_8 = 0
elif deck.unit_owning_user_id_9 == unit_data.id:
deck.unit_owning_user_id_9 = 0
else:
continue

if user.active_deck_index == deck.deck_number:
raise idol.error.by_code(idol.error.ERROR_CODE_IGNORE_MAIN_DECK_UNIT)
await detach_from_all_deck(context, user, unit_data)

# Remove SIS
unit_sis = await get_unit_removable_skills(context, unit_data)
Expand Down

0 comments on commit d5b6739

Please sign in to comment.