Yani, site harika bir ağa sahip. Ancak içinde, sunucuyu başlatmak ve yapılandırmak için yalnızca birkaç satır ayrılmıştır.
Kendi yerel oyunlarında oynamak isteyen kullanıcılara yardımcı olmaya çalışacağım. sunucu arkadaşlarınızla ve kendi ayarlarınızla. Bu kısa makalede, tüm süreci göstermeye çalışacağım: sunucuyu kurmaktan, modları kullanmak da dahil olmak üzere yapılandırmaya.

1. İhtiyacımız olan ilk şey, Rust'ı ağ üzerinden çalıştırmaya geçmek ve indirmek hepsini içeren arşiv gerekli araçlar, ve herhangi bir konuma unzip.

2. şimdi devam edelim Kurulum. dosyayı çalıştırın Update-Rust-Server.bat bir klasörden SteamCMD ve sunucumuz indirilirken bekleyin. Sunucular RustServer klasörüne yüklenecektir.

Her şey, sunucuyu kurduk, sonraki adımlara geçin.

3. şimdi yapacağız sunucuyu başlat, özelleştirin ve arkadaşlarınızı davet edin. Oluşturulan sunucuya bağlanmak için aşağıdaki adımları gerçekleştirin:

klasöre gidiyorum SteamCMD ve dosyayı çalıştırın Run-Rust-Server.bat(O, Rust_server değil). Deneysel Rust sunucusunu başlatmak için dosyayı çalıştırın Run-Rust-Exp-Server.bat
- Başladıktan sonra, komut satırı indirme hakkında bilgi içeren satırlar içerecek, yazının göründüğü anı bekliyoruz "sunucu başlatıldı".
- Her şey, sunucu çalışıyor.
- Şimdi sunucuya girebilmek için sunucumuzun adresini öğrenmemiz gerekiyor. Klasik versiyon -
- IP'nizi bir yere yazın Metin dosyası(unutmamak).
- Ardından oyuna başlayın ve F1 tuşuna (konsol) basın ve oradan net.connect komutunu girin ip'iniz: 28015 (burada ip'iniz, önceden öğrenmiş olduğunuz ip'inizdir). Teorik olarak 127.0.0.1 olmalıdır.

Her şey doğru yapılırsa, sunucunuza bağlanacaksınız. Arkadaşların size bağlanabilmeleri için elbette bilgisayarınızda sunucunun çalışıyor olması ve arkadaşlarınızın kendilerine söylediğiniz bağlantı komutunu doğru bir şekilde girmeleri gerekmektedir.
Şimdi oynamaya başlayabilirsiniz. ANCAK! Bazı durumlarda tüm eylemlerin doğru şekilde yürütülmesi size başarıyı garanti edemez. Çünkü başarılı olmamanız için birçok nedeniniz var. En yaygın sorunların çözümü yazılmıştır.

4. Pekala, şimdi, her şey senin için yolunda gittiyse ve hoşuna gittiyse, onunla oynayabilirsin. sunucu ayarları.
Örneğin, son Güncelleme geliştiriciler bunu ekledi İlginç bir şey silahların aşınması ve yıpranması (bir seriyi hemen hatırladım) Ölü ada) yanı sıra giysi ve ekipmanların aşınması ve yıpranması.
Bu pek çok kişiye uymadı ve işte bu özelliği devre dışı bırakma fırsatı.

Bunun için ihtiyacınız olan:
> Yönetici haklarıyla sunucuya giriş yapın. Bunu yapmak için oyun içinde F1 tuşu ile konsolu açın ve şifrenizi Rcon.login komutunu girin (şifreniz server.cfg dosyasında ayarlanmıştır ve varsayılan olarak 123456 gibi görünür). Girdikten sonra bir yazı görünmelidir (konsolda) "yönetici olarak oturum açıldı", bu, yönetici olarak oturum açtığınız anlamına gelir. Şimdi komutları girin:
- Giysi aşınmasını devre dışı bırakmak için: conditionloss.armorhealthmult "0.0"
- Silah/envanter aşınmasını devre dışı bırakmak için: conditionloss.damagemultiplier "0.0"

Çeşitli modların yardımıyla farklı şeyleri de devre dışı bırakabilir veya etkinleştirebilirsiniz. Örneğin, sunucudaki parçalanmayı devre dışı bırakın veya uçaklar için uçuş aralığını ayarlayın. Ağın zaten hem uygun fiyatlı hem de çok uygun olmayan modları var. Ücretsiz bir mod kullanmanızı tavsiye ederim magma,özelleştirme kolaylığı ve çok sayıda eklenti nedeniyle.

Rust'ın oyun optimizasyonu basitçe "değersizdir", bu da oyun sırasında bazı zorluklar yaratır. Oynanış bazı kullanıcılar için. Hatta bazı durumlarda güçlü bilgisayar doğrudan görevleriyle baş edemiyorlar, yani “pas” arayüzünde gecikme olmadan mükemmel bir resim sağlayamıyorlar. Tabii ki, bazı manipülasyonlar sayesinde oyundaki fps'yi biraz artırabilirsiniz, ancak bu en iyi şekilde konsol satırına belirli efektleri devre dışı bırakan çeşitli komutlar girerek yapılır. Ama nasıl hayal ediyorsun? Sunucuya her bağlandığınızda, konsola yaklaşık 30 komut girin - bu ne kadar zaman kaybı olacak ... Ancak bir çıkış yolu var ve bu, tüm bu komutları girebileceğiniz Rust için yapılandırma dosyası. , ve sadece özel bir dizine koyun.

Ama Rust için bu cfg'yi nereden bulabilirim? Aslında bunu almanın iki yolu var. Aşağıdakileri yapabilirsiniz...

Rust oyunu için bir yapılandırma oluşturma

1. Oyunun kök dizinine gidin.
2. Orada CFG klasörünü bulun.
3. İçinde iki dosya bulun: client.cfg ve config.cfg.
4. Hiçbiri yoksa, yenilerini oluşturmanız ve buna göre adlandırmanız yeterlidir.
5. Buraya , shadows, wind vb. için uygun komutları girin.

Ve bunu farklı şekilde yapabilirsiniz.

oyun için cfg indir

1. Hazır Rust yapılandırmasını (gerekli tüm komutlarla birlikte) doğrudan web sitemizden buradan indirebilirsiniz.
2. Arşivdeki iki dosyayı uygun dizine kopyalayın (birinci yöntemde belirtilen).
3. Bu dosyalar zaten oradaysa, değiştirilerek kopyalayın, değilse, yapıştırın.

Temel olarak, hangi yoldan gittiğiniz önemli değil. Bundan sonra sadece:

oyuna giriş yap
"Seçenekler" sekmesine tıklayın
"Su Yansımaları" ve "VSync" seçeneğinin işaretini kaldırın
Ve "Oluşturma Kalitesi" kaydırıcısını tamamen sola çekin

Rust yapılandırmasının çok olumlu etkilendiğini belirtmek gerekir, hatta Rust yapılandırmasının (elbette doğru yapılandırılmış) ek 512 MB video belleğinden çok daha fazla fayda sağlayacağını söyleyebiliriz.

Serinin önceki yazılarında Rust programlama diline genel bir bakış yapılmış, sözdiziminin temelleri tartışılmıştı: en basit bileşenler (değişkenler, basit veri türleri, operatörler ve uzantılar), kontrol yapıları ve bileşik veri yapıları, işlevler ve yıkıcılar anlatıldı. Genel olarak bellek modeline, nesne mülkiyeti kavramına, özellikle dikkat edildi. Genel İlkeler bellek yönetimi, kendi ve yönetilen blokların kullanımı paylaşılan hafıza, yanı sıra ödünç işaretçiler. Bu makale, Rust dilinin giriş/çıkış olanaklarını tartışmaktadır.

Herhangi bir programlama dilinde, I/O alt sistemi önemlidir ayrılmaz parça. Standart çıktıyla çalışmanın en basit yollarından bazıları önceki makalelerde zaten kullanılmıştı ( print , println ). Bu işlevler sezgiseldir ve uygulama sürecinde herhangi bir zorluğa neden olmaz. Bu nedenle, şimdi esas olarak kullanıcı tarafından girilen verileri alma araçlarına ve dosyalarla çalışma araçlarına odaklanacağız.

1. std::io modülü

Rust'ta tüm I/O tesisleri bir modülde toplanır io.

Okuyucu ve Yazar özellikleri, en çok kullanılanların minimum bir kümesini tanımlar. basit yöntemler giriş ve çıkış. ReaderUtil ve WriterUtil özellikleri, kullanıcıya girdi ve çıktı üzerinde daha fazla kontrol sağlayan daha geniş bir yöntem seçeneği sunar. Örneğin, Reader yalnızca belirli sayıda baytı arabelleğe okumanıza izin verirken, ReaderUtil tüm satırı, birden çok satırı, sayısal değerleri vb. okumak için yöntemler sunar. Ek olarak, ReaderUtil'in bir uygulaması (uygulaması) vardır. , tüm Reader yöntemlerine erişim sağlar.

Özellik, belirli bir türe veya birden çok türe uygulanabilen bir dizi yöntemi tanımlar. Özellikler, bu serinin sonraki makalelerinde daha ayrıntılı olarak ele alınacaktır.

Yukarıda bahsedildiği gibi, en sık kullanılan print() ve println() fonksiyonları da modülde tanımlanmıştır. io, ancak çoğu durumda bunları açıkça içe aktarmanız gerekmez, çünkü derleme ve bağlantı sistemi zaten bununla ilgilenir.

Ayrıca, çok kullanışlı özellikler stdin() , stdout() ve stderr(), işaretçileri üç standart dosya tanımlayıcısına döndürür: sırasıyla standart girdi, standart çıktı ve standart hata.

2. Kullanıcıdan veri alma

Her durumda, en basit bir şekilde kullanıcıdan veri almak, standart girdi akışından veri okumanıza izin veren @Reader nesnesine bir işaretçi oluşturan stdin() işlevini kullanmaktır (standart çıkış akışı için benzer işlevler vardır - stdout() standart hata akışı için olduğu gibi - stderr() ). @Reader işaretçisi oluşturulduktan sonra, kullanıcının girdisini okumak için Liste 1'de gösterildiği gibi read_line() işlevini kullanabilirsiniz.

Liste 1. Kullanıcı girdisini okuma
fn main() ( let stdin = std::io::stdin(); print("Adın ne?"); let name_str = stdin.read_line(); println(fmt!("Tanıştığımıza memnun oldum, %s \ n", ad_str)); )

ReaderUtil özelliğinde, ek olarak basit fonksiyonlar baytları ve tek satırları okuma ayrıca çeşitli koşullar altında veri okumak için zengin bir araç seti tanımlar: bir dosya sonu işaretiyle karşılaşılıncaya kadar bayt okuma - read_until() , C stilinde yazılmış bir dize okuma (boş bir sonlandırma karakteriyle) ) - read_c_str() , tüm veri akışını okuma - read_whole_stream() , veri akışından tüm satırları okuma - read_lines() , hem tamsayı hem de kayan nokta sayısal değerleri okumanıza izin veren geniş bir işlev kümesi.

3. Bir dosyadan veri okuma

Dosyalarla çalışmak için gerekli tüm araçlar da modülde bulunur. standart::io. Her şeyden önce, aşağıdaki işlevlere dikkat etmelisiniz:

fn FILE_reader(f: *libc::DOSYA, temizleme: bool) -> @Reader fn FILE_writer(f: *libc::DOSYA, temizleme: bool) -> @Writer fn file_reader(yol: &Yol) -> Sonuç<@Reader, ~str>fn file_writer(yol: &Yol, işaretler: &) -> Sonuç<@Writer, ~str>fn mk_file_writer(yol: &Yol, işaretler: &) -> Sonuç<@Writer, ~str>

FILE_* seçenekleri C stili dosyaları okuyup yazarken file_* seçenekleri Rust stilinde kullanılmak içindir. İlk iki işlev açıkça belirli görevler için yardımcı araçların rolünü oynadığından ve ayrıca düşünülen Rust dili olduğundan, Rust stili tercih edilmelidir. Bu nedenle, yalnızca file_reader ve file_writer işlevleri daha fazla dikkate alınacaktır. Her iki işlev de ilk parametreleri olarak ~str türünde bir dosya yolu alır ve her ikisi de Result türünde bir değer döndürür. Bu nedenle, Rust'ta dosya G/Ç'sini anlamak için, Sonuç türünü de doğru bir şekilde anlamanız ve değerlendirmeniz gerekir.

3.1. Dönüş türü Sonuç

Bu tür, çalışma zamanı hatalarını önlemek için Rust'ta bir araç görevi görür. Sonuç, aşağıdaki değerleri içeren bir numaralandırmadır (bkz. src/libstd/result.rs):

pub enum sonucu ( Ok(T), /// fonksiyondan başarılı dönüş değerini içerir Err(U) /// fonksiyondan dönüş hatası değerini içerir)

Result türündeki değerlerin kullanılmadan önce paketten çıkarılması (tahrip edilmesi) gerekir.

Örnek program, modülden aşağıdaki işlevi kullanacaktır. standart::sonuç :

fn paketini açmak (res: Sonuç ) -> T

Sonuç Ok(T) ise, işlev, programda daha fazla kullanılabilecek Ok(T) öğesinden çıkarılan T değerini döndürür.

Tabii ki, bu fonksiyon ile kütüphane araç takımı standart::sonuç sınırlı değildir. Diğer işlevlerin açıklamaları yukarıdaki belgelerde bulunabilir.

3.2. Bir dosyadan veri okuma örneği

Örneğin kaynak kodu Liste 2'de gösterilmiştir. Örnek, verilen dosyadan baytları okur, ardından okuma sonucunu bir dizgeye dönüştürür ve bir kalıp eşleşmesi gerçekleştirir. Programın kendisinin ve test dosyasının okuma.txt, hangi verilerin okunduğu aynı dizinde bulunur.

Listeleme 2. Bir dosyadan bayt bayt veri okuma.
std::io::* kullanın; std::vec::* kullanın; std::path::* kullanın; fn is_success(fpath: &PosixPath) (belki_test_reader izin ver: Sonuç<@Reader, ~str>= file_reader(fpath); izin ver test_reader: @Reader = std::result::unwrap(maybe_test_reader); mut bayt izin ver: ~ = ~; döngü ( let byte: int = test_reader.read_byte(); if test_reader.eof() ( break; ) append_one(bytes, byte as u8); ) let sample: ~str = ~"success"; belki_success olsun: ~str = std::str::from_bytes(bytes); if belki_success == örnek ( println("Dosya okuma işlemi başarılı"); ) ) fn main() ( let fpath: ~PosixPath = ~PosixPath("./read.txt"); is_success(fpath); )

Yukarıdaki örnekte, is_success() test işlevi, kendisine iletilen dosya yolunu kullanarak bir test_reader nesnesi oluşturur. Açıklık sağlamak için, dosyanın içeriği her seferinde bir bayt okunur ve okunan bayt bayt vektörüne eklenir. Baytlar, int türündeki tamsayı değerleri olarak okunur, ancak bir sonraki bayt vektöre eklendiğinde, u8 türünde bir değer beklenir. Bu nedenle, eklenen her bayt için u8 olarak açık bir dönüştürme gerçekleştirilir. Bu işlemler okunurken dosyanın sonuna (dosya sonu) rastlanana kadar devam eder.

Reader.eof() yöntemi, şu anda okunan bayt eof bayrağını içerdiğinde true değerini döndürür. Bu durumda, bu baytın değeri -1'dir (okuyucu.read_byte() öğesinin u8 değil de bir int döndürmesinin nedeni budur) ve vektöre eklenmesi gerekmez. Koşul kontrol edilir ve EOF bulunursa döngüden çıkar.

Okuma sonucunun doğrulanması, okunan baytların ASCII değerleri olmasına (ve dolayısıyla UTF8 kodlamasının karşılık gelen kısmıyla eşleşmesine), yani "başarı" kelimesini oluşturan karakterlere dayanır.

3.3. Neden bir süre döngüsü değil

Liste 2'deki kodu değerlendirirken, makul bir soru ortaya çıkabilir: neden döngü gövdesinde eof kontrol edilerek döngüden çıkılıyor ve bir sonraki yinelemeden önce daha yaygın olan koşul testi kullanılmıyor? Bunun nedeni, read.eof()'un nasıl çalıştığıdır. Koşullu ifadede eof denetimi olan bir while döngüsü kullanırken, hedef vektöre -1 (255u8) değerine sahip bir EOF baytı eklenir. Bu nedenle while kullandığınızda, Liste 3'te gösterildiği gibi vektörden en son değeri "açmanız" gerekir.

Liste 3. Bir while döngüsü kullanarak okuma baytlarının snippet'i
mut bayt izin ver: ~ = ~; while !reader.eof() ( std::vec::append_one(bytes, okuyucu.read_byte() as u8); ) std::vec::pop(bytes);

Elbette böyle bir veri işleme seçeneğinin var olma hakkı vardır.

Çözüm

Rust'ta neredeyse tüm G / Ç modülde yoğunlaşmıştır standart::io. Her temel veri türü için, çıktı sırasında okunması ve sunumu için araçlar sağlanır. Modülün ana bileşenleri standart::io giriş ve çıkış üzerinde gerekli tüm kontrolü sağlayan Reader , Writer , ReaderUtil ve WriterUtil özellikleridir.


Bu konu başlığında, size kendinizinkini nasıl oluşturacağınızı göstereceğim. Rust sunucusu Modlarla deneysel. Neden gerekli? En azından Rust oynuyorsanız, sınırsız kaynaklar ve uçma yeteneği ile kendi sunucunuzda test etmek için çok daha uygun birçok fikriniz var. Ve daha ileri giderseniz, sunucunuzu popüler hale getirebilir ve sunucunuzdaki oyunculara oyun güzellikleri satarak gerçek para kazanabilirsiniz.

Öyleyse başlayalım.
Bölüm Bir - Sunucu oluşturma.
1. Bunu kullanarak resmi web sitesinden Rust_server.zip arşivini indirin
2. Arşivi sizin için uygun bir klasöre açın. Örneğin, bu: C:\Games\Rust_Server\Server
Ayrıca bu klasörle adres örnekleri vereceğim.
3. C:\Games\Rust_Server\Server klasörüne gidin ve update.bat dosyasını çalıştırın
Komut satırı olan siyah bir pencere açılacak ve sunucu dosyaları indirilecek, boyutu yaklaşık 2.15 GB'dir. İndirme tamamlandığında, pencere otomatik olarak kapanacaktır.
4. C:\Games\Rust_Server\Server\rustds klasörüne gidin
Oluşturmak Metin belgesi not defterinde, bu metni içine kopyalayın:
RustDedicated.exe -batchmode -server.hostname "Sunucum" -server.port 28015 -server.identity Hello_World -server.maxplayers 5 -server.seed 777 -server.worldsize 4000 -chat.serverlog 1 -server.netlog 1 -server .saveinterval 300 -spawn.max_rate 1 -spawn.max_density 1
Ardından, not defterinde "Farklı kaydet ..." seçeneğini tıklayın ve dosyayı "start server.bat" uzantısı "Tüm dosyalar" adıyla kaydedin.
Görünen "start server.bat" dosyası, sunucunuz için başlangıç ​​dosyasıdır. Üzerine tıkladığınızda tekrar siyah bir pencere açılacaktır. Komut satırı ve haritanın oluşturulması ve sunucunun başlatılması devam edecek. Pencerenin sağ alt köşesindeki fps sayacına bakarak sunucunun çalışmaya hazır olduğunu öğrenebilirsiniz: yüklerken 0 fps gösterecek ve bittikten sonra görünecektir. dijital değer, örneğin, 262 fps'im var.
5. Ardından, harici IP adresinizi bulmanız gerekir.
Diyelim ki IP adresi belirleme servislerinden birine gittiniz ve adresiniz 213.180.193.11 çıktı.
Rust'ı açın ve F1 düğmesine basın, açılan konsolda client.connect 213.180.193.11:28015 komutunu girin.

Her şey doğru yapılırsa, bağlantı gidecek ve kendinizi kendi sunucunuzda bulacaksınız.

Not: Sunucu dosyalarınızın (kaydetme vb.) bulunduğu klasör C:\Games\Rust_Server\Server\rustds\server\Hello_World konumunda olacaktır.

Bölüm iki: yönetici

1. Kendinizi (veya bir arkadaşınızı) sunucunuzda yönetici yapmak için önce Steam Kimliğinizi bilmeniz gerekir. Bunu yapmak için, buhar profilinize gidin ve herhangi bir boş alan- örneğin, avatarınızın solundaki sağ tık fare ve "Sayfa adresini kopyala" seçeneğini seçin. Bu adresi herhangi bir yere, örneğin bir not defterine veya tarayıcıya yapıştırırız. Gibi bir şey )