İçeriğe geç

Başka bir telefondan geçiş

Zaten bir telefonu olan bir şehrin içinde yılların birikimi vardır: insanların ezberlediği numaralar, konuşmalar, fotoğraflar, @handles. Hepsini kaybetmek telefon değiştirmenin gerçek bedelidir ve çoğu sunucunun bunu hiç yapmamasının sebebi de budur. Bu sistem eski telefonun tablolarını okur ve bizimkilere yazar.

Dört telefondan geçilebilir ve dördü de aynı şekilde test edilir: kendi tabloları kurulum paketlerinin getirdiği şemadan oluşturulur, içlerine küçük bir şehir yazılır, içe aktarma gerçekten çalıştırılır ve sahiplendiği her satır sonradan kontrol edilir.

HangisindenTablolarıHer şeyi neye göre anahtarlar
lb-phonephone_*telefon numarası; phone_phones bir numarayı bir sahibe çevirir
Quasar Smartphone Proqs_phone_*bir scope_id — bir kişi değil, bir telefon
NPWDnpwd_*framework identifier’ı ve numaraları zaten users içinde
qb-phoneplayer_contacts, phone_messages…citizenid, ki QBCore’da bu telefonun sahibidir

Eski telefona asla dokunmaz. Bizim olmayan bir tabloya tek bir ifade bile yazmaz. lb-phone’un verisi sonrasında tam olarak olduğu gibidir, geri dönüş yolunu basit yapan da budur: bizim satırlarımızı silin.

Prova gerçektir. DryRun varsayılan olarak açıktır. Gerçek bir çalıştırmanın okuduğu her şeyi okur, yazacağı her satırı hesaplar, hiçbirini yazmaz ve sayıyı yazdırır. Aynı koddur — kestirmeden giden bir prova, hiçbir şeyin provası olurdu.

İki kez olamaz. Gerçek bir çalıştırma veritabanında bir makbuz bırakır. Sonraki açılış onu bulur ve durur, çünkü unutulmuş tek bir config satırı aksi halde şehirdeki her konuşmayı ikiye katlardı.

-- shared/config/import.lua
Config.Import = {
From = 'lb-phone', -- or false, which is where it starts
DryRun = true, -- read the count first
Numbers = 'keep', -- their old numbers move across
Crypto = 'cash', -- sell their coins at their own price
}

Bir kez yeniden başlatın ve konsolu okuyun:

[mic_phone import] lb-phone — REHEARSAL, nothing was written
[mic_phone import] contacts 482
[mic_phone import] messages 19104
[mic_phone import] numbers 137
[mic_phone import] photos 2210
[mic_phone import] social 96
[mic_phone import] · a phone whose owner is not in `users` any more was skipped (×8)
[mic_phone import] · lb-phone does not say whether an alarm repeats, so its alarms arrive as one-off alarms

Sonra DryRun = false yapın, bir kez daha yeniden başlatın ve ardından From = false ayarlayın.

Tablolar bu veritabanında değilse bunu söyler ve hiçbir şey yapmaz; yani yanlış telefonu söylemenin size maliyeti konsolda bir satırdır.

Aşağıdaki her şey lb-phone içindir, ki dördünün en kapsamlısıdır. Diğerlerinin neyi farklı yaptığı daha aşağıdadır.

lb-phone’danNeye dönüşür
phone_phonesusers içindeki numara, pil, telefonun ayarları
settings.apps değeriAna Ekran — aynı dock, aynı sayfalardaki aynı uygulamalar
phone_phone_contactskişiler, favoriler ve resimleriyle
phone_message_*konuşmalar, gruplar ve okunmamış sayıları
phone_phone_callsson aramalar, her taraf için bir satır, cevapsız aramalar dahil
phone_photoskitaplık, fotoğraflar ve videolar
phone_mail_*posta, okunmuş ve okunmamış
phone_maps_locationskayıtlı yerler
phone_marketplace_posts, phone_yellow_pages_postsilanlar
Instagram, Twitter, TikTok, TinderInstapic, Twixel, Klipz, Flinder — handle’lar, isimler, resimler, bio’lar, gönderiler, takipler ve mavi tik
phone_darkchat_*darknet: oda, içinde kimlerin olduğu, ne söylendiği
phone_notes, phone_clock_alarmsnotlar ve alarmlar — lb-phone’un alarmları tekrar edip etmediğini söylemez, bu yüzden tek seferlik alarm olarak gelirler
phone_cryptoaşağıdaki Kripto bölümüne bakın

