هذي الصفحة للمطورين اللي يسوون سكربتات لـ JRS Core.
الحصول على الـ API
getCoreApi يرجع جدول واحد فيه كل دوال الجهة اللي يشتغل فيها كودك. استدعيه مرة وحدة في أول الملف.
مشترك (السيرفر والكلاينت لهم دوال مختلفة)
getCoreApi#
returntableجدول الـ API. جداول السيرفر والكلاينت مختلفة.
local JRS = exports.jrs_core:getCoreApi()الشخصيات
جهة السيرفر
GetCharacter#
يرجع الشخصية المحمّلة للاعب، أو nil إذا اللاعب ما اختار شخصية للحين.
sourcenumberrequiredرقم اللاعب (source).
returntable | nilجدول الشخصية: identifier، charIdentifier، firstname، lastname، job، jobGrade، money، gold، dirtymoney، rol، xp.
local character = JRS.GetCharacter(source)
if character then print(character.firstname, character.money) endGetCharacterData#
نفس GetCharacter بس يرجع نسخة نظيفة فيها كمان group.
local data = JRS.GetCharacterData(source)GetCharacterName#
returnstring | nilfirstname lastname، أو اسم الستيم إذا الشخصية ما لها اسم.
local name = JRS.GetCharacterName(source)IsCharacterReady#
True لما اللاعب يخلص اختيار الشخصية. دوال الفلوس والايتمات والـ XP ترفض تشتغل قبل ما تصير true.
if not JRS.IsCharacterReady(source) then return endGetCharacterById#
يقرأ أي شخصية (متصلة أو لا) برقم الشخصية.
local character = exports.jrs_core:GetCharacterById(charId)FindCharactersByName#
local rows = exports.jrs_core:FindCharactersByName('John', 'Marston')SaveCharacter#
يجبر حفظ شخصية اللاعب في قاعدة البيانات.
exports.jrs_core:SaveCharacter(source)الفلوس
جهة السيرفر
أنواع العملة: 0 = كاش، 1 = ذهب، 3 = فلوس وسخة.
AddMoney / RemoveMoney#
sourcenumberrequiredرقم اللاعب (source).
amountnumberrequiredالمبلغ، لازم يكون أكبر من 0.
JRS.AddMoney(source, 25)
JRS.RemoveMoney(source, 10)AddGold / RemoveGold#
JRS.AddGold(source, 1)
JRS.RemoveGold(source, 1)AddDirtyMoney / RemoveDirtyMoney / GetDirtyMoney#
JRS.AddDirtyMoney(source, 100)
JRS.RemoveDirtyMoney(source, 25)
local dirty = JRS.GetDirtyMoney(source)addMoney / removeMoney#
الشكل العام مع نوع العملة.
sourcenumberrequiredرقم اللاعب (source).
currencynumberrequired0 كاش، 1 ذهب، 3 وسخة.
quantitynumberrequiredالمبلغ.
JRS.addMoney(source, 0, 100)
JRS.removeMoney(source, 0, 50)GetBalance#
local balance = JRS.GetBalance(source)AddReward#
يدفع مكافأة لعب. المبلغ يتضاعف حسب Config.Economy (RewardMultiplier، GoldMultiplier، MinReward) وحسب مزايا مستوى اللاعب. استخدمها للوظايف والمهام بدل AddMoney.
sourcenumberrequiredرقم اللاعب (source).
currencynumberrequired0 كاش أو 1 ذهب.
amountnumberrequiredالمبلغ الأساسي قبل المضاعفة.
reasonstringالسبب، ينستخدم في السجلات ومزايا رواتب الوظايف.
JRS.AddReward(source, 0, 2.5, 'hunting_sale')ScaleReward#
يرجع المبلغ بعد المضاعفة بدون ما يدفع شي.
local pay = JRS.ScaleReward(10, 0)الوظايف والمجموعات
جهة السيرفر
setJob#
sourcenumberrequiredرقم اللاعب (source).
jobstringrequiredاسم الوظيفة.
gradenumberrequiredرتبة الوظيفة.
JRS.setJob(source, 'police', 2)Jobs.Get / Add / Remove / Switch#
دوال الوظايف المتعددة. أقصى عدد وظايف لكل لاعب هو MaxJobs في jrs_core/config/config.lua.
local jobs = exports.jrs_core:GetJobs(source)
exports.jrs_core:AddJob(source, 'doctor', 0, 'Doctor')
exports.jrs_core:RemoveJob(source, 'doctor')
exports.jrs_core:SwitchJob(source, 'police')SetDuty / ToggleDuty / GetDutyPlayers#
exports.jrs_core:SetDuty(source, true)
exports.jrs_core:ToggleDuty(source)
local officers = exports.jrs_core:GetDutyPlayers('police')GetGroup / SetGroup / IsAdmin#
local group = JRS.GetGroup(source)
JRS.SetGroup(source, 'admin')
if exports.jrs_core:IsAdmin(source) then endالـ XP والمستويات
جهة السيرفر
مستوى الشخصية يوصل لـ 100. الـ XP لكل مستوى موجود في config/levels.lua.
AddXP / RemoveXP / SetXP / GetXP#
sourcenumberrequiredرقم اللاعب (source).
amountnumberrequiredكمية الـ XP.
reasonstringالسبب للسجلات.
JRS.AddXP(source, 10, 'mission_reward')
local xp = JRS.GetXP(source)GetLevel / SetLevel / AddLevel / RemoveLevel#
local level = JRS.GetLevel(source)
JRS.SetLevel(source, 25, 'admin')GetLevelData / GetTotalXpForLevel#
local info = JRS.GetLevelData(totalXp)
local needed = JRS.GetTotalXpForLevel(30)AddJobXP / GetJobLevel / GetJobXP / GetAllJobLevels#
كل وظيفة لها XP ومستوى خاص فيها.
JRS.AddJobXP(source, 'mining', 15, 'ore')
local level = JRS.GetJobLevel(source, 'mining')
local all = JRS.GetAllJobLevels(source)مزايا المستوى#
المزايا تعطي خصومات ومكافآت حسب المستوى. طبّقها في كود الدفع حقك:
price = exports.jrs_core:ApplyShopDiscount(source, price)
sell = exports.jrs_core:ApplySellBonus(source, sell)
tax = exports.jrs_core:ApplyTaxReduction(source, tax)
local capacity = exports.jrs_core:GetCarryCapacity(source)الايتمات (عن طريق jrs_inventory)
جهة السيرفر
هذي الدوال المساعدة تستدعي jrs_inventory عنك وتفشل بأمان إذا ما كان شغّال.
AddItem / RemoveItem / GetItemCount / CanCarryItem#
if JRS.CanCarryItem(source, 'bread', 2) then
JRS.AddItem(source, 'bread', 2, {})
end
local count = JRS.GetItemCount(source, 'bread')
JRS.RemoveItem(source, 'bread', 1)Inventory.Transaction#
يشغّل عدة عمليات على الايتمات دفعة وحدة: كلها تنجح أو ولا وحدة.
local ok, reason = exports.jrs_inventory:InventoryTransaction(source, {
{ type = 'remove', item = 'wood', amount = 5 },
{ type = 'add', item = 'plank', amount = 2, metadata = {} },
}, { owner = 'sawmill' })
if not ok then print('transaction failed', reason) endالإشعارات
أول معامل هو رقم اللاعب (source).
JRS.NotifyRightTip(source, 'Reward received', 3000)
JRS.NotifyTip(source, 'Tip text', 3000)
JRS.NotifyLeft(source, 'Title', 'Subtitle', 'menu_textures', 'menu_icon_alert', 4000, 'COLOR_WHITE')
JRS.NotifyTop(source, 'Text', 'Location', 4000)
JRS.NotifyObjective(source, 'Objective text', 4000)
JRS.NotifySimpleTop(source, 'Title', 'Subtitle', 4000)
JRS.NotifyCenter(source, 'Text', 4000)
JRS.NotifyBottomRight(source, 'Text', 4000)
JRS.NotifyFail(source, 'Title', 'Subtitle', 4000)
JRS.NotifyUpdate(source, 'Title', 'Message', 4000)
JRS.NotifyWarning(source, 'Title', 'Message', 'Transaction_Feed_Sounds', 'Transaction_Positive', 4000)JRS.NotifyRightTip('Ready', 3000)
JRS.NotifyTip('Tip text', 3000)
JRS.Notify('Saved', 'success', 3000, 'Title')
JRS.Info('Information', 3000)
JRS.Success('Done', 3000)
JRS.WarningNotify('Careful', 3000)
JRS.ErrorNotify('Failed', 3000)قائمة السيرفر متاحة كمان كـ exports، مثلاً exports.jrs_core:NotifyRightTip(source, text, ms).
الـ Callbacks (RPC)
الاستدعاءات محدودة (30 بالثانية لكل لاعب)، وحجم البيانات محدود بـ 64 KB، والاستدعاء ينتهي بعد 10 ثواني.
دوال مساعدة للكلاينت
جهة الكلاينت
GetPlayerData / WaitForCharacterReady#
JRS.WaitForCharacterReady()
local data = JRS.GetPlayerData()TeleportToCoords / TeleportToWaypoint#
JRS.TeleportToCoords(x, y, z, heading)
JRS.TeleportToWaypoint()SetCustomDestination / RemoveCustomDestination#
يحط علامة وجهة ثلاثية الأبعاد.
JRS.SetCustomDestination(vector3(0.0, 0.0, 0.0), 'Destination')LoadModel / LoadAnimDict / LoadTextureDict#
دوال تحميل آمنة مع مهلة.
JRS.LoadModel(`a_c_horse_arabian_white`)
JRS.LoadAnimDict('amb_camp@world_camp_fire_sit@male_a@base')GetClosestPlayer / GetNearbyPlayers#
local player, distance = JRS.GetClosestPlayer()Input / Confirm#
يفتح نافذة الإدخال أو التأكيد بثيم السيرفر.
local amount = JRS.InputAwait('Amount', 'How many?')
local ok = JRS.ConfirmAwait('Are you sure?')