Hooks (Server-side)
Hooks
onPlayerConnecting
ทำงานเมื่อผู้เล่นทำการเชื่อมต่อกับเซิร์ฟเวอร์
function Hooks.onPlayerConnecting(payload)
---เปิดใช้งานฟังก์ชันด้านล่างนี้หากต้องการให้มีการหน่วงเวลาการเชื่อมต่อแบบสุ่ม
-- randomCooldown(payload.deferrals.update)
return true
end
ฟังก์ชัน randomCooldown
local function randomCooldown(deferUpdate)
local minWait <const> = 5 -- กำหนดคูลดาวน์ต่ำสุด (วินาที)
local maxWait <const> = 30 -- กำหนดคูลดาวน์สูงสุด (วินาที)
math.randomseed(os.time())
local waitTime <const> = math.random(minWait, maxWait)
for time = waitTime, 0, -1 do
deferUpdate(('⏳ โปรดรอ %d วินาที การเชื่อมต่อจะเริ่มต้นโดยอัตโนมัติ...'):format(time))
Citizen.Wait(1000)
end
end
- deferUpdate:
function- อัปเดตหรือส่งข้อความไปยังไคลเอนต์ที่เชื่อมต่อ
หากเปิดใช้งานฟังก์ชัน randomCooldown แนะนำให้ปิดใช้งานการกำหนดค่า connectionAttemptLimit
Parameters
- payload:
table<{ player: table, deferrals: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- deferrals:
table<{ [key]: function }>- ฟังก์ชันสำหรับการเลื่อนการเชื่อมต่อ (ดูข้อมูลเพิ่มเติมได้ที่ Deferring connections)
- update:
function- ส่งข้อความไปยังไคลเอนต์ที่เชื่อมต่อ
- presentCard:
function- ส่งข้อมูล Adaptive Card ไปยังไคลเอนต์ที่เชื่อมต่อ
- done:
function- สิ้นสุดกระบวนการ deferral โดยจำเป็นต้องรออย่างน้อยหนึ่ง tick ก่อนที่จะเรียกใช้ done
- หากระบุ
failureReasonการเชื่อมต่อจะถูกปฏิเสธ และไคลเอนต์จะเห็นข้อความที่ระบุเหตุผลไว้ หากไม่ระบุfailureReasonไคลเอนต์จะได้รับอนุญาตให้เข้าร่วมเซิร์ฟเวอร์
- handover:
function- อนุญาตให้กำหนดชุดของ endpoints สำหรับผู้เล่นในขณะที่กำลังเชื่อมต่อ
- update:
- ฟังก์ชันสำหรับการเลื่อนการเชื่อมต่อ (ดูข้อมูลเพิ่มเติมได้ที่ Deferring connections)
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ
- ตอบกลับ
onPlayerJoining
ทำงานเมื่อผู้เล่นกำลังเข้าร่วมกับเซิร์ฟเวอร์
function Hooks.onPlayerJoining(payload)
return true
end
Parameters
- payload:
table<{ player: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อกำลังเข้าร่วม
- tempId:
integer- Temp ID ของผู้เล่น
- netId:
integer- Net ID ของผู้เล่น
- identifier:
string|nil- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อกำลังเข้าร่วม
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ (เตะออกจากเซิร์ฟเวอร์)
- ตอบกลับ
onPlayerDataLoaded
ทำงานเมื่อผู้เล่นเชื่อมต่อและข้อมูลของผู้เล่นถูกโหลดแล้ว
function Hooks.onPlayerDataLoaded(payload)
return payload
end
Parameters
- payload:
table<{ [key]: any }>
Returns
- payload:
table<{ [key]: any }>
onPlayerConnectionSpam
ทำงานเมื่อผู้เล่นเชื่อมต่อบ่อยและเร็วเกินกำหนด
function Hooks.onPlayerConnectionSpam(payload)
return false
end
Parameters
- payload:
table<{ player: table, data: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>- ข้อมูลการเชื่อมต่อบ่อยและเร็วเกินกำหนด
- attempts:
integer- จำนวนครั้งที่พยายาม
- lastAttempt:
integer- พยายามครั้งสุดท้ายเวลา (Unix time)
- isBlocked:
boolean- ค่าเป็น
trueหากถูกบล็อคแล้ว
- ค่าเป็น
- reason:
string- เหตุผลที่ปฏิเสธการเชื่อมต่อ
- attempts:
- ข้อมูลการเชื่อมต่อบ่อยและเร็วเกินกำหนด
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ (รอคูลดาวน์ / บล็อกชั่วคราว)
- ตอบกลับ
onPlayerPingExceeded
ทำงานเมื่อผู้เล่นเชื่อมต่อและการตอบสนองของเครือข่ายผู้เล่นช้าเกินกำหนด
function Hooks.onPlayerPingExceeded(payload)
return false
end
Parameters
- payload:
table<{ player: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- netId:
integer- Net ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- ping:
integer- ค่า Ping ของผู้เล่น
- netId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ
- ตอบกลับ
onBannedHwidDetected
ทำงานเมื่อผู้เล่นเชื่อมต่อและตรวจพบ HWIDs ของผู้เล่นอื่นที่ถูกแบน
function Hooks.onBannedHwidDetected(payload)
return false
end
Parameters
- payload:
table<{ player: table, data: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- hwids:
table<{ [index]: string }>- ข้อมูล HWIDs ของผู้เล่นที่พบเมื่อเชื่อมต่อ
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>- ข้อมูลของผู้เล่นที่ถูกแบน
- matchedHwids:
table<{ [index]: string }>- ข้อมูล HWIDs ที่ตรงกัน
- identifier:
string- ตัวระบุของผู้เล่นที่ถูกแบน
- banId:
string- รหัสอ้างอิงการแบน
- banDetails:
table<{ [key]: any }>|nil
- matchedHwids:
- ข้อมูลของผู้เล่นที่ถูกแบน
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ
- ตอบกลับ
onBannedIdentifierDetected
ทำงานเมื่อผู้เล่นเชื่อมต่อและตรวจพบ Identifiers ของผู้เล่นที่ถูกแบน
function Hooks.onBannedIdentifierDetected(payload)
return false
end
Parameters
- payload:
table<{ player: table, data: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>- ข้อมูลการแบน
- status:
table<{ id: integer, name: string }>- ข้อมูลสถานะการถูกแบน
- banDetails:
table<{ [key]: any }>|nil
- status:
- ข้อมูลการแบน
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ
- ตอบกลับ
onPlayerInactiveDetected
ทำงานเมื่อผู้เล่นเชื่อมต่อและสถานะถูกตั้งเป็นระงับการใช้งานเนื่องจากไม่เข้าร่วมเซิร์ฟเวอร์ตามระยะเวลาที่กำหนด
function Hooks.onPlayerInactiveDetected(payload)
return false
end
Parameters
- payload:
table<{ player: table, data: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>- ข้อมูลการถูกระงับ
- status:
table<{ id: integer, name: string }>- ข้อมูลสถานะการถูกระงับ
- last_seen:
string- วันที่และเวลาที่พบผู้เล่นครั้งล่าสุด ในรูปแบบ
YYYY-MM-DD HH:MM:SSเช่น"2026-05-21 14:33:00"
- วันที่และเวลาที่พบผู้เล่นครั้งล่าสุด ในรูปแบบ
- limit_days:
integer
- status:
- ข้อมูลการถูกระงับ
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ
- ตอบกลับ
onPlayerAirtimeRejected
ทำงานเมื่อผู้เล่นเชื่อมต่อและ Airtime ไม่เพียงพอ (ระบบจำกัดเวลาในการเล่น โดยผู้เล่นจะต้องเติม Airtime เพื่อเพิ่มเวลาในการเล่น)
function Hooks.onPlayerAirtimeRejected(payload)
return false
end
Parameters
- payload:
table<{ player: table, data: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>- ข้อมูลแอร์ไทม์ของผู้เล่น
- airtime_left:
integer- จำนวนแอร์ไทม์คงเหลือของผู้เล่น
- airtime_left:
- ข้อมูลแอร์ไทม์ของผู้เล่น
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ
- ตอบกลับ
onPlayerBoundIdMismatch
ทำงานเมื่อผู้เล่นเชื่อมต่อและใช้งานบัญชีที่ผูกไว้ไม่ตรงกับฐานข้อมูล
function Hooks.onPlayerBoundIdMismatch(payload)
return false
end
Parameters
- payload:
table<{ player: table, data: table }>- ตารางข้อมูล
- player:
table<{ [key]: any }>- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- bindId:
string|nil- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>- ข้อมูลของผู้เล่น
- boundId:
string- ตัวระบุที่ผูกไว้กับตัวระบุหลัก บนฐานข้อมูล
- boundId:
- ข้อมูลของผู้เล่น
- player:
- ตารางข้อมูล
Returns
- allow:
boolean|nil- ตอบกลับ
trueหากอนุญาตให้เชื่อมต่อ - ตอบกลับ
false|nilหากต้องการยกเลิกการเชื่อมต่อ
- ตอบกลับ
onAddPlayerToQueue
ทำงานก่อนเพิ่มข้อมูลผู้เล่นไปยังระบบคิวรอเข้าร่วมเซิร์ฟเวอร์
function Hooks.onAddPlayerToQueue(payload)
return payload
end
Parameters
- payload:
table<{ [key]: any }>- ข้อมูลของผู้เล่นที่จะใช้งานภายในระบบคิว
- tempId:
integer- Temp ID ของผู้เล่น
- identifier:
string- ตัวระบุหลัก ของผู้เล่น
- name:
string- ชือของผู้เล่น
- points:
integer- จำนวนคิวพ้อยท์ของผู้เล่น
- position:
integer- ลำดับของผู้เล่นในคิว
- joinTime:
integer- เวลาที่ผู้เล่นเข้าร่วมคิว (Unix time)
- tempId:
- ข้อมูลของผู้เล่นที่จะใช้งานภายในระบบคิว
Returns
- payload:
table<{ [key]: any }>