fivemweathertime-syncatmosphereimmersion
Weather และ Time Sync ใน FiveM — สร้าง Atmosphere ที่ Immersive
March 22, 2026
2 min read
136 views
Weather และ Time Sync ใน FiveM
Weather และเวลาที่ sync กันทั้ง server สร้าง shared experience และ atmosphere ที่ทำให้ RP น่าสนใจมากขึ้น
Basic Time Sync
-- server.lua
local serverTime = { hour = 12, minute = 0 }
local TIME_MULTIPLIER = 2 -- เวลาเร็วกว่าจริง 2x
Citizen.CreateThread(function()
while true do
Citizen.Wait(30000) -- อัพเดททุก 30 วินาที realtime
serverTime.minute = serverTime.minute + (TIME_MULTIPLIER)
if serverTime.minute >= 60 then
serverTime.minute = serverTime.minute - 60
serverTime.hour = serverTime.hour + 1
end
if serverTime.hour >= 24 then
serverTime.hour = 0
end
-- Broadcast ไปหาทุกคน
TriggerClientEvent('weather:syncTime', -1, serverTime.hour, serverTime.minute)
end
end)
-- ส่ง time ให้ player ที่เพิ่ง join
AddEventHandler('playerJoining', function()
Citizen.SetTimeout(3000, function()
TriggerClientEvent('weather:syncTime', source, serverTime.hour, serverTime.minute)
end)
end)
-- client.lua
RegisterNetEvent('weather:syncTime')
AddEventHandler('weather:syncTime', function(hour, minute)
NetworkOverrideClockTime(hour, minute, 0)
end)
Dynamic Weather System
-- server.lua
local weatherTypes = {
'EXTRASUNNY', 'CLEAR', 'CLOUDS', 'SMOG',
'FOGGY', 'OVERCAST', 'RAIN', 'THUNDER',
'CLEARING', 'NEUTRAL', 'SNOW', 'BLIZZARD'
}
local currentWeather = 'CLEAR'
local nextWeather = 'CLEAR'
local weatherTransition = false
-- เปลี่ยน weather แบบ random ทุก 15-45 นาที
local function ScheduleWeatherChange()
local delay = math.random(15, 45) * 60 * 1000
Citizen.SetTimeout(delay, function()
-- เลือก weather ใหม่ (bias ไปทาง weather ที่ make sense)
local weights = {
EXTRASUNNY = 15, CLEAR = 25, CLOUDS = 20,
OVERCAST = 15, RAIN = 15, THUNDER = 5,
FOGGY = 5
}
local total = 0
for _, w in pairs(weights) do total = total + w end
local roll = math.random(total)
local cumulative = 0
for weather, weight in pairs(weights) do
cumulative = cumulative + weight
if roll <= cumulative then
nextWeather = weather
break
end
end
TriggerClientEvent('weather:change', -1, nextWeather)
currentWeather = nextWeather
ScheduleWeatherChange() -- schedule ครั้งต่อไป
end)
end
ScheduleWeatherChange() -- เริ่ม loop
-- client.lua
local currentWeather = 'CLEAR'
RegisterNetEvent('weather:change')
AddEventHandler('weather:change', function(weather)
-- transition แบบ smooth
SetWeatherTypeOvertimePersist(weather, 30.0) -- เปลี่ยนใน 30 วินาที
currentWeather = weather
-- แจ้งผู้เล่น
local weatherLabels = {
CLEAR = 'ท้องฟ้าแจ่มใส',
RAIN = 'ฝนตก',
THUNDER = 'พายุฝนฟ้าคะนอง',
SNOW = 'หิมะตก',
FOGGY = 'หมอกหนา'
}
if weatherLabels[weather] then
exports['M2.Notify']:Notify('info', 'สภาพอากาศ: ' .. weatherLabels[weather], 4000)
end
end)
Season System
-- server.lua
local seasons = {
{ name = 'ฤดูร้อน', weatherWeights = { EXTRASUNNY = 40, CLEAR = 40, RAIN = 20 } },
{ name = 'ฤดูฝน', weatherWeights = { RAIN = 40, THUNDER = 20, OVERCAST = 40 } },
{ name = 'ฤดูหนาว', weatherWeights = { CLOUDS = 30, FOGGY = 30, CLEAR = 40 } }
}
local currentSeason = 1
-- เปลี่ยน season ทุก 7 วัน real-time
local SEASON_DURATION = 7 * 24 * 60 * 60 * 1000
Citizen.SetTimeout(SEASON_DURATION, function()
currentSeason = (currentSeason % #seasons) + 1
TriggerClientEvent('weather:season', -1, seasons[currentSeason].name)
end)
Blackout System (Event)
-- Server: เปิด/ปิดไฟทั้งเมือง
RegisterCommand('blackout', function(source, args)
if not IsPlayerAceAllowed(tostring(source), 'admin') then return end
local state = args[1] == 'on'
TriggerClientEvent('weather:blackout', -1, state)
end, false)
-- Client
RegisterNetEvent('weather:blackout')
AddEventHandler('weather:blackout', function(state)
SetArtificialLightsState(state) -- ปิด/เปิดไฟถนน
SetArtificialLightsStateAffectsVehicles(state)
end)
สรุป
Weather และ time sync ที่ดีสร้าง shared world ที่ผู้เล่นอยู่ร่วมกันได้อย่างสมจริง dynamic weather ยิ่งเพิ่ม unpredictability ที่ทำให้ทุกเซสชั่น gameplay ไม่เหมือนกัน
Related Articles
Breaking: GTA Online อัพเดท "Money Fronts" — FiveM Server Owners ต้องทำอะไร?
Rockstar ปล่อย GTA Online อัพเดท Money Fronts มีผลกระทบต่อ FiveM servers บางส่วน นี่คือสิ่งที่ต้องทำทันทีหลังอัพเดท
Community Spotlight: Script และ Projects ที่น่าสนใจจาก FiveM Community
รวม scripts, tools และ projects ที่โดดเด่นจาก FiveM community ในช่วงที่ผ่านมา ตั้งแต่ free resources ถึง open-source projects
txAdmin อัพเดทใหม่ — Dashboard, Diagnostics และ Ban System ที่ดีขึ้น
txAdmin ซึ่งตอนนี้เป็นส่วนหนึ่งของ Cfx.re อย่างเป็นทางการ ได้รับการอัพเดทครั้งใหญ่ มี features ใหม่ที่ทำให้ Server Management ง่ายขึ้นมาก