Consumables: Export ve Event'ler
Kendi kaynaklarından yemeyi başlat, bir yiyeceğin kalan miktarını ve son kullanma tarihini oku, açlık ve susuzluğu standalone HUD'una bağla ve eşya metadata'sıyla çalış.
Kaynak adı
Export'lar kaynak adı üzerinden çağrıldığı için klasörün adı hype-consumables olarak kalmalı. İsimde tire olduğu
için export'ları exports.hype-consumables değil exports["hype-consumables"] şeklinde çağır.
| Export | Taraf | Ne işe yarar |
|---|---|---|
useFood | İstemci | Bir slottaki yiyeceği yemeye başlar veya sıradaki lokmayı alır |
giveFood | İstemci | Bir slottaki yiyecek için yakındaki oyuncu listesini açar |
dropFood | İstemci | Bir slottaki yiyeceği yere bırakır |
GetFoodInfo | Sunucu | Bir slottaki yiyeceğin kalan miktarı, son kullanma tarihi ve fazlası |
IsFood | Sunucu | Bir eşyayı bu kaynak mı yönetiyor |
GetModules | İkisi de | Envanter, bildirim ve target modülleri |
İstemci export'ları
useFood
Bir slottaki yiyeceği, oyuncu eşyayı kullanmış gibi kullanır. Hiçbir şey yenmiyorsa yemeye başlar
(Consume.biteOnStart açıksa ilk lokmayla birlikte). Aynı yiyecek zaten yeniyorsa sıradaki lokmayı alır. Farklı bir
yiyecekte Zaten bir şey yiyorsun. hatası verir.
ox_inventory bunu eşya tanımındaki client.export ile çağırır. Desteklenen her envanterde, örneğin bir radyal menüden
veya hotbar'dan kendin de çağırabilirsin. Slotu sunucu okur ve her şeyi doğrular.
exports["hype-consumables"]:useFood(nil, { name = "burger", slot = 3 })Seçenek
Tür
giveFood
ox_inventory'yi kapatır ve bir slottaki yiyecek için yakındaki oyuncu listesini açar. H tuşuna tekrar basmak
sıradaki oyuncuyu seçer, Y teklifi gönderir, N vazgeçer. ox_inventory eşya tanımlarındaki Give to someone
butonu bunu kullanır.
exports["hype-consumables"]:giveFood(3)Seçenek
Tür
dropFood
ox_inventory'yi kapatır ve bir slottaki yiyeceği oyuncunun önüne, yere bırakır. Put on the ground butonu bunu
kullanır. Drops.enabled false iken hiçbir şey yapmaz, araç içinde reddedilir.
exports["hype-consumables"]:dropFood(3)Seçenek
Tür
Sadece ox_inventory
giveFood ve dropFood çalışmadan önce ox_inventory'yi kapatır, yani ox_inventory için tasarlanmıştır. qb tarzı
envanterlerde oyuncular yemek yerken H ve Q ile verir ve yere bırakır.
Sunucu export'ları
GetFoodInfo
Bir oyuncunun slotundaki yiyeceğin özetini döndürür; slotta yiyecek yoksa nil döner. Eşyanın henüz yiyecek
metadata'sı yoksa (örneğin script kurulmadan önce verilmiş bir eşya) önce metadata yazılır.
local info = exports["hype-consumables"]:GetFoodInfo(source, 3)
if info and not info.spoiled then
print(("%s: %s / %s %s kaldı, %s lokma"):format(info.label, info.amount, info.initialAmount, info.unit, info.bitesLeft))
endSeçenek
Tür
Dönüş table?, şu alanlarla:
Seçenek
Tür
IsFood
Eşya config/foods.lua içinde tanımlıysa true döndürür. Eşyanın envanterinde tanımlı olup olmadığına bakmaz.
if exports["hype-consumables"]:IsFood(itemName) then
-- hype-consumables'a bırak
endSeçenek
Tür
Event'ler
hype-consumables:server:addStatus
Sadece standalone modda, her lokmada sunucuda tetiklenir. Standalone sunucularda hazır bir açlık ve susuzluk sistemi olmadığı için değerleri kendi status veya HUD kaynağında uygula. QBox, QBCore ve ESX'te değerler framework üzerinden uygulanır ve bu event tetiklenmez.
AddEventHandler("hype-consumables:server:addStatus", function(playerId, hunger, thirst)
-- hunger / thirst 0-100 ölçeğinde, negatif değerler düşürür
exports["my-status"]:Add(playerId, "hunger", hunger)
exports["my-status"]:Add(playerId, "thirst", thirst)
end)Seçenek
Tür
my-status senin kendi kaynağını temsil eder.
hype-consumables:client:player-loaded
Framework köprülerinin bir karakter yüklendiğinde tetiklediği yerel istemci event'i. Oyuncunun yiyeceklerini sunucuda kontrol eder (eksik metadata, bozulan eşyalar) ve yerdeki yiyecekleri yeniden yükler. Script bunu oyuncu sunucuya girdiğinde de bir kez yapar. Özel karakter seçimi olan bir standalone sunucuda, karakter seçildikten sonra tetikle:
TriggerEvent("hype-consumables:client:player-loaded")hype-consumables:client:useFood
qb tarzı envanterlerde bir yiyecek kullanıldığında sunucu bunu tetikler. Bir sunucu scriptinden yemeyi başlatmak için kendin de tetikleyebilirsin:
TriggerClientEvent("hype-consumables:client:useFood", source, { name = "burger", slot = 3 })Dahili event'ler
hype-consumables:server:addStatus yerel bir sunucu event'idir; istemciden asla tetikleme. Diğer
hype-consumables:* event'leri ve callback'leri dahili kullanım içindir ve sunucuda doğrulanır; bunları kendin
çağırma.
Eşya metadata'sı
Yiyecek normal bir envanter eşyasıdır. Marketler, üretim ve meslekler onu her zamanki gibi ekler, metadata'yı script
yazar: ox_inventory'de createItem hook'u ile hemen, qb tarzı envanterlerde ilk kullanımda veya oyuncu girişinde. qb
tarzı envanterlerde alanlar eşyanın info kısmındadır.
| Alan | Açıklama |
|---|---|
amount / initialAmount | Kalan / başlangıç gram veya ml |
createdAt / expiresAt | Gerçek zaman (os.time). Vermek, yere bırakmak ve yerden almak bunları değiştirmez |
isPerishable / foodCategory | Bozulabilirlik ve kategori |
foodId | İlk lokmada verilen benzersiz id. Kapalı paketlerde yoktur, bu yüzden yığılırlar |
spoiled | Yiyecek bozuk olarak işaretlenince yazılır |
weight / durability | ox_inventory: kalan miktarın ağırlığı ve kalan yüzde çubuğu |
description / label | Envanterde görünen kalan miktar, son kullanma tarihi ve (Bozuk) eki |
Metadata'yı kendin yazma
Tüm değerler sunucuda hesaplanır ve istemci hiçbir zaman metadata göndermez. Alanları başka kaynaklardan değiştirmek
yerine GetFoodInfo ile oku.
Köprüler ve modüller
frameworks/ içindeki framework köprüleri ve modules/ içindeki modüller açık kaynaktır. Status veya HUD sistemin
özelleştirilmişse framework'ünün sv-main.lua dosyasındaki Framework.Server.AddStatus fonksiyonunu değiştir; açlık
ve susuzluğu 0-100 ölçeğinde alır.
| Fonksiyon | Taraf | Ne işe yarar |
|---|---|---|
Framework.Server.GetPlayerIdentifier(id) | Sunucu | QBox / QBCore'da citizenid, ESX'te identifier, standalone'da license2 / license |
Framework.Server.GetCharacterName(id) | Sunucu | Karakter adı, Transfer.showNames açıkken kullanılır |
Framework.Server.AddStatus(id, hunger, thirst) | Sunucu | Açlık ve susuzluğu uygular |
GetModules
Çağrıldığı tarafın modül tablosunu döndürür. İsim verirsen sadece o modülü döndürür: sunucuda "Inventory",
istemcide "Notify" veya "Target".
local notify = exports["hype-consumables"]:GetModules("Notify")
notify.SendNotify("Yiyecek", "Afiyet olsun!", 5000, "success")local inventory = exports["hype-consumables"]:GetModules("Inventory")
print(inventory.Name) -- "ox_inventory"Seçenek
Tür
| Modül | Taraf | Fonksiyonlar |
|---|---|---|
Inventory | Sunucu | Name, GetSlot, FindByMetadata, GetItems, SetMetadata, RemoveFromSlot, AddItem, CanCarry, ItemExists, ItemLabel |
Notify | İstemci | SendNotify(title, message, time?, type?), time varsayılan 5000, type varsayılan "inform" |
Target | İstemci | AddLocalEntity(entity, options), RemoveLocalEntity(entity) |