Saltar a contenido

Primeros Pasos

El GameServer incluye un motor de scripting Lua 5.4. Los scripts registran manejadores de eventos a través de BridgeFunctionAttach() y se cargan automáticamente al iniciar mediante ScriptCore.lua.

Primer Script

Crea un archivo llamado Welcome.lua en tu directorio de scripts:

-- Welcome.lua - Send a welcome message when players log in

local function OnPlayerLogin(aIndex)
    local player = GetUser(aIndex)
    if player == nil then return end

    GCNoticeSend(aIndex, 1, "Welcome to the server, " .. player.Name .. "!")
    LogAdd(LOG_GREEN, "[Welcome] " .. player.Name .. " has logged in.")
end

-- Register the handler
BridgeFunctionAttach("OnCharacterEntry", OnPlayerLogin)

Conceptos Clave

Arquitectura Basada en Eventos

Los manejadores se adjuntan a eventos mediante BridgeFunctionAttach():

BridgeFunctionAttach("OnMonsterDie", function(aIndex, bIndex)
    -- This runs every time a monster dies
    -- aIndex = monster, bIndex = killer
end)

La Función GetUser()

Los manejadores reciben un aIndex (índice de objeto). GetUser() retorna el objeto completo:

local player = GetUser(aIndex)
if player then
    -- Access properties
    print(player.Name)      -- Character name
    print(player.Level)     -- Current level
    print(player.Map)       -- Current map
    print(player.Class)     -- Character class
end

Valores de Retorno en Hooks

Algunos hooks usan valores de retorno para controlar el comportamiento del juego:

Retorno Significado
0 Bloquear la acción predeterminada
1 Permitir la acción predeterminada
BridgeFunctionAttach("OnItemDrop", function(aIndex, slot, item)
    if item:IsSetItem() then
        GCNoticeSend(aIndex, 1, "You cannot drop Ancient items!")
        return 0  -- Block the drop
    end
    return 1  -- Allow normally
end)

Siguientes Pasos