SeMU - Script Comando info - Source Mu - Mu Server Files
 

Noticias:

SMF - Just Installed!

Menú principal

SeMU - Script Comando info

Publicado por Dakosmu, Nov 23, 2025, 02:35 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Dakosmu

SSeMU - Script Comando /info (Guía Paso a Paso)

Que tal gente, para quienes no tienen el comando [/b]info[/b] y quieran integrarlo en sus servidores basados en el emulador SSeMU, acá les dejo este script en Lua.

Solo deben reemplazar el número de comando o index por el que usarán en su CommandManager. También les funciona como base para crear nuevos scripts por comandos. ¡Saludos!

Funcionalidades del Script

  • Muestra el Nivel, Resets, Nivel de Cuenta y Stats (Fuerza, Destreza, Vitalidad, Energía, Liderazgo) de un personaje específico.
  • Utiliza un sistema de mensajes más limpio (MessageSend) para mostrar la información en el juego.
  • Define nombres claros para los niveles de cuenta (Normal, Bronce, Plata, Oro).

---

Paso 1: Código del Script Lua

Este es el script que deben guardar en la carpeta de Scripts (típicamente Data/Scripts/) con el nombre que deseen, por ejemplo: InfoPlayer.lua.

Nota Importante: El código utiliza el código de comando 42 (if code == 42 then). Asegúrate de que este número esté configurado para el comando /info en tu CommandManager.cfg o el archivo de configuración correspondiente.

-- ===========================================================================
BridgeFunctionAttach('OnCommandManager', 'InfoPlayer_OnCommandManager')
BridgeFunctionAttach('OnReadScript', 'InfoPlayer_OnReadScript')
-- ===========================================================================

-- Función para obtener el nombre del nivel de cuenta
function getAccountLevelName(accountLevel)
    local accountLevelNames = {
        [0] = "Normal",
        [1] = "Bronce",
        [2] = "Plata",
        [3] = "Oro"
    }
    return accountLevelNames[accountLevel] or 'NO EXISTE'
end

function InfoPlayer_OnReadScript()
    -- Mostrara un mensaje en el GS cuando se cargue correctamente
    LogColor(2, "[InfoPlayer] Script cargado con exito")
end

-- Función para manejar el comando /info
function InfoPlayer_OnCommandManager(aIndex, code, arg)
    if code == 42 then
        local targetUserName = CommandGetArgString(arg, 0)
        local targetUserIndex = GetObjectIndexByName(targetUserName)

        if targetUserIndex ~= -1 then
            local level = GetObjectLevel(targetUserIndex)
            local resets = GetObjectReset(targetUserIndex)
            local stats = {
                strength = GetObjectStrength(targetUserIndex),
                dexterity = GetObjectDexterity(targetUserIndex),
                vitality = GetObjectVitality(targetUserIndex),
                energy = GetObjectEnergy(targetUserIndex),
                leadership = GetObjectLeadership(targetUserIndex)
            }

            -- Obtener el nivel de la cuenta del usuario
            local accountLevel = GetObjectAccountLevel(targetUserIndex)
            local accountLevelName = getAccountLevelName(accountLevel)

            -- Enviar la primera parte del mensaje
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("Personaje: %s - Nivel: %d",
                    targetUserName,
                    level))
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("Resets: %d - Nivel de Cuenta: %s",
                    resets,
                    accountLevelName))

            -- Enviar la segunda parte del mensaje
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                "Stats:")
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("[Fuerza %d] - [Destreza %d]",
                    stats.strength,
                    stats.dexterity))
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("[Vitalidad %d] - [Energia %d]",
                    stats.vitality,
                    stats.energy))
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("[Liderazgo %d]",
                    stats.leadership))
        else
            MessageSend(aIndex,
                MessageType.TYPE_CHAT,
                MessageColor.COLOR_RED_ERROR,
                "El usuario especificado no existe.")
        end
        return 1
    end

    return 0
end

---

Paso 2: Ejemplo de Visualización en el Juego

Así es como se verá la información enviada a través del comando en el juego:



---

Agradecimientos y Base del Código
Agradecimiento a Regístrate para ver el enlace por la base inicial. Este es un script para visualizar mejor el contenido, ordenado y mejorado para mostrar la experiencia como notificación.

---

Cualquier duda, no duden en comentar. ¡Suerte con la integración!
Bon Dia

Dakosmu

Codigo 1

-- ===========================================================================
BridgeFunctionAttach('OnCommandManager', 'CustomScript_OnCommandManager')
BridgeFunctionAttach('OnShutScript', 'ComandoSaber_OnShutScript')
-- ===========================================================================


function ComandoSaber_OnShutScript()
    -- Mostrara un mensaje en el GS cuando se cargue correctamente
    LogColor(2, "Script ComandoSaber cargado con exito")
