7.8 KiB
Tower Configuration
This page explains all configuration options for the network tower system in codem-phone.
Overview
The tower system simulates realistic mobile network coverage across the map. Players will have varying signal strength depending on their proximity to towers, and certain apps require minimum signal levels to function.
Basic Settings
TowerConfig.Settings = {
enabled = false,
maxSignalBars = 4,
debug = false,
}
| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | false |
Enable/disable the network tower system |
maxSignalBars |
number | 4 |
Maximum signal bars a player can have |
debug |
boolean | false |
Shows tower zones visually for testing purposes |
Tower Definitions
Each tower is defined with coordinates, coverage radius, and status.
TowerConfig.Towers = {
{ coords = vector3(-76.33, -817.14, 326.18), radius = 3500.0, name = "Downtown Tower", enabled = true },
-- Add more towers...
}
| Property | Type | Description |
|---|---|---|
coords |
vector3 | Tower location coordinates (x, y, z) |
radius |
number | Coverage radius in game units |
name |
string | Tower name for identification |
enabled |
boolean | Whether this tower is active |
Default Towers
The configuration includes pre-defined towers covering Los Santos:
| Tower Name | Radius | Area |
|---|---|---|
| Downtown Tower | 3500.0 | Downtown Los Santos |
| Highway Tower | 2200.0 | Main Highway |
| North Tower | 900.0 | North of the map |
| Paleto Tower | 800.0 | Paleto Bay |
| Grapeseed Tower | 700.0 | Grapeseed |
| Mount Gordo Tower | 680.0 | Mount Gordo |
| Sandy Tower | 750.0 | Sandy Shores |
| Mount Chiliad Tower | 850.0 | Mount Chiliad |
| Prison Tower | 750.0 | Bolingbroke Penitentiary |
Dead Zones
Dead zones are areas with no signal coverage. These can be defined as polygon zones.
TowerConfig.DeadZones = {
{
name = "Tunnel #1",
type = "poly",
points = {
vector3(-2614.38, 3008.39, 11.69),
vector3(-2606.84, 3103.34, 14.42),
-- More points...
},
minZ = 11.0,
maxZ = 25.0,
enabled = true
}
}
| Property | Type | Description |
|---|---|---|
name |
string | Zone name for identification |
type |
string | Zone type (poly for polygon) |
points |
table | Array of vector3 points defining the polygon |
minZ |
number | Minimum Z height of the zone |
maxZ |
number | Maximum Z height of the zone |
enabled |
boolean | Whether this dead zone is active |
App Signal Requirements
Define minimum signal bars required for each app to function.
TowerConfig.AppRequirements = {
twix = 2,
message = 1,
mail = 1,
calls = 1,
videocall = 2,
bank = 2,
billing = 2,
appstore = 2,
appstore_download = 3,
home = 2,
selly = 2,
darkchat = 2,
valet = 2,
thunder = 2,
music = 1,
}
| App | Min. Bars | Description |
|---|---|---|
twix |
2 | Social media app |
message |
1 | Text messaging |
mail |
1 | |
calls |
1 | Voice calls |
videocall |
2 | Video calls |
bank |
2 | Banking app |
billing |
2 | Billing system |
appstore |
2 | Open App Store |
appstore_download |
3 | Download apps from store |
home |
2 | Home/housing app |
selly |
2 | Marketplace app |
darkchat |
2 | Dark web chat |
valet |
2 | Vehicle valet service |
thunder |
2 | Thunder app |
music |
1 | Music streaming |
Adding Custom Towers
To add a new tower, append to the TowerConfig.Towers table:
{ coords = vector3(X, Y, Z), radius = 500.0, name = "My Custom Tower", enabled = true },
Tips:
- Larger radius = more coverage area
- Downtown Tower has the largest radius (3500.0) as it covers the main city
- Adjust radius based on area population density
- Enable
debug = trueto visualize tower coverage zones
Adding Dead Zones
To create a dead zone (e.g., tunnels, underground areas):
{
name = "Underground Parking",
type = "poly",
points = {
vector3(X1, Y1, Z1),
vector3(X2, Y2, Z2),
vector3(X3, Y3, Z3),
-- Add more points to define the polygon shape
},
minZ = 0.0,
maxZ = 10.0,
enabled = true
}
Signal Calculation
Signal strength is calculated based on:
- Distance to nearest enabled tower
- Whether player is in a dead zone
- Tower's coverage radius
Players closer to tower centers receive stronger signals (more bars).
Exports
The tower system provides exports for use in other resources.
GetCurrentSignal
Returns the current signal strength (0 to maxSignalBars).
local signal = exports['codem-phone']:GetCurrentSignal()
print("Current signal:", signal) -- 0, 1, 2, 3, or 4
CanUseApp
Checks if an app can be used with current signal strength.
local canUseBank = exports['codem-phone']:CanUseApp('bank')
if canUseBank then
-- Player has enough signal for banking
else
-- Not enough signal
end
GetNearestTower
Returns information about the nearest tower.
local tower = exports['codem-phone']:GetNearestTower()
if tower then
print("Nearest tower:", tower.name)
print("Tower coords:", tower.coords)
print("Tower radius:", tower.radius)
end
IsInDeadZone
Checks if given coordinates are in a dead zone.
local playerCoords = GetEntityCoords(PlayerPedId())
local inDeadZone, zoneName = exports['codem-phone']:IsInDeadZone(playerCoords)
if inDeadZone then
print("Player is in dead zone:", zoneName)
end
GetTowerConfig
Returns the entire tower configuration table.
local config = exports['codem-phone']:GetTowerConfig()
print("Tower system enabled:", config.Settings.enabled)
print("Max signal bars:", config.Settings.maxSignalBars)
print("Total towers:", #config.Towers)
Export Summary
| Export | Parameters | Returns | Description |
|---|---|---|---|
GetCurrentSignal |
none | number | Current signal strength (0-4) |
CanUseApp |
appName (string) | boolean | Whether app can be used |
GetNearestTower |
none | table/nil | Nearest tower info |
IsInDeadZone |
coords (vector3) | boolean, string | Dead zone check |
GetTowerConfig |
none | table | Full tower configuration |