Comandos#
Shell Creator registra un comando en el juego. Todo lo demás ocurre dentro de su interfaz.
Comando | Quién | Descripción |
|---|---|---|
| Admins | Abre el gestor de shells: crear, editar, exportar, teletransportarse a shells y eliminarlas. |
| Solo debug | Genera el modelo de la shell y te teletransporta a su punto de aparición, como haría un script de housing. Solo existe mientras |
<id>es el id de la shell que se muestra en Shell Information en el gestor: el número al final deqs_shells_<id>.
Exports de cliente#
La forma más rápida para que otro script sepa si el jugador está ocupado construyendo: para mantener cerrado un teléfono, un menú radial, un inventario o un menú de emotes, o para saltarse una actualización del HUD.
IsInShellcreatorBuilder
local isBuilding = exports['qs-shellcreator']:IsInShellcreatorBuilder()Devuelve true mientras el jugador está en el constructor, incluso mientras recorre una vista previa de la construcción.
IsInShellcreatorPreview
local isPreviewing = exports['qs-shellcreator']:IsInShellcreatorPreview()Devuelve true solo mientras el jugador está en Preview, a pie dentro de la construcción sin guardar.
Ejemplo: bloquear un teléfono mientras se construye
local function canOpenPhone()
if GetResourceState('qs-shellcreator') == 'started'
and exports['qs-shellcreator']:IsInShellcreatorBuilder() then
return false
end
return true
endComprobar GetResourceState primero mantiene tu script funcionando en servidores sin Shell Creator.
State bags#
Los mismos dos estados se escriben en el state bag del jugador y se replican, así que se pueden leer desde el cliente y desde el servidor, o vigilar con un handler de cambios en lugar de consultarlos continuamente.
Clave | true mientras |
|---|---|
| El jugador está en el constructor. |
| El jugador está previsualizando una construcción. |
Leerlo en el cliente
local inBuilder = LocalPlayer.state.shellcreatorInBuilder == true
local inPreview = LocalPlayer.state.shellcreatorInPreview == trueLeerlo en el servidor
local inBuilder = Player(source).state.shellcreatorInBuilder == trueÚtil para rechazar una acción del servidor (un pago periódico, una expulsión por AFK, un cambio de servicio del trabajo) mientras ese jugador está construyendo.
Reaccionar a los cambios
local myBag = ('player:%s'):format(GetPlayerServerId(PlayerId()))
AddStateBagChangeHandler('shellcreatorInBuilder', myBag, function(_, _, value)
if value then
print('Builder opened')
else
print('Builder closed')
end
end)El handler solo se ejecuta cuando el valor cambia, lo que es más barato que comprobarlo en cada frame.
Eventos de cliente#
Eventos locales que se disparan en el propio cliente del jugador en cada paso de una sesión de construcción. Escúchalos con AddEventHandler.
shellcreator:client:builderEntered
AddEventHandler('shellcreator:client:builderEntered', function(data)
print(data.editMode, data.buildingId)
end)Se dispara cuando se abre el constructor. editMode es true cuando se está editando una shell existente, y buildingId es su id (nil para una construcción nueva).
shellcreator:client:builderExited
AddEventHandler('shellcreator:client:builderExited', function(data)
print(data.editMode, data.buildingId)
end)Se dispara cuando se cierra el constructor, se haya guardado o no. Restaura aquí lo que hayas desactivado al entrar.
shellcreator:client:previewEntered
AddEventHandler('shellcreator:client:previewEntered', function()
print('Preview started')
end)Se dispara cuando el jugador empieza a recorrer la construcción.
shellcreator:client:previewExited
AddEventHandler('shellcreator:client:previewExited', function()
print('Preview ended')
end)Se dispara cuando termina la vista previa, al mantener G o porque se cerró el constructor.
Generar una shell desde tu propio script#
No hace falta ningún export para poner una shell en el mundo. Genera su modelo como cualquier shell streameada y el interior se monta alrededor del objeto, y lo sigue si lo mueves o lo giras:
local model = joaat('qs_shells_12')
lib.requestModel(model)
local shell = CreateObject(model, coords.x, coords.y, coords.z, false, false, false)
FreezeEntityPosition(shell, true)El jugador debe estar a menos de 100 m del objeto para que el interior se construya. Para colocarlo en la entrada, suma el desplazamiento del punto de aparición del formato de exportación default (Integraciones) a las coordenadas del objeto.