Resimler her iki telefonda da URL’dir, dolayısıyla hiçbir şey indirilmez ya da yeniden yüklenmez. Bir oyuncunun fotoğrafları ilk gün çalışmaya devam eder, çünkü hiçbir zaman iki telefonun da değildi.

Rapor bunların her birini, birinin fark etmesine bırakmak yerine yüksek sesle söyler.

  • Duvar kâğıtları ve zil sesleri. Onlarınki kendi dosyalarının adını taşır, bizimki kendi dosyalarımızınkini. Yanlış bir resim, varsayılan olandan daha kötüdür.
  • Sosyal ağ şifreleri. Aşağıya bakın — hesaplar gelir, şifreler gelemez.
  • Uçak modu, bilerek. Birinin açık bıraktığı bir anahtarı içe aktarmak, çalışmayan bir telefonu ve nedenini anlayamayan bir oyuncuyu içe aktarmaktır.
  • Fotoğraf albümleri. Her resim kitaplıktadır; albümler yeniden oluşturulmaz.

Diğer üçü ve her birinde neyin farklı olduğu

Section titled “Diğer üçü ve her birinde neyin farklı olduğu”

Dördünün en iyi yapılanı ve eşleme üç yerde yaklaşık değil, tam olarak yapılır:

  • Okunmamış sayıları kopyalanmaz, yeniden sayılır. Quasar last_read_message_id saklar; bizimki bir sayı saklar. Yani sayı hesaplanır — o konuşmada son okuduğundan sonra kaç mesaj geldi — ki bu, kendi sayaçları sapmış olsa bile doğrudur.
  • Son aramalar zaten incoming, outgoing ve missed der, ki bunlar bizim üç kelimemizdir.
  • Bir fotoğraf video olduğunu bilir, süresi ve kapak resmiyle birlikte, bu yüzden video olarak gelir.

Notlar (sabitlenmiş olanlar sabit kalır), alarmlar, takvim girdileri ve hatırlatıcılar da gelir: vadesi olan açık bir hatırlatıcı bir takvim girdisi olur, tarihi olmayan olan kelimelerini bir not olarak korur ve tamamlanmış olan geride bırakılır. Quasar bir alarmı yalnızca hafta sonları tekrarlayabilir, bu telefon yapamaz; bu yüzden onlar tek seferlik alarm olarak gelir.

Sabitlenmiş ve sessize alınmış konuşmalar ikisini de korur. Posta, içinde bulunduğu klasörle gelir — taslaklar ve çöp geride bırakılır, çünkü kimsenin göndermediği bir taslak taşımaya değmez. Gelmeyenler: Quasar’ın kendi şeklindeki bir JSON blob’unda yaşayan ayarları ve ana ekranı ile bizimkiler olmayan App Store id’leri.

Bilmeniz gereken bir şey: Quasar bir karakterin birden fazla telefona sahip olmasına izin verir ve bu telefon karakter başına bir numara tutar. İlk gelen numara onundur; diğerleri raporda adlandırılır ve hiçbir şeyin üzerine yazılmaz.

En kolayı, yüksek sesle söylemeye değer bir sebeple: NPWD numarayı zaten users.phone_number içinde tutar, ki bu, bu telefonun okuduğu aynı sütundur. Varsayılan bir NPWD sunucusunda taşınacak bir şey yoktur ve rapor çalışıyormuş gibi yapmak yerine bunu söyler.

Konuşmaları bir id ile değil, içindeki numaraların bir dizisiyle adlandırılır; bu yüzden birleştirme (join) o dizi üzerinden yapılır. Twitter profil adı @handle olur; Match’in hiç kullanıcı adı yoktur, dolayısıyla bir Flinder hesabı karakterin numarasıyla anahtarlanır. Fotoğrafların kendi tarihleri yoktur, bu yüzden kitaplık çekilme sırasına göre tarihlenir. Notları da aynı şekilde gelir, yazılma sırasına göre tarihlenir. İlanlar fiyat taşımaz ve sıfır fiyatla gelir.

En eskisi ve bize en az benzeyeni — ama kimlik bedavadır, çünkü QBCore’da bu telefon zaten qb-phone’un her şeyi anahtarladığı citizenid değerini kullanır.

Asıl iş konuşmalardır. qb-phone’un konuşması yoktur: phone_messages, kişi başına numara başına bir satırdır ve tüm yazışma, her taraftan ayrı yazılan bir JSON dizisidir. Yani aynı konuşma iki kez var olur ve iki kopyanın aynı fikirde olması gerekmez. Bu yüzden her numara çifti, hangi tarafta daha fazlası varsa oradan bir kez oluşturulur — onları birleştirmek bir sıra uydururdu ve ikisini de içe aktarmak herkese her mesajı iki kere verirdi. Zaman damgası olmayan bir konuşma sırasını korur ve birer dakika arayla dizilir.

Numaralar bir sütunda değil, players.charinfo içinde JSON olarak yaşar; bu yüzden oradan okunur ve bu telefonun tuttuğu yere yazılır. Tweet’leri bir hesap değil bir isim taşır, bu yüzden isimlerinden karakter başına bir Twixel hesabı oluşturulur.

Numbers = 'keep' bütün işin amacıdır: birinin kartvizitindeki ve herkesin kişilerindeki numara hâlâ ona ulaşır.

Bir numara yalnızca boş bir sütuna yazılır. Bir karakterin burada zaten bir numarası varsa ve bu farklı bir numaraysa, bu bir çakışmadır: sayılır, raporda adlandırılır ve hiçbir şeyin üzerine yazılmaz. Eski numaraları eski biçimlerini de korur — bu telefonun 555-###-#### biçimi yerine 1234567890 — bu kozmetiktir ve yalnızca o andan sonra dağıtılan numaraları etkiler.

Numbers = 'ours' onları rahat bırakır ve bu telefonun kendi numaralarını dağıtmasına izin verir. Eski kişileri kimseyi göstermez, bu yüzden yalnızca yeniden başlayan bir şehir içindir.

Şifreleri bir sütunda düz metindir. Bizimkiler oyuncunun tarayıcısında oluşturulan bir PBKDF2 hash’idir ve birinden diğeri hesaplanamaz — yani şifre geçmeyen tek şeydir ve yolda hiçbir yerde saklanmaz.

Hesap içe aktarılmış olarak işaretlenmiş gelir. Sahibi uygulamayı ilk açtığında telefon Bu hesap eski telefonunuzdan geldi. Bunun için bir şifre seçin der ve seçilen yeni şifre olur.

Bu, bir şifreden daha iyi bir sebeple güvenlidir: satır bir sahibi adlandırır ve sunucu kimin sorduğunu söylenmeden bilir. Hiç bizim olmamış bir şifreyle kanıtlanan bir şey yoktur.

İki uydurma piyasa arasında dürüst bir döviz kuru yoktur, bu yüzden ne olacağını tahmin ettirmek yerine siz seçin:

  • 'cash' — eski telefonun kendi fiyatından sat ve cüzdana bir hareket olarak yaz. Kimse kazanmaz, kimse kaybetmez ve üzerinde anlaşılması gereken bir şey yoktur.
  • 'skip' — bırak. Varlıkları kendi tablolarında kalır ve elle halledilebilir.
  • bir tablo — varlıkların coin olarak kalması gerektiğinde kendi eşlemeniz:
Crypto = { qbit = 'santo', lifeinvader = 'vine' },

Eski telefonun hiçbir şeyine dokunulmadı, yani:

  1. Yanlış giden adım her neyse bizim satırlarımızı silin — rapor onları adlandırır.
  2. Makbuzu silin: DELETE FROM mic_phone_json WHERE owner = '@import'.
  3. Config.Import.Again = true yapın ve yeniden başlayın.

Skip, raporun yazdırdığı adlarla tek tek adımları dışarıda bırakır:

Skip = { 'photos', 'crypto' },