core
مرجع الـ API للكور
هذا التوثيق للمطورين اللي يسوون سكربتات لفريمورك JRS Core
Export#
GetCore هو export مشترك يرجع جدول الكور اللي فيه كل دوال القراءة والتعديل في JRS Core. بعض دوال القراءة والتعديل للكلاينت فقط وبعضها للسيرفر فقط.
مشترك (Shared)
GetCore#
returntableجدول الكور اللي فيه كل دوال القراءة والتعديل.
local Core = exports.jrs_core:GetCore()تسجيل وظايف السيرفر
يخليك تعطي اللاعبين الوظايف والرتب الصحيحة بس، ويمنعهم من استخدام وظايف ورتب غلط.
جهة السيرفر
RegisterJobs#
سجّل الوظايف في السيرفر، وتنحفظ في ملف config/jobs.lua في jrs core، وبعدها تقدر تسجلها تلقائياً بدالة RegisterJobs أو يدوياً بإضافتها لملف lua.
jobsDatatablerequiredبيانات الوظيفة جدول فيه المفاتيح هذي:
jobname:stringاسم الوظيفة هو المفتاح وبيانات الوظيفة هي القيمة.groups:arrayاختياري، إذا تبي بس هذي المجموعة تقدر تعطي هذي الوظيفة.privateJob:booleanإذا true، الوظيفة تكون خاصة وما أحد يقدر يعطيها.grades:tableأضف الرتب بس إذا تستخدم رتب[grade]:tableرقم الرتبة هو المفتاح وبيانات الرتبة هي القيمة.label:stringاسم الرتبة المعروضprivateGrade:booleanإذا true، الرتبة تكون خاصة وما أحد يقدر يعطيها.
resourceNamestringrequiredاسم الريسورس اللي تتسجل له الوظايف (للتصحيح)
local jobsData <const> = {
jobname = {
groups = {"admin"} -- optional, if you wish to set this job to only this group can give this job.
privateJob = true -- if true, the job will be private no one can give this job.
grades = { -- only add grades if you use grades
[1] = {
label = "Grade Label"
privateGrade = true -- if true, the grade will be private no one can give this grade.
}
}
}
}
if Core.RegisterJobs then
Core.RegisterJobs(jobsData, GetCurrentResourceName())
else
print("Core.RegisterJobs is not available update jrs core to the latest version")
endالإشعارات
الإشعارات تقبل -1 كمدة عشان تبقى على الشاشة دائماً، وعشان تمسحها لازم تستخدم UiFeedClearChannel
مشترك (Shared)
NotifyLeft#
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
durationnumberrequiredالمدة بالملي ثانية
colorstringrequiredلون الإشعار
Core.NotifyLeft("title", "subtitle", "dict", "icon", 4000, "color")NotifyTip#
titlestringrequiredعنوان الإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyTip("title", 4000)NotifyRightTip#
titlestringrequiredعنوان الإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyRightTip("title", 4000)NotifyObjective#
titlestringrequiredعنوان الإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyObjective("title", 4000)NotifyTop#
titlestringrequiredعنوان الإشعار
locationstringrequiredالمكان المعروض
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyTop("title", "location", 4000)NotifySimpleTop#
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifySimpleTop("title", "subtitle", 4000)NotifyAvanced#
titlestringrequiredعنوان الإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
colorstringrequiredلون الإشعار
durationnumberrequiredالمدة بالملي ثانية
qualitynumberrequiredيفعّل نجوم الجودة مثل نجوم جلود الحيوانات
showQualitybooleanrequiredيعرض جودة الإشعار
Core.NotifyAvanced("title", "dict", "icon", "color", 4000, quality, showQuality)NotifyCenter#
titlestringrequiredعنوان الإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyCenter("title", 4000)NotifyBottomRight#
titlestringrequiredعنوان الإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyBottomRight("title", 4000)NotifyFail#
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyFail("title", "subtitle", 4000)NotifyDead#
titlestringrequiredعنوان الإشعار
audiorefstringrequiredمرجع الصوت
audionamestringrequiredاسم الصوت
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyDead("title", "audioref", "audioname", 4000)NotifyUpdate#
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyUpdate("title", "subtitle", 4000)NotifyWarning#
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
audiorefstringrequiredمرجع الصوت
audionamestringrequiredاسم الصوت
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyWarning("title", "subtitle", "audioref", "audioname", 4000)NotifyLeftRank#
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
durationnumberrequiredالمدة بالملي ثانية
colorstringrequiredلون الإشعار
Core.NotifyLeftRank("title", "subtitle", "dict", "icon", 4000, "color")NotifyOneSimpleTop#
titlestringrequiredعنوان الإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyOneSimpleTop("title", 4000)NotifyThreeSimpleTop#
titlestringrequiredعنوان الإشعار
descriptionstringrequiredوصف الإشعار
second_descriptionstringrequiredالوصف الثاني للإشعار
durationnumberrequiredالمدة بالملي ثانية
Core.NotifyThreeSimpleTop("title","description","second_description", 4000)NotifyLeftInteractive#
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
durationnumberrequiredالمدة بالملي ثانية أو -1 لعرض دائم
colorstringrequiredلون الإشعار
Core.NotifyLeftInteractive("title", "subtitle", "dict", "icon", 4000, "color")NotifyTip#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyTip(source, "title", 4000)NotifyLeft#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
durationintegerrequiredالمدة بالملي ثانية
colorstringrequiredلون الإشعار
Core.NotifyLeft(source, "title", "subtitle", "dict", "icon", 4000, "color")NotifyRightTip#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyRightTip(source, "title", 4000)NotifyObjective#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyObjective(source, "title", 4000)NotifyTop#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
locationstringrequiredالمكان المعروض
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyTop(source, "title", "location", 4000)NotifySimpleTop#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifySimpleTop(source, "title", "subtitle", 4000)NotifyAvanced#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
colorstringrequiredلون الإشعار
durationintegerrequiredالمدة بالملي ثانية
showQualitybooleanrequiredعرض جودة الإشعار
qualitynumberrequiredجودة الإشعار (الحد الأقصى 3)
Core.NotifyAvanced(source, "title", "dict", "icon", "color",showQuality,quality, 4000)NotifyCenter#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyCenter(source, "title", 4000)NotifyBottomRight#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyBottomRight(source, "title", 4000)NotifyFail#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyFail(source, "title", "subtitle", 4000)NotifyDead#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
audiorefstringrequiredمرجع الصوت
audionamestringrequiredاسم الصوت
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyDead(source, "title", "audioref", "audioname", 4000)NotifyUpdate#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyUpdate(source, "title", "subtitle", 4000)NotifyWarning#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
audiorefstringrequiredمرجع الصوت
audionamestringrequiredاسم الصوت
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyWarning(source, "title", "subtitle", "audioref", "audioname", 4000)NotifyLeftRank#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
durationintegerrequiredالمدة بالملي ثانية
colorstringrequiredلون الإشعار
Core.NotifyLeftRank(source, "title", "subtitle", "dict", "icon", 4000, "color")NotifyOneSimpleTop#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyOneSimpleTop(source, "title", 4000)NotifyThreeSimpleTop#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
descriptionstringrequiredوصف الإشعار
second_descriptionstringrequiredالوصف الثاني للإشعار
durationintegerrequiredالمدة بالملي ثانية
Core.NotifyThreeSimpleTop(source, "title","description","second_description", 4000)NotifyLeftInteractive#
sourceintegerrequiredرقم اللاعب (ID)
titlestringrequiredعنوان الإشعار
subtitlestringrequiredالعنوان الفرعي للإشعار
dictstringrequiredقاموس الأيقونة (dictionary)
iconstringrequiredاسم الأيقونة
durationintegerrequiredالمدة بالملي ثانية أو -1 لعرض دائم
colorstringrequiredلون الإشعار
Core.NotifyLeftInteractive(source, "title", "subtitle", "dict", "icon", 4000, "color")الشخصيات
جلب بيانات الشخصية للوصول لدوال القراءة والتعديل
السيرفر
getUsedCharacter#
sourceintegerrequiredرقم اللاعب (ID)
local user = Core.getUser(source) --[[@as User]]
if not user then return end -- is player in session?
local character = user.getUsedCharacter --[[@as Character]]identifier#
returnstringالمعرّف الفريد للشخصية
local identifier = character.identifiercharIdentifier#
returnstringمعرّف الشخصية الفريد
local charIdentifier = character.charIdentifiergroup#
returnstringالمجموعة اللي تنتمي لها الشخصية
local group = character.groupmultiJobs#
returntableالوظايف المتعددة للشخصية
local multijobs = character.multiJobs
for _, job in pairs(multiJobs) do
print(job.job, job.grade, job.label)
endjob#
returnstringوظيفة الشخصية
local job = character.jobjobGrade#
returnintegerرتبة وظيفة الشخصية
local jobGrade = character.jobGradejobLabel#
returnstringاسم وظيفة الشخصية المعروض
local jobLabel = character.jobLabelmoney#
returnnumberكمية الفلوس عند الشخصية
local money = character.moneygold#
returnnumberكمية الذهب عند الشخصية
local gold = character.goldrol#
returnnumberكمية الـ rol عند الشخصية
local rol = character.rolxp#
returnnumberنقاط الخبرة عند الشخصية
local xp = character.xpfirstname#
returnstringالاسم الأول للشخصية
local firstname = character.firstnamelastname#
returnstringاسم العائلة للشخصية
local lastname = character.lastnamestatus#
returntableحالة الشخصية
local status = character.statuscoords#
returntableإحداثيات الشخصية
local coords = character.coordsisdead#
returnbooleanهل الشخصية ميتة أو لا
local isDead = character.isdeadskin#
returntableتفاصيل شكل الشخصية
local skin = character.skincomps#
returntableتفاصيل قطع الشخصية
local comps = character.compsage#
returnnumberعمر الشخصية
local age = character.agegender#
returnstringجنس الشخصية
local gender = character.gendercharDescription#
returnstringوصف الشخصية
local charDescription = character.charDescriptionnickname#
returnstringلقب الشخصية
local nickname = character.nicknameinvCapacity#
returnnumberسعة مخزون الشخصية
local invCapacity = character.invCapacityskills#
returntableمهارات الشخصية
local skills = character.skills
local skill = skills.Crafting
if not skill then return print("skill not found in core config or it doesn't exist") end
local skillExp = skill.Exp
local skillLevel = skill.LevelsetJob#
jobstringrequiredاسم الوظيفة المراد تعيينها
flagbooleanإذا true، حدث تغيير الوظيفة ما يتشغّل
character.setJob("job", flag)setMultiJob#
موجودة للتوافق فقط: ترجع دائماً false. استخدم exports.jrs_core:AddJob. استخدم البديل في JRS من صفحة JRS API.
تقدر تضيف وظايف متعددة للمستخدمين ويتنقلون بينها بأمر switch في jrs core استمع لأحداث تغيير الوظيفة عشان تعرف متى المستخدم غيّر وظيفته
jobstringrequiredاسم الوظيفة المراد تعيينها
gradenumberrequiredرتبة الوظيفة المراد تعيينها
labelstringrequiredاسم الوظيفة المعروض المراد تعيينه
character.setMultiJob("job", 1, "label")removeMultiJob#
موجودة للتوافق فقط: ترجع دائماً false. استخدم exports.jrs_core:RemoveJob. استخدم البديل في JRS من صفحة JRS API.
jobstringrequiredاسم الوظيفة المراد إزالتها
character.removeMultiJob("job")getMultiJobsCount#
returnnumberعدد الوظايف المتعددة عند الشخصية
local multiJobCount = character.getMultiJobsCount()setJobGrade#
gradenumberrequiredرتبة الوظيفة المراد تعيينها
flagbooleanإذا true، حدث تغيير الوظيفة ما يتشغّل
character.setJobGrade(1, flag)setJobLabel#
labelstringrequiredاسم الوظيفة المعروض المراد تعيينه
character.setJobLabel("Label")setGroup#
groupstringrequiredالمجموعة المراد تعيينها
flagbooleanإذا true، حدث تغيير المجموعة ما يتشغّل
character.setGroup("admin", false)setXp#
amountnumberrequiredتعيين كمية الـ XP للشخصية
character.setXp(5000)setFirstname#
firstnamestringrequiredتعيين الاسم الأول للشخصية
character.setFirstname("Sadie")setLastname#
lastnamestringrequiredتعيين اسم العائلة للشخصية
character.setLastname("Adler")addCurrency#
typenumberrequiredنوع العملة (0 = فلوس، 1 = ذهب، 2 = rol)
amountnumberrequiredالكمية المراد إضافتها للشخصية
character.addCurrency(0, 1000)removeCurrency#
typenumberrequiredنوع العملة (0 = فلوس، 1 = ذهب، 2 = rol)
amountnumberrequiredالكمية المراد سحبها من الشخصية
character.removeCurrency(0, 1000)addXp#
amountnumberrequiredكمية الـ XP المراد إضافتها
character.addXp(100)removeXp#
amountnumberrequiredكمية الـ XP المراد سحبها
character.removeXp(100)updateInvCapacity#
موجودة للتوافق فقط: ما تسوي شي في JRS Core. استخدم البديل في JRS من صفحة JRS API.
changenumberrequiredالكمية اللي تتغير فيها سعة المخزون (موجبة أو سالبة)، وهي تراكمية: 1000 تعني 1000 + اللي عندك أصلاً
character.updateInvCapacity(1) setSkills#
skillNamestringrequiredاسم المهارة المراد تعيينها، أسماء المهارات موجودة في إعدادات skills في JRS Core
valuenumberrequiredقيمة الخبرة اللي تنضاف للمهارة اللي مرّرتها، والقيم تراكمية: 1000 خبرة تعني 1000 + اللي عندك أصلاً
character.setSkills("skillName", 10) -- skillname expالمستخدمين
جلب بيانات المستخدم للوصول لدوال القراءة والتعديل
getUser#
sourcenumberrequiredرقم اللاعب (ID)
local user = Core.getUser(source) --[[@as User]]
if not user then return end -- is player in session?getUserByCharId#
charidnumberrequiredرقم الشخصية
local user = Core.getUserByCharId(charid) --[[@as User]]getGroup#
returnstringمجموعة المستخدم (مو مجموعة الشخصية)
local userGroup = user.getGroupsource#
returnintegerرقم المستخدم (source / رقم اللاعب)
local userSource = user.sourcemaxJobsAllowed#
returnnumberأقصى عدد وظايف مسموح للمستخدم
local maxJobsAllowed = user.maxJobsAllowedالقائمة البيضاء (Whitelist)
السيرفر
getEntry#
identifierstringrequiredمعرّف السجل في القائمة البيضاء (whitelist)
local data = Core.Whitelist.getEntry(identifier)
print(json.encode(data),{ident = true})الـ Webhooks
مشترك (Shared)
AddWebhook#
موجودة للتوافق فقط: ما تسوي شي في الكلاينت. استخدم البديل في JRS من صفحة JRS API.
titlestringrequiredعنوان الـ webhook
webhookstringrequiredرابط الـ webhook
descriptionstringrequiredوصف الـ webhook
colornumberrequiredلون الـ webhook
namestringrequiredاسم الـ webhook
logostringشعار الـ webhook
footerlogostringشعار أسفل الـ webhook
avatarstringصورة الـ webhook
Core.AddWebhook("title", "webhook", "description", 12345678, "name", "logo", "footerlogo", "avatar")النسخ المنفصلة (Instancing)
الكلاينت
عشان تحط لاعبين في نسخ مختلفة استخدم رقمه في السيرفر + رقم النسخة عشان تحط لاعبين في نفس النسخة استخدم instanceNumber بس
local instanceNumber = 54123 -- any number
JRScore.instancePlayers(GetPlayerServerId(PlayerId())+ instanceNumber)إخراج اللاعبين من النسخة
JRScore.instancePlayers(0)اللاعب
متاحة عن طريق export الكور
جهة السيرفر
لما تستخدم هذي الدوال تستفيد من مستمعي الأحداث OnPlayerDeath OnPlayerRevive OnPlayerRespawn
Heal#
sourceintegerrequiredرقم اللاعب (ID)
Core.Player.Heal(source)Revive#
sourceintegerrequiredرقم اللاعب (ID)
Core.Player.Revive(source)Respawn#
sourceintegerrequiredرقم اللاعب (ID)
Core.Player.Respawn(source)الـ Callbacks
الـ Callbacks متاحة عن طريق export الكور أو exports منفصلة
إذا تحتاج نظام الـ callback بس
local ServerRPC = exports.jrs_core:ServerRpcCall() --[[@as ServerRPC]] -- for intellisenseTriggerAwait#
تشغيل callback متزامن من الكلاينت للسيرفر
namestringrequiredاسم الـ callback
...anyالمعاملات اللي تنرسل للـ callback
returnanyنتيجة الـ callback
local result = Core.Callback.TriggerAwait(name,...)
print(result)TriggerAsync#
تشغيل callback غير متزامن من الكلاينت للسيرفر
namestringrequiredاسم الـ callback
...anyالمعاملات اللي تنرسل للـ callback
returnanyنتيجة الـ callback
Core.Callback.TriggerAsync(name, function(result)
print(result)
end, ...)Register#
تسجيل callback في السيرفر عشان يستقبل callback من الكلاينت
namestringrequiredاسم الـ callback
callbackfunctionrequiredدالة الـ callback
sourceintegerمصدر الـ callback (source)
callbackfunctionدالة الـ callback
...anyالمعاملات اللي تنرسل للـ callback
returnanyنتيجة الـ callback
Core.Callback.Register(name, function(source,callback,...)
callback(...)
end)إذا تحتاج نظام الـ callback بس
local ClientRPC = exports.jrs_core:ClientRpcCall() --[[@as ClientRPC]] -- for intellisenseTriggerAwait#
تشغيل callback من السيرفر للكلاينت بشكل متزامن
namestringrequiredاسم الـ callback
sourceintegerمصدر الـ callback (source)
...anyالمعاملات اللي تنرسل للـ callback
returnanyنتيجة الـ callback
local result = Core.Callback.TriggerAwait(name,source,...)
print(result)TriggerAsync#
تشغيل callback غير متزامن من الكلاينت للسيرفر
namestringrequiredاسم الـ callback
sourceintegerمصدر الـ callback (source)
...anyالمعاملات اللي تنرسل للـ callback
returnanyنتيجة الـ callback
Core.Callback.TriggerAsync(name, source, function(result)
print(result)
end, ...)Register#
تسجيل callback في الكلاينت عشان يستقبل callback من السيرفر
namestringrequiredاسم الـ callback
callbackfunctionrequiredدالة الـ callback
...anyالمعاملات اللي تنرسل للـ callback
returnanyنتيجة الـ callback
Core.Callback.Register(name, function(callback,...)
callback(...)
end) الأحداث (Events)
مستمعي أحداث لاكتشاف التغييرات في حالة اللاعب
هذي الأحداث تتشغّل لما تتغير وظيفة أو مجموعة اللاعب
جهة السيرفر
onGroupChange#
AddEventHandler("jrs:playerGroupChange",function(source, newgroup,oldgroup) end)onJobChange#
AddEventHandler("jrs:playerJobChange", function(source, newjob,oldjob) end)onJobGradeChange#
AddEventHandler("jrs:playerJobGradeChange",function(source, newjobgrade,oldjobgrade) end)onPlayerDeath#
هذا الحدث يتشغّل لما يموت اللاعب
--CLIENT
AddEventHandler("jrs_core:Client:OnPlayerDeath",function(killerserverid,causeofdeath) end)
--SERVER
RegisterNetEvent("jrs_core:Server:OnPlayerDeath",function(killerserverid,causeofdeath) end)onPlayerRevive#
هذا الحدث يتشغّل لما ينعش اللاعب عن طريق export في JRS Core
--SERVER
AddEventHandler("jrs_core:Server:OnPlayerRevive",function(source)end)
--CLIENT
RegisterNetEvent("jrs_core:Client:OnPlayerRevive")onPlayerRespawn#
هذا الحدث يتشغّل لما يعيد اللاعب الظهور عن طريق export في JRS Core
--SERVER
AddEventHandler("jrs_core:Server:OnPlayerRespawn"function(source)end)
--CLIENT
RegisterNetEvent("jrs_core:Client:OnPlayerRespawn")onPlayerHeal#
هذا الحدث يتشغّل لما يتعالج اللاعب عن طريق export في JRS Core
--SERVER
AddEventHandler("jrs_core:Server:OnPlayerHeal",function(source) end)
--CLIENT
RegisterNetEvent("jrs_core:Client:OnPlayerHeal")onSkillLevelChanged#
يتشغّل لما مهارة (مهارات الشخصية، مستويات الوظايف) ترتفع أو تنزل
--SERVER
AddEventHandler("jrs_core:server:skillLevelChanged", function(source, skillName, newLevel, oldLevel) end)
--CLIENT
RegisterNetEvent("jrs_core:client:skillLevelChanged", function(skillName, newLevel, oldLevel) end)onCharacterReady#
يتشغّل لما اللاعب يختار شخصية وتكون محمّلة بالكامل. هذا الحدث اللي تستخدمه بدل ما تنتظر الظهور
--SERVER
AddEventHandler("jrs_core:server:characterReady", function(source, character) end)
--CLIENT
RegisterNetEvent("jrs_core:client:characterReady", function(charId) end)onCharacterUnloaded#
يتشغّل لما تنفك الشخصية (خروج، تغيير شخصية، انقطاع)
--SERVER
AddEventHandler("jrs_core:server:characterUnloaded", function(source, previousCharacter, reason) end)
--CLIENT
RegisterNetEvent("jrs_core:client:characterUnloaded", function(reason) end)Dataview#
استدعِ dataview في fxmanifest حق سكربتك
client_scripts {
'@jrs_core/client/dataview.lua'
}الـ Statebags
دوال قراءة statebag تخليك تجيب بيانات الشخصية
مشترك (Shared)
IsInSession#
هل اللاعب داخل الجلسة؟ ترجع true لما اللاعب يختار شخصيته
returnbooleanقيمة IsInSession للشخصية
LocalPlayer.state.IsInSessionFirstName#
جلب الاسم الأول للشخصية
returnstringالاسم الأول للشخصية
LocalPlayer.state.Character.FirstNameLastName#
جلب اسم العائلة للشخصية
returnstringاسم العائلة للشخصية
LocalPlayer.state.Character.LastNameJob#
جلب وظيفة الشخصية
returnstringوظيفة الشخصية
LocalPlayer.state.Character.JobJobLabel#
جلب اسم وظيفة الشخصية المعروض
returnstringاسم وظيفة الشخصية المعروض
LocalPlayer.state.Character.JobLabelGrade#
جلب رتبة الشخصية
returnintegerرتبة الشخصية
LocalPlayer.state.Character.GradeGroup#
جلب مجموعة الشخصية
returnstringمجموعة الشخصية
LocalPlayer.state.Character.GroupGender#
جلب جنس الشخصية
returnstringجنس الشخصية
LocalPlayer.state.Character.GenderNickName#
جلب لقب الشخصية
returnstringلقب الشخصية
LocalPlayer.state.Character.NickNameMoney#
جلب فلوس الشخصية
returnintegerفلوس الشخصية
LocalPlayer.state.Character.MoneyGold#
جلب ذهب الشخصية
returnintegerذهب الشخصية
LocalPlayer.state.Character.GoldRol#
جلب rol الشخصية
returnintegerrol الشخصية
LocalPlayer.state.Character.RolCharId#
جلب charid الشخصية
returnintegercharid الشخصية
LocalPlayer.state.Character.CharIdIsInSession#
هل اللاعب داخل الجلسة؟ ترجع true لما اللاعب يختار شخصيته
returnbooleanقيمة IsInSession للشخصية
Player(source).state.IsInSessionFirstName#
جلب الاسم الأول للشخصية
returnstringالاسم الأول للشخصية
Player(source).state.Character.FirstNameLastName#
جلب اسم العائلة للشخصية
returnstringاسم العائلة للشخصية
Player(source).state.Character.LastNameJob#
جلب وظيفة الشخصية
returnstringوظيفة الشخصية
Player(source).state.Character.JobJobLabel#
جلب اسم وظيفة الشخصية المعروض
returnstringاسم وظيفة الشخصية المعروض
Player(source).state.Character.JobLabelGrade#
جلب رتبة الشخصية
returnintegerرتبة الشخصية
Player(source).state.Character.GradeGroup#
جلب مجموعة الشخصية
returnstringمجموعة الشخصية
Player(source).state.Character.GroupGender#
جلب جنس الشخصية
returnstringجنس الشخصية
Player(source).state.Character.GenderNickName#
جلب لقب الشخصية
returnstringلقب الشخصية
Player(source).state.Character.NickNameMoney#
جلب فلوس الشخصية
returnintegerفلوس الشخصية
Player(source).state.Character.MoneyGold#
جلب ذهب الشخصية
returnintegerذهب الشخصية
Player(source).state.Character.GoldRol#
جلب rol الشخصية
returnintegerrol الشخصية
Player(source).state.Character.RolCharId#
جلب charid الشخصية
returnintegercharid الشخصية
Player(source).state.Character.CharId