mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-14 22:04:36 +01:00
feat: Implement commands (help,rank,maxskill)
This commit is contained in:
16
game_server/game/chat/command/__init__.py
Normal file
16
game_server/game/chat/command/__init__.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import importlib
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
folder = "game_server/game/chat/command"
|
||||
sys.path.append(os.path.dirname(folder))
|
||||
|
||||
for filename in os.listdir(folder):
|
||||
if filename.endswith(".py") and filename != "__init__.py":
|
||||
module_name = filename[:-3]
|
||||
module_path = f"game_server.game.chat.command.{module_name}"
|
||||
try:
|
||||
importlib.import_module(module_path)
|
||||
except Exception as e:
|
||||
print(f"Error importing module '{module_path}': {e}")
|
||||
48
game_server/game/chat/command/max_skill.py
Normal file
48
game_server/game/chat/command/max_skill.py
Normal file
@@ -0,0 +1,48 @@
|
||||
from database import mongo
|
||||
from lib.proto import GetAvatarDataReq, AvatarSubSkill
|
||||
from game_server.net.session import Session
|
||||
from game_server.resource import ResourceManager
|
||||
from game_server.game.enum.data_type import DataType
|
||||
from game_server.game.chat.decorators import Command
|
||||
from game_server.resource.configdb.avatar_sub_skill_data import AvatarSubSkillData
|
||||
|
||||
@Command(
|
||||
prefix="maxskill",
|
||||
usage="/maxskill {avatar_id | all} - Maximize the skills of a specific avatar. Use 'all' to maximize the skills of all avatars.",
|
||||
)
|
||||
async def execute(session: Session, avatar_id):
|
||||
desc = getattr(execute, "usage", "No description available.")
|
||||
|
||||
if avatar_id == "all":
|
||||
for avatar in session.player.avatars.values():
|
||||
await max_out_skills_for_avatar(avatar, session)
|
||||
return "All avatars' skills have been maxed out!"
|
||||
|
||||
if not avatar_id.isdigit():
|
||||
return f"Usage: {desc}"
|
||||
|
||||
avatar_id = int(avatar_id)
|
||||
|
||||
avatar = session.player.avatars.get(avatar_id)
|
||||
if not avatar:
|
||||
return f"Avatar with ID {avatar_id} does not exist."
|
||||
|
||||
await max_out_skills_for_avatar(avatar, session)
|
||||
|
||||
return f"All skills for avatar {avatar_id} have been maxed out!"
|
||||
|
||||
async def max_out_skills_for_avatar(avatar, session:Session):
|
||||
resource_manager = ResourceManager.instance()
|
||||
for skill_id, skill in avatar.skill_lists.items():
|
||||
sub_skills = [
|
||||
data for data in resource_manager.values(AvatarSubSkillData)
|
||||
if data.skillId == skill_id
|
||||
]
|
||||
for sub_skill_data in sub_skills:
|
||||
skill.sub_skill_lists[sub_skill_data.avatarSubSkillId] = AvatarSubSkill(
|
||||
sub_skill_id=sub_skill_data.avatarSubSkillId,
|
||||
level=sub_skill_data.maxLv
|
||||
)
|
||||
|
||||
mongo.save(session, DataType.AVATAR, [avatar.avatar_id])
|
||||
await session.process_packet(session.create_packet(GetAvatarDataReq(avatar_id_list=[avatar.avatar_id])))
|
||||
46
game_server/game/chat/command/rank.py
Normal file
46
game_server/game/chat/command/rank.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from game_server.game.enum.data_type import DataType
|
||||
from game_server.game.chat.decorators import Command
|
||||
from game_server.net.session import Session
|
||||
from database import mongo
|
||||
from lib.proto import GetAvatarDataReq
|
||||
|
||||
@Command(
|
||||
prefix="rank",
|
||||
usage="/rank {avatar_id | all} {rank} - Edit the rank of a specific avatar or use 'all' to update the rank of all avatars.",
|
||||
)
|
||||
async def execute(session: Session, avatar_id, rank="1"):
|
||||
desc = getattr(execute, "usage", "No description available.")
|
||||
|
||||
if not rank.isdigit():
|
||||
return f"Usage: {desc}"
|
||||
|
||||
if avatar_id == "all":
|
||||
for avatar in session.player.avatars.values():
|
||||
await update_avatar_rank(avatar, rank, session)
|
||||
return f"Updated rank for all avatars to {rank}."
|
||||
|
||||
if not avatar_id.isdigit():
|
||||
return f"Usage: {desc}"
|
||||
|
||||
avatar_id = int(avatar_id)
|
||||
|
||||
avatar = session.player.avatars.get(avatar_id)
|
||||
if not avatar:
|
||||
return f"Avatar with ID {avatar_id} does not exist."
|
||||
|
||||
await update_avatar_rank(avatar, rank, session)
|
||||
|
||||
return f"Updated avatar {avatar_id}'s rank to {rank}."
|
||||
|
||||
async def update_avatar_rank(avatar, rank, session:Session):
|
||||
rank = int(rank)
|
||||
if rank < 1:
|
||||
rank = 1
|
||||
if rank > 5:
|
||||
rank = 5
|
||||
|
||||
avatar.star = rank
|
||||
|
||||
mongo.save(session, DataType.AVATAR, [avatar.avatar_id])
|
||||
|
||||
await session.process_packet(session.create_packet(GetAvatarDataReq(avatar_id_list=[avatar.avatar_id])))
|
||||
Reference in New Issue
Block a user