شركاء التطوير
الربط مع سكربتات Agency
تبني سكربت FiveM خاصًا بك وتريد ربطه بسكربتاتنا؟ هنا كل تصدير وكل حدث عام، ومع كل واحد منها مقطع Lua جاهز للنسخ.
التصديرات تتيح لسكربتك استدعاء دالة داخل سكربتنا: exports['script-name']:FunctionName(args)، على العميل وعلى الخادم سواء. أما الأحداث فتعمل بالاتجاه المعاكس: تُطلق بـ TriggerEvent أو TriggerServerEvent، ويُستمع إليها بـ RegisterNetEvent.
01Agency-Phone
هاتف متكامل متعدد الأطر مع الرسائل والمكالمات والخلاصة الاجتماعية والبريد والكاميرا والمحفظة والدفع عبر AgencyPay.
استخدمه داخل أي سكربت متجر أو سطو أو وظيفة تريد فيه عملية دفع أنيقة داخل الهاتف بدلًا من خصم المال فورًا. ومثالي أيضًا للإشعارات داخل اللعبة بأزرار قبول ورفض (مثل طلبات رحلات التاكسي أو بلاغات الإرسال).
تصديرات العميل
IsPhoneOpen()تُرجع true إذا كانت واجهة الهاتف مفتوحة حاليًا.
اعرض المثال
يتجنب فتح قائمة مخصّصة ما دامت واجهة الهاتف ظاهرة على الشاشة.
RegisterCommand('openmymenu', function()
if exports['agency-phone']:IsPhoneOpen() then
return
end
TriggerEvent('myresource:openMenu')
end)IsPhonePoweredOn()تُرجع true إذا كان الهاتف قيد التشغيل (وfalse إذا أطفأه اللاعب).
اعرض المثال
يوقف أعمال المزامنة في الخلفية ما دام اللاعب قد أطفأ الهاتف.
CreateThread(function()
while true do
Wait(2000)
if not exports['agency-phone']:IsPhonePoweredOn() then
print('Phone off, pausing background sync')
end
end
end)GetPhoneData()تُرجع جدول PhoneData الكامل على جهة العميل (حالة الفتح، البيانات الوصفية وغيرها).
اعرض المثال
يطبع جدول بيانات الهاتف الكامل لدى العميل لأغراض التصحيح.
RegisterCommand('phonedebug', function()
local data = exports['agency-phone']:GetPhoneData()
print(json.encode(data, { indent = true }))
end)GetPhonePropEntity()تُرجع مُعرّف الكيان لمجسم الهاتف المحمول في اليد، أو 0 إذا لم يكن ظاهرًا.
اعرض المثال
يخفي كيان مجسم الهاتف لفترة قصيرة دون التأثير على المنطق الأساسي.
CreateThread(function()
Wait(500)
local prop = exports['agency-phone']:GetPhonePropEntity()
if prop ~= 0 and DoesEntityExist(prop) then
SetEntityVisible(prop, false, false)
end
end)IsPhoneExpanded()اسم بديل لـ IsPhoneOpen() أُبقي عليه للتوافق مع الإصدارات السابقة.
اعرض المثال
اسم بديل قديم يُستخدم لمنع لعبة مصغّرة ما دام الهاتف مفتوحًا.
AddEventHandler('myresource:beforeMinigame', function()
if exports['agency-phone']:IsPhoneExpanded() then
TriggerEvent('chat:addMessage', { args = { 'Close phone first' } })
return
end
end)HasCarrierContract()تُرجع true عندما يكون لدى اللاعب باقة بيانات فعّالة لدى المشغّل.
اعرض المثال
ينبّه اللاعب حين لا توجد باقة بيانات فعّالة لدى المشغّل.
RegisterCommand('checkdata', function()
if not exports['agency-phone']:HasCarrierContract() then
TriggerEvent('chat:addMessage', { args = { 'No data plan, buy one in the store app' } })
end
end)GetPhoneState()تُرجع الجدول { isOpen, poweredOn, syncEnabled } الذي يلخّص حالة الهاتف الحالية.
اعرض المثال
يخزّن حالة الهاتف على الخادم فقط حين يكون مفتوحًا ومشغّلًا ويزامن.
AddEventHandler('myresource:saveProfile', function()
local state = exports['agency-phone']:GetPhoneState()
if state.isOpen and state.poweredOn and state.syncEnabled then
TriggerServerEvent('myresource:server:cachePhoneState', state)
end
end)HasPhone()تُرجع true إذا كان عنصر الهاتف المُعَد موجودًا في مخزون اللاعب.
اعرض المثال
يمنع أمر مكالمة الطوارئ ما لم يكن اللاعب يحمل عنصر الهاتف.
RegisterCommand('callemergency', function()
if not exports['agency-phone']:HasPhone() then
TriggerEvent('chat:addMessage', { args = { 'You need a phone first' } })
return
end
TriggerEvent('myresource:client:openEmergency')
end)RegisterAgencyPayPoint(id, data)يسجّل أثناء التشغيل جهاز دفع Agency Pay عند إحداثية معيّنة (علامات، رمز على الخريطة، بيانات الدفع).
اعرض المثال
يُنشئ أثناء التشغيل جهاز دفع Agency Pay لمحاسبة ورشة ميكانيكي.
CreateThread(function()
exports['agency-phone']:RegisterAgencyPayPoint('mechanic_main', {
coords = vector3(-211.74, -1314.59, 31.29),
label = 'Mechanic Pay Point',
amount = 250,
receiver = 'mechanic'
})
end)RemoveAgencyPayPoint(id)يزيل جهاز دفع Agency Pay مسجّلًا سابقًا بواسطة المعرّف.
اعرض المثال
يزيل نقطة الدفع المسجّلة حين يغلق المتجر ليلًا.
AddEventHandler('myresource:onShopClosed', function(shopId)
exports['agency-phone']:RemoveAgencyPayPoint('mechanic_main')
print('Removed pay point for shop ' .. shopId)
end)StartAgencyPayCheckout(data)يفتح الهاتف عند الحاجة ويبدأ عملية دفع Agency Pay ببيانات الدفع المُمرَّرة.
اعرض المثال
يفتح الهاتف ويبدأ عملية دفع صغيرة لإكرامية عبر Agency Pay.
RegisterCommand('paytip', function()
exports['agency-phone']:StartAgencyPayCheckout({
amount = 25,
receiver = 'staff_tip_jar',
label = 'Staff tip',
memo = 'Thanks for great service'
})
end)StartCall(contactData)يبدأ مكالمة صادرة إلى جهة الاتصال المُمرَّرة ({ name, number, ... }).
اعرض المثال
يبدأ مكالمة صادرة إلى جهة اتصال الإرسال عند وصول حدث.
RegisterNetEvent('myresource:client:incomingDispatch', function(payload)
exports['agency-phone']:StartCall({
name = payload.callerName or 'Dispatch',
number = payload.callerNumber or '911',
anonymous = false
})
end)PhoneNotification(title, text, icon, color, timeout, acceptIcon, denyIcon)يعرض إشعارًا بزرّي قبول ورفض، وينتظر حتى يستجيب المستخدم ثم يُرجع true أو false.
اعرض المثال
يعرض إشعار هاتف مانعًا بزرّي قبول ورفض لعقد سحب مركبة.
CreateThread(function()
local accepted = exports['agency-phone']:PhoneNotification(
'Tow request', 'Accept the contract?', 'truck', '#FF8800', 15000, 'check', 'x'
)
if accepted then
TriggerServerEvent('myresource:server:acceptTow')
end
end)RegisterApp(config)يضع تطبيقًا من موردك الخاص على الشاشة الرئيسية للهاتف وفي Store. يُرجع true، أو false مع رسالة خطأ. راجع تطبيقات مخصصة.
UnregisterApp(id)يزيل تطبيقًا أُضيف عبر RegisterApp. يحدث ذلك تلقائيًا عند توقّف المورد الذي سجّله.
GetRegisteredApps()يُرجع جدول كل التطبيقات التي سجّلتها موارد أخرى، مفهرسًا حسب المعرّف.
ClosePhone()يغلق الهاتف، مثلًا قبل فتح واجهتك الخاصة.
IsPhoneRadioActive()يُرجع قيمتين: true ما دام راديو الهاتف يعمل، والمحطة التي تُبث حاليًا.
StopPhoneRadio()يوقف راديو الهاتف.
تصديرات الخادم
SendMail(identifier, mailData)يرسل بريدًا إلى صندوق البريد الرئيسي للاعب عبر المعرّف (ويُرجع نجاح العملية).
اعرض المثال
يرسل بريد إيصال طلب إلى لاعب عبر معرّفه الأساسي.
RegisterNetEvent('myresource:server:sendReceipt', function(targetId)
local identifier = GetPlayerIdentifier(targetId, 0)
exports['agency-phone']:SendMail(identifier, {
sender = '[email protected]',
subject = 'Your receipt',
body = 'Thanks for your purchase!'
})
end)AddChirp(chirpData)يضيف منشورًا في خلاصة Pulse باسم السكربت ({ identifier, firstName, lastName, message, postId }).
اعرض المثال
ينشر إعلان مكافأة في Chirper من حدث على الخادم.
RegisterNetEvent('myresource:server:postBounty', function(targetName)
local src = source
exports['agency-phone']:AddChirp({
identifier = GetPlayerIdentifier(src, 0),
firstName = 'Bounty',
lastName = 'Office',
message = 'Wanted: ' .. targetName,
postId = ('bounty_%s'):format(GetGameTimer())
})
end)usePhone(event, item, inventory, slot, data)خطّاف ox_inventory يُسجَّل عند اكتشاف ESX مع ox_inventory؛ ويفتح الهاتف لصاحب المخزون.
اعرض المثال
يربط حدث usingItem في ox_inventory لفتح الهاتف عبر مساعد التكامل.
exports.ox_inventory:registerHook('usingItem', function(payload)
if payload.item.name ~= 'phone' then return end
return exports['agency-phone']:usePhone('inventory', payload.item, payload.inventory, payload.slot)
end, { itemFilter = { phone = true } })VerifyAgencyPayCharge(source, requestId, minAmount)يؤكّد على الخادم أن هذا اللاعب دفع عملية Agency Pay بهذا المعرّف خلال آخر 60 ثانية، بمبلغ لا يقل عن minAmount، ثم يستهلك الدفعة لتُحتسب مرة واحدة فقط. requestId هو المعرّف الذي مرّرته إلى StartAgencyPayCheckout. يُرجع true والمبلغ، أو false. استدعِه قبل تسليم البضاعة.
الأحداث
agency-phone:client:notifyيعرض إشعارًا على الهاتف (title, text, icon, color, timeout, silent).
اعرض المثال
يعرض تنبيهًا غير مانع على الهاتف بأن مركبة اللاعب جاهزة.
TriggerEvent('agency-phone:client:notify', 'Heads up', 'Vehicle ready for pickup', 'car', '#22cc88', 5000, false)agency-phone:client:usePhoneItemيبدأ فتح الهاتف عند استخدام عنصر الهاتف من المخزون.
اعرض المثال
يمرّر حدث استخدام عنصر مخزون مخصّص إلى عملية فتح الهاتف.
AddEventHandler('myresource:client:onItemUsed', function(itemName)
if itemName == 'phone' then
TriggerEvent('agency-phone:client:usePhoneItem')
end
end)agency-phone:client:openAppيطلب من الهاتف الانتقال إلى تطبيق مخصّص بواسطة المعرّف (تستخدمه وحدات التطبيقات).
اعرض المثال
ينقل الهاتف مباشرة إلى تطبيق بنكي مخصّص بواسطة معرّف التطبيق.
RegisterCommand('openbank', function()
TriggerEvent('agency-phone:client:openApp', 'banking')
end)agency-phone:client:newMailNotifyيُعلم العميل ببريد وصل للتو.
اعرض المثال
يستمع لإشعارات البريد الجديدة ويسجّلها لأغراض التصحيح.
AddEventHandler('agency-phone:client:newMailNotify', function(mail)
print(('New mail from %s: %s'):format(mail.sender, mail.subject))
end)agency-phone:server:requestPhoneDataيطلب مزامنة جديدة لبيانات الهاتف للاعب المُستدعي.
اعرض المثال
يطلب من الخادم إرسال نسخة جديدة من مزامنة بيانات الهاتف.
RegisterCommand('refreshphone', function()
TriggerServerEvent('agency-phone:server:requestPhoneData')
end)agency-phone:server:cancelCallيلغي مكالمة جارية أو ينهيها.
اعرض المثال
يُنهي مكالمة جارية من اختصار مفاتيح مخصّص أو أمر دردشة.
RegisterCommand('hangup', function()
TriggerServerEvent('agency-phone:server:cancelCall')
end)agency-phone:server:sendMessageيرسل رسالة SMS (newMsg, targetNumber).
اعرض المثال
يرسل بسرعة رسالة SMS إلى رقم هاتف مستهدف من إدخال الدردشة.
RegisterCommand('quicksms', function(_, args)
local target, msg = args[1], table.concat(args, ' ', 2)
TriggerServerEvent('agency-phone:server:sendMessage', { message = msg }, target)
end)agency-phone:server:saveSettingيحفظ للاعب إعدادًا واحدًا من إعدادات الهاتف كمفتاح وقيمة.
اعرض المثال
يحفظ إعدادًا واحدًا للهاتف كلما بدّله المستخدم على جهة العميل.
AddEventHandler('myresource:client:onSettingChanged', function(key, value)
TriggerServerEvent('agency-phone:server:saveSetting', key, value)
end)agency-phone:server:airdropPayينفّذ تحويلًا عبر Agency Airdrop إلى لاعب قريب.
اعرض المثال
يبدأ تحويل Agency Airdrop إلى لاعب قريب بالمبلغ المكتوب.
RegisterCommand('airdrop', function(_, args)
local amount = tonumber(args[1]) or 0
TriggerServerEvent('agency-phone:server:airdropPay', amount, 'Tip via airdrop')
end)agency-phone:server:buyDataPlanيشتري باقة بيانات لدى المشغّل للاعب (price, planName).
اعرض المثال
يشتري باقة بيانات مختارة بعد أن يختارها اللاعب في واجهة مخصّصة.
AddEventHandler('myresource:client:onPlanSelected', function(plan)
TriggerServerEvent('agency-phone:server:buyDataPlan', plan.price, plan.name)
end)agency-phone:dispatch:createيُنشئ بلاغًا للإرسال من مكالمة طوارئ أو رسالة SMS طارئة.
اعرض المثال
يُنشئ بلاغ إرسال على الهاتف من مكالمة طوارئ واردة.
RegisterNetEvent('myresource:server:dispatchFromCall', function(payload)
TriggerEvent('agency-phone:dispatch:create', {
source = source,
coords = payload.coords,
type = 'robbery',
title = '24/7 Robbery'
})
end)02Agency-Pad
جهاز لوحي بنظام AgencyOS مع منظومة تطبيقات كاملة. سجّل تطبيقاتك الخاصة عبر config.lua.
مثالي للوحات تحكم المشرفين وتطبيقات إدارة الأعمال وخرائط مناطق العصابات أو أي واجهة مخصّصة يحتاجها لاعبوك داخل GTA، فهي تعمل داخل هيكل جهاز لوحي أنيق دون عمل إضافي.
تصديرات العميل
IsPadOpen()تُرجع true إذا كانت واجهة الجهاز اللوحي مفتوحة حاليًا.
اعرض المثال
يتجنب إعادة فتح واجهة جهاز لوحي مخصّصة إذا كان الجهاز اللوحي في اللعبة مفتوحًا بالفعل.
RegisterCommand('opentablet', function()
if exports['agency-pad']:IsPadOpen() then
return
end
TriggerEvent('myresource:openTablet')
end)IsPadPoweredOn()تُرجع true إذا كان الجهاز اللوحي قيد التشغيل.
اعرض المثال
يوقف استطلاع الأسطول ما دام اللاعب قد أطفأ الجهاز اللوحي.
CreateThread(function()
while true do
Wait(3000)
if not exports['agency-pad']:IsPadPoweredOn() then
print('Tablet powered down, pausing fleet poll')
end
end
end)GetPadData()تُرجع جدول PadData الكامل على جهة العميل.
اعرض المثال
يطبع جدول بيانات الجهاز اللوحي الكامل لدى العميل للفحص.
RegisterCommand('paddebug', function()
local data = exports['agency-pad']:GetPadData()
print(json.encode(data, { indent = true }))
end)GetPadPropEntity()تُرجع مُعرّف الكيان لمجسم الجهاز اللوحي في اليد، أو 0 إذا لم يكن ظاهرًا.
اعرض المثال
يخفي كيان مجسم الجهاز اللوحي المحمول لفترة قصيرة أثناء مشهد سينمائي مخصّص.
CreateThread(function()
Wait(750)
local prop = exports['agency-pad']:GetPadPropEntity()
if prop ~= 0 and DoesEntityExist(prop) then
SetEntityVisible(prop, false, false)
end
end)IsPadExpanded()اسم بديل لـ IsPadOpen() أُبقي عليه للتوافق مع الإصدارات السابقة.
اعرض المثال
اسم بديل قديم يُستخدم لمنع لعبة مصغّرة ما دام الجهاز اللوحي مفتوحًا.
AddEventHandler('myresource:client:beforeMinigame', function()
if exports['agency-pad']:IsPadExpanded() then
return
end
TriggerEvent('myresource:client:startMinigame')
end)HasCarrierContract()تُرجع true عندما يكون لدى اللاعب باقة بيانات فعّالة على الجهاز اللوحي.
اعرض المثال
ينبّه اللاعب إن لم تكن هناك باقة بيانات فعّالة على الجهاز اللوحي.
RegisterCommand('checkpaddata', function()
if not exports['agency-pad']:HasCarrierContract() then
TriggerEvent('chat:addMessage', { args = { 'No tablet data plan, buy one in Settings' } })
end
end)GetPadState()تُرجع الجدول { isOpen, poweredOn, syncEnabled } الذي يلخّص حالة الجهاز اللوحي الحالية.
اعرض المثال
يخزّن حالة الجهاز اللوحي على الخادم فقط حين يكون مفتوحًا ومشغّلًا.
AddEventHandler('myresource:saveSession', function()
local state = exports['agency-pad']:GetPadState()
if state.isOpen and state.poweredOn then
TriggerServerEvent('myresource:server:cachePadState', state)
end
end)HasPad()تُرجع true إذا كان عنصر الجهاز اللوحي المُعَد موجودًا في مخزون اللاعب.
اعرض المثال
يمنع أمر واجهة الإرسال ما لم يكن اللاعب يحمل عنصر الجهاز اللوحي.
RegisterCommand('opendispatch', function()
if not exports['agency-pad']:HasPad() then
TriggerEvent('chat:addMessage', { args = { 'You need a tablet first' } })
return
end
TriggerEvent('myresource:client:openDispatch')
end)RegisterAgencyPayPoint(id, data)يسجّل أثناء التشغيل جهاز دفع Agency Pay عند إحداثية معيّنة (علامات، رمز على الخريطة، بيانات الدفع).
اعرض المثال
يُنشئ أثناء التشغيل جهاز دفع Agency Pay في ردهة المستشفى للفوترة.
CreateThread(function()
exports['agency-pad']:RegisterAgencyPayPoint('hospital_lobby', {
coords = vector3(307.7, -1433.4, 30.0),
label = 'Hospital Bill',
amount = 500,
receiver = 'medical'
})
end)RemoveAgencyPayPoint(id)يزيل جهاز دفع Agency Pay مسجّلًا سابقًا بواسطة المعرّف.
اعرض المثال
يزيل نقطة دفع مسجّلة للجهاز اللوحي حين يغلق موقعها.
AddEventHandler('myresource:onLocationClosed', function(locationId)
exports['agency-pad']:RemoveAgencyPayPoint(locationId)
end)StartAgencyPayCheckout(data)يفتح الجهاز اللوحي عند الحاجة ويبدأ عملية دفع Agency Pay ببيانات الدفع المُمرَّرة.
اعرض المثال
يفتح الجهاز اللوحي ويبدأ عملية دفع Agency Pay لضريبة العقار.
RegisterCommand('paybill', function()
exports['agency-pad']:StartAgencyPayCheckout({
amount = 1500,
receiver = 'gov_taxes',
label = 'Property tax',
memo = 'Quarterly tax'
})
end)StartCall(contactData)يبدأ من الجهاز اللوحي مكالمة صادرة إلى جهة الاتصال المُمرَّرة ({ name, number, ... }).
اعرض المثال
يبدأ مكالمة صادرة من الجهاز اللوحي عند وصول حدث إرسال.
RegisterNetEvent('myresource:client:dispatchOnTablet', function(payload)
exports['agency-pad']:StartCall({
name = payload.name or 'Field Agent',
number = payload.number,
anonymous = false
})
end)PhoneNotification(title, text, icon, color, timeout, acceptIcon, denyIcon)يعرض إشعارًا بزرّي قبول ورفض، وينتظر حتى يستجيب المستخدم ثم يُرجع true أو false.
اعرض المثال
يعرض على الجهاز اللوحي إشعارًا مانعًا بزرّي قبول ورفض لبدء مهمة توصيل.
CreateThread(function()
local accepted = exports['agency-pad']:PhoneNotification(
'Mission ready', 'Start the delivery now?', 'box', '#3399ff', 12000, 'check', 'x'
)
if accepted then
TriggerServerEvent('myresource:server:startDelivery')
end
end)RegisterApp(config)يضع تطبيقًا من موردك الخاص على الشاشة الرئيسية للجهاز اللوحي وفي Store. يُرجع true، أو false مع رسالة خطأ.
UnregisterApp(id)يزيل تطبيقًا أُضيف عبر RegisterApp.
GetRegisteredApps()يُرجع جدول كل التطبيقات التي سجّلتها موارد أخرى، مفهرسًا حسب المعرّف.
ClosePad()يغلق الجهاز اللوحي، مثلًا قبل فتح واجهتك الخاصة.
ClosePhone()مثل ClosePad()، لكن بالاسم الذي يستخدمه Agency Phone، ليعمل نفس كود التكامل مع الاثنين.
IsPhoneRadioActive()يُرجع قيمتين: true ما دام راديو الجهاز اللوحي يعمل، والمحطة التي تُبث حاليًا.
StopPhoneRadio()يوقف راديو الجهاز اللوحي.
تصديرات الخادم
SendMail(identifier, mailData)يرسل بريدًا إلى صندوق البريد الرئيسي للاعب عبر المعرّف (ويُرجع نجاح العملية).
اعرض المثال
يرسل بريد إشعار فاتورة إلى لاعب عبر معرّفه.
RegisterNetEvent('myresource:server:sendInvoiceMail', function(targetId)
local identifier = GetPlayerIdentifier(targetId, 0)
exports['agency-pad']:SendMail(identifier, {
sender = '[email protected]',
subject = 'New invoice available',
body = 'Open the tablet to review your invoice.'
})
end)usePad(event, item, inventory, slot, data)خطّاف ox_inventory يُسجَّل عند اكتشاف ESX مع ox_inventory؛ ويفتح الجهاز اللوحي لصاحب المخزون.
اعرض المثال
يربط ox_inventory لفتح الجهاز اللوحي عبر مساعد التكامل.
exports.ox_inventory:registerHook('usingItem', function(payload)
if payload.item.name ~= 'tablet' then return end
return exports['agency-pad']:usePad('inventory', payload.item, payload.inventory, payload.slot)
end, { itemFilter = { tablet = true } })usePhone(event, item, inventory, slot, data)خطّاف ox_inventory لمعرّف عنصر الهاتف القديم؛ ويفتح الجهاز اللوحي لصاحب المخزون.
اعرض المثال
يوجّه عنصر الهاتف القديم في المخزون لفتح واجهة الجهاز اللوحي بدلًا منه.
exports.ox_inventory:registerHook('usingItem', function(payload)
if payload.item.name ~= 'phone' then return end
return exports['agency-pad']:usePhone('inventory', payload.item, payload.inventory, payload.slot)
end, { itemFilter = { phone = true } })GetMarketPrices()يُرجع الأسعار الحالية للأسهم والعملات المشفرة، مرتبة حسب معرّف السوق.
PushPadData(source)يرسل نسخة محدّثة من بيانات الجهاز اللوحي إلى جهاز هذا اللاعب. يُرجع false إذا تعذّر إنشاؤها.
الأحداث
agency-pad:client:notifyيعرض إشعارًا على الجهاز اللوحي (title, text, icon, color, timeout, silent).
اعرض المثال
يعرض تنبيهًا غير مانع على الجهاز اللوحي عن مهمة فُتحت حديثًا.
TriggerEvent('agency-pad:client:notify', 'Job update', 'New mission unlocked', 'briefcase', '#22cc88', 5000, false)agency-pad:client:usePadItemيفتح الجهاز اللوحي عند استخدام العنصر من المخزون.
اعرض المثال
يمرّر حدث استخدام عنصر مخزون مخصّص إلى عملية فتح الجهاز اللوحي.
AddEventHandler('myresource:client:onItemUsed', function(itemName)
if itemName == 'tablet' then
TriggerEvent('agency-pad:client:usePadItem')
end
end)agency-pad:client:openAppيطلب من الجهاز اللوحي الانتقال إلى تطبيق مخصّص بواسطة المعرّف.
اعرض المثال
ينقل الجهاز اللوحي مباشرة إلى تطبيق مخصّص لإدارة الأسطول.
RegisterCommand('openfleet', function()
TriggerEvent('agency-pad:client:openApp', 'fleet')
end)agency-pad:client:newMailNotifyيُعلم العميل ببريد وصل للتو.
اعرض المثال
يستمع لإشعارات بريد الجهاز اللوحي الجديدة ويسجّلها محليًا.
AddEventHandler('agency-pad:client:newMailNotify', function(mail)
print(('Tablet mail from %s: %s'):format(mail.sender, mail.subject))
end)agency-pad:client:hourlyPaycheckيُعلم العميل بدفعة الراتب الساعية من الشركة.
اعرض المثال
يتفاعل مع حدث الراتب الساعي للشركة من الجهاز اللوحي.
AddEventHandler('agency-pad:client:hourlyPaycheck', function(payload)
print(('Hourly paycheck: $%s from %s'):format(payload.amount, payload.businessName))
end)agency-pad:server:requestPadDataيطلب مزامنة جديدة لبيانات الجهاز اللوحي للاعب المُستدعي.
اعرض المثال
يطلب من الخادم إرسال مزامنة جديدة لبيانات الجهاز اللوحي إلى اللاعب.
RegisterCommand('refreshpad', function()
TriggerServerEvent('agency-pad:server:requestPadData')
end)agency-pad:server:sendMessageيرسل رسالة SMS (newMsg, targetNumber).
اعرض المثال
يرسل SMS من الجهاز اللوحي عبر أمر مخصّص ووسيط للرقم.
RegisterCommand('quicksmsTab', function(_, args)
local target, msg = args[1], table.concat(args, ' ', 2)
TriggerServerEvent('agency-pad:server:sendMessage', { message = msg }, target)
end)agency-pad:server:airdropPayينفّذ تحويلًا عبر Agency Airdrop إلى لاعب قريب.
اعرض المثال
يبدأ تحويل Agency Airdrop إلى لاعبين قريبين من الجهاز اللوحي.
RegisterCommand('airdroppad', function(_, args)
local amount = tonumber(args[1]) or 0
TriggerServerEvent('agency-pad:server:airdropPay', amount, 'Tablet airdrop')
end)agency-pad:server:buyDataPlanيشتري باقة بيانات لدى المشغّل للاعب.
اعرض المثال
يشتري باقة بيانات مختارة للجهاز اللوحي بعد أن يختارها اللاعب في واجهة مخصّصة.
AddEventHandler('myresource:client:padPlanSelected', function(plan)
TriggerServerEvent('agency-pad:server:buyDataPlan', plan.price, plan.name)
end)agency-pad:dispatch:createيُنشئ على الجهاز اللوحي بلاغًا للإرسال من مكالمة طوارئ أو رسالة SMS طارئة.
اعرض المثال
يُنشئ بلاغ إرسال على الجهاز اللوحي من مكالمة طوارئ واردة.
RegisterNetEvent('myresource:server:padDispatchFromCall', function(payload)
TriggerEvent('agency-pad:dispatch:create', {
source = source,
coords = payload.coords,
type = 'medical',
title = 'Medical assistance'
})
end)agency-pad:server:biz:createيُنشئ شركة أو منظمة جديدة للاعب.
اعرض المثال
يُنشئ إدخال شركة جديدة من أمر مخصّص داخل اللعبة.
RegisterCommand('startbiz', function()
TriggerServerEvent('agency-pad:server:biz:create', {
name = 'Bennys Repair',
type = 'mechanic',
location = 'sandy_shores'
})
end)agency-pad:server:biz:adminCreateيُنشئ المشرف شركة نيابةً عن لاعب آخر.
اعرض المثال
يمرّر أمر مشرف لإنشاء شركة نيابةً عن لاعب آخر.
RegisterNetEvent('myresource:server:adminCreateBiz', function(targetSrc, payload)
TriggerEvent('agency-pad:server:biz:adminCreate', targetSrc, payload)
end)agency-pad:server:biz:startMissionيبدأ للاعب مهمة شركة مُعدّة مسبقًا.
اعرض المثال
يبدأ مهمة شركة مُعدّة للاعب المُستدعي.
RegisterCommand('bizmission', function()
TriggerServerEvent('agency-pad:server:biz:startMission', {
bizId = 12,
missionId = 'delivery_route_a'
})
end)agency-pad:server:applyToListingيرسل طلب توظيف إلى إعلان وظيفة لدى شركة.
اعرض المثال
يرسل طلب توظيف إلى إعلان شركة على الجهاز اللوحي بواسطة المعرّف.
RegisterCommand('apply', function(_, args)
local listingId = tonumber(args[1])
TriggerServerEvent('agency-pad:server:applyToListing', listingId, {
coverNote = 'Available immediately'
})
end)agency-pad:server:createMechanicInvoiceيُنشئ مسودة فاتورة ميكانيكي.
اعرض المثال
يُنشئ مسودة فاتورة ميكانيكي للوحة مركبة ومبلغ معيّنين.
RegisterCommand('mechinvoice', function(_, args)
TriggerServerEvent('agency-pad:server:createMechanicInvoice', {
plate = args[1],
amount = tonumber(args[2]) or 250,
notes = 'Brake replacement'
})
end)agency-pad:server:sendMechanicInvoicePayيرسل فاتورة ميكانيكي إلى عميل للدفع.
اعرض المثال
يرسل فاتورة ميكانيكي نهائية إلى العميل للدفع.
AddEventHandler('myresource:client:onInvoiceConfirmed', function(invoice)
TriggerServerEvent('agency-pad:server:sendMechanicInvoicePay', invoice.id, invoice.targetSrc)
end)agency-pad:server:mdtCreateInvoiceيُنشئ نظام MDT مخالفة أو فاتورة لمواطن.
اعرض المثال
يُنشئ مخالفة أو فاتورة MDT لمواطن من حدث شبكي مخصّص.
RegisterNetEvent('myresource:server:mdtFine', function(targetSrc, amount, reason)
TriggerEvent('agency-pad:server:mdtCreateInvoice', {
target = targetSrc,
amount = amount,
reason = reason,
officer = source
})
end)03Agency-Watch
الآن مع AgencyOS27: تحديث مجاني لكل من يملك الساعة بالفعل. ساعة ذكية حقيقية لـ FiveM، وليست مجرد HUD. عشرة أوجه للساعة، واستوديو للهيكل والسوار والألوان، وحلقات النشاط، وساعة إيقاف، ومؤقت، ومنبّه، وطقس، وبوصلة، وعداد سرعة، وأربع ألعاب، ومركز تحكم ومتجر تطبيقات، وكل ذلك يعمل دون أي مورد آخر. يجلس Angy على التاج ويدير الساعة عند الطلب، بقواعد ثابتة ودون أي ذكاء اصطناعي. عند اكتشاف Agency Phone تُفتح المكالمات والرسائل والبريد وجهات الاتصال وAgency Pay على المعصم، وتنفتح الساعة لتطبيقاتك الخاصة. مجانية، QBCore / Qbox / ESX / standalone، عشر لغات.
تصديرات العميل
OpenWatch(mitte)يفتح الساعة. مرّر true لفتحها في منتصف الشاشة بدلًا من الزاوية المُعدّة.
CloseWatch()يغلق الساعة ويحرّر تركيز NUI.
ToggleWatch()يغلق الساعة إذا كانت مفتوحة، ويفتحها في غير ذلك.
IsWatchOpen()تُرجع true ما دامت واجهة الساعة ظاهرة على الشاشة.
IsWatchLinked()تُرجع false إذا أوقف اللاعب الاتصال بـ Agency Phone من مركز التحكم.
RunWatchAction()يشغّل ما هو مُعيَّن لزر الإجراء البرتقالي (Config.ActionButton).
GetWatchSettings()تُرجع جدول الإعدادات الكامل الذي تُبنى منه واجهة الساعة (السمة، الوجه، الحجم، التطبيقات، اللغة).
SetWatchSetting(key, value)يضبط إعدادًا واحدًا ويحفظه لكل شخصية ويطبّقه فورًا.
SetWatchSettings(table)يضبط عدة إعدادات دفعة واحدة ويعيد بناء الواجهة مرة واحدة بدلًا من مرة لكل قيمة.
RequestWatchPairing()يطلب من الخادم رمز اقتران لتطبيق Companion. يصل الرد كحدث وليس كقيمة مُرجَعة.
ShowUpdate()يفتح شاشة تحديث البرنامج في AgencyOS.
HandlesDeath()تُرجع true عندما تعرض الساعة شاشة الطوارئ عند الوفاة. يسأل Agency Phone عن ذلك حتى لا يعرضها الجهازان معًا أبدًا.
GetFitness()تُرجع قيم اللياقة الحالية لليوم الجاري: الخطوات والمسافة ودقائق النشاط والسعرات الحرارية.
SetWatchAppInstalled(id, on)يثبّت تطبيقًا واحدًا لهذا اللاعب أو يزيله. هو ما يفعله متجر التطبيقات نفسه، ليتمكن الخادم من منح تطبيق كمكافأة.
FindWatch()يجعل الساعة ترن وتضيء، كما تفعل ميزة البحث في تطبيق Companion.
StopFindWatch()يوقف الرنين قبل أن ينتهي من تلقاء نفسه.
IsWatchRinging()تُرجع true ما دامت الساعة ترن.
تصديرات الخادم
IsPremium(src)تُرجع true عندما تعمل ساعة هذا اللاعب بنسخة Pro. يأتي الحكم من المصافحة مع Agency Phone الأصلي، وليس من العميل أبدًا.
04Agency-Zero
سيارة كهربائية ذاتية القيادة بأربعة مقاعد لـ FiveM، مجانًا. Project 0 مركبة مستقلة بُنيت من الصفر في Blender باستخدام Sollumz: بلا مقابض أبواب، وأبواب تُفتح على شكل موجة، ومقود حقيقي ودواسات للقيادة اليدوية. يستدعيها اللاعبون من Agency Phone أو Agency Pad أو من تطبيق Agency Companion على هواتفهم الحقيقية، فتقود إليهم وتركن بجانب الرصيف قربهم بدلًا من الابتعاد بحثًا عن موقف. في الداخل يعمل AgencyOS27 على الجهاز اللوحي في لوحة القيادة وفي قائمة Z: خريطة للنقر عليها، وAngy، المساعد المدمج، بقواعد ثابتة ودون أي ذكاء اصطناعي، للتحدث معه بكلمات بسيطة، وستة مساعدين للسائق بمفتاح رئيسي واحد، وتعديل برمجة المحرك على مراحل، ورقاقات صوت، وإحصاءات لكل سيارة ولكل مالك. تحمل كل سيارة رقمًا خاصًا بها مرتبطًا بمالكها في قاعدة البيانات، لذلك تبقى الملكية والتعديلات وكل إعداد بعد إعادة التشغيل. يُكتشف QBCore وQbox وESX تلقائيًا، وتعمل أيضًا بشكل مستقل، وتأتي كل النصوص بـ 27 لغة والإنجليزية أساسها.
تصديرات العميل
ZeroStatus()تُرجع حالة Project 0 الخاص باللاعب: هل هو موجود، وأين هو، والبطارية، والمدى، وهل توجد رحلة جارية.
ZeroCall()يستدعي السيارة إلى اللاعب. تقود إليه وتركن بجانب الرصيف قربه.
ZeroDeliver()يطلب توصيل السيارة عندما لا تكون على الخريطة. التكلفة Config.Remote.deliveryFee، ومجاني دون إطار عمل.
ZeroGarage()يعيد السيارة إلى مرآبها.
ZeroCancel()يلغي استدعاءً أو رحلة جارية.
ZeroFind()يعرض اتجاه السيارة أسفل الشاشة لمدة Config.Remote.findRadarSeconds ثانية.
ZeroDoors(on)يفتح الأبواب بـ true ويغلقها بـ false. تتحرك على شكل موجة، لا دفعة واحدة.
ZeroLock(on)يقفل السيارة بـ true ويفتح قفلها بـ false.
ZeroLights(on)يشغّل الأضواء ويطفئها.
ZeroBuyInfo()تُرجع ما إذا كان يحق للاعب شراء Project 0 وكم يكلف. من يملك واحدًا بالفعل لا يحصل على شيء.
ZeroBuy()يشتري Project 0 لهذا اللاعب. تُربط السيارة به في الخطوة نفسها.
ZeroRefresh()يعيد قراءة الحالة، للواجهة التي تريد أرقامًا حديثة دون انتظار الدورة التالية.
IsRideActive()تُرجع true ما دامت رحلة ذاتية القيادة جارية.
CallProjectZero()يبدأ رحلة إلى الوجهة الحالية. إن لم توجد، تُستخدم نقطة الطريق على الخريطة.
CancelProjectZero()ينهي الرحلة. تتنحّى السيارة جانبًا وتتوقف.
IsCockpitOpen()تُرجع true ما دام الجهاز اللوحي في لوحة القيادة ظاهرًا على الشاشة.
IsManualOverride()تُرجع true عندما يتولى السائق المقود. من دون هذا التجاوز يقود Zero نفسه فقط.
AnyDoorOpen(veh)تُرجع true إذا كان باب واحد على الأقل من تلك المركبة مفتوحًا.
OpenDoors(veh, opts)يفتح أبواب مركبة بحركة الموجة.
CloseDoors(veh, opts)يغلقها مرة أخرى.
AnimateDoors(veh, open, opts)يفتح أو يغلق حسب الوسيط الثاني، للشيفرة التي تقرر أثناء التشغيل.
SoundChipOf(veh)تُرجع رقاقة الصوت المركّبة في تلك السيارة. تغيير الرقاقة يغيّر صوت المحرك، ولا يغيّر الراديو أبدًا.
تصديرات الخادم
IsPro(src)تُرجع true عندما يعمل Zero الخاص بهذا اللاعب بنسخة Pro. يأتي الحكم من مصافحة HMAC مع Agency Phone الأصلي، وليس من العميل أبدًا.
ZeroVin(plate)تُرجع رقم المركبة المرتبط بلوحة معيّنة. يحصل كل Project 0 على رقم عند تسليمه ويحتفظ به دائمًا.
ZeroCarsOf(src)تُرجع كل سيارات Project 0 التي يملكها هذا اللاعب، مع الرقم واللوحة ومرحلة التعديل والإحصاءات.
ZeroSync(src)يعيد إرسال حالة السجل إلى هذا اللاعب، مثلًا بعد أن غيّر سكربت آخر الملكية.
الأحداث
agency-zero:client:rideStartedبدأت رحلة. يحمل الوجهة.
agency-zero:client:rideEndedانتهت الرحلة، أُلغيت أو وصلت.
agency-zero:client:arrivedوصلت السيارة إلى اللاعب وفتحت أبوابها.
05Agency-Lifeinvader V3
وكالة إعلانات المدينة: إعلانات اللاعبين على كل شاشة، مع الفئات والترويج والجدولة والمسودات والمراجعة ووظيفة لفريق العمل وكاتب AI وتطبيق لـ Agency Phone وAgency Pad.
يناسب سكربتات الأعمال والوظائف التي تنشر إعلانات تلقائيًا، وسكربتات الفعاليات والكازينو التي تعلن عما يجري، وسجلات Discord لكل إعلان، والهواتف والقوائم الشعاعية التي تفتح التطبيق، وأدوات الإدارة التي تتحقق من مشرفي Lifeinvader.
تصديرات العميل
OpenApp(tab)يفتح التطبيق على الصفحة التي تحددها: 'feed' أو 'create' أو 'mine' أو 'drafts' أو 'settings'. من دون تحديد صفحة، يفتح الصفحة التي استُخدمت أخيرًا أو موجز البث المباشر.
اعرض المثال
يفتح التطبيق على صفحة إعلان جديد من قائمتك الشعاعية أو هاتفك.
-- an entry in your radial menu
exports['Agency-LifeinvaderV3']:OpenApp('create')OpenFeed()يفتح التطبيق على موجز البث المباشر.
اعرض المثال
يفتح البث المباشر، مثلًا عند كشك جرائد.
exports['Agency-LifeinvaderV3']:OpenFeed()CloseApp()يغلق التطبيق.
اعرض المثال
يغلق التطبيق قبل فتح قائمتك.
exports['Agency-LifeinvaderV3']:CloseApp()IsOpen()تكون القيمة True عندما يكون التطبيق مفتوحًا لدى هذا العميل.
اعرض المثال
يمنع قائمتك من الفتح فوق التطبيق.
if not exports['Agency-LifeinvaderV3']:IsOpen() then
-- open your own menu
endتصديرات الخادم
PostAd(text, opts)ينشر إعلانًا باسم الخادم نفسه: مجاني، لا يخضع للمراجعة مطلقًا، ويأتي أولًا في قائمة الانتظار. opts: author وcategory وinstant (يُشغّل فورًا) وreps وinterval وduration وboosted. يعيد معرّف الإعلان، أو nil ورمز خطأ.
اعرض المثال
ينشر إعلانًا رسميًا من سكربت الكازينو أو الفعالية لديك، مجانًا وفي مقدمة قائمة الانتظار.
exports['Agency-LifeinvaderV3']:PostAd('Casino night tonight at 20:00, free entry!', {
author = 'Diamond Casino', category = 'events', instant = true,
})GetFeed(limit)موجز البث المباشر كما يظهر في التطبيق، من الأحدث إلى الأقدم: id وtext وcategory وboosted وauthor (تكون قيمته nil للإعلانات المجهولة) وsentAt وcreated وsent وlive.
اعرض المثال
يعرض أحدث الإعلانات لموقع إلكتروني أو صحيفة أو تطبيق هاتف.
for _, ad in ipairs(exports['Agency-LifeinvaderV3']:GetFeed(10)) do
print(ad.id, ad.author or 'anonymous', ad.text)
endGetAd(id)إعلان واحد بالتنسيق نفسه المستخدم في الموجز، أو nil.
اعرض المثال
يعثر على إعلان باستخدام رقمه.
local ad = exports['Agency-LifeinvaderV3']:GetAd(412)
if ad then print(ad.text) endIsAdmin(source)تكون القيمة True عندما يكون اللاعب مشرفًا في Lifeinvader عبر ACE أو المجموعة أو المعرّف.
اعرض المثال
يستخدم صلاحيات إدارة Lifeinvader في سكربتك الخاص.
if exports['Agency-LifeinvaderV3']:IsAdmin(source) then
-- show your admin tools
endالأحداث
agency-lifeinvader:adShownحدث محلي على كل عميل عند ظهور إعلان على الشاشة، مع id وtext وcategory وcatLabel وicon وauthor (تكون قيمته nil عندما يكون الإعلان مجهولًا) وboosted وduration وsystem (تكون قيمته true للإعلانات الرسمية).
اعرض المثال
يستجيب على العميل عند ظهور إعلان، على سبيل المثال على لوحة إعلانية.
AddEventHandler('agency-lifeinvader:adShown', function(ad)
-- ad.text, ad.author, ad.category
end)agency-lifeinvader:adBroadcastحدث محلي على الخادم في كل مرة يُعرض فيها إعلان، ويحتوي على الإعلان بالتنسيق نفسه المستخدم في الموجز. مناسب للسجلات أو webhook على Discord.
اعرض المثال
يسجل كل إعلان يُعرض على الخادم.
AddEventHandler('agency-lifeinvader:adBroadcast', function(ad)
-- send ad.text to your Discord log
end)agency_lifeinvader:openMenuمُحتفظ به من V3: يفتح التطبيق على صفحة إعلان جديد، كي تستمر السكربتات التي كانت تفتح القائمة القديمة في العمل.
اعرض المثال
يفتح للاعب التطبيق على صفحة إعلان جديد، كما كان يفعل حدث V3.
TriggerClientEvent('agency_lifeinvader:openMenu', source)agency_lifeinvader:openRecentMenuمُحتفظ به من V3: يفتح التطبيق على موجز البث المباشر.
اعرض المثال
يفتح للاعب الموجز المباشر، كما كان يفعل حدث V3.
TriggerClientEvent('agency_lifeinvader:openRecentMenu', source)06Agency-Blackmarket V2
سوق سوداء حيّة مع تجار متنقلين وسوق مباشرة ومساومة وطلبات للاستلام ومهام توصيل وتاجر مسروقات وغسل أموال وخمسة مستويات سمعة.
يناسب سكربتات العصابات والسرقات والمخدرات التي يجب أن تمنح سمعة أو رصيدًا، وأدوات الشرطة وdispatch التي تتفاعل مع الصفقات وتنقلات التجار، والقوائم الدائرية أو الهواتف التي تفتح قائمة السوق السوداء.
تصديرات العميل
OpenMenu()يفتح قائمة /ablackmarket، مثلًا من قائمة دائرية أو من تطبيق هاتف. تنطبق عليها الفحوصات نفسها التي تنطبق على الأمر.
اعرض المثال
يفتح قائمة السوق السوداء من قائمتك الدائرية أو من تطبيق هاتفك.
-- an entry in your radial menu
exports['Agency-Blackmarket']:OpenMenu()CloseMenu()يغلق القائمة ويعيد التحكم بالماوس إلى اللعبة.
اعرض المثال
يغلق القائمة، مثلًا قبل مشهد سينمائي خاص بك.
-- before your own cutscene starts
exports['Agency-Blackmarket']:CloseMenu()IsMenuOpen()يُرجع true ما دامت قائمة السوق السوداء مفتوحة، عند تاجر أو في أي مكان.
اعرض المثال
يتحقق مما إذا كانت القائمة مفتوحة قبل ظهور واجهتك الخاصة.
if exports['Agency-Blackmarket']:IsMenuOpen() then
return -- the player is busy in the black market menu
endتصديرات الخادم
GetReputation(source)نقاط سمعة اللاعب، و0 للاعب الذي لا يملك أيًّا منها بعد.
اعرض المثال
يسمح فقط للاعبين ذوي السمعة الكافية ببدء مهمتك أو سرقتك.
local rep = exports['Agency-Blackmarket']:GetReputation(source)
if rep < 150 then
return -- this heist needs a known name on the street
endSetReputation(source, value)يضبط سمعة اللاعب على قيمة ثابتة، ولا تنزل أبدًا عن 0. يُرجع true عند النجاح.
اعرض المثال
يضبط سمعة اللاعب على قيمة ثابتة.
-- an admin tool resets a player
exports['Agency-Blackmarket']:SetReputation(targetId, 0)AddReputation(source, amount)يضيف سمعة، أو ينقصها بقيمة سالبة. يُعلَن المستوى الجديد للاعب ولتطبيق Companion. يُرجع true عند النجاح.
اعرض المثال
يكافئ المهمة المنجزة بالسمعة؛ ويُعلَن المستوى الجديد.
-- a finished drug run earns street reputation
exports['Agency-Blackmarket']:AddReputation(source, 15)GetLevel(source)يُرجع قيمتين: رقم مستوى اللاعب (من 1 إلى 5 افتراضيًا) واسمه.
اعرض المثال
يقرأ رقم المستوى واسمه، مثلًا لفتح محتوى خاص بك.
local level, name = exports['Agency-Blackmarket']:GetLevel(source)
if level >= 4 then
print(('%s is %s on the street'):format(GetPlayerName(source), name))
endAddCredit(source, amount)يضيف رصيد تاجر يستطيع اللاعب إنفاقه في عملية الشراء أو الطلب التالية. يُرجع true عند النجاح.
اعرض المثال
يمنح اللاعب رصيد تاجر لعملية الشراء أو الطلب التالية.
-- a gang boss pays out in dealer credit
exports['Agency-Blackmarket']:AddCredit(source, 2500)RelocateDealer(dealerId)ينقل التاجر فورًا إلى موقع آخر من مواقعه. يُرجع true إذا انتقل.
اعرض المثال
ينقل التاجر فورًا إلى موقع آخر من مواقعه.
-- a tip reached the police: the dealer changes his spot
exports['Agency-Blackmarket']:RelocateDealer('vince')SendDealerAway(dealerId, minutes)يختفي التاجر لعدد الدقائق المحدد ثم يظهر في موقع آخر من مواقعه، كما يحدث بعد زيارة الشرطة.
اعرض المثال
يُبعد التاجر لفترة، كما يحدث بعد زيارة الشرطة.
-- a raid in the area: Marlow goes quiet for 20 minutes
exports['Agency-Blackmarket']:SendDealerAway('marlow', 20)IsDealerPresent(dealerId)true ما دام التاجر واقفًا في أحد مواقعه ولم يغادر.
اعرض المثال
يتحقق مما إذا كان التاجر في أحد مواقعه الآن.
if exports['Agency-Blackmarket']:IsDealerPresent('vince') then
print('Vince is on the street')
endStartFlashSale(minutes)يبدأ تخفيضات خاطفة على عناصر عشوائية. من دون تحديد الدقائق تُستخدم المدة من Config.FlashSale.
اعرض المثال
يبدأ تخفيضات خاطفة من حدث أو جدول خاص بك.
-- the city had a big night: a flash sale for 10 minutes
exports['Agency-Blackmarket']:StartFlashSale(10)الأحداث
agency-blackmarket:dealيُطلق على الخادم مع (source, kind, data) بعد كل صفقة. قيمة kind هي buy أو sell أو launder أو order أو pickup أو job، وتحتوي data على تفاصيل الصفقة، مثل التاجر والعناصر والمجموع.
اعرض المثال
يتفاعل مع كل صفقة، مثلًا لسجلاتك الخاصة أو لجهاز لوحي للشرطة.
AddEventHandler('agency-blackmarket:deal', function(source, kind, data)
if kind == 'buy' then
print(('%s spent %d at %s'):format(GetPlayerName(source), data.total, data.dealer))
end
end)agency-blackmarket:dealerMovedيُطلق على الخادم مع (dealerId, pos, reason) عندما يغيّر التاجر موقعه. قيمة reason هي rotate أو return أو admin أو export.
اعرض المثال
يتتبع التجار، مثلًا لمهمة مخبر أو محقق.
AddEventHandler('agency-blackmarket:dealerMoved', function(dealerId, pos, reason)
print(('%s moved to %.1f, %.1f (%s)'):format(dealerId, pos.x, pos.y, reason))
end)agency-blackmarket:flashSaleيُطلق على الخادم مع (items, minutes) عند بدء التخفيضات الخاطفة. يربط items كل عنصر مخفّض بنسبة خصمه المئوية.
اعرض المثال
يعلن عن التخفيضات الخاطفة في قنواتك الخاصة.
AddEventHandler('agency-blackmarket:flashSale', function(items, minutes)
for item, discount in pairs(items) do
print(('%s is %d%% off for %d minutes'):format(item, discount, minutes))
end
end)07Agency-Minerjob V2
وظيفة تعدين تضم سبع مناطق وثلاث أدوات و100 مستوى وأفرانًا وقطع الأحجار الكريمة وعقودًا وسوقًا بأسعار متحركة، كل ذلك في قائمة واحدة.
يتوافق مع سكربتات المهام والإنجازات التي تستجيب للتعدين، ومع سكربتات الاقتصاد والوظائف التي تقرأ أسعار السوق، والقوائم الشعاعية والهواتف التي تفتح القائمة، وأدوات الإدارة التي تضبط المستويات أو تمنح XP.
تصديرات العميل
OpenMenu(page)يفتح القائمة، مثلاً من قائمة شعاعية أو تطبيق هاتف. الصفحة هي overview (الافتراضية)، market، tools، smelter، cutting أو contracts.
اعرض المثال
يفتح القائمة على صفحة السوق من قائمتك الشعاعية أو تطبيق الهاتف الخاص بك.
-- an entry in your radial menu
exports['Agency-Minerjob']:OpenMenu('market')CloseMenu()يغلق القائمة ويعيد التحكم بالماوس إلى اللعبة.
اعرض المثال
يغلق القائمة قبل فتح قائمتك الخاصة.
exports['Agency-Minerjob']:CloseMenu()IsMenuOpen()تكون قيمته True أثناء فتح القائمة.
اعرض المثال
يمنع فتح قائمتك فوق قائمة التعدين.
if not exports['Agency-Minerjob']:IsMenuOpen() then
-- open your own menu
endIsWorking()تكون قيمته True أثناء تنقيب اللاعب أو قطعه جوهرة.
اعرض المثال
يمنع سكربتك من مقاطعة حركة التعدين أو القطع.
if exports['Agency-Minerjob']:IsWorking() then
return -- no emotes while mining
endGetLevel()مستوى التنقيب لدى اللاعب.
اعرض المثال
يقرأ مستوى اللاعب، مثلاً لاستخدامه في HUD أو تطبيق هاتف.
local level = exports['Agency-Minerjob']:GetLevel()
print('Mining level', level)تصديرات الخادم
GetLevel(source)مستوى التنقيب لدى لاعب، ويكون 0 إذا كان اللاعب غير معروف.
اعرض المثال
يتحقق من مستوى التعدين على الخادم قبل أن يسمح سكربتك بأي إجراء.
if exports['Agency-Minerjob']:GetLevel(source) < 25 then
return -- the quarry job needs level 25
endGetProgress(source)المستوى والتقدم بالتنسيق { level, xp, need, pct, max }.
اعرض المثال
يقرأ المستوى والتقدم، مثلاً لاستخدامهما في تطبيق هاتف أو لوحة النتائج.
local p = exports['Agency-Minerjob']:GetProgress(source)
print(p.level, p.xp, p.need, p.pct)AddXp(source, amount)يضيف XP، بما في ذلك الارتقاء بالمستوى ورسالة الإشعار. يعيد true عند العثور على اللاعب.
اعرض المثال
يمنح نقاط خبرة التعدين كمكافأة من مهمتك أو فعاليتك الخاصة.
-- a quest reward
exports['Agency-Minerjob']:AddXp(source, 250)SetLevel(source, level)يضبط المستوى بين 1 وأعلى مستوى، ويبدأه عند 0 XP.
اعرض المثال
يضبط المستوى، مثلاً من أداة الإدارة الخاصة بك.
exports['Agency-Minerjob']:SetLevel(source, 10)GetStats(source)ما أنجزه اللاعب حتى الآن: { mined, smelted, cut, broken, sold, earned, contracts }.
اعرض المثال
يقرأ ما الذي استخرجه اللاعب وما كسبه، للوحة المتصدرين أو الإنجازات.
local stats = exports['Agency-Minerjob']:GetStats(source)
print(stats.mined, stats.earned)GetPrice(item)سعر السوق الحالي للعنصر الواحد.
اعرض المثال
يقرأ سعر السوق الحالي، مثلاً لشريط أسعار الأسهم أو متجر يشتري العناصر نفسها.
local price = exports['Agency-Minerjob']:GetPrice('gold_bar')
print('Gold bar pays', price)الأحداث
agency-minerjob:minedيُطلق على الخادم بعد إتمام عملية تنقيب مدفوعة، مع source وitem وcount ومنطقة التنقيب. استخدم AddEventHandler للاستماع إليه، مثلاً للمهام أو الإحصائيات.
اعرض المثال
يستجيب على الخادم لكل عملية تعدين منحت مكافأة.
AddEventHandler('agency-minerjob:mined', function(source, item, count, area)
-- count mined ore for a quest
end)agency-minerjob:soldيُطلق على الخادم بعد عملية بيع، مع source وitem وcount وإجمالي المبلغ المدفوع.
اعرض المثال
يستجيب على الخادم لكل عملية بيع، للسجلات أو الإحصاءات.
AddEventHandler('agency-minerjob:sold', function(source, item, count, total)
-- log big sales
end)agency-minerjob:contractيُطلق على الخادم عند تسليم عقد، مع source وitem وcount والأجر.
اعرض المثال
يستجيب على الخادم عند تسليم عقد.
AddEventHandler('agency-minerjob:contract', function(source, item, count, pay)
-- an achievement for delivered contracts
end)08Agency-Repairkit V2
أضرار واقعية للمركبات مع أربعة أطقم إصلاح واختبارات مهارة ومكافأة الميكانيكي.
يناسب وظائف الميكانيكي وسيارات السحب، والمتاجر التي تبيع الأطقم، وأي سكريبت يحتاج إلى التفاعل مع اكتمال عملية إصلاح أو مع مستوى ضرر المركبة التي يقودها اللاعب.
تصديرات العميل
IsRepairing()يُرجع true طالما أن اللاعب المحلي يعمل على مركبة، على سبيل المثال لإبقاء القائمة الخاصة بك مغلقة.
اعرض المثال
يُبقي القائمة الخاصة بك مغلقة أثناء قيام اللاعب بإصلاح مركبة.
if exports['Agency-Repairkit']:IsRepairing() then
return -- keep your menu closed while the player works
endGetVehicleCondition(vehicle)نسبة المحرك والهيكل والخزان المئوية، حالة الإطارات، مستوى الاتساخ، مستوى الضرر، وما إذا كان الخزان يسرّب. بدون وسيط، تُقرأ المركبة التي يجلس فيها اللاعب.
اعرض المثال
يقرأ حالة المركبة التي يقودها اللاعب.
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
local cond = exports['Agency-Repairkit']:GetVehicleCondition(vehicle)
if cond and cond.level == 'critical' then
print(('Engine %d %%, leaking: %s'):format(cond.engine, tostring(cond.leaking)))
endOpenMenu()يفتح قائمة /arepairkit، على سبيل المثال من تطبيق هاتف أو قائمة دائرية.
اعرض المثال
يفتح قائمة طقم الإصلاح من القائمة الدائرية الخاصة بك أو من تطبيق الهاتف.
-- an entry in your radial menu or phone app
exports['Agency-Repairkit']:OpenMenu()CloseMenu()يغلق القائمة ويعيد التحكم بالماوس إلى اللعبة.
اعرض المثال
يغلق القائمة، مثلا قبل عرض مشهد سينمائي خاص بك.
-- before your own cutscene starts
exports['Agency-Repairkit']:CloseMenu()IsMenuOpen()يرجع true طالما القائمة مفتوحة.
اعرض المثال
يتحقق مما إذا كانت القائمة مفتوحة قبل ظهور واجهتك الخاصة.
if exports['Agency-Repairkit']:IsMenuOpen() then
return -- the player is busy in the repair kit menu
endتصديرات الخادم
UseKit(source, kit)يبدأ طقما لأحد اللاعبين كما لو تم استخدام العنصر، مع كل عمليات التحقق. يُرجع true، أو false مع السبب. يُستخدَم لأنظمة الجرد والمتاجر المخصصة.
اعرض المثال
يبدأ طقم الطريق لأحد اللاعبين من نظام جرد مخصص.
-- your own inventory: start the repair when the item is used
local ok, reason = exports['Agency-Repairkit']:UseKit(source, 'basic')
if not ok then print('Repair refused: ' .. tostring(reason)) endGiveKit(source, kit, amount)يضيف أطقما إلى جرد أحد اللاعبين عبر نظام الجرد المكتشَف. يُرجع true عند النجاح.
اعرض المثال
يمنح أحد اللاعبين طقمي إطارات عبر نظام الجرد المكتشَف.
-- a shop NPC sells two tyre kits
exports['Agency-Repairkit']:GiveKit(source, 'tyre', 2)IsRepairing(source)القيمة true طالما كان ذلك اللاعب يعمل على مركبة.
اعرض المثال
يتخطى مهمة أثناء قيام اللاعب بالإصلاح.
if exports['Agency-Repairkit']:IsRepairing(source) then
return -- no new job task while the player is busy
endGetKits()كل طقم مُعد مع عنصره وتسميته ونوع عمله ومدته.
اعرض المثال
يسرد كل طقم مع عنصره واسمه المعروض.
for name, kit in pairs(exports['Agency-Repairkit']:GetKits()) do
print(name, kit.item, kit.label, kit.duration)
enduseKit(event, item, inventory, slot, data)تصدير عنصر ox_inventory. تشير إدخالات العناصر في install/ox_inventory.lua إليه؛ وهو غير مخصص للاستدعاء المباشر.
اعرض المثال
مدخل العنصر الذي يربط ox_inventory بالأطقم.
-- ox_inventory/data/items.lua
['agencyrepairkit'] = {
label = 'Roadside Repair Kit', weight = 1500, consume = 0,
server = { export = 'Agency-Repairkit.useKit' },
},الأحداث
agency-repairkit:repairedيُطلَق على السيرفر مع (source, netId, kit) بعد انتهاء الإصلاح واستهلاك الطقم بالكامل. مفيد للسجلات أو المدفوعات أو تقدم الوظيفة.
اعرض المثال
يسجل كل عملية إصلاح مكتملة على الخادم.
AddEventHandler('agency-repairkit:repaired', function(src, netId, kit)
print(('%s finished %s on vehicle %s'):format(GetPlayerName(src), kit, netId))
end)agency-repairkit:client:repairedيُطلَق على جهاز اللاعب القائم بالإصلاح مع (netId, kit) عند اكتمال الإصلاح.
اعرض المثال
يُنفَّذ على طرف العميل الخاص باللاعب الذي يقوم بالإصلاح.
AddEventHandler('agency-repairkit:client:repaired', function(netId, kit)
if kit == 'advanced' then
-- play a sound or advance a job step
end
end)agency-repairkit:client:damageLevelيُطلَق على جهاز السائق مع (level, vehicle) عند تغيّر مستوى الضرر: ok أو light أو medium أو heavy أو critical.
اعرض المثال
يتابع مستوى الضرر الخاص بالمركبة التي يقودها اللاعب.
AddEventHandler('agency-repairkit:client:damageLevel', function(level, vehicle)
if level == 'critical' then
-- offer the tow-truck job
end
end)09Agency-Vehiclekeys V2
مفاتيح مركبات شاملة مع حلقة مفاتيح وجهاز تحكم عن بُعد، ومفاتيح محفوظة ومؤقتة، ومفاتيح الوظائف، وفتح الأقفال وتشغيل السيارات بوصل الأسلاك مع تنبيهات للشرطة، وصفحة للمسؤولين.
مناسب للمرائب ومتاجر المركبات وخدمات التأجير التي تسلّم المفاتيح، وسكربتات الوظائف التي تستخدم مركباتها الخاصة، وسكربتات السطو وسرقة السيارات التي ينبغي أن تتحقق من المفاتيح أو تمنحها، وواجهات HUD التي تتابع حالة المحرك، والقوائم الشعاعية أو الهواتف التي تفتح حلقة المفاتيح.
تصديرات العميل
HasKeys(plate)تكون القيمة True عندما يحمل اللاعب مفتاحًا لهذه اللوحة: بصفته مالكًا أو لديه مفتاح مشترك أو مؤقت. تُفتح مركبات الوظائف حسب طرازها، ولا تُحتسب هنا.
اعرض المثال
يتحقق من المفتاح قبل أن يسمح سكربتك للاعب باستخدام السيارة.
if exports['Agency-Vehiclekeys']:HasKeys(GetVehicleNumberPlateText(vehicle)) then
-- the player may drive this car
endGetKeys()جميع مفاتيح اللاعب في قائمة بالتنسيق { plate, kind }. تكون قيمة kind هي owner أو shared أو temp.
اعرض المثال
يعرض جميع مفاتيح اللاعب، مثلًا في تطبيق للهاتف.
for _, key in ipairs(exports['Agency-Vehiclekeys']:GetKeys()) do
print(key.plate, key.kind)
endToggleLock(vehicle)يقفل مركبة أو يفتح قفلها إذا كان لدى اللاعب مفتاح لها، باستخدام الحركة وعمليات التحقق نفسها المستخدمة مع G. إذا لم يكن اللاعب داخل مركبة، تُستخدم أقرب مركبة ضمن النطاق.
اعرض المثال
يقفل أقرب سيارة أو يفتح قفلها من قائمتك الشعاعية.
-- an entry in your radial menu
exports['Agency-Vehiclekeys']:ToggleLock()ToggleEngine()يشغّل محرك المركبة التي يقودها اللاعب أو يوقفه، مثل U.
اعرض المثال
يشغّل المحرك أو يوقفه من قائمتك أو واجهة HUD للسيارة.
exports['Agency-Vehiclekeys']:ToggleEngine()OpenMenu()يفتح حلقة المفاتيح، على سبيل المثال من قائمة دائرية أو تطبيق هاتف.
اعرض المثال
يفتح حلقة المفاتيح من قائمتك الشعاعية أو تطبيق الهاتف.
-- an entry in your radial menu
exports['Agency-Vehiclekeys']:OpenMenu()CloseMenu()يغلق حلقة المفاتيح ويعيد التحكم بالماوس إلى اللعبة.
اعرض المثال
يغلق حلقة المفاتيح قبل فتح قائمتك.
exports['Agency-Vehiclekeys']:CloseMenu()IsMenuOpen()تكون القيمة True أثناء فتح حلقة المفاتيح.
اعرض المثال
يمنع قائمتك من الفتح فوق حلقة المفاتيح.
if not exports['Agency-Vehiclekeys']:IsMenuOpen() then
-- open your own menu
enduseLockpick()يبدأ محاولة فتح الأقفال باستخدام أداة فتح الأقفال للسيارة أمام اللاعب، أو محاولة توصيل الأسلاك في مقعد السائق. مخصص لعناصر ox_inventory: client = { export = 'Agency-Vehiclekeys.useLockpick' }.
اعرض المثال
يتيح للاعبين استخدام أداة فتح الأقفال من قائمة ox_inventory.
-- ox_inventory/data/items.lua
['lockpick'] = {
label = 'Lockpick',
client = { export = 'Agency-Vehiclekeys.useLockpick' },
},تصديرات الخادم
GiveKeys(source, plate, mode, hours)يمنح مفتاحًا. الوضع 'temp' (افتراضيًا) هو مفتاح مؤقت، ويمكن تحديد عدد الساعات اختياريًا، أما 'perm' فهو مفتاح محفوظ. يعمل مع source أو identifier.
اعرض المثال
يمنح مفتاحًا مؤقتًا، على سبيل المثال عند استئجار سيارة أو إنشاء سيارة بواسطة وظيفة.
-- a rental that lasts two hours
exports['Agency-Vehiclekeys']:GiveKeys(source, plate, 'temp', 2)RemoveKeys(source, plate)يسحب مفتاحًا مشتركًا أو مؤقتًا. تُرجع العملية true عند وجود مفتاح لسحبه.
اعرض المثال
يسحب المفتاح مجددًا عند انتهاء الإيجار أو اكتمال المهمة.
exports['Agency-Vehiclekeys']:RemoveKeys(source, plate)HasKeys(source, plate)تكون القيمة True عندما يحمل اللاعب مفتاحًا للوحة، بما في ذلك مفاتيح الوظائف لمركبة قريبة.
اعرض المثال
يتحقق على الخادم من أن اللاعب يحمل المفتاح فعلًا.
if not exports['Agency-Vehiclekeys']:HasKeys(source, plate) then
return -- no key, no delivery
endSetOwner(source, plate)يجعل اللاعب مالكًا للوحة، لاستخدامها في المرائب والمتاجر على الخوادم المستقلة. يفقد المالك السابق المفتاح.
اعرض المثال
يجعل المشتري مالك السيارة على الخوادم المستقلة.
-- your standalone vehicle shop, after the purchase
exports['Agency-Vehiclekeys']:SetOwner(source, plate)RemoveOwner(plate)يزيل المالك الذي حفظه هذا البرنامج النصي للوحة.
اعرض المثال
يزيل المالك المحفوظ عند بيع السيارة أو تخريدها.
exports['Agency-Vehiclekeys']:RemoveOwner(plate)GetOwner(plate)معرّف المالك ومصدره: 'framework' للمركبات المملوكة في QBCore أو Qbox أو ESX، و'store' للمالكين الذين حفظهم هذا البرنامج النصي.
اعرض المثال
يعثر على مالك لوحة السيارة، لاستخدامها في أدوات الشرطة أو سكربتات حجز السيارات.
local owner, from = exports['Agency-Vehiclekeys']:GetOwner(plate)
print(owner, from) -- identifier, 'framework' or 'store'GetKeyHolders(plate)كل من لديه مفتاح للوحة، ضمن قائمة بالشكل { identifier, kind, name, expires }.
اعرض المثال
يعرض كل من يحمل مفتاحًا لسيارة، على سبيل المثال في حاسوب الشرطة.
for _, h in ipairs(exports['Agency-Vehiclekeys']:GetKeyHolders(plate)) do
print(h.name, h.kind)
endSetVehicleLocked(vehicle, locked)يقفل مركبة أو يفتح قفلها للجميع، دون التحقق من المفتاح. للسكربتات التي تحتاج إلى فتح سيارة.
اعرض المثال
يفتح السيارة أو يقفلها للجميع دون التحقق من المفتاح.
-- a heist script opens the car for the crew
exports['Agency-Vehiclekeys']:SetVehicleLocked(vehicle, false)IsVehicleLocked(vehicle)تكون القيمة True عندما تكون المركبة مقفلة.
اعرض المثال
يقرأ حالة القفل على الخادم.
if exports['Agency-Vehiclekeys']:IsVehicleLocked(vehicle) then
-- the car is closed
endGetFramework()الإطار الذي عثر عليه السكربت: qbcore أو esx أو standalone.
اعرض المثال
يتيح لسكربتك اتباع إطار العمل الذي اكتشفه سكربت المفاتيح.
if exports['Agency-Vehiclekeys']:GetFramework() == 'standalone' then
-- give the key yourself
endالأحداث
Agency:Keys:GiveServerيطلب مفتاحًا مؤقتًا للوحة، كما تفعل Agency Garage وAgency Vehicleshop. شغّله من جهة العميل مع اللوحة. يجب أن تكون السيارة بجوار اللاعب أو أن تكون ملكه.
اعرض المثال
يطلب مفتاحًا لسيارة أُنشئت للتو بجوار اللاعب.
-- client side, after your garage spawned the car
TriggerServerEvent('Agency:Keys:GiveServer', GetVehicleNumberPlateText(vehicle))qb-vehiclekeys:server:AcquireVehicleKeysحدث المفتاح في qb-vehiclekeys، ويُفهم بالطريقة نفسها، لكي تواصل المرائب والمتاجر المصممة لـ qb-vehiclekeys عملها.
اعرض المثال
تواصل السكربتات المكتوبة لـ qb-vehiclekeys العمل دون أي تعديل.
TriggerServerEvent('qb-vehiclekeys:server:AcquireVehicleKeys', plate)vehiclekeys:client:SetOwnerحدث عميل تطلقه كثير من المرائب والمتاجر بعد إخراج سيارة. يمنح مفتاحًا مؤقتًا لتلك اللوحة بعد إجراء عمليات التحقق نفسها على الخادم.
اعرض المثال
يمنح الحدث الذي تطلقه العديد من مرائب السيارات بعد إنشاء سيارة اللاعبَ مفتاحًا.
TriggerEvent('vehiclekeys:client:SetOwner', plate)qb-vehiclekeys:client:AddKeysحدث العميل في qb-vehiclekeys لمنح المفاتيح، ويُفهم بالطريقة نفسها.
اعرض المثال
يسلّم مفتاحًا بالطريقة التي كان يفعلها qb-vehiclekeys.
TriggerEvent('qb-vehiclekeys:client:AddKeys', plate)simple_carkeys:client:toggleEngineيُطلق على العميل عند تشغيل المحرك أو إيقافه بمفتاح، لكي تتمكن واجهات HUD مثل Agency-Hud من متابعة حالة المحرك.
اعرض المثال
يتيح للـHUD متابعة حالة المحرك عند تشغيله أو إيقافه بالمفتاح.
AddEventHandler('simple_carkeys:client:toggleEngine', function()
-- update the engine icon of your HUD
end)10Agency-Vending
آلات بيع يملكها اللاعبون، بالدفع نقدًا أو ببطاقة AgencyPay.
استخدمه مع تصدير AgencyPay من Agency-Phone للشراء بالبطاقة. واستخدمه في وظائف يملك فيها اللاعبون مواقع آلات البيع (محطات الوقود، المكاتب، الشقق) لتحقيق دخل سلبي.
الأحداث
agency-vending:notifyمُرسل إشعارات عام يتحكم فيه الخادم لمورد آلات البيع.
اعرض المثال
يرسل إلى اللاعب إشعارًا عامًا بطابع آلات البيع بعد الشراء.
-- Plug a vending receipt into a custom logger via notify event
TriggerClientEvent('agency-vending:notify', src, 'success', 'Receipt #4821 saved to wallet')agency-vending:startAgencyPayيبدأ عملية دفع Agency Pay عبر التكامل مع agency-phone مع بيانات التاجر.
اعرض المثال
يبدأ عملية دفع Agency Pay عبر الهاتف ببيانات التاجر الخاصة بالكشك.
-- Pop a phone Agency Pay flow when a player taps a kiosk
TriggerClientEvent('agency-vending:startAgencyPay', src, { merchant = 'Sprunk Co', amount = 4.50, ref = 'flash_sale_01' })agency-vending:buyMachineResultنتيجة شراء آلة بيع، تُمرَّر إلى NUI لعرض الاستجابة.
اعرض المثال
يمرّر نتيجة شراء آلة بيع إلى واجهة NUI مخصّصة للمتجر لعرض الاستجابة.
-- Forward buy-machine outcome to a custom shop UI
TriggerClientEvent('agency-vending:buyMachineResult', src, { success = true, machineId = 102 })agency-vending:machineCreatedبث بأن آلة جديدة يملكها لاعب قد أُنشئت؛ يحدّث الذاكرة المؤقتة المحلية ويُعلم المالك.
اعرض المثال
يبث إلى كل العملاء آلة بيع أنشأها لاعب للتو.
-- Cache new owner-machine instantly when business script registers it
TriggerClientEvent('agency-vending:machineCreated', -1, { id = 142, owner = identifier, type = 'sprunk' })agency-vending:openManagementVerifiedفتح قائمة إدارة المالك بعد تحقق الخادم، مع السلع والأرباح والاسم.
اعرض المثال
يفتح واجهة الإدارة الموثّقة مع السلع والأرباح والاسم بعد التحقق.
-- After server-side ownership check open management menu with stock
TriggerClientEvent('agency-vending:openManagementVerified', src, { items = items, earnings = 1240, label = 'East LS Sprunk' })agency-vending:openOwnedListيفتح واجهة NUI لنظرة المالك العامة التي تعرض كل آلات اللاعب مع أسماء الشوارع.
اعرض المثال
يفتح واجهة NUI للنظرة العامة للمالك مع كل آلات البيع التي يملكها اللاعب.
-- Hotkey opens the owner overview NUI listing all owned machines
TriggerClientEvent('agency-vending:openOwnedList', src)agency-vending:spawnMachineCreatedبث من أداة الإنشاء الخاصة بالمشرف بأن كيان آلة جديدًا قد أُنشئ.
اعرض المثال
يُعلم كل العملاء بأن مشرفًا أنشأ كيان آلة بيع جديدًا.
-- Custom mapping tool tracks newly admin-spawned machine
TriggerClientEvent('agency-vending:spawnMachineCreated', -1, { entity = netId, model = 'prop_vend_soda_01', id = 7 })agency-vending:spawnMachineDeletedبث من أداة الإنشاء الخاصة بالمشرف بأن كيان آلة قد حُذف.
اعرض المثال
يخبر كل العملاء بأن مشرفًا حذف آلة بيع أُنشئت سابقًا.
-- Mapping tool removes a deleted spawned machine from cache
TriggerClientEvent('agency-vending:spawnMachineDeleted', -1, 7)agency-vending:openSpawnerUIيفتح واجهة NUI لأداة إنشاء المشرف بعد اجتياز فحص الصلاحيات على الخادم.
اعرض المثال
يفتح واجهة NUI لأداة إنشاء المشرف لوضع آلات البيع في العالم.
-- Custom command opens the admin spawner UI after permission passes
TriggerClientEvent('agency-vending:openSpawnerUI', src)agency-vending:buyMachineيشتري اللاعب آلة بيع من نوع معيّن عند الإحداثيات والاتجاه المُمرَّرين.
اعرض المثال
يشتري اللاعب آلة بيع من نوع sprunk عند إحداثياته الحالية من شخصية غير لاعبة.
-- Custom NPC sells vending machines via dialog
local coords = GetEntityCoords(PlayerPedId())
local heading = GetEntityHeading(PlayerPedId())
TriggerServerEvent('agency-vending:buyMachine', 'sprunk', coords, heading)agency-vending:requestOwnedListيطلب المُستدعي قائمة آلاته لواجهة النظرة العامة للمالك.
اعرض المثال
يطلب من الخادم قائمة آلات البيع التي يملكها اللاعب.
-- Refresh owner overview after a balance/restock action elsewhere
TriggerServerEvent('agency-vending:requestOwnedList')agency-vending:requestMachinesيطلب المُستدعي من الخادم مزامنة كاملة لكل الآلات التي يملكها اللاعبون.
اعرض المثال
يطلب من الخادم مزامنة كاملة جديدة لكل آلات البيع التي يملكها اللاعبون.
-- Scan for nearby machines after teleport finished
TriggerServerEvent('agency-vending:requestMachines')agency-vending:requestManagementفتح واجهة إدارة آلة مملوكة بعد تحقق الخادم.
اعرض المثال
يطلب واجهة إدارة موثّقة من الخادم لآلة البيع المملوكة التي نُقر عليها.
-- Owner UI requests verified management menu for a clicked machine
TriggerServerEvent('agency-vending:requestManagement', machineId)agency-vending:requestSpawnedMachinesيطلب المُستدعي قائمة الآلات التي أنشأها المشرفون لواجهة أداة الإنشاء.
اعرض المثال
يطلب قائمة كل آلات البيع التي أنشأها المشرفون لواجهة أداة الإنشاء.
-- Admin spawner UI fetches all currently spawned machines
TriggerServerEvent('agency-vending:requestSpawnedMachines')agency-vending:adminSpawnMachineيضع المشرف على الخادم مجسم آلة بيع جديدًا بعد فحص الصلاحيات.
اعرض المثال
يُنشئ المشرف مجسم آلة بيع وجبات خفيفة جديدًا بعد فحص الصلاحيات.
-- Admin places a snack machine via custom slash command
TriggerServerEvent('agency-vending:adminSpawnMachine', 'snack', vector3(120.5, -1280.7, 29.3), 90.0)agency-vending:adminDeleteSpawnedيحذف المشرف على الخادم مجسم آلة بيع وُضع سابقًا.
اعرض المثال
يزيل المشرف على الخادم مجسم آلة بيع أُنشئ سابقًا.
-- Admin removes a misplaced machine via map editor button
TriggerServerEvent('agency-vending:adminDeleteSpawned', spawnedId)11Agency-Admin
لوحة إدارة متكاملة بواجهة زجاجية ودردشة AgencyAI وأكثر من 60 أداة إدارية.
الأحداث مثالية كـ«لبنات أساسية» لمكافحة الغش أو بوتات الإشراف أو أدوات التطبيق الآلي، استدعها من سكربت الخادم لتجميد اللاعبين أو طردهم أو إشعارهم دون كتابة واجهتك الخاصة.
الأحداث
agency-admin:client:refreshStaffRanksيجعل العميل يعيد جلب بيانات رتب الطاقم.
اعرض المثال
يحدّث ذاكرة رتب الطاقم لكل مشرف متصل بعد ترقية.
-- After auto-promotion, refresh staff ranks for all online admins
for _, src in ipairs(GetPlayers()) do
TriggerClientEvent('agency-admin:client:refreshStaffRanks', tonumber(src))
endagency-admin:client:freezeTimeيجمّد وقت العالم لدى العميل عند الساعة والدقيقة المحددتين أو يلغي التجميد.
اعرض المثال
يجمّد نظام مكافحة الغش ساعة العالم عند الظهر أثناء مراجعة لاعب.
-- Anti-cheat halts world time during an investigation
local hour, minute = 12, 0
TriggerClientEvent('agency-admin:client:freezeTime', src, true, hour, minute)agency-admin:client:dashboardValueيرسل قيمة بطاقة واحدة من لوحة المعلومات (مثل عدّاد مباشر) إلى واجهة اللوحة.
اعرض المثال
يرسل عدد اللاعبين المتصلين مباشرة إلى بطاقة لوحة الإدارة.
-- Stream live online player count to admin dashboard cards
local count = #GetPlayers()
TriggerClientEvent('agency-admin:client:dashboardValue', adminSrc, 'players_online', count)agency-admin:client:teleportToCoordsينقل المُستدعي إلى إحداثيات العالم المُمرَّرة.
اعرض المثال
ينقل لاعبًا إلى الإحداثيات المحفوظة بعد حدث إعادة الظهور.
-- Job script teleports a player back to last save point on respawn
local coords = vector3(-1037.7, -2737.6, 20.16)
TriggerClientEvent('agency-admin:client:teleportToCoords', src, coords)agency-admin:client:announceيعرض لافتة إعلان على مستوى الخادم من المُرسل المحدد.
اعرض المثال
يبث لافتة إعلان على مستوى الخادم من مُرسل نظام مسمّى.
-- Event bot announces a community contest start
TriggerClientEvent('agency-admin:client:announce', -1, 'Event Crew', 'Heist contest starts in 5 minutes!')agency-admin:client:notifyإشعار يرسله الخادم بعنوان ونص ونوع ومدة.
اعرض المثال
يرسل إشعارًا منسّقًا إلى اللاعب حين يُقبل طلبه.
-- Whitelist bot informs a player they passed the application
TriggerClientEvent('agency-admin:client:notify', src, 'Whitelist', 'Application approved!', 'success', 8000)agency-admin:client:freezeيجمّد شخصية اللاعب المحلي أو يلغي تجميدها.
اعرض المثال
يجمّد لاعبًا مشتبهًا به حتى يتمكن الطاقم من التحقيق دون أن يتحرك.
-- Anti-cheat freezes a suspect player while staff investigates
TriggerClientEvent('agency-admin:client:freeze', suspectSrc, true)agency-admin:client:healيعالج شخصية اللاعب المحلي بالكامل.
اعرض المثال
يعالج المريض بالكامل بعد انتهاء علاجه الطبي في لعب الأدوار.
-- Medic job script fully heals the player after RP treatment ends
TriggerClientEvent('agency-admin:client:heal', patientSrc)agency-admin:client:reviveيُنعش شخصية اللاعب المحلي.
اعرض المثال
يُنعش لاعبًا ساقطًا بعد إكمال اللعبة المصغّرة للإسعاف بنجاح.
-- EMS revive minigame succeeds, server marks player alive again
TriggerClientEvent('agency-admin:client:revive', downedSrc)agency-admin:client:teleportينقل اللاعب المحلي إلى متجه الإحداثيات المُمرَّر.
اعرض المثال
ينقل اللاعب المحلي إلى متجه الإحداثيات المُمرَّر.
-- Tutorial system teleports new player to spawn pad on first join
local coords = vector3(245.7, -871.5, 30.5)
TriggerClientEvent('agency-admin:client:teleport', src, coords)agency-admin:client:openMenuمُشغّل من الخادم لفتح واجهة لوحة الإدارة الرئيسية.
اعرض المثال
يفتح واجهة لوحة الإدارة الرئيسية لعضو الطاقم حين يبدأ مناوبته.
-- Auto-open admin panel for staff right after they switch on duty
TriggerClientEvent('agency-admin:client:openMenu', src)agency-admin:client:openToolsMenuمُشغّل من الخادم لفتح القائمة الفرعية لأدوات الإدارة.
اعرض المثال
يفتح القائمة الفرعية لأدوات الإدارة عند الضغط على مفتاح الطاقم.
-- Quick-action keybind opens the admin tools sub-menu
TriggerClientEvent('agency-admin:client:openToolsMenu', src)agency-admin:client:closeMenuمُشغّل من الخادم لإغلاق واجهة لوحة الإدارة.
اعرض المثال
يغلق واجهة لوحة الإدارة قسرًا حين يكون المشرف قيد التحقيق.
-- Force-close the panel when admin gets reported themselves
TriggerClientEvent('agency-admin:client:closeMenu', adminSrc)agency-admin:client:openClothingMenuمُشغّل من الخادم لفتح قائمة الملابس داخل اللعبة للاعب.
اعرض المثال
يفتح قائمة الملابس بعد أن يشتري اللاعب زيًّا من خيّاط.
-- Tailor NPC opens clothing menu after a uniform purchase
TriggerClientEvent('agency-admin:client:openClothingMenu', src)agency-admin:server:requestPlayersيطلب قائمة اللاعبين المتصلين حاليًا للوحة الإدارة.
اعرض المثال
يطلب من الخادم أحدث قائمة باللاعبين المتصلين للوحة.
-- Custom dashboard widget refreshes its players list
TriggerServerEvent('agency-admin:server:requestPlayers')agency-admin:server:requestPanelPermissionsيطلب جدول صلاحيات اللوحة لمحرر الرتب.
اعرض المثال
يطلب من الخادم جدول صلاحيات اللوحة الذي يستخدمه محرر الرتب.
-- Permission editor needs the latest panel permission map
TriggerServerEvent('agency-admin:server:requestPanelPermissions')agency-admin:server:requestStaffRanksيطلب بيانات رتب الطاقم للوحة.
اعرض المثال
يطلب بيانات رتب الطاقم كاملة لاستخدامها في أداة CRM مخصّصة.
-- Sync staff ranks dataset into a custom CRM widget
TriggerServerEvent('agency-admin:server:requestStaffRanks')agency-admin:server:createRankيُنشئ رتبة جديدة للطاقم مع البيانات الوصفية والصلاحيات.
اعرض المثال
يُنشئ رتبة طاقم جديدة من مزامنة بوابة موارد بشرية خارجية.
-- Sync rank from external HR portal -> create matching staff rank
TriggerServerEvent('agency-admin:server:createRank', { name = 'Senior Mod', color = '#a855f7', priority = 50 })agency-admin:server:requestMyPermissionsيطلب المُستدعي مجموعة صلاحياته المحسوبة في اللوحة.
اعرض المثال
يطلب مجموعة صلاحيات المُستدعي المحسوبة في اللوحة عند فتح الواجهة.
-- Fetch caller's resolved permission set before showing dev tools
TriggerServerEvent('agency-admin:server:requestMyPermissions')agency-admin:server:requestSyncيطلب المُستدعي من الخادم إرسال بيانات المزامنة المعتادة (المناوبة، الصلاحيات وغيرها).
اعرض المثال
يجبر الخادم على إرسال بيانات مزامنة المناوبة والصلاحيات المعتادة إلى المُستدعي.
-- Force a fresh sync after the player reconnects
TriggerServerEvent('agency-admin:server:requestSync')agency-admin:server:requestDutyRankيطلب المُستدعي معلومات رتبته الحالية في مناوبة الإدارة.
اعرض المثال
يطلب رتبة مناوبة المُستدعي الحالية لطبقة HUD مخصّصة.
-- Display admin's duty rank on a custom HUD overlay
TriggerServerEvent('agency-admin:server:requestDutyRank')agency-admin:server:requestSpawnedObjectsيطلب المُستدعي قائمة الكائنات التي أنشأها المشرفون في العالم.
اعرض المثال
يطلب قائمة الكائنات التي أنشأها المشرفون في العالم لطبقة على الخريطة المصغّرة.
-- Map editor needs to draw all admin-spawned objects on a minimap
TriggerServerEvent('agency-admin:server:requestSpawnedObjects')12Agency-Anticheat
نظام مكافحة غش لـ FiveM يتعرّف على خادمك بنفسه. يفحص كل لاعب من جهة الخادم حيث لا يستطيع الغشّاش الاختباء: يُقرأ وضع الإله والقفز الخارق ومضاعفات الضرر والانتقال الفوري والأسلحة المحظورة من حالة اللعبة المتزامنة. وتلتقط المقارنات المتقاطعة ما تفوّته القيم المفردة: ضربة قاتلة ينجو منها الضحية، وقتل بمسدس من مسافة 500 متر، وإحصائيات التصويب، وعدة إشارات ضعيفة تتحول معًا إلى نمط واضح. وتلغي حماية العالم الدبابات المستدعاة والانفجارات والنيران وإغراق الجسيمات قبل أن يراها أحد. تشمل عمليات الحظر المعرّفات ورموز الأجهزة، فيبقى الحساب الجديد على الجهاز نفسه خارج الخادم، ويُغلق وضع الإغلاق الخادم تلقائيًا عند هجوم عدة غشّاشين في وقت واحد. التثبيت الجديد يعمل 48 ساعة في وضع Learning ولا يعاقب أحدًا. لوحته الخاصة داخل اللعبة (/acpanel) تعرض كل شيء مباشرة وتنفّذ كل إجراء على أي خادم. مع Agency Admin يُستثنى مشرفوه تلقائيًا وتظهر الصفحة نفسها داخل تلك اللوحة أيضًا، ومع AgencyMod تصل عمليات الحظر إلى Discord الخاص بك أيضًا. بلا قاعدة بيانات وبلا اشتراك، 25 لغة، QBCore أو Qbox أو ESX أو مستقل.
تصديرات الخادم
AllowTeleport(source: number, seconds?: number)استدعِه قبل أن ينقل السكربت لاعباً مباشرة، فلا تُحتسب القفزة كانتقال آني. الافتراضي 5 ثوانٍ.
SetExempt(source: number, seconds: number)يعفي لاعباً واحداً من جميع الفحوصات لفترة، مثلاً أثناء فعالية فيها Godmode. القيمة 0 تنهي الإعفاء.
Flag(source: number, detail: string)كشفك الخاص. يُحتسب مثل أي حالة أخرى، تحت الكشف external.
BanPlayer(source: number, reason: string, duration?: number, by?: string)يحظر لاعباً متصلاً عبر المعرّفات ورموز الأجهزة. المدة بالثواني، و0 تعني دائماً. يعيد معرّف الحظر.
KickPlayer(source: number, reason: string, by?: string)يطرد لاعباً ويسجّل ذلك في Discord.
Unban(banId: string, by?: string)يرفع حظراً، مثل AC-7K3P9.
SetMode(mode: string)يبدّل الوضع مباشرة: learning أو relaxed أو balanced أو strict.
SetDetection(key: string, enabled: boolean)يشغّل كشفاً واحداً أو يوقفه مباشرة.
SetLockdown(on: boolean, by?: string)يبدأ إغلاقاً احترازياً أو ينهيه.
IsExempt(source: number)يعيد ما إذا كان اللاعب معفىً من الفحوصات.
IsKnownPlayer(source: number)يعيد ما إذا كان اللاعب قد لعب هنا مدة كافية دون إصابات ليُعدّ معروفاً.
GetStatus()يعيد كل ما تعرضه اللوحة: الوضع والطبقات والمعرفة وأرقام اليوم وحمل الخادم وكل كشف مع قاعدته.
GetDetections(limit?: number)يعيد أحدث حالات الكشف، الأحدث أولاً.
GetBans()يعيد كل حظر نشط مع أدلته.
GetPlayers()يعيد اللاعبين المتصلين مع درجة الخطورة والإنذارات المفتوحة، الأعلى خطورة أولاً.
الأحداث
Agency-Anticheat:detectionيُطلق عند كل حالة مع اللاعب والكشف والتفاصيل والإجراء والإنذارات.
Agency-Anticheat:bannedيُطلق بعد كل حظر مع سجل الحظر الكامل.
Agency-Anticheat:unbannedيُطلق بعد رفع حظر.
Agency-Anticheat:lockdownيُطلق عند بدء الإغلاق الاحترازي أو انتهائه.
Agency-Anticheat:learnedيُطلق عندما يتعلم مضاد الغش نقطة انتقال آني جديدة في خادمك.
13Agency-Reports V2
نظام بلاغات حديث مع دردشة مباشرة لكل بلاغ وردود بمساعدة الذكاء الاصطناعي.
استخدمه عمودًا فقريًا لـ«تذاكر الدعم» في خادمك كله. يمكن لسكربتاتك المخصّصة فتح بلاغات تلقائيًا عند حدوث خطأ (مركبات عالقة، عناصر مكررة، فشل حفظ SQL) لمراجعة المشرفين.
الأحداث
agency-reports:client:notifyإشعار يرسله الخادم مع احترام تفضيلات الإشعارات لدى اللاعب.
اعرض المثال
إشعار يرسله الخادم مع احترام تفضيلات الإشعارات لدى اللاعب.
-- Server tells client a new admin reply landed
TriggerClientEvent('agency-reports:client:notify', source, 'New reply on your report', 'info')agency-reports:client:openPlayerUIOpens the player report UI with categories, open/recent reports and Discord settings.
اعرض المثال
يفتح واجهة البلاغات للاعب مع الفئات والبلاغات المفتوحة والأخيرة وإعدادات الذكاء الاصطناعي وDiscord.
-- Open the player report UI on a custom keybind
local categories = { 'Bug', 'Player report', 'Stuck' }
TriggerEvent('agency-reports:client:openPlayerUI', categories, {}, {}, {})agency-reports:client:openAdminUIيفتح لوحة بلاغات المشرف مع كامل بيانات البلاغات.
اعرض المثال
يفتح لوحة بلاغات المشرف مع كامل بيانات البلاغات.
-- Force-open the admin reports dashboard from a staff command
TriggerEvent('agency-reports:client:openAdminUI', { reports = {}, total = 0 })agency-reports:client:teleportينقل المشرف المُستدعي إلى الإحداثيات المُمرَّرة (لإجراءات goto).
اعرض المثال
ينقل المشرف المُستدعي إلى الإحداثيات المُمرَّرة لإجراءات goto.
-- Goto-action: teleport the responding admin to the report scene
TriggerEvent('agency-reports:client:teleport', vector3(-247.6, -2010.2, 30.1))agency-reports:client:healSelfيعالج شخصية المشرف المُستدعي بالكامل.
اعرض المثال
يعالج شخصية المشرف المُستدعي بالكامل بعد الاستجابة لبلاغ.
-- Heal admin after a hostile scene to keep them in service
TriggerEvent('agency-reports:client:healSelf')agency-reports:server:submitReportيرسل اللاعب بلاغًا جديدًا (العنوان، الفئة، الوصف) يُحفظ في قاعدة البيانات agency_reports.
اعرض المثال
يرسل اللاعب بلاغًا جديدًا بعنوان وفئة ووصف إلى قاعدة البيانات.
-- Player submits a quick stuck-at-pier report
TriggerServerEvent('agency-reports:server:submitReport', 'Stuck at pier', 'Stuck', 'Vehicle wedged under pier - cant move')agency-reports:server:requestPlayerDataيطلب المُستدعي بيانات بلاغاته؛ ويمكنه فتح واجهة اللاعب عند الرد.
اعرض المثال
يطلب المُستدعي بيانات بلاغاته، مع فتح واجهة اللاعب اختياريًا عند الرد.
-- Pull fresh data and (optionally) auto-open the player UI
TriggerServerEvent('agency-reports:server:requestPlayerData', true)agency-reports:server:requestAdminDataيطلب المشرف كامل بيانات البلاغات ويفتح لوحة الإدارة إن كان مسموحًا له.
اعرض المثال
يطلب المشرف كامل بيانات البلاغات ويفتح لوحة الإدارة إن كان مسموحًا له.
-- Admin staff opens the dashboard after going on duty
TriggerServerEvent('agency-reports:server:requestAdminData')agency-reports:server:sendChatMessageينشر رسالة دردشة في سلسلة بلاغ معيّن (مشرف أو لاعب).
اعرض المثال
ينشر رسالة دردشة في سلسلة بلاغ معيّن من المشرف أو اللاعب.
-- Player posts a follow-up chat message into report #42
TriggerServerEvent('agency-reports:server:sendChatMessage', 42, 'Still stuck, any ETA?')14Agency-Doorlock
أبواب قابلة للقفل مع إعداد داخل اللعبة وصلاحية لكل باب حسب الوظيفة أو العصابة أو اللاعب.
لسكربتات السكن أو العقارات أو المفاتيح: أعطِ اللاعب مفتاحًا لباب محدد واسحبه مرة أخرى. تُحفظ المفاتيح في قاعدة البيانات وتُزامَن فورًا، ولا يحتاج أحد إلى صلاحيات المشرف.
تصديرات العميل
ToggleNearestDoor()Locks or unlocks the door the player is standing at. The server checks access exactly like the E key.
اعرض المثال
يضيف مفتاحًا خاصًا بك (L) يقفل الباب الذي يقف عنده اللاعب أو يفتحه. يبقى التحقق من الصلاحية على الخادم.
RegisterCommand('lockdoor', function()
-- same as pressing E at the door; the server still checks access
exports['Agency-Doorlock']:ToggleNearestDoor()
end)
RegisterKeyMapping('lockdoor', 'Lock / unlock door', 'keyboard', 'L')GetNearbyDoorId()Returns the id of the door the player is standing at, or nil.
اعرض المثال
يقرأ الباب الذي يقف عنده اللاعب، مثلًا لربطه بمنزل في سكربتك.
local doorId = exports['Agency-Doorlock']:GetNearbyDoorId()
if doorId then
-- e.g. let the house owner pick this door when setting up keys
TriggerServerEvent('myhousing:server:linkDoor', doorId)
endGetAllDoors()Returns every door as { id, label, locked, static, leaves, access }. The PIN is never included.
اعرض المثال
يعرض كل الأبواب مع رقمها وحالة القفل. رمز PIN لا يُرسل أبدًا ضمن البيانات.
for _, door in ipairs(exports['Agency-Doorlock']:GetAllDoors()) do
print(('#%d %s - %s'):format(door.id, door.label, door.locked and 'locked' or 'open'))
endGetDoorCoords(doorId: number)Returns the position of the first door leaf as { x, y, z }, or nil.
اعرض المثال
يضع نقطة GPS عند باب، مثلًا لإرشاد اللاعب إلى منزله الجديد.
local c = exports['Agency-Doorlock']:GetDoorCoords(doorId)
if c then
SetNewWaypoint(c.x, c.y)
endتصديرات الخادم
AddPlayerAccess(doorId: number, player: number|string)Gives one player access to one door. Saved to the database and synced to every player at once. Returns true, or false plus a reason. true, "unchanged" if the player already had access.
اعرض المثال
مالك المنزل يعطي مفتاحًا للاعب آخر. سكربتك يتحقق من الملكية، و Agency-Doorlock يحفظ المفتاح ويزامنه فورًا. لا أحد يحصل على صلاحيات المشرف.
RegisterNetEvent('myhousing:server:giveKey', function(targetId, houseId)
local src = source
if not IsHouseOwner(src, houseId) then return end -- your own check
local doorId = GetHouseDoorId(houseId) -- id from /adoorlock
local ok, reason = exports['Agency-Doorlock']:AddPlayerAccess(doorId, tonumber(targetId))
if not ok then
print(('Key not given: %s'):format(reason))
end
end)RemovePlayerAccess(doorId: number, player: number|string)Takes the access away again. Saved and synced at once. Returns true, or false plus a reason. true, "unchanged" if there was nothing to remove.
اعرض المثال
يسحب المفتاح مرة أخرى، مثلًا عندما يغادر المستأجر. باستخدام citizenid يعمل ذلك حتى لو كان اللاعب غير متصل.
-- works while the player is offline: pass the citizenid
local ok, reason = exports['Agency-Doorlock']:RemovePlayerAccess(doorId, 'ABC12345')HasPlayerAccess(doorId: number, player: number|string)true if the player is on the door's player list. Job, gang and "everyone" access are not counted.
اعرض المثال
يتحقق مما إذا كان لدى اللاعب مفتاح شخصي لهذا الباب. لا يُحتسب الوصول عبر الوظيفة أو العصابة أو "everyone".
if exports['Agency-Doorlock']:HasPlayerAccess(doorId, source) then
TriggerClientEvent('myhousing:client:showKeyMenu', source, doorId)
endGetPlayerAccess(doorId: number)Returns a copy of the door's player list, or nil if the door does not exist.
اعرض المثال
يعرض كل من يملك مفتاحًا لباب، مثلًا لقائمة "إدارة المفاتيح". يعيد نسخة، وتعديلها لا يغيّر شيئًا.
for _, citizenid in ipairs(exports['Agency-Doorlock']:GetPlayerAccess(doorId) or {}) do
print('Key holder: ' .. citizenid)
endIsReady()false while the doors are still loading from the database after a start, true afterwards.
اعرض المثال
ينتظر بعد تشغيل الخادم حتى يتم تحميل الأبواب قبل أن يوزّع سكربتك المفاتيح.
CreateThread(function()
while not exports['Agency-Doorlock']:IsReady() do Wait(500) end
-- doors are loaded, safe to grant keys from your own database now
end)الأحداث
agency-doorlock:accessChangedFired on the server after AddPlayerAccess or RemovePlayerAccess changed a door. Arguments: doorId, identifier, granted (true / false). Listen with AddEventHandler.
اعرض المثال
سجل على الخادم لكل مفتاح يُعطى أو يُسحب، مثلًا لإرسال إشعار عبر Discord webhook.
AddEventHandler('agency-doorlock:accessChanged', function(doorId, identifier, granted)
print(('Door #%d: %s %s'):format(doorId, identifier, granted and 'got a key' or 'lost their key'))
end)15Agency-Hud
واجهة HUD متحركة مع لوحة قيادة المركبة وأشرطة الحالة وعداد السرعة وتكامل حزام الأمان.
إذا كان لديك اقتصاد مخصّص أو نظام احتياجات، فشغّل HUD من سكربتك بهذه الدوال بدلًا من الالتفاف عليه. يتولى HUD الحركة والحفظ عنك.
تصديرات العميل
GetVehicleSettings()تُرجع جدول إعدادات HUD المركبة المحلي (النمط، الموضع، الحجم، الوحدات، المفاتيح).
اعرض المثال
يقرأ جدول إعدادات HUD المركبة المحلي للفحص أو المزامنة.
local settings = exports['Agency-Hud']:GetVehicleSettings()
print('Speed unit:', settings.speedUnit)
print('HUD scale:', settings.scale)SetSpeedUnit(unit: string)يضبط وحدة سرعة المركبة ('kmh' أو 'mph') ويحفظها محليًا.
اعرض المثال
يحوّل عداد سرعة المركبة إلى ميل في الساعة ويحفظ ذلك محليًا.
RegisterCommand('usemph', function()
exports['Agency-Hud']:SetSpeedUnit('mph')
end)SetHunger(value: number)يحدّث قيمة الجوع المعروضة في HUD.
اعرض المثال
يرسل مستوى جوع اللاعب الحالي إلى HUD.
AddEventHandler('player:hungerChanged', function(value)
exports['Agency-Hud']:SetHunger(value)
end)SetThirst(value: number)يحدّث قيمة العطش المعروضة في HUD.
اعرض المثال
يرسل مستوى عطش اللاعب الحالي إلى HUD.
AddEventHandler('player:thirstChanged', function(value)
exports['Agency-Hud']:SetThirst(value)
end)SetStress(value: number)يحدّث قيمة التوتر المعروضة في HUD.
اعرض المثال
يحدّث مقياس التوتر في HUD من نظام توتر مخصّص.
AddEventHandler('jobstress:onTick', function(stress)
exports['Agency-Hud']:SetStress(stress)
end)SetMoney(value: number)يحدّث قيمة النقود المعروضة في HUD.
اعرض المثال
يحدّث مبلغ النقود المعروض في لوحة المحفظة في HUD.
AddEventHandler('wallet:cashChanged', function(cash)
exports['Agency-Hud']:SetMoney(cash)
end)SetBank(value: number)يحدّث قيمة الرصيد البنكي المعروضة في HUD.
اعرض المثال
يحدّث قيمة الرصيد البنكي المعروضة في HUD.
AddEventHandler('bank:balanceChanged', function(balance)
exports['Agency-Hud']:SetBank(balance)
end)SetJob(label: string)يضبط نص اسم الوظيفة المعروض في HUD.
اعرض المثال
يضبط اسم الوظيفة المعروض بعد أن يغيّر اللاعب مهنته.
AddEventHandler('job:onChange', function(job)
exports['Agency-Hud']:SetJob(job.label)
end)SetRank(rank: string)يضبط نص رتبة اللاعب المعروض في HUD.
اعرض المثال
يحدّث نص رتبة اللاعب المعروض بجانب اسم الوظيفة.
AddEventHandler('job:onGradeChange', function(grade)
exports['Agency-Hud']:SetRank(grade.label)
end)GetDetectedFramework()تُرجع مفتاح إطار العمل المُكتشف تلقائيًا (qb, esx, qbox, ox, nd, standalone).
اعرض المثال
يقرأ مفتاح إطار العمل المُكتشف لتفريع منطق HUD مخصّص.
local fw = exports['Agency-Hud']:GetDetectedFramework()
if fw == 'qb' then
print('QB-Core detected')
endالأحداث
Agency-HUD:client:applyVehicleSettingsPatchيطبّق تعديلًا جزئيًا على إعدادات المركبة في HUD المركبة المحلي.
اعرض المثال
يطبّق تعديلًا جزئيًا على إعدادات HUD المركبة لدى العميل المحلي.
TriggerEvent('Agency-HUD:client:applyVehicleSettingsPatch', {
style = 'modern',
speedUnit = 'kmh'
})Agency-HUD:client:openAdminMenuيفتح واجهة NUI لقائمة المشرف لدى اللاعب المستلم.
اعرض المثال
يفتح واجهة NUI لقائمة HUD الخاصة بالمشرف لدى العميل المستلم.
TriggerEvent('Agency-HUD:client:openAdminMenu')Agency-HUD:server:checkAdminPermissionيتحقق من صلاحيات المشرف لدى المُستدعي ويفتح قائمة المشرف عند النجاح.
اعرض المثال
يطلب من الخادم التحقق من صلاحيات المشرف وفتح قائمة إدارة HUD.
RegisterCommand('checkhudadmin', function()
TriggerServerEvent('Agency-HUD:server:checkAdminPermission')
end)Agency-HUD:server:saveGlobalSettingsحفظ إعدادات HUD العامة للمشرفين فقط؛ ويبث المزامنة.
اعرض المثال
يحفظ إعدادات HUD عامة جديدة (للمشرفين فقط) ويبثها.
TriggerServerEvent('Agency-HUD:server:saveGlobalSettings', {
style = 'modern',
accent = '#ff6b00'
})Agency-HUD:server:requestGlobalSettingsيُرجع الإعدادات العامة الحالية إلى العميل الطالب.
اعرض المثال
يطلب إعدادات HUD العامة الحالية عند بدء المورد.
AddEventHandler('onClientResourceStart', function(res)
if res == GetCurrentResourceName() then
TriggerServerEvent('Agency-HUD:server:requestGlobalSettings')
end
end)Agency-HUD:server:requestTimeيُرجع وقت الخادم الحالي إلى المُستدعي لساعة HUD.
اعرض المثال
يسأل ساعة الخادم كل دقيقة لتحديث عرض الوقت في HUD.
CreateThread(function()
while true do
TriggerServerEvent('Agency-HUD:server:requestTime')
Wait(60000)
end
end)16Agency-Progressbar V2
شريط تقدّم متحرك بواجهة زجاجية و4 سمات وإجراءات قابلة للإلغاء وتصديرات للعميل والخادم.
استخدمه في أي مكان تعرض فيه عادةً «أفعل كذا لمدة كذا ثانية». يستبدل عدة موارد قديمة لأشرطة التقدّم بواجهة واحدة متسقة في خادمك كله.
تصديرات العميل
StartProgress(data: table)يبدأ شريط تقدّم مع النص والمدة والسمة والحركة واستدعاءات onFinish وonCancel.
اعرض المثال
يبدأ تقدّم فتح قفل لمدة 8 ثوانٍ مع حركة واستدعاء عند الانتهاء.
exports['Agency-Progressbar']:StartProgress({
label = 'Picking lock...',
duration = 8000,
animation = { dict = 'anim@heists@fleeca_bank@drilling', clip = 'drill_straight_idle' },
onFinish = function() TriggerServerEvent('garage:lockpicked', vehNet) end,
onCancel = function() print('Lockpick cancelled') end
})StopProgress(completed: boolean)يوقف شريط التقدّم النشط ويمرّر حالة الإكمال إلى onFinish.
اعرض المثال
يلغي شريط التقدّم النشط حين يضغط اللاعب X.
if IsControlJustPressed(0, 73) then
exports['Agency-Progressbar']:StopProgress(false)
endIsProgressActive()تُرجع هل يوجد شريط تقدّم نشط حاليًا.
اعرض المثال
يمنع بدء عملية تصنيع جديدة ما دام شريط تقدّم نشطًا.
if exports['Agency-Progressbar']:IsProgressActive() then
return
end
startCrafting()GetProgressPercentage()تُرجع نسبة الإكمال الحالية من 0 إلى 100 للشريط النشط.
اعرض المثال
يُطلق خطوة في لعبة مصغّرة حين يتجاوز شريط التقدّم 75 بالمئة.
CreateThread(function()
while exports['Agency-Progressbar']:IsProgressActive() do
local pct = exports['Agency-Progressbar']:GetProgressPercentage()
if pct > 75 then SendMinigameTick() end
Wait(100)
end
end)SetProgressTheme(theme: string)يحدّث سمة شريط التقدّم مباشرة (مثل 'modern').
اعرض المثال
يحوّل مظهر شريط التقدّم النشط إلى السمة الحديثة.
RegisterCommand('darkbar', function()
exports['Agency-Progressbar']:SetProgressTheme('modern')
end)SetProgressPosition(position: string)يحدّث موضع شريط التقدّم على الشاشة مباشرة.
اعرض المثال
ينقل شريط التقدّم النشط إلى أسفل منتصف الشاشة.
RegisterCommand('barbottom', function()
exports['Agency-Progressbar']:SetProgressPosition('bottom-center')
end)TryReload(usedItem?: string)يبدأ عملية آمنة لإعادة تعبئة السلاح (يُتحقق من نوع الذخيرة والعنصر على الخادم).
اعرض المثال
يبدأ إعادة تعبئة يتحقق منها الخادم باستخدام عنصر علبة ذخيرة 9mm.
RegisterKeyMapping('+reload', 'Reload weapon', 'keyboard', 'R')
RegisterCommand('+reload', function()
exports['Agency-Progressbar']:TryReload('ammo-9')
end)UseConsumable(itemName: string, isDrink: boolean)يشغّل تقدّم الأكل أو الشرب مع الحركة للعنصر المحدد.
اعرض المثال
يشغّل حركة الشرب ويطبّق زيادة العطش عند استخدام الماء.
RegisterNetEvent('inventory:useItem', function(item)
if item == 'water_bottle' then
exports['Agency-Progressbar']:UseConsumable('water_bottle', true)
end
end)تصديرات الخادم
StartProgressForPlayer(playerId: number, data: table)يبدأ من الخادم شريط تقدّم لدى لاعب معيّن.
اعرض المثال
يبدأ شريط تقدّم لرفع صندوق لمدة 5 ثوانٍ لدى اللاعب الطالب.
RegisterCommand('lift', function(source)
exports['Agency-Progressbar']:StartProgressForPlayer(source, {
label = 'Lifting crate...',
duration = 5000
})
end, false)StopProgressForPlayer(playerId: number, completed?: boolean)يوقف شريط التقدّم النشط لدى لاعب معيّن.
اعرض المثال
يلغي من الخادم شريط التقدّم النشط لدى لاعب مستهدف.
RegisterNetEvent('admin:cancelProgress', function(targetId)
exports['Agency-Progressbar']:StopProgressForPlayer(targetId, false)
end)StartProgressForAllPlayers(data: table)يبث شريط تقدّم إلى كل اللاعبين المتصلين.
اعرض المثال
يبث شريط تقدّم لتحذير من عاصفة لمدة 30 ثانية إلى كل اللاعبين.
RegisterNetEvent('event:weatherWarning', function()
exports['Agency-Progressbar']:StartProgressForAllPlayers({
label = 'Storm incoming - take shelter',
duration = 30000
})
end)StopProgressForAllPlayers(completed?: boolean)يوقف شريط التقدّم النشط لدى كل اللاعبين المتصلين.
اعرض المثال
يوقف شريط تقدّم تحذير العاصفة العام لدى كل اللاعبين.
RegisterNetEvent('event:weatherCleared', function()
exports['Agency-Progressbar']:StopProgressForAllPlayers(true)
end)الأحداث
Agency:Progressbar:LoadSettingsيحمّل من قاعدة البيانات إلى العميل إعدادات الواجهة لكل لاعب (الموضع، اللون، الحجم، النمط).
اعرض المثال
يحمّل إعدادات واجهة شريط التقدّم المحفوظة للاعب عند الظهور.
AddEventHandler('playerSpawned', function()
TriggerEvent('Agency:Progressbar:LoadSettings')
end)agency-progressbar:client:startيبدأ شريط التقدّم لدى العميل المستلم بالبيانات المُمرَّرة.
اعرض المثال
يبدأ شريط تقدّم لإصلاح المحرك لمدة 12 ثانية يمكن إلغاؤه.
TriggerEvent('agency-progressbar:client:start', {
label = 'Repairing engine...',
duration = 12000,
canCancel = true
})agency-progressbar:client:stopيوقف شريط التقدّم النشط مع علامة الإكمال.
اعرض المثال
يوقف شريط التقدّم النشط حين يُكبَّل اللاعب.
RegisterNetEvent('police:cuffed', function()
TriggerEvent('agency-progressbar:client:stop', false)
end)agency:consumables:useFoodجسر المخزون لاستهلاك عنصر طعام (حركة + تطبيق آمن على الخادم).
اعرض المثال
يُشغّل جسر الطعام في المخزون لاستهلاك عنصر شطيرة.
TriggerEvent('agency:consumables:useFood', 'sandwich')agency:consumables:useDrinkجسر المخزون لاستهلاك عنصر شراب (حركة + تطبيق آمن على الخادم).
اعرض المثال
يُشغّل جسر الشراب في المخزون لاستهلاك عنصر كوب قهوة.
TriggerEvent('agency:consumables:useDrink', 'coffee_cup')Agency:Progressbar:SaveSettingsيتحقق من إعدادات واجهة شريط التقدّم للاعب ويحفظها في قاعدة البيانات.
اعرض المثال
يحفظ تفضيلات واجهة شريط التقدّم للاعب في قاعدة البيانات.
TriggerServerEvent('Agency:Progressbar:SaveSettings', {
position = 'top-right',
color = '#00aaff',
scale = 1.2
})agency-progressbar:server:startمُشغّل على الخادم لبدء شريط تقدّم لدى هدف (أو لدى المُستدعي نفسه).
اعرض المثال
مُشغّل على الخادم لبدء شريط تحميل صندوق لمدة 6 ثوانٍ لدى هدف.
RegisterCommand('movecrate', function(source)
TriggerEvent('agency-progressbar:server:start', source, {
label = 'Loading crate onto truck',
duration = 6000
})
end, false)agency-progressbar:server:stopمُشغّل على الخادم لإيقاف شريط تقدّم لدى هدف (أو لدى المُستدعي نفسه).
اعرض المثال
مُشغّل على الخادم لإيقاف شريط تقدّم لدى هدف مع حالة الإلغاء.
RegisterNetEvent('admin:abortJob', function(targetId)
TriggerEvent('agency-progressbar:server:stop', targetId, false)
end)agency:reload:requestيتحقق من الذخيرة والسلاح والعنصر قبل السماح بإعادة التعبئة للاعب الطالب.
اعرض المثال
يطلب من الخادم التحقق من الذخيرة ومنح إعادة تعبئة للمسدس.
TriggerServerEvent('agency:reload:request', 'WEAPON_PISTOL', 'ammo-9')agency:consumables:applyيتحقق من المخزون، ويزيل عنصرًا واحدًا، ويطبّق زيادة الجوع والعطش.
اعرض المثال
يطلب من الخادم إزالة عنصر الطعام وتطبيق زيادة الجوع.
RegisterNetEvent('food:onEatStart', function(itemName)
TriggerServerEvent('agency:consumables:apply', itemName)
end)17Agency-Notify V2
نظام إشعارات بنمطي V1 وV2 وأولوية ذكية عبر AgencyAI وحماية من الرسائل المزعجة وحفظ في قاعدة البيانات.
استبدل كل موارد الإشعارات الأخرى على خادمك (qb-notify وesx_notify وmythic_notify وokok-notify وغيرها) بمظهر واحد متسق. ويحدّ نظام الأولوية في AgencyAI تلقائيًا من الإشعارات المزعجة.
تصديرات العميل
Notify(data: { title, text, type, duration, ... })Displays a v2 notification with optional Smart Mode priority/duration/spam handling.
اعرض المثال
يرسل إشعار نجاح لمدة 6 ثوانٍ يعلن عن هدف في سرقة كبرى.
exports['Agency-Notify']:Notify({
title = 'Bank Heist',
text = 'Vault drilled, grab the loot!',
type = 'success',
duration = 6000
})الأحداث
Agency:Notify:Sendنقطة دخول قديمة v1 لعرض إشعار بالبيانات نفسها التي يستخدمها التصدير.
اعرض المثال
حدث عميل قديم v1 يعرض البيانات نفسها التي يعرضها التصدير.
TriggerEvent('Agency:Notify:Send', {
title = 'Old Notify',
text = 'Legacy v1 entry point still works',
type = 'info'
})Agency:Notify:LoadSettingsيطبّق إعدادات الواجهة المحفوظة لكل لاعب من الخادم (الموضع، اللون، الحجم، النمط).
اعرض المثال
يحمّل إعدادات واجهة الإشعارات المحفوظة لكل لاعب عند الظهور.
AddEventHandler('playerSpawned', function()
TriggerEvent('Agency:Notify:LoadSettings')
end)Agency:Notify:SaveSettingsيتحقق من إعدادات الإشعارات للاعب ويحفظها (الموضع، لون التمييز، الحجم، النمط).
اعرض المثال
يحفظ موضع إشعارات اللاعب ولون التمييز والحجم في قاعدة البيانات.
TriggerServerEvent('Agency:Notify:SaveSettings', {
position = 'top-right',
accent = '#ff8800',
scale = 1.1,
style = 'modern'
})18Agency-Seatbelt V2
حزام أمان مع فيزياء القذف وأصوات ثلاثية الأبعاد ودعم عدة ركّاب وتكامل مع HUD.
اربط الحالة بواجهة HUD الخاصة بك، أو فعّلها إجباريًا في بداية مطاردة الشرطة أو الهروب من سرقة كبرى. تصديرات التفعيل والتعطيل الإجباري رائعة للحظات لعب الأدوار.
تصديرات العميل
isSeatbeltOn()تُرجع true ما دام حزام اللاعب المحلي مربوطًا، سواء ربطه بنفسه أو ربطته السيارة.
اعرض المثال
يعطّل التحكم في النزول من المركبة ما دام الحزام مربوطًا.
if exports['Agency-Seatbelt']:isSeatbeltOn() then
DisableControlAction(0, 75, true)
endenableSeatbelt()يربط حزام اللاعب المحلي مع الصوت والتنبيه المعتادين.
اعرض المثال
يربط حزام أمان اللاعب المحلي مع تنبيه HUD وصوت.
RegisterNetEvent('vehicle:autoBuckle', function()
if IsPedInAnyVehicle(PlayerPedId(), false) then
exports['Agency-Seatbelt']:enableSeatbelt()
end
end)disableSeatbelt()يفك حزام اللاعب المحلي مع الصوت والتنبيه المعتادين.
اعرض المثال
يفك حزام أمان اللاعب المحلي عند مغادرة المركبة.
RegisterNetEvent('vehicle:onExit', function()
exports['Agency-Seatbelt']:disableSeatbelt()
end)toggleSeatbelt()يبدّل حزام اللاعب المحلي. يُرجع true عندما تتغير الحالة فعلًا، لا الحالة الجديدة، حتى يمكن تمييز التبديل المرفوض (لا مركبة، أو لا حزام في هذا المقعد) عن التبديل الناجح.
اعرض المثال
يبدّل حالة ربط حزام أمان اللاعب المحلي عند الضغط على مفتاح.
RegisterKeyMapping('+seatbelt', 'Toggle seatbelt', 'keyboard', 'B')
RegisterCommand('+seatbelt', function()
exports['Agency-Seatbelt']:toggleSeatbelt()
end)isAutoBuckled()تُرجع true ما دام الحزام قد ربطته السيارة وليس اللاعب.
autoBuckle(on: boolean)يربط الحزام أو يفكه كحزام تلقائي، بالطريقة نفسها التي تفعلها السيارة ذاتية القيادة.
getSeatbeltState()تُرجع جدولًا فيه حالة الربط، وهل هو تلقائي، والمقعد، والمركبة.
setSeatbeltEnabled(on: boolean)يعطّل نظام الحزام بالكامل لهذا اللاعب أو يفعّله، للمشاهد السينمائية أو حالات الإدارة.
isPlayerSeatbeltOn(serverId: number)تُرجع حالة حزام لاعب آخر، مقروءة من حقيبة الحالة المنسوخة state bag.
bucklesItselfVehicle(vehicle: number)تُرجع هل تربط هذه المركبة ركّابها بنفسها، وفق قائمة الطرازات أو حقيبة الحالة agAuto.
openSettings()يفتح بطاقة الإعدادات.
closeSettings()يغلق بطاقة الإعدادات.
isSettingsOpen()تُرجع هل بطاقة الإعدادات مفتوحة.
تصديرات الخادم
isSeatbeltOn(source: number)تُرجع على الخادم حالة حزام لاعب، مقروءة من حقيبة الحالة المنسوخة state bag.
getBuckledPlayers()تُرجع معرّفات الخادم لكل اللاعبين الذين يربطون الحزام حاليًا.
setSeatbelt(source: number, on: boolean)يربط حزام لاعب أو يفكه من الخادم.
الأحداث
Agency-HUD:seatbeltStateChangedيُطلق عند كل تغيير مع الحالة الجديدة. يستمع إليه Agency-HUD، ويمكن لأي مورد آخر ذلك أيضًا.
19Agency-Elevator
نظام مصاعد واقعي بواجهة Liquid Glass وأداة تهيئة.
مثالي داخل سكربتات الشقق والسكن، ومقر الشرطة، والمستشفى، أو أي مبنى داخلي متعدد الطوابق. استخدم أداة التهيئة لوضع المصاعد بصريًا دون لمس ملفات الإعدادات.
الأحداث
Agency-Elevator:server:requestTravelيتحقق من صلاحية الوظيفة ثم ينقل العميل إلى الطابق المحدد.
اعرض المثال
يطلب من الخادم التحقق من الصلاحية ثم الانتقال إلى الطابق 3 من مصعد.
TriggerServerEvent('Agency-Elevator:server:requestTravel', 'lspd-tower-1', 3)Agency-Elevator:server:travelCompleteيؤكد وصول العميل ويرسل إشعار «وصلت إلى الطابق».
اعرض المثال
يخبر الخادم بأن اللاعب وصل إلى الطابق 3 لإرسال إشعار الوصول.
TriggerServerEvent('Agency-Elevator:server:travelComplete', 'lspd-tower-1', 3)Agency-Elevator:server:requestElevatorsيزامن قائمة المصاعد المحمّلة من قاعدة البيانات مع العميل الطالب.
اعرض المثال
يطلب قائمة المصاعد كاملة من الخادم عند تهيئة العميل.
AddEventHandler('onClientResourceStart', function(res)
if res == GetCurrentResourceName() then
TriggerServerEvent('Agency-Elevator:server:requestElevators')
end
end)Agency-Elevator:server:saveElevatorيُدرج مصعدًا (المعرّف، الاسم، الطوابق) في MySQL أو يحدّثه، بشرط الصلاحية.
اعرض المثال
إدراج أو تحديث مصعد من المشرف بطابق واحد باسم Lobby.
TriggerServerEvent('Agency-Elevator:server:saveElevator', {
id = 'lspd-tower-1',
label = 'LSPD HQ',
floors = { { name = 'Lobby', coords = vector3(441.0, -981.5, 30.7) } }
})Agency-Elevator:server:loadElevatorيعيد بيانات مصعد واحد إلى واجهة NUI للمُهيّئ لتعديلها.
اعرض المثال
يحمّل بيانات مصعد واحد في واجهة NUI للمُهيّئ لتعديلها.
TriggerServerEvent('Agency-Elevator:server:loadElevator', 'lspd-tower-1')Agency-Elevator:server:saveSettingsيحفظ إعدادات الواجهة (الموضع، الحجم، لون التمييز) في MySQL ويعيد مزامنة كل العملاء.
اعرض المثال
يحفظ موضع واجهة المصعد ولون التمييز والحجم ويعيد مزامنة كل العملاء.
TriggerServerEvent('Agency-Elevator:server:saveSettings', {
position = 'top-right',
accent = '#22c55e',
scale = 1.0
})Agency-Elevator:client:startTravelيشغّل التلاشي والحركة، وينقل الشخصية إلى إحداثيات الطابق المستهدف، ثم يعيد المزامنة.
اعرض المثال
يشغّل التلاشي والحركة ثم ينقل الشخصية إلى الطابق 2 من المرآب.
TriggerEvent('Agency-Elevator:client:startTravel', 'parking-garage', 2)Agency-Elevator:client:applySettingsيرسل إعدادات الواجهة (لون التمييز، الحجم، الموضع) إلى NUI.
اعرض المثال
يطبّق لون تمييز واجهة NUI للمصعد وحجمها وموضعها لدى العميل المحلي.
TriggerEvent('Agency-Elevator:client:applySettings', {
accent = '#0ea5e9',
scale = 0.9,
position = 'bottom-left'
})Agency-Elevator:client:openConfiguratorيفتح واجهة NUI لمُهيّئ المشرف مع قائمة المصاعد الحالية والإعدادات.
اعرض المثال
يفتح واجهة NUI لمُهيّئ المشرف مع قائمة المصاعد الحالية.
TriggerEvent('Agency-Elevator:client:openConfigurator')Agency-Elevator:client:refreshConfiguratorيحدّث المُهيّئ المفتوح بعد الحفظ أو الحذف دون إغلاقه.
اعرض المثال
يحدّث واجهة NUI للمُهيّئ المفتوحة بعد الحفظ دون إغلاقها.
AddEventHandler('Agency-Elevator:server:elevatorSaved', function()
TriggerEvent('Agency-Elevator:client:refreshConfigurator')
end)20Agency-Multicharacter
نظام سينمائي لاختيار وإنشاء الشخصيات لـ FiveM. تقف كل شخصية في مشهد يناسب وظيفتها، الشرطة بجانب الدورية، المسعفون بجانب سيارة الإسعاف، الميكانيكيون في الورشة، مرتدية ملابسها المحفوظة، مع صورتها الشخصية، الوظيفة، العصابة، النقود، البنك، رقم الهاتف، وقت اللعب وآخر موقع على بطاقة منسقة. تحصل الشخصيات الجديدة على قواعد للاسم والعمر، قائمة جنسيات قابلة للبحث والطول، ثم يفتح clothing script الخاص بالسيرفر تلقائياً. يمكن بيع الخانات عبر Tebex: يفتحها المشترون باستخدام transaction id الخاص بهم. يبدل اللاعبون الشخصيات باستخدام /logout. يتم التعرف تلقائياً على Framework وclothing script وinventory وspawn selector وloading screen؛ كما يتم نقل الشخصيات الحالية وأوقات اللعب والخانات المشتراة من multicharacter القديم. يدعم QBCore أو Qbox أو ESX أو standalone بالكامل مع نظام حفظ شخصيات خاص به، 25 لغة، ويتوافق اللون مع شعار السيرفر.
تصديرات العميل
IsOpen()True while the character selection is open.
OpenSelection()Opens the selection, for example from your own logout button.
تصديرات الخادم
GetCharacter(source)The loaded character (standalone: the full record).
GetCharacterId(source)citizenid, ESX identifier or agency:<id> of the loaded character.
IsInSelection(source)True while the player is in the selection.
GetSlots(license)Slots of a licence.
AddSlots(license, amount)Adds slots, returns the new total.
Logout(source)Saves the character and opens the selection.
الأحداث
agency-multicharacter:server:loadedA character was loaded or created (source, charid, isNew).
agency-multicharacter:server:deletedA character was deleted (source, charid).
agency:selectiontrue while a selection screen is open, HUDs can hide themselves.
21Agency-Spawn
نظام spawn selector بكاميرا حية لـ FiveM. أثناء تصفح اللاعب، تحلق الكاميرا فوق Los Santos إلى كل موقع؛ واختيار موقع ينقلهم من السماء إلى شخصيتهم مباشرة. يوفر آخر موقع، نقاط ظهور عامة من قائمة واحدة، نقاط ظهور للوظائف والعصابات تراها الشخصيات المعنية فقط، كل منزل في Agency Housing تملكه الشخصية أو تمتلك مفتاحاً له، qb-apartments ونقطة وصول ثابتة للشخصيات الجديدة. يمكن للاعبين تفعيل auto spawn عند آخر موقع لهم. يستجيب لأحداث qb-spawn وapartment، مما يتيح لمعظم سكربتات multicharacter فتحه دون أي تعديل، ويعمل بتوافق تام مع Agency Multicharacter. يدعم QBCore أو Qbox أو ESX أو standalone، 25 لغة، ويتوافق اللون مع شعار السيرفر.
تصديرات العميل
Open(options)Opens the selector. options.isNew = true sends new characters to the arrival point.
IsOpen()True while the selector is open.
الأحداث
agency-spawn:client:spawnedThe character landed (id, kind).
agency-spawn:server:spawnedA player spawned (source, id, kind).
qb-spawn:client:setupSpawns / openUIAnswered when qb-spawn is not running, so other multicharacters open Agency Spawn.
22Agency-Housing
نظام سكن قائم على قاعدة بيانات لـ FiveM. يكتشف QBCore وQBox وESX تلقائياً، أو يعمل بشكل مستقل تماماً دون أي إطار عمل. تُبنى المنازل داخل اللعبة عبر منشئ خطوة بخطوة بدلاً من ملف الإعدادات: الديكورات الداخلية والهياكل وMLO ومباني الشقق كاملةً بما يصل إلى 40 شقة خلف باب أمامي واحد، مع حدود ملكية لكل قطعة أرض تظهر من الجو. يشتري اللاعبون المنازل ويبيعونها لبعضهم، ويؤجّرون ويستأجرون، ويتصفحون كل العروض في السوق ويدفعون الإيجار مسبقاً. الأموال التي تصل أثناء غياب اللاعب عن الخادم تُصرف له عند تسجيل دخوله التالي. تشمل الحزمة المفاتيح، وقفل أبواب MLO مع القفل التلقائي وجرس الباب، وتأثيث من كتالوج يضم أكثر من 1,300 عنصر، وكاميرات المراقبة، والخزانة المدمجة، كما يوفر تطبيق Housing التحكم بالأقفال والكاميرات المباشرة على Agency Phone وAgency Pad وlb-phone وqs-smartphone-pro. تُكتشف سكربتات المخزون والملابس والكراجات تلقائياً، وقاعدة البيانات تُحدّث نفسها، وكل شيء يُحفظ في MySQL.
تصديرات العميل
IsInsideHouse()تُرجع true ما دام اللاعب داخل منزل.
GetCurrentHouse()المنزل الذي يوجد فيه اللاعب حاليًا، أو nil.
LeaveHouse()يعيد اللاعب إلى الخارج عبر المدخل.
GetHouseAtPoint(coords)أول منزل تشمل حدود عقاره هذه الأرض.
GetHousesAtPoint(coords)كل المنازل التي تشمل هذه الأرض، للقطع المتداخلة مثل مبنى شقق.
GetCurrentProperty()القطعة التي يقف عليها اللاعب الآن، أو nil.
IsOnProperty(houseId)هل يقف اللاعب على عقار ذلك المنزل.
GetHouseZone(houseId)شكل الحدود المحفوظ لمنزل.
GetAccent()لون التمييز الذي اختاره اللاعب في Housing > الإعدادات.
GetAppUrl(theme)عنوان صفحة تطبيق Housing لإضافة التطبيق إلى أي هاتف آخر. مرّر 'light' أو 'dark' لفرض سمة معينة.
GetAppData()كل ما يعرضه تطبيق Housing: المنازل التي يملكها اللاعب أو يستأجرها أو يحتفظ بمفتاح لها.
AppAction(action, houseId)ينفذ إجراءً من التطبيق لمنزل: 'waypoint' أو 'lock' أو 'cams'.
تصديرات الخادم
GetHouses()كل المنازل على الخادم، مفهرسة حسب المعرّف.
GetPlayerHouses(source)المنازل التي يملكها ذلك اللاعب.
HasHouseAccess(source, houseId)هل يملك ذلك اللاعب المنزل أو يحمل مفتاحًا له.
GetHouseAtPoint(coords)أول منزل تشمل حدود عقاره هذه الأرض.
GetHousesAtPoint(coords)كل المنازل التي تشمل هذه الأرض، للقطع المتداخلة.
GetHouseZone(houseId)شكل الحدود المحفوظ لمنزل.
الأحداث
agency-housing:client:enteredZoneيُطلق مع (houseId, house) عندما يدخل اللاعب إلى عقار، حتى لا يحتاج سكربت وظيفة أو سطو إلى الاستعلام المتكرر.
agency-housing:client:leftZoneيُطلق مع (houseId, house) عندما يغادر اللاعب عقارًا.
agency-housing:garage:openيُطلق مع (houseId, houseName) عند استخدام كراج منزل وكان Config.Garage.script يساوي 'event'، لكي يتمكن سكربت الكراج الخاص بك من فتحه.
23Agency-Banking
بنك متكامل لـ FiveM يعمل على QBCore أو Qbox أو ESX أو بشكل مستقل تمامًا. يحصل اللاعبون على محفظة تضم الرصيد البنكي والنقد، وبطاقات بنكية بأربعة تصاميم، وتحويلات بالمعرّف أو إلى لاعبين قريبين، وودائع ثابتة بفائدة يحددها الخادم وحده، وتداول الأسهم والعملات الرقمية، ورمز PIN للصراف، وسجل كامل للعمليات. ودون إطار عمل يدير البنك حساباته الخاصة، ويمكن للموارد الأخرى استخدامه نظامًا ماليًا عبر تصديرات الخادم. إلى جانب تصميمين للقائمة، و13 لغة، وعلامات أو qb-target / ox_target، ومنزلق لحجم العرض لكل لاعب، وجداول تُنشأ تلقائيًا عند التشغيل الأول، وتطبيق Agency Companion المجاني للرصيد والتحويلات والودائع والبطاقات أثناء التنقل.
تصديرات العميل
OpenBank()يفتح البنك للاعب المحلي أينما كان.
OpenATM()يفتح شاشة رمز PIN للصراف للاعب المحلي. يجب أن يكون اللاعب قد أنشأ رمز PIN في أحد البنوك أولًا.
تصديرات الخادم
GetBankBalance(source)يُرجع رصيد اللاعب البنكي، على أي إطار عمل وفي الوضع المستقل.
GetCashBalance(source)يُرجع النقود التي يملكها اللاعب.
AddBankMoney(source, amount, reason)يضيف مالًا إلى الرصيد البنكي. يُرجع true عند النجاح، ويتحدّث البنك المفتوح تلقائيًا.
RemoveBankMoney(source, amount, reason)يسحب مالًا من الرصيد البنكي. يُرجع false عندما يكون الرصيد غير كافٍ، ولا يُسحب شيء عندها.
AddCashMoney(source, amount, reason)يضيف نقودًا. يُرجع true عند النجاح.
RemoveCashMoney(source, amount, reason)يسحب نقودًا. يُرجع false عندما لا يكفي المبلغ، ولا يُسحب شيء عندها.
AddTransaction(identifier, type, amount, reason)يكتب إدخالًا في سجل عمليات اللاعب بواسطة المعرّف (citizenid في QBCore وQbox، وidentifier في ESX، والترخيص في الوضع المستقل).
GetFramework()يُرجع إطار العمل الذي اكتشفه البنك: qbcore أو esx أو standalone.
الأحداث
agency_banking:client:OpenBankأطلقه من الخادم لفتح البنك لذلك اللاعب.
agency_banking:client:MoneyChangedأطلقه من الخادم بعد أن يغيّر سكربت آخر مال اللاعب، فيتحدّث البنك المفتوح.
ما زلت عالقًا بعد هذه الصفحة؟ فريق الدعم يتولّى الأمر من هنا.