Files
neonsr/game_server/game/chat/command/give.py
Naruse ec8972d5d6 init
2025-04-15 19:36:05 +08:00

61 lines
3.0 KiB
Python

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)