Configuration
La configuracion principal esta en:
config/config.lua
Framework y apertura
Config.Framework = 'QBX'
Config.OpenPhoneKey = 'M'
Config.RequirePhoneItem = true
Config.PhoneItem = 'phone'
| Opcion | Descripcion |
|---|---|
Config.Framework | Framework usado por el recurso: QBX, QB o ESX. |
Config.OpenPhoneKey | Tecla registrada para abrir/cerrar el telefono. |
Config.RequirePhoneItem | Si es true, el jugador necesita llevar el item del telefono. |
Config.PhoneItem | Nombre del item que representa el telefono en cold_inventory. |
Tambien existe el comando:
/coldphone
Tarjeta SIM
Config.Sim = {
item = 'sim',
pinLength = 4,
maxAttempts = 3,
lockoutSeconds = 30,
numberPrefix = '555',
numberDigits = 9
}
item: item de SIM usado porcold_inventory.pinLength: longitud esperada del PIN.maxAttempts: intentos permitidos antes del bloqueo temporal.lockoutSeconds: duracion del bloqueo tras superar los intentos.numberPrefix: prefijo usado al generar nuevos numeros.numberDigits: longitud total configurada para el numero generado.
Una SIM nueva solicita crear y confirmar su PIN. Una SIM configurada solicita ese PIN antes de insertarse.
La SIM conserva la identidad telefonica: numero, contactos, mensajes y llamadas. Los datos propios del dispositivo, como ajustes o aplicaciones, permanecen asociados al personaje/dispositivo.
Prop del telefono
Config.PhoneProp = {
enabled = true,
model = 'prop_amb_phone',
bone = 28422,
offset = vector3(0.0, 0.0, 0.0),
rotation = vector3(0.0, 0.0, 0.0)
}
Permite activar/desactivar el prop, cambiar el modelo, hueso y ajustes de posicion/rotacion.
El recurso incluye los archivos de stream para prop_amb_phone.
Llamadas
Config.CallTimeout = 30000
Config.CallSpeaker = {
enabled = true,
radius = 8.0,
refreshInterval = 750,
maxNearbyPlayers = 8
}
CallTimeout: tiempo maximo de llamada entrante antes de considerarla no respondida.enabled: habilita el modo altavoz.radius: radio para participantes cercanos al altavoz.refreshInterval: intervalo de actualizacion de jugadores cercanos.maxNearbyPlayers: limite de jugadores considerados alrededor del telefono.
Las llamadas de voz se conectan a canales de llamada de pma-voice.
Mensajes y limites
Config.MessageCooldown = 1000
Config.MaxMessageLength = 500
Config.MaxContactNameLength = 100
Config.MaxPhoneNumberLength = 20
Config.MaxBankTransfer = 1000000
Estos valores controlan el cooldown de mensajes y los limites de longitud/transferencia validados por el servidor.
Valet y cold_garages
Config.Valet = {
enabled = true,
account = 'bank',
garageFee = 750,
depositFee = 1750,
maxDepotCharge = 100000,
driverModel = 's_m_m_valet_01',
drivingSpeed = 22.0,
drivingStyle = 786603,
spawnNode = 18,
deliveryTimeoutMs = 120000,
pendingTimeoutMs = 180000,
stuckTimeoutMs = 15000,
arrivalDistance = 18.0,
dropoffSearchDistance = 30.0,
maxSpawnDistance = 300.0,
vehicleImageBaseUrl = 'https://docs.fivem.net/vehicles/%s.webp'
}
La aplicacion Valet consulta los vehiculos y solicita su entrega mediante la integracion con cold_garages.
Opciones principales:
enabled: activa la aplicacion/servicio de valet.account: cuenta usada para cobrar el servicio.garageFee: coste base para vehiculos en garaje.depositFee: coste base para vehiculos en deposito.maxDepotCharge: limite maximo aplicado a cargos de deposito.driverModel: ped del conductor.drivingSpeed/drivingStyle: comportamiento de conduccion.deliveryTimeoutMs: tiempo maximo de una entrega activa.pendingTimeoutMs: caducidad de solicitudes pendientes.stuckTimeoutMs: tiempo usado para detectar una entrega atascada.arrivalDistance: distancia considerada como llegada.dropoffSearchDistance: radio de busqueda para finalizar la entrega.maxSpawnDistance: distancia maxima permitida para el spawn del vehiculo.vehicleImageBaseUrl: plantilla para las imagenes mostradas por la app.
Si qbx_vehiclekeys esta iniciado, el recurso intenta entregar las llaves del vehiculo al jugador al completar el servicio.
Funciones principales
Config.Features = {
contacts = true,
messages = true,
calls = true,
camera = true,
banking = true
}
Permite habilitar o deshabilitar las funciones principales de contactos, mensajeria, llamadas, camara y banca.
Sistema de bateria
Config.BatterySystem = {
enabled = false,
maxBattery = 100,
drainPerMinute = 0.45,
standbyDrainPerHour = 0.08,
vehicleCharging = true,
chargePerMinute = 3.0,
saveInterval = 60,
activityMultipliers = {
camera = 2.4,
gallery = 1.15,
youtube = 1.55,
google = 1.3,
instagram = 1.35,
whatsapp = 1.2,
tetris = 1.65,
snake = 1.65,
puzzle2048 = 1.55,
chess = 1.45
},
lowWarning = 20,
critical = 5
}
Por defecto el sistema de bateria esta desactivado.
Puedes configurar:
- Capacidad maxima.
- Consumo mientras se usa el telefono.
- Consumo en espera.
- Carga dentro de vehiculos.
- Velocidad de carga.
- Intervalo de persistencia.
- Multiplicadores de consumo por aplicacion.
- Niveles de bateria baja y critica.
Sistema de señal
Config.SignalSystem = {
enabled = true,
defaultSignal = 5,
deadZones = {}
}
defaultSignal define la cobertura base.
deadZones permite reservar zonas donde quieras reducir o anular la señal. La tabla viene vacia por defecto.
Camara
Config.Camera = {
screenshotResource = 'screencapture',
encoding = 'webp',
maxWidth = 1280,
maxHeight = 720,
maxBase64Length = 5000000,
captureCooldown = 1500
}
La camara usa capturas locales y valida dimensiones, tamaño y cooldown.
No necesita Discord webhook ni un hosting externo para guardar las fotos.
Videollamadas
Config.VideoCall = {
enabled = true,
frameInterval = 900,
maxWidth = 360,
maxHeight = 640,
maxBase64Length = 350000,
latentBps = 750000
}
Los fotogramas de videollamada se reducen y envian mediante eventos latentes.
Si necesitas reducir trafico, aumenta frameInterval o reduce las dimensiones y latentBps segun tu infraestructura.
Ajustes por defecto
Config.DefaultSettings define el estado inicial del dispositivo:
Config.DefaultSettings = {
wallpaper = 'default',
ringtone = 'default',
notifications = true,
vibration = true,
brightness = 80,
volume = 70,
airplaneMode = false,
wifi = true,
bluetooth = true,
mobileData = true,
darkMode = false,
autoBrightness = false,
autoLock = '2min',
textSize = 50,
notificationPreviews = 'always',
lowPowerMode = false,
batteryPercentage = true,
locationServices = true,
analytics = false,
setupCompleted = false,
passcodeEnabled = false,
passcodeHash = '',
faceIdEnabled = false,
installedApps = {},
appOrder = {},
backupEnabled = true,
dockOrder = {},
whatsappStatuses = {},
instagramPosts = {},
gameScores = {},
chessData = {}
}
Estos valores se usan como estado inicial; posteriormente los cambios del jugador se guardan de forma persistente.
Aplicaciones incluidas
El frontend contiene, entre otras, estas aplicaciones/funciones:
- Telefono y contactos.
- Mensajes y WhatsApp.
- Camara y galeria.
- Calendario, reloj/alarmas y notas.
- Wallet y banca.
- AirDrop.
- Maps y Weather.
- Google y YouTube.
- Instagram y Tinder.
- Valet.
- Calculadora y musica.
- Cold Store / App Store.
- Juegos: Tetris, Snake, 2048 y Chess.
La disponibilidad visual de una aplicacion puede depender de los ajustes/aplicaciones instaladas del dispositivo.
Base de datos
El SQL incluido define estas tablas:
cold_phone_sims
cold_phone_sim_slots
cold_phone_contacts
cold_phone_messages
cold_phone_calls
cold_phone_photos
cold_phone_calendar_events
cold_phone_settings
cold_phone_notes
cold_phone_alarms
cold_phone_airdrop_items
cold_phone_bank_transactions
cold_phone_instagram_accounts
cold_phone_instagram_posts
cold_phone_instagram_likes
cold_phone_instagram_comments
cold_phone_instagram_stories
cold_phone_instagram_sessions
cold_phone_tinder_profiles
cold_phone_tinder_swipes
cold_phone_tinder_matches
cold_phone_tinder_messages
Las tablas se crean automaticamente al arrancar.
Seguridad del passcode
En server.cfg se recomienda:
set cold_phone_passcode_pepper "una-cadena-larga-unica-y-privada"
El servidor usa este secreto al generar los hashes de PIN/passcode. Mantenlo estable y privado.
API para otros recursos
Eventos cliente
cold_phone:client:openPhone
cold_phone:client:closePhone
cold_phone:client:toggle
Exports cliente
exports.cold_phone:OpenPhone()
exports.cold_phone:ClosePhone()
exports.cold_phone:IsPhoneOpen()
exports.cold_phone:GetPhoneData()
Exports servidor
Obtener el numero activo de un jugador:
local number = exports.cold_phone:GetPlayerPhoneNumber(source)
Enviar un mensaje desde otro recurso:
exports.cold_phone:SendMessage(senderNumber, receiverNumber, message)
Debug
Config.Debug = false
Activalo solo cuando necesites informacion adicional durante pruebas.