61 lines
3.0 KiB
Python
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)
|