end

-- Función para obtener el nombre del nivel de cuenta
function getAccountLevelName(accountLevel)
    local accountLevelNames = {
        [0] = "Normal",
        [1] = "Bronce",
        [2] = "Plata",
        [3] = "Oro"
    }
    return accountLevelNames[accountLevel] or 'NO EXISTE'
end

-- Función para manejar el comando /info
function CustomScript_OnCommandManager(aIndex, code, arg)
    if code == 130 then
        local targetUserName = arg
        local targetUserIndex = GetObjectIndexByName(targetUserName)
       
        if targetUserIndex ~= -1 then
            local level = GetObjectLevel(targetUserIndex)
            local resets = GetObjectReset(targetUserIndex)
            local stats = {
                strength = GetObjectStrength(targetUserIndex),
                dexterity = GetObjectDexterity(targetUserIndex),
                vitality = GetObjectVitality(targetUserIndex),
                energy = GetObjectEnergy(targetUserIndex),
                leadership = GetObjectLeadership(targetUserIndex)
            }
           
            -- Obtener el nivel de la cuenta del usuario
            local accountLevel = GetObjectAccountLevel(targetUserIndex)
            local accountLevelName = getAccountLevelName(accountLevel)
           
            -- Enviar la primera parte del mensaje
            NoticeSend(aIndex, 0, string.format("Personaje: [%s] [\nNivel %d][\nResets %d][\nNivel de Cuenta: %s]",
                                            targetUserName, level, resets, accountLevelName))
           
            -- Enviar la segunda parte del mensaje
            NoticeSend(aIndex, 0, string.format("Stats: [\nFuerza %d][\nDestreza %d][\nVitalidad %d][\nEnergia %d][\nLiderazgo %d]",
                                            stats.strength, stats.dexterity, stats.vitality, stats.energy, stats.leadership))
           
        else
            MessageSend(aIndex, 1, 0, "El usuario especificado no existe.")
        end
        return 1
    end
   
    return 0
end

Codigo 2

-- ===========================================================================
BridgeFunctionAttach('OnCommandManager', 'InfoPlayer_OnCommandManager')
BridgeFunctionAttach('OnReadScript', 'InfoPlayer_OnReadScript')
-- ===========================================================================

-- Función para obtener el nombre del nivel de cuenta
function getAccountLevelName(accountLevel)
    local accountLevelNames = {
        [0] = "Normal",
        [1] = "Bronce",
        [2] = "Plata",
        [3] = "Oro"
    }
    return accountLevelNames[accountLevel] or 'NO EXISTE'
end

function InfoPlayer_OnReadScript()
    -- Mostrara un mensaje en el GS cuando se cargue correctamente
    LogColor(2, "[InfoPlayer] Script cargado con exito")
end

-- Función para manejar el comando /info
function InfoPlayer_OnCommandManager(aIndex, code, arg)
    if code == 42 then
        local targetUserName = CommandGetArgString(arg, 0)
        local targetUserIndex = GetObjectIndexByName(targetUserName)

        if targetUserIndex ~= -1 then
            local level = GetObjectLevel(targetUserIndex)
            local resets = GetObjectReset(targetUserIndex)
            local stats = {
                strength = GetObjectStrength(targetUserIndex),
                dexterity = GetObjectDexterity(targetUserIndex),
                vitality = GetObjectVitality(targetUserIndex),
                energy = GetObjectEnergy(targetUserIndex),
                leadership = GetObjectLeadership(targetUserIndex)
            }

            -- Obtener el nivel de la cuenta del usuario
            local accountLevel = GetObjectAccountLevel(targetUserIndex)
            local accountLevelName = getAccountLevelName(accountLevel)

            -- Enviar la primera parte del mensaje
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("Personaje: %s - Nivel: %d",
                    targetUserName,
                    level))
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("Resets: %d - Nivel de Cuenta: %s",
                    resets,
                    accountLevelName))

            -- Enviar la segunda parte del mensaje
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                "Stats:")
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("[Fuerza %d] - [Destreza %d]",
                    stats.strength,
                    stats.dexterity))
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("[Vitalidad %d] - [Energia %d]",
                    stats.vitality,
                    stats.energy))
            MessageSend(
                aIndex,
                MessageType.TYPE_NOTIFICATION,
                MessageColor.COLOR_NONE,
                string.format("[Liderazgo %d]",
                    stats.leadership))
        else
            MessageSend(aIndex,
                MessageType.TYPE_CHAT,
                MessageColor.COLOR_RED_ERROR,
                "El usuario especificado no existe.")
        end
        return 1
    end

    return 0
end

Creditos

gambasoxd
Simp
Bon Dia

🡱 🡳
Real Time Web Analytics