mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-14 13:54:43 +01:00
feat: Implement stigmata standard reroll
This commit is contained in:
74
game_server/packet/handlers/RefineStigmataRuneReq.py
Normal file
74
game_server/packet/handlers/RefineStigmataRuneReq.py
Normal file
@@ -0,0 +1,74 @@
|
||||
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
|
||||
)
|
||||
Reference in New Issue
Block a user