İçeriğe geç

Kaynağınız onun yanında

Export’lar ve state bag’ler, telefonla konuşmakla ilgilidir. Bu ise diğer yön: ikinizin aynı oyuncu için çekişmemesi adına bir kaynağın bilmesi gereken birkaç şey.

Hiçbiri bir bağımlılık, bir olay veya izin gerektirmez. Dört state bag ve bir export; çoğu script için tek bir satır yeterlidir.


Bir fotoğraf, çerçevenin tamamıdır. Deklanşöre basıldığı anda çizdiğiniz her şey — bir yardım istemi, bir marker etiketi, bir ilerleme çubuğu, bir metin arayüzü — fotoğrafın içindedir ve bu kaynak onu çizmenizi engelleyemez. Çizim çağrınız ile ekran arasında bizden hiçbir şey yoktur.

Bu yüzden bunun yerine sorabileceğiniz bir şey var:

if LocalPlayer.state.phoneCamera then goto skip end -- or return, or whatever your loop wants

phoneCamera, vizör açıldığı andan kapandığı ana kadar true’dur. Tek bir satır ve istemleriniz bir yabancının fotoğraf albümünün dışında kalır.

Telefonun kendi HUD’u zaten yoldan çekilmiştir: kamera açık kaldığı sürece oyunun mini haritası ve can çubukları gizlenir; böylece birinin çerçevelediği şey, aldığı şeydir.

Katlanır telefon, ped’in eline takılı iki nesnedir. Ortada duran prop’ları süpüren veya yakındaki her şeye Press [E] to delete the object sunan bir script, birinin telefonunu silmeyi önerecektir — ve o telefonu tutarken bunu yapacaktır.

Genel kural, bir model adından daha değerlidir: bir ped’e takılı bir nesne çöp değildir.

if IsEntityAttached(object) then goto skip end

Daha belirli olmanız gerekiyorsa, modeller pear_fold_base* ve pear_fold_leaf*’tur; her renk/kaplama için bir tane.

mic_phone_props, telefon elde olduğu sürece ped’in duruşuna sahiptir ve bunu ciddiye alır: başka bir şey üst vücudu aldıktan sonra yarım saniye içinde tutma animasyonunu geri koyan bir bekçi (watchdog) vardır. Baktığı animasyonun kime ait olduğunu ayırt edemez.

Scriptiniz o ped’e poz verdiriyorsa — bir arama, bir senaryo, kendi görevinizden biri — önce kolları isteyin:

exports.mic_phone_props:SetPose(false) -- they are yours; the phone hangs where a phone hangs
-- … your animation …
exports.mic_phone_props:SetPose(true) -- and back

Geri çekilmek prop’u da taşır: oyunun kendi prop_npc_phone_02 prop’unun kullandığı kemiğe ve ofsete gider ve katlanır; böylece hiçbir şey ölçmenize gerek kalmadan tüm standart cep telefonu animasyonları çalışır. SetPose(true), daha önce sahip olduğu tutuşu, menteşe açısını ve animasyonu geri verir.

IsOut(), geri çekilecek bir şey olup olmadığını söyler.

4. Eşya modu bir identifier’ın anlamını değiştirir

Section titled “4. Eşya modu bir identifier’ın anlamını değiştirir”

Telefonlar eşya olduğunda, bir telefon karaktere değil cihaza aittir. Oyuncu üzerindeki phoneDevice, telefonun içinde yaşadığı eşyadır ve karakter modunda nil’dir.

Bir telefona karşı herhangi bir şey saklıyorsanız bu önemlidir: bir numara, bir abonelik, bir lisans. exports.mic_phone:GetDevice() kullanın ve anahtarı ona göre belirleyin; aksi halde, telefonu satan kişi olsa bile veriniz kişinin peşinden gider.

5. Dört bag ve hepsini yazdıran bir komut

Section titled “5. Dört bag ve hepsini yazdıran bir komut”
phoneOpen boolean the phone is out and on screen
phoneCamera boolean a viewfinder is up
onCallWith number | nil the source at the other end
flashlight boolean their torch is on

Geri kalanlarla birlikte tam liste Export’lar ve state bag’ler sayfasındadır. phoneapi <id>, sunucu konsolunda bir oyuncu için her birini yazdırır; bu, hangi tarafın yanlış olduğunu tahmin etmekten daha hızlıdır.


Bir bildirim, bir mesaj, bir posta, bir fatura — hepsi sunucu export’larıdır, hepsi tek satırdır ve hepsi Export’lar ve state bag’ler sayfasındadır.

Kendi başına bir uygulama ise telefondaki kendi uygulamanızdır: tek bir çağrı, telefon config’i yok, yeniden başlatma yok ve kendi çerçevesinde çalışır.

Telefonun açılmasını reddetmek için bir kanca (hook) yoktur. Kurallar Config.Open.Restrict içinde yaşar — ölü, kelepçeli, yüzen, araç kullanan vb. — ve bir kaynak kendi kuralını ekleyemez. Bugün mini oyununuz sırasında bir telefonun açılamaz olması gerekiyorsa dürüst seçenekler şunlardır: durumunuzla tesadüfen eşleşen bir config kuralı ya da olayınız başladığında exports.mic_phone:Close(). Kancaya ihtiyacınız varsa söyleyin; eklenmesi küçük bir iştir ve henüz kimse istemedi.


  • Scriptiniz ekrana çizim yapıyor mu? → phoneCamera iken atlayın
  • Yakındaki nesneleri siliyor, süpürüyor veya yakalıyor mu? → takılı olanları atlayın
  • Oyuncuya animasyon oynatıyor mu? → SetPose(false) ve SetPose(true)
  • Telefon başına bir şey saklıyor mu? → karaktere değil, phoneDevice’a göre anahtarlayın
  • Birinin ulaşılabilir olup olmadığını bilmesi gerekiyor mu? → phoneOpen, onCallWith