Apartments sustituye a qb-apartments en lugar de funcionar junto a él. Responde a los mismos eventos y lee la misma tabla, así que los scripts que lo rodean — menús de personajes, selectores de spawn, teléfonos — siguen funcionando. Esta página explica cómo quitar el script antiguo, conservar los apartamentos que tus jugadores ya tienen y actualizar un Apartments anterior sin perder nada.
Qué asume Apartments#
De qb-apartments o Qbox | En Apartments |
|---|---|
Los nombres de recurso | Proporcionados por |
| Gestionado. En QBCore abre qb-spawn con tus edificios; en Qbox muestra un menú de edificios. |
| Mismos argumentos: edificio, etiqueta y si es el primer spawn. |
Los metadatos | Se conservan, así que un jugador que se desconecta en casa vuelve a conectarse en casa. |
La tabla | Mismas columnas principales, más los puntos de stash, armario y cargador y los códigos de la caja fuerte. |
|
|
Quitar el script antiguo#
Detenlo y elimínalo
Quita
qb-apartments— oqbx_properties/qbx_apartmentsen Qbox — de tu carpeta de recursos, y su líneaensuredeserver.cfg. Apartments imprime un error repetido mientras haya iniciado un recurso llamadoqbx_property.Conserva la tabla
No importes
database.sqlcompleto — su primera línea eliminaplayer_apartments. Ejecuta en su lugar el bloque de Actualizar una base de datos existente más abajo.Asigna las filas a tus edificios
Sigue Conservar los apartamentos de tus jugadores para que cada apartamento existente pertenezca a un edificio que Apartments conozca.
Conservar los apartamentos de tus jugadores#
Cada fila de player_apartments apunta a un edificio mediante su columna type, y ese valor debe ser una clave de Config.ApartmentCatalog. qb-apartments llama a sus cinco edificios de apartment1 a apartment5; Apartments incluye los mismos cinco edificios con claves nuevas:
qb-apartments | Apartments | Edificio |
|---|---|---|
|
| South Rockford Drive |
|
| Morningwood Blvd |
|
| Integrity Way |
|
| Tinsel Towers |
|
| Fantastic Plaza |
Elige una de dos formas de hacerlos coincidir:
Reescribe una vez las claves antiguas a las nuevas y luego usa el catálogo incluido tal cual:
UPDATE player_apartments SET type = 'sr_drive_a' WHERE type = 'apartment1';
UPDATE player_apartments SET type = 'morningwood_blvd_b' WHERE type = 'apartment2';
UPDATE player_apartments SET type = 'integrity_way_c' WHERE type = 'apartment3';
UPDATE player_apartments SET type = 'tinsel_towers_d' WHERE type = 'apartment4';
UPDATE player_apartments SET type = 'fantastic_plaza_e' WHERE type = 'apartment5';Cambia en su lugar el nombre de las entradas del catálogo en config/main.lua. Cambia la clave y su name a la vez:
Config.ApartmentCatalog = {
['apartment1'] = {
name = 'apartment1',
label = 'South Rockford Drive',
-- ...the rest of the entry unchanged
},
}El ID del apartamento — la columna name, como apartment14821 — no cambia. Apartments abre el stash con ese mismo ID, así que con el mismo inventario que antes, lo que los jugadores guardaban en su apartamento sigue ahí.
No se puede entrar en una fila cuyo
typeno está en el catálogo. Comprueba lo que tienes conSELECT type, COUNT(*) FROM player_apartments GROUP BY type;antes del primer inicio.
Actualizar una base de datos existente#
Tanto si vienes de qb-apartments como de un Apartments anterior, ejecuta esto en lugar de el archivo completo. Solo añade lo que falta y nunca elimina una fila:
ALTER TABLE player_apartments ADD COLUMN IF NOT EXISTS `stash` TEXT NULL DEFAULT NULL;
ALTER TABLE player_apartments ADD COLUMN IF NOT EXISTS `wardrobe` TEXT NULL DEFAULT NULL;
ALTER TABLE player_apartments ADD COLUMN IF NOT EXISTS `charge` TEXT NULL DEFAULT NULL;
ALTER TABLE player_apartments ADD COLUMN IF NOT EXISTS `vaultCodes` LONGTEXT NULL DEFAULT NULL;
CREATE TABLE IF NOT EXISTS `apartment_decorations` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`apartmentId` VARCHAR(50) NULL DEFAULT NULL,
`creator` VARCHAR(70) NOT NULL DEFAULT '0',
`modelName` VARCHAR(50) NOT NULL DEFAULT '0',
`coords` TEXT NULL DEFAULT NULL,
`rotation` TEXT NOT NULL DEFAULT '',
`inStash` TINYINT(1) NOT NULL DEFAULT '0',
`created` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `id` (`id`, `apartmentId`) USING BTREE
) COLLATE='utf8mb3_general_ci' ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `qs_apartment_furnitures` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`creator` VARCHAR(80) NULL DEFAULT NULL,
`category_key` VARCHAR(100) NOT NULL,
`object` VARCHAR(200) NOT NULL,
`label` VARCHAR(255) NOT NULL,
`description` TEXT NULL DEFAULT NULL,
`price` INT(11) NOT NULL DEFAULT '0',
`img` TEXT NULL DEFAULT NULL,
`colorlabel` VARCHAR(255) NULL DEFAULT NULL,
`type` VARCHAR(50) NULL DEFAULT NULL,
`stash` LONGTEXT NULL DEFAULT NULL,
`offset` LONGTEXT NULL DEFAULT NULL,
`colors` LONGTEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `creator` (`creator`) USING BTREE,
INDEX `category_key` (`category_key`) USING BTREE
) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `qs_apartment_junk` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`house` VARCHAR(255) NOT NULL,
`model` VARCHAR(255) NOT NULL,
`coords` LONGTEXT NULL DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP(),
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_house` (`house`) USING BTREE
) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;Actualizar Apartments#
Haz una copia de lo que cambiaste
Copia
config/, cualquier puente que hayas editado enclient/custom/oserver/custom/, tus cambios de idioma yshell_offsets.json— contiene cada puerta de salida que colocaste.Sustituye la carpeta
Pon el nuevo
qs-apartmentsy luego traslada tus valores comparando los archivos en lugar de sobrescribirlos: una versión nueva puede añadir ajustes que tu archivo antiguo no tiene.Actualiza la base de datos y reinicia
Ejecuta el bloque de arriba, inicia el servidor y busca en la consola la línea
Furniture Creator initialized.
Los datos de tus jugadores están en la base de datos, no en la carpeta. Sustituir
qs-apartmentsnunca toca los apartamentos, los muebles, los códigos de la caja fuerte ni las piezas añadidas con el Furniture Creator. El único archivo que el propio juego escribe en la carpeta esshell_offsets.json.



