mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-13 21:34:43 +01:00
75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
import betterproto
|
|
import random
|
|
from game_server.net.session import Session
|
|
from game_server.resource import ResourceManager
|
|
from game_server.resource.configdb.affix_list import AffixListData
|
|
from game_server.game.inventory.inventory_manager import RuneList,RuneGroup
|
|
from lib.proto import (
|
|
RefineStigmataRuneReq,
|
|
RefineStigmataRuneRsp,
|
|
StigmataRuneGroup,
|
|
StigmataRune,
|
|
StigmataRefineTimesType,
|
|
GetEquipmentDataReq
|
|
)
|
|
|
|
def generate_affix_and_percentage(affix_ids):
|
|
affix_id1, affix_id2 = random.choice(affix_ids), random.choice(affix_ids)
|
|
percentage1, percentage2 = [
|
|
random.randint(*r) for r in random.choices(
|
|
[(20, 50), (50, 70), (80, 100)], weights=[50, 40, 10], k=2
|
|
)
|
|
]
|
|
return {"affix1": affix_id1, "percentage1": percentage1, "affix2": affix_id2, "percentage2": percentage2}
|
|
|
|
async def handle(session: Session, msg: RefineStigmataRuneReq) -> betterproto.Message:
|
|
stigmata_data = session.player.inventory.stigmata_items.get(msg.unique_id)
|
|
affix_ids = [affix.affixID for affix in ResourceManager.instance().values(AffixListData)]
|
|
result = []
|
|
if msg.times_type == StigmataRefineTimesType.STIGMATA_REFINE_TIMES_TEN.value:
|
|
result = [generate_affix_and_percentage(affix_ids) for _ in range(10)]
|
|
else:
|
|
result.append(generate_affix_and_percentage(affix_ids))
|
|
stigmata_data.wait_select_rune_group_list = []
|
|
stigmata_data.wait_select_rune_group_list.extend(
|
|
[
|
|
RuneGroup(
|
|
unique_id=index,
|
|
rune_list=[
|
|
RuneList(
|
|
rune_id=affix['affix1'],
|
|
strength_percent=affix['percentage1']
|
|
),
|
|
RuneList(
|
|
rune_id=affix['affix2'],
|
|
strength_percent=affix['percentage2']
|
|
)
|
|
]
|
|
)
|
|
for index, affix in enumerate(result, start=1)
|
|
]
|
|
)
|
|
|
|
await session.process_packet(session.create_packet(GetEquipmentDataReq()))
|
|
|
|
return RefineStigmataRuneRsp(
|
|
retcode=0,
|
|
rune_group_list=[
|
|
StigmataRuneGroup(
|
|
unique_id=index,
|
|
rune_list=[
|
|
StigmataRune(
|
|
rune_id=affix['affix1'],
|
|
strength_percent=affix['percentage1']
|
|
),
|
|
StigmataRune(
|
|
rune_id=affix['affix2'],
|
|
strength_percent=affix['percentage2']
|
|
),
|
|
]
|
|
)
|
|
for index, affix in enumerate(result, start=1)
|
|
],
|
|
times_type=10 if msg.times_type > 0 else 1
|
|
)
|