Przejdź do głównej zawartości

Twój zasób obok telefonu

Eksporty i state bagi opisują, jak rozmawiać z telefonem. Tu jest kierunek odwrotny: kilka rzeczy, które powinien wiedzieć zasób, żeby wy dwaj nie walczyliście o tego samego gracza.

Żadna z nich nie wymaga zależności, eventu ani uprawnień. Cztery state bagi i jeden eksport, a większość skryptów potrzebuje jednej linijki.


Zdjęcie obejmuje cały kadr. Cokolwiek rysowałeś w chwili naciśnięcia migawki — podpowiedź pomocy, etykietę markera, pasek postępu, interfejs tekstowy — jest na zdjęciu, a ten zasób nie jest w stanie Ci tego uniemożliwić. Nic z naszej strony nie stoi między Twoim wywołaniem rysowania a ekranem.

Dlatego można zapytać o coś innego:

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

phoneCamera ma wartość true od momentu otwarcia wizjera aż do jego zamknięcia. Jedna linijka i Twoja podpowiedź nie trafi do albumu zdjęć obcej osoby.

Własny HUD telefonu już ustępuje miejsca: minimapa i paski zdrowia gry są ukryte, dopóki aparat jest włączony, więc to, co ktoś kadruje, jest tym, co dostaje.

Składany telefon to dwa obiekty przyczepione do dłoni peda. Skrypt, który sprząta luźne propy albo oferuje Press [E] to delete the object dla wszystkiego w pobliżu, zaproponuje usunięcie czyjegoś telefonu — i zrobi to, gdy ktoś go trzyma.

Ogólna zasada jest warta więcej niż nazwa modelu: obiekt przyczepiony do peda to nie śmieć.

if IsEntityAttached(object) then goto skip end

Jeśli musisz być konkretny, modele to pear_fold_base* i pear_fold_leaf*, po jednym na każde wykończenie.

mic_phone_props jest właścicielem pozy peda, gdy telefon jest w dłoni, i traktuje to poważnie: działa watchdog, który przywraca animację trzymania w ciągu pół sekundy od chwili, gdy coś innego przejmie górną część ciała. Nie potrafi stwierdzić, czyją animację ogląda.

Jeśli Twój skrypt ustawia pozę tego peda — rozmowa, scenariusz, własny task — najpierw poproś o ręce:

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

Ustąpienie przesuwa też prop: trafia do kości i z offsetem, których używa własny prop_npc_phone_02 gry, i składa się, więc każda standardowa animacja telefonu komórkowego działa, bez konieczności mierzenia czegokolwiek. SetPose(true) przywraca chwyt, kąt zawiasu i animację, które były wcześniej.

IsOut() mówi, czy w ogóle jest od czego ustępować.

Gdy telefony są przedmiotami, telefon należy do urządzenia, a nie do postaci. phoneDevice u gracza to przedmiot, w którym telefon się znajduje; w trybie postaci ma wartość nil.

Ma to znaczenie, jeśli przechowujesz cokolwiek powiązanego z telefonem: numer, subskrypcję, licencję. Użyj exports.mic_phone:GetDevice() i klucz według tego, bo inaczej Twoje dane podążą za osobą, mimo że to telefon został sprzedany.

5. Cztery bagi i jedna komenda, która wypisuje je wszystkie

Dział zatytułowany „5. Cztery bagi i jedna komenda, która wypisuje je wszystkie”
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

Pełna lista, wraz z resztą, znajduje się w Eksporty i state bagi. phoneapi <id> wypisuje każdy z nich dla gracza w konsoli serwera, co jest szybsze niż zgadywanie, po której stronie jest błąd.


Powiadomienie, wiadomość, mail, faktura — wszystko to eksporty serwerowe, wszystko to jedna linijka, wszystko opisane w Eksporty i state bagi.

Cała własna aplikacja to Twoja własna aplikacja w telefonie: jedno wywołanie, bez konfiguracji telefonu, bez restartu, a działa we własnej ramce.

Nie ma haka do odmawiania otwarcia telefonu. Reguły znajdują się w Config.Open.Restrict — martwy, skuty, pływający, prowadzący pojazd i tak dalej — a zasób nie może dodać własnej. Jeśli potrzebujesz, by telefonu nie dało się otworzyć podczas Twojej minigry już dziś, uczciwe opcje to reguła w configu, która akurat pasuje do Twojego stanu, albo exports.mic_phone:Close() na starcie Twojej rzeczy. Daj znać, jeśli potrzebujesz tego haka; dodanie go to drobiazg, a nikt jeszcze o niego nie prosił.


  • Czy Twój skrypt rysuje coś na ekranie? → pomiń to, gdy phoneCamera
  • Czy usuwa, sprząta lub chwyta pobliskie obiekty? → pomiń przyczepione
  • Czy animuje gracza? → SetPose(false) i SetPose(true)
  • Czy przechowuje cokolwiek dla konkretnego telefonu? → klucz według phoneDevice, a nie postaci
  • Czy musi wiedzieć, czy ktoś jest osiągalny? → phoneOpen, onCallWith