bfdz49 发表于 2025-2-27 14:51:07

话西游GM代码列表

我今天做个代码 可以拿源代码来实现他有什么帮助可以在下面留言我会回复

看图

(1)定义GM日志记录函数
import sqlite3
from datetime import datetime

def log_gm_action(db_connection, gm_id, command_id, player_id, action_details):
    cursor = db_connection.cursor()
    cursor.execute("""
      INSERT INTO GMLogs (gm_id, command_id, player_id, timestamp, action_details)
      VALUES (?, ?, ?, ?, ?)
    """, (gm_id, command_id, player_id, datetime.now(), action_details))
    db_connection.commit()定义GM指令执行函数
def execute_gm_command(db_connection, gm_id, command_name, player_id, params):
    cursor = db_connection.cursor()
   
    # 查询指令信息
    cursor.execute("SELECT command_id, required_permission FROM GMCommands WHERE command_name = ?", (command_name,))
    command = cursor.fetchone()
    if not command:
      print("Invalid command.")
      return
   
    command_id, required_permission = command
   
    # 模拟权限检查
    cursor.execute("SELECT permission_level FROM GMAccounts WHERE gm_id = ?", (gm_id,))
    gm_permission = cursor.fetchone()
    if not gm_permission or gm_permission < required_permission:
      print("Permission denied.")
      return
   
    # 根据指令类型执行操作
    if command_name == ".modify":
      attribute, value = params.split()
      cursor.execute(f"UPDATE Players SET {attribute} = ? WHERE player_id = ?", (value, player_id))
      db_connection.commit()
      log_gm_action(db_connection, gm_id, command_id, player_id, f"Modified {attribute} to {value}")
      print(f"Modified player {player_id}'s {attribute} to {value}.")
    elif command_name == ".additem":
      item_id, quantity = params.split()
      cursor.execute("UPDATE Players SET items = json_set(items, '$.items', json(items || json(?))) WHERE player_id = ?", (f'{{"item_id":{item_id}, "quantity":{quantity}}}', player_id))
      db_connection.commit()
      log_gm_action(db_connection, gm_id, command_id, player_id, f"Added item {item_id} x{quantity}")
      print(f"Added item {item_id} x{quantity} to player {player_id}.")
    else:
      print("Command not implemented.")服务端接收GM指令服务端需要监听GM工具发送的指令,并调用相应的存储函数执行操作
import socket
import threading

def handle_client(client_socket, db_connection):
    while True:
      try:
            command = client_socket.recv(1024).decode('utf-8')
            if not command:
                break
            print(f"Received command: {command}")
            # 解析指令并执行
            gm_id, command_name, player_id, params = command.split('|')
            execute_gm_command(db_connection, int(gm_id), command_name, int(player_id), params)
      except Exception as e:
            print(f"Error: {e}")
            break
    client_socket.close()

def start_server():
    db_connection = sqlite3.connect("game.db")
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('0.0.0.0', 8888))
    server_socket.listen(5)
    print("Server started. Listening on port 8888...")

    while True:
      client_socket, addr = server_socket.accept()
      print(f"Accepted connection from {addr}")
      client_handler = threading.Thread(target=handle_client, args=(client_socket, db_connection))
      client_handler.start()

if __name__ == "__main__":
    start_server()客户端发送GM指令客户端通过网络连接到服务端,发送GM指令
import socket

def send_gm_command(gm_id, command_name, player_id, params):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('127.0.0.1', 8888))
    command = f"{gm_id}|{command_name}|{player_id}|{params}"
    client_socket.send(command.encode('utf-8'))
    client_socket.close()

# 示例:发送GM指令
send_gm_command(1, ".modify", 123, "hp 1000")
send_gm_command(1, ".additem", 123, "101 5")创建数据库表
CREATE TABLE GMAccounts (
    gm_id INT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    permission_level INT NOT NULL
);

CREATE TABLE GMCommands (
    command_id INT PRIMARY KEY,
    command_name VARCHAR(255) NOT NULL,
    description TEXT,
    required_permission INT NOT NULL
);

CREATE TABLE GMLogs (
    log_id INT PRIMARY KEY,
    gm_id INT NOT NULL,
    command_id INT NOT NULL,
    player_id INT NOT NULL,
    timestamp DATETIME NOT NULL,
    action_details TEXT
);

CREATE TABLE Players (
    player_id INT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    level INT NOT NULL,
    hp INT NOT NULL,
    mana INT NOT NULL,
    gold INT NOT NULL,
    items TEXT
);





she1380915 发表于 2025-2-27 23:57:57

:::
页: [1]
查看完整版本: 话西游GM代码列表

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明