Refactor battle & fix name for avatar_manager

This commit is contained in:
Naruse
2025-04-16 16:25:31 +08:00
parent ec8972d5d6
commit f0e41e3258
11 changed files with 127 additions and 82 deletions

View File

@@ -7,12 +7,12 @@ from rail_proto.lib import (
async def handle(session: PlayerSession, msg: DressAvatarCsReq) -> betterproto.Message:
equipment = session.player.inventory_manager.get(msg.equipment_unique_id)
target_avatar = session.player.avatar_mananger.get(msg.avatar_id)
target_avatar = session.player.avatar_manager.get(msg.avatar_id)
if not equipment or not target_avatar:
return DressAvatarScRsp()
previous_avatar = session.player.avatar_mananger.get(equipment.equip_avatar)
previous_avatar = session.player.avatar_manager.get(equipment.equip_avatar)
if previous_avatar:
if previous_avatar.lightcone_id > 0 and target_avatar.lightcone_id > 0:
target_equipment = session.player.inventory_manager.get(target_avatar.lightcone_id)

View File

@@ -6,7 +6,7 @@ from rail_proto.lib import (
)
async def handle(session: PlayerSession, msg: DressRelicAvatarCsReq) -> betterproto.Message:
target_avatar = session.player.avatar_mananger.get(msg.avatar_id)
target_avatar = session.player.avatar_manager.get(msg.avatar_id)
if not target_avatar:
return DressRelicAvatarScRsp()
@@ -17,7 +17,7 @@ async def handle(session: PlayerSession, msg: DressRelicAvatarCsReq) -> betterpr
relic_sub_type = str(relic.sub_type)
current_relic_id = target_avatar.relic_ids.get(relic_sub_type, 0)
previous_avatar = session.player.avatar_mananger.get(relic.equip_avatar)
previous_avatar = session.player.avatar_manager.get(relic.equip_avatar)
if previous_avatar:
previous_relic_id = previous_avatar.relic_ids.get(relic_sub_type, 0)

View File

@@ -8,7 +8,7 @@ from rail_proto.lib import (
async def handle(session: PlayerSession, msg: GetAvatarDataCsReq) -> betterproto.Message:
avatars: list[Avatar] = []
for avatar_id,avatar in session.player.avatar_mananger.items():
for avatar_id,avatar in session.player.avatar_manager.items():
avatars.append(avatar.ToProto())
return GetAvatarDataScRsp(
retcode=0,

View File

@@ -12,24 +12,26 @@ from rail_proto.lib import (
async def handle(session: PlayerSession, msg: PVEBattleResultCsReq) -> betterproto.Message:
if msg.end_status == BattleEndStatus.BATTLE_END_WIN.value:
await session.notify(
SceneGroupRefreshScNotify(
group_refresh_list=[
GroupRefreshInfo(
refresh_type=SceneGroupRefreshType.SCENE_GROUP_REFRESH_TYPE_LOADED.value,
refresh_entity=[
SceneEntityRefreshInfo(
delete_entity=monster.entity_id
)
],
group_id=monster.group_id
) for monster in session.player.scene_manager.battle_monster
],
floor_id=session.player.data.floor_id
if session.player.battle_manager:
await session.notify(
SceneGroupRefreshScNotify(
group_refresh_list=[
GroupRefreshInfo(
refresh_type=SceneGroupRefreshType.SCENE_GROUP_REFRESH_TYPE_LOADED.value,
refresh_entity=[
SceneEntityRefreshInfo(
delete_entity=monster.entity_id
)
],
group_id=monster.group_id
) for monster in session.player.battle_manager.entity_monster
],
floor_id=session.player.data.floor_id
)
)
)
for monster in session.player.scene_manager.battle_monster:
session.player.scene_manager.entities.pop(monster.entity_id, None)
for monster in session.player.battle_manager.entity_monster:
session.player.scene_manager.entities.pop(monster.entity_id, None)
session.player.battle_manager = None
return PVEBattleResultScRsp(
retcode=0,
end_status=msg.end_status,

View File

@@ -1,15 +1,11 @@
import betterproto
from game_server.net.session import PlayerSession
from game_server.resource import ResourceManager
from game_server.resource.configdb.stage_config import StageConfig
from game_server.game.battle.battle_manager import BattleManager
from rail_proto.lib import (
SceneCastSkillCsReq,
SceneCastSkillScRsp,
SceneBattleInfo,
SceneMonsterWave,
SceneMonster
)
import numpy as np
async def handle(session: PlayerSession, msg: SceneCastSkillCsReq) -> betterproto.Message:
targets = [id for id in msg.assist_monster_entity_id_list if id > 20000 or id < 10]
@@ -18,46 +14,7 @@ async def handle(session: PlayerSession, msg: SceneCastSkillCsReq) -> betterprot
id for id in monster.entity_id_list
if id not in targets and (id > 20000 or id < 10)
)
session.player.battle_manager = BattleManager(session.player)
if msg.skill_index == 0 and targets:
monster_data: list[StageConfig] = []
for entity_id in targets:
entity_data = session.player.scene_manager.entities.get(entity_id)
if entity_data:
stage = ResourceManager.instance().find_by_index(StageConfig,entity_data.npc_monster.event_id*10)
if not stage:
stage = ResourceManager.instance().find_by_index(StageConfig,entity_data.npc_monster.event_id)
if stage:
monster_data.append(stage)
session.player.scene_manager.battle_monster.append(entity_data)
if monster_data:
return SceneCastSkillScRsp(
retcode=0,
cast_entity_id=msg.cast_entity_id,
battle_info=SceneBattleInfo(
rounds_limit=0,
world_level=session.player.data.world_level,
logic_random_seed=np.random.randint(1, np.iinfo(np.int32).max, dtype=np.int32),
stage_id=monster_data[0].StageID,
battle_id=1,
battle_avatar_list=[
session.player.avatar_mananger.get(avatar_id).ToBattleProto(index,session)
for index, avatar_id in enumerate(session.player.lineup_manager.get(session.player.data.cur_lineup, None).avatar_list)
],
monster_wave_list=[
SceneMonsterWave(
battle_stage_id=monster_list.StageID,
battle_wave_id=index,
monster_list=[
SceneMonster(
monster_id=id
)
for monster_dict in monster_list.MonsterList
for monster, id in monster_dict.items()
if id > 0
]
)
for index,monster_list in enumerate(monster_data)
]
)
)
return session.player.battle_manager.EnterBattle(msg,targets)
return SceneCastSkillScRsp(retcode=0)