GKSHOP
GKSPHONE V2Configuration

GKS Watch

The smartwatch on the wrist — items, wrist props, faces, apps and the health mechanics.

The watch is split across two files, and it matters which one you open:

FileHolds
gksphone/config/config.luaConfig.WatchItems, wrist props, the key, health mechanics
gksphone/config/config.jsonWatchWhich faces and apps exist

Anything the game world touches is Lua. Anything only the screen touches is JSON.

Turning it on

config.lua
Config.Watch = {
    Enable      = true,     -- master switch for the whole watch
    ItemRequire = false,    -- does the player need a watch item?
}

With Enable = false there is no key, no command and no prop — nothing is registered at all.

Items and models

Five cases ship. Each is a plain inventory item with no metadata, so every inventory can carry it.

config.lua
ItemRequire  = true,          -- require an item
DefaultModel = "midnight",    -- used when ItemRequire is false

ItemName = {
    ["watch_silver"] = "silver",
    ["watch_black"]  = "midnight",
    ["watch_gold"]   = "gold",
    ["watch_sport"]  = "sport",
    ["watch_ultra"]  = "ultra",
},

Left side is the item name in your inventory, right side is the model. Rename the items freely; keep the model names.

The items have to exist in your inventory too. Definitions per inventory are in Installation.

With ItemRequire = false nobody needs an item and everyone wears DefaultModel.

Wrist props

The watch is worn as a real prop, visible to other players.

config.lua
PropActive       = true,
PropWear         = true,    -- worn while carried, not only while open
PropWearDistance = 30.0,    -- metres; past this other players' watches are not drawn
PropBone         = 18905,   -- SKEL_L_Hand
PropOffset       = { pos = vector3(-0.020, -0.004, 0.000), rot = vector3(205.0, 0.0, 85.0) },

Models ship in stream/. PropOffset is already tuned — only touch it if you replace the models.

PropWear = true with ItemRequire = false means every player wears DefaultModel all the time. Turn one of the two off if that is not what you want.

Opening it

config.lua
OpenKey        = "F3",      -- key
CommandName    = "watch",   -- /watch
CloseWithPhone = true,      -- opening one closes the other

CloseWithPhone exists because only one of the two can hold NUI focus. Set it to false only if you know what that means.

Faces and apps

Screen-only, so they live in JSON.

config.json
"Watch": {
  "defaultFace": "modular",
  "faces": ["bloom", "contour", "numerals", "modular"],
  "apps": {
    "messages": true, "phone": true,     "wallet": true,
    "health": true,   "nowplaying": true, "timers": true,
    "calculator": true, "notes": true,    "weather": true
  }
}
  • faces — remove a name and players can no longer pick it.
  • apps — set one to false and it is gone from the grid.

A missing app key counts as on, not off. Deleting a line to hide an app does the opposite — set it to false instead.

Health

config.lua
Health = {
    Enable = true,
    Rings  = { move = 500, exercise = 30, stand = 12 },   -- kcal / active minutes / hours
    EMSJob = "ambulance",                                 -- must match a key in Config.JOBServices
}

Tracking runs whether or not the watch is on screen — the rings record the day.

Mechanics

These change how the character behaves, and each switches off on its own.

SettingWhat it doesOff by
StepsCounts steps from distance walkedEnable = false
HeartRateIdle range, and a notification above HighAlertEnable = false
HeartRate.OverexertionDrains stamina and can ragdoll after Duration seconds above ThresholdEnable = false
ManualSOSSOS raised by hand from the Control CenterEnable = false
CrashDetectionLosing SpeedDelta km/h at once starts an EMS countdownEnable = false
FallDetectionFalling past HeightThreshold metres starts the same countdownEnable = false
config.lua
CrashDetection = {
    Enable      = true,
    SpeedDelta  = 80.0,   -- km/h lost in one instant
    Countdown   = 10,     -- seconds to cancel before EMS is called
    AutoCallEMS = true,
},

Setting Health.Enable = false turns all of it off in one go.

Weather

config.lua
Weather = { Enable = true },

Read out of the game world, so it agrees with the sky the player is under. Temperatures come from Config.Weather; config.json's Watch.weather.celsius picks the unit.

A custom inventory

Supported inventories tell the watch when an item moves. If yours does not, call this after any change:

exports["gksphone"]:RefreshWatchItem()

Without it the prop still catches up on its own, on the PropWearPoll interval.

Restart the phone

Both files are read at resource start, so restart gksphone after editing either one.

On this page