ConsumablesYeniÜcretsiz

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ış.

v1.0.0Açık kaynakÜcretsizQBox · QBCore · ESX · Standalone

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.

ExportTarafNe işe yarar
useFoodİstemciBir slottaki yiyeceği yemeye başlar veya sıradaki lokmayı alır
giveFoodİstemciBir slottaki yiyecek için yakındaki oyuncu listesini açar
dropFoodİstemciBir slottaki yiyeceği yere bırakır
GetFoodInfoSunucuBir slottaki yiyeceğin kalan miktarı, son kullanma tarihi ve fazlası
IsFoodSunucuBir eşyayı bu kaynak mı yönetiyor
GetModulesİkisi deEnvanter, 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.

client.lua
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.

client.lua
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.

client.lua
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.

server.lua
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))
end

Seç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.

server.lua
if exports["hype-consumables"]:IsFood(itemName) then
    -- hype-consumables'a bırak
end

Seç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.

server.lua
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:

client.lua
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:

server.lua
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.

AlanAçıklama
amount / initialAmountKalan / başlangıç gram veya ml
createdAt / expiresAtGerçek zaman (os.time). Vermek, yere bırakmak ve yerden almak bunları değiştirmez
isPerishable / foodCategoryBozulabilirlik ve kategori
foodIdİlk lokmada verilen benzersiz id. Kapalı paketlerde yoktur, bu yüzden yığılırlar
spoiledYiyecek bozuk olarak işaretlenince yazılır
weight / durabilityox_inventory: kalan miktarın ağırlığı ve kalan yüzde çubuğu
description / labelEnvanterde 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.

main.lua
main.lua
FonksiyonTarafNe işe yarar
Framework.Server.GetPlayerIdentifier(id)SunucuQBox / QBCore'da citizenid, ESX'te identifier, standalone'da license2 / license
Framework.Server.GetCharacterName(id)SunucuKarakter adı, Transfer.showNames açıkken kullanılır
Framework.Server.AddStatus(id, hunger, thirst)SunucuAç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".

client.lua
local notify = exports["hype-consumables"]:GetModules("Notify")
notify.SendNotify("Yiyecek", "Afiyet olsun!", 5000, "success")
server.lua
local inventory = exports["hype-consumables"]:GetModules("Inventory")
print(inventory.Name) -- "ox_inventory"

Seçenek

Tür

ModülTarafFonksiyonlar
InventorySunucuName, GetSlot, FindByMetadata, GetItems, SetMetadata, RemoveFromSlot, AddItem, CanCarry, ItemExists, ItemLabel
NotifyİstemciSendNotify(title, message, time?, type?), time varsayılan 5000, type varsayılan "inform"
TargetİstemciAddLocalEntity(entity, options), RemoveLocalEntity(entity)

Bu sayfada