from game_server.game.chat.decorators import Command from game_server.net.session import PlayerSession from game_server.resource import ResourceManager from game_server.resource.configdb.equipment_config import EquipmentConfig from game_server.resource.configdb.relic_config import RelicConfigData from game_server.resource.configdb.relic_main_affix_config import RelicMainAffixConfigData from game_server.resource.configdb.relic_sub_affix_config import RelicSubAffixConfigData from database.inventory.inventory_data import SubAffix @Command( prefix="give", usage="/give", ) async def execute(session:PlayerSession, item_id, param1=None, param2=None, param3=None, param4=None, param5=None): try: sync = False lightcones = ResourceManager.instance().find_by_index(EquipmentConfig,item_id) relics = ResourceManager.instance().find_by_index(RelicConfigData,item_id) if lightcones: rank = 1 if param1 and param1.startswith("r") and len(param1) == 2: rank_value = param1[1] if rank_value.isdigit() and 1 <= int(rank_value) <= 5: rank = int(rank_value) elif rank_value.isdigit() and int(rank_value) > 5: rank = 5 item = session.player.add_lightcone(item_id, rank) if item: session.player.inventory_manager[item.unique_id] = item sync = True elif relics: main_stat = 0 main_property = "" main_affix_group = ResourceManager.instance().find_all_by_index(RelicMainAffixConfigData, relics.MainAffixGroup) sub_affix_list = [] if param1 and param1.startswith("s") and len(param1) == 2 and param1[1].isdigit(): main_affix = next((affix for affix in main_affix_group if affix.AffixID == int(param1[1]))) if main_affix: main_stat = main_affix.AffixID main_property = main_affix.Property for param in [param2, param3, param4, param5]: if param and len(param) >= 3 and ":" in param: parts = param.split(":") if len(parts) == 2 and all(part.isdigit() for part in parts): sub_affix_data = ResourceManager.instance().find_all_by_index(RelicSubAffixConfigData, relics.SubAffixGroup) for affix in sub_affix_data: if affix.AffixID == int(parts[0]) and affix.Property != main_property: sub_affix_list.append(SubAffix(id=int(parts[0]), count=int(parts[1]), step=int(parts[1]) * 2)) item = session.player.add_relic(item_id,main_stat,sub_affix_list) if item: session.player.inventory_manager[item.unique_id] = item sync = True if sync: await session.notify(session.player.PlayerSyncProto()) return "GIVE" except Exception as e: print(e)