Rehber - C # Kurulumu ve Temel bir Kaynak Oluşturma

Fivem.com.tr

Fivem.com.tr
Katılım
1 Eki 2022
Mesajlar
5,891
Tepki
112
C # kullanarak nasıl kaynak yaratılacağına dair herhangi bir kılavuz bulamadığım için (en azından bu forumda) C # ortamını nasıl düzgün bir şekilde kurululacağını ve onunla basit bir komut dosyası oluşturmayı öğreteceğim. Bunu yapmak zor değil.



Amacım C # ile ilgili temel bilgilerin çoğunu kapsamaktır. (Kurulum aşamasında problem veyahut bir yerde anlamadıysanıza discord veya konunun altına mesaj atmanız yeterlidir.) Bu konuya girmeden önce, C # kullanmanın bazı artılarını ve eksilerini göz önünde bulundurun;
Artıları:


  • Otomatik otomatik tamamlama
    Güçlü C # özellikleri
    Nuget goodies (Birim testi için Kitaplıklar, JSON için vb.)
Eksikleri:


  • Kurulum için ekstra çalışma
    Önceden programlama deneyimine sahip olmadığınızda girmek daha zordur


C # kullanmanın, lua kullanmaktan bazı farklılıkları vardır, temel farklar şunlardır:


  • C # temsilciler kullanır.
    BaseScript, Tick olayına abone olmamızı sağlar
    Olay işleyicileri aynı zamanda temsilcilerdir.

"Büyülü" yerel işlevler yok.

  • Function.Call (hash, argümanlar) kullanarak çağırabiliriz
    Statik bir yönerge yaparsınız.

Ortak varlıklar için veri türleri ve C # api'de daha fazlası.

  • Pedleri, oyuncuları ve daha fazlasını içerir
    Nesnenin kendi önceden tanımlanmış işlevleri vardır, yararlı olabilir.

[*]
using static CitizenFX.Core.Native.API;Betiğinizin üst kısmına ekleyerek , Lua'daki gibi yerel işleve erişebilirsiniz.
Ön koşullar


  • Sunucu ve istemci dosyalarına erişim.
    Visual Studio yüklemesi (Visual studio 2017 önerilir).


Kurulum



1) Kütüphane edinme

Öncelikle iki kitaplığa ihtiyacımız var, ilk kitaplık sunucu dosyalarında (yapılarda) bulunur:

[server-path]/citizen/clr2/lib/mono/4.5/CitizenFX.Core.dll



Dosyayı bulabileceğiniz bir yere kopyalayın ve yeniden adlandırın CitizenFX.Server.dll

Kitaplık, sunucuya özgü tüm işlevleri içerir.



İkinci dosya istemcide bulunur:



%localappdata%/FiveM/FiveM Application Data/citizen/clr2/lib/mono/4.5/CitizenFX.Core.dll

Dosyayı bulabileceğiniz bir yere kopyalayın ve yeniden adlandırın CitizenFX.Client.dll



2) Visual Studio'da proje oluşturma



Artık Visual Studio'da kendi kütüphanelerimizi yapmamız gerekiyor, boş bir çözüm yapıyor olacağız ve projeleri kendimiz ekleyeceğiz. Öncelikle, Visual Studio başlangıç sayfasında “Create new project” e tıklayın ve “Blank solution” ı seçin.



Şahsen proje dosyalarımı kaynak klasörüne koymayı seviyorum (yani /resources/basic-resource/source/[project-files], bu şekilde dll'yi herhangi bir kodlanmış yol olmadan doğrudan doğru klasöre oluşturabilirsiniz)




3338-9c6494b88677e36e90d55565634242ae.jpg


Devam etmek için tamam'a basın. Yeni bir ekran açılmalıdır. Şimdi Solution [solution-name]-> Ekle -> Yeni Proje'ye sağ tıklayın (aşağıdaki resme bakın). Şimdi 3 proje yapmak istiyoruz (veya sadece iki, size bağlı). Üç proje de "Sınıf Kitaplığı (.NET Framework)" olmalı ve aşağıdaki gibi adlandırılmalıdır (BasicResource'u kendi adınızla değiştirin):


  • BasicResourceShare
    BasicResourceClient
    BasicResourceServer
BasicResourceShared projesi, istemci ve sunucu arasında paylaşılan tüm kodu tutacaktır.

BasicResourceClient tüm istemciye özel kodu

tutacaktır BasicResourceServer tüm sunucuya özel kodu tutacaktır.



3339-295a5ebfc57b799b5f9fe3371926235e.jpg





3340-4916de3ec10a05fc48edd1e6cad73839.jpg





3341-1b53a4be7005da6e5e1d7ffa857be8c7.jpg


3) Projelerin yapılandırılması

FX sunucusunun kitaplıkları yükleyebilmesi için, derleme adının önünde “.net” olması gerekir. Bu, bir projenin özelliklerine gidip derleme adından sonra .net ekleyerek yapılabilir. Bunu 3 proje için de yapmanız gerekiyor!




3342-cb0230a021e862b33f29fa0877d5298c.jpg





3343-d8759a1f1dab838f1b0f0f83d71d7d5a.jpg


İsteğe bağlı: Kaynak koda sahipseniz, kitaplıkları doğrudan doğru konuma oluşturabilirsiniz. Bunu mutlak yollarla da yapabilirsiniz, ancak bunu bir kaynak kontrolüne koyduğunuzda veya projeyi başka biriyle paylaştığınızda bozulacağı için yapmamanızı şiddetle tavsiye ediyorum.



Şimdi zaten mülklerde olduğunuzu varsayarsak, "build" sekmesine tıklayın. Altta bir "çıktı" bölümü ve çıktı yolu görüyorsunuz. Yolu şu şekilde değiştirin: ..\..\

Bu, temelde "iki klasör geri git" anlamına gelir.





3344-388500770e7d8d1be9bfa8ff9acc3d8c.jpg


4) Referans eklemek

Referanslar, istemci ve sunucu klasöründen çıkardığımız kütüphanelerdir. Referans eklemek için projeyi açıp “Referans maddesine” sağ tıklayıp “Referans Ekle” yi seçebilirsiniz.

Şimdi göz at sekmesine basın ve Gözat… düğmesine tıklayın ve iki kitaplığı ekleyin. Kontrol edilmediklerinden emin olun.




3345-aabe59f9e1bd616d107f29259301ddc8.jpg





3346-04a3ed11e13a1b309798f0a91876dff8.jpg


Şimdi müşteri için CitizenFX.Client.dll'yi eklemek istiyorsunuz. CitizenFX.Server.dll eklemek istediğiniz sunucu için. Bu, Referans Ekle ile yapılır -> Dahil etmek istediğiniz kütüphanenin onay kutusunu işaretleyin. Paylaşılan projede ikisi de olmamalıdır. Sunucu ve istemci projesinde, paylaşılan kitaplığı da (BasicResourceShared proje kitaplığı dosyası) eklemek istiyorsunuz.



Temel bir kaynak oluşturmak
1) Temel komut dosyası

C # ile herhangi bir şey oluşturmak için, önce BaseScript'ten sapmalıyız. Bu komut dosyası, "CitizenFX.Core" ad alanında bulunur.

Metin şunun gibi görünecektir:



C#:


Kod:
using CitizenFX.Core;

namespace BasicResourceClient
{
    public class BasicResourceClient : BaseScript
    {
    }
}



Hem sunucu hem de istemci BaseScript'ten açılmalıdır. Temel komut dosyası, bir sunucu "işaretini" dinlemek gibi işlevler ekler. Bu, bir kurucu ekleyerek ve onay temsilcisine abone olarak yapılabilir:



C#:


Kod:
using CitizenFX.Core;
using System.Threading.Tasks;

namespace BasicResourceClient
{
    public class BasicResourceClient : BaseScript
    {
        public BasicResourceClient()
        {
            Tick += OnTick;
        }

        private async Task OnTick()
        {
            await Delay(100);
        }
    }
}



Onay, delege bir Görev olduğundan, eşzamansız olarak ele alınmalıdır. Ekleyerek, await Delay(1000);devam etmeden önce 1000 milisaniye beklemesi tavsiye edilir.



2) Günün mesajı

Şimdi basit bir motd sistemi yapalım. Sunucu, sunucuya bağlanan istemciye günün mesajını gönderecektir. Sunucu, bağlanan herhangi bir oyuncuyu dinlemek için bir "olay işleyici" ekleyecektir. EventHandlers sınıfı, olay çağrıldığında geri aramayı çağırır ve argümanlar da iletir.

Sunucudaki uygulama şuna benzer bir şey olacaktır:



C#:


Kod:
    public class BasicResourceServer : BaseScript
    {
        public static string Motd = "Cake is a lie";

        public BasicResourceServer()
        {
            EventHandlers.Add("playerSpawned", new Action(OnPlayerSpawned));
        }

        private void OnPlayerSpawned([FromSource]Vector3 pos)
        {
            TriggerClientEvent(player, "sendMotd", Motd);
        }
    }



Yapıcıda yeni bir işleyici eklediğimizi görebilir ve olay alındığında hangi geri çağrının çağrılacağını söyleyebilirsiniz. playerConnecting, sunucu kodundaki dahili bir olaydır ve birisi bağlandığında çağrılmalıdır (duuh). Yapıcıda EventHandler'ı kaydederiz ve çeşitli argümanlarla bir geri arama yaparız. Geri çağırma OnPlayerConnecting, aynı argümanlara sahip işleve doğru işaret eder . [FromSource]Özniteliği fark etmiş olabilirsiniz , bu eklenmiştir, böylece sistem hangi parametrenin doldurulacağını bilir. playerDeğişken, olayı çağıran Player nesnesidir. Çağrılan her olayda kullanılabilir oyuncu nesnesi olacaktır, ihtiyacınız yoksa şu şekilde ihmal edebilirsiniz:



C#:


Kod:
  public class BasicResourceServer : BaseScript
    {
        public static string Motd = "Cake is a lie";

        public BasicResourceServer()
        {
            EventHandlers.Add("playerSpawned", new Action(OnPlayerSpawned));
        }

        private void OnPlayerSpawned([FromSource]Vector3 pos)
        {
            TriggerClientEvent(player, "sendMotd", Motd);
        }
    }



İstemcide, gelen motd olaylarını dinlemek için aynısını yapabiliriz:



C#:


Kod:
    public class BasicResourceClient : BaseScript
    {
        public bool hasReceivedMotd = false;

        public BasicResourceClient()
        {
            EventHandlers.Add("sendMotd", new Action(ReceivedMotd));
        }

        private void ReceivedMotd(string motd)
        {
            if(!hasReceiveMotd)
            {
                TriggerEvent("chatMessage", "SYSTEM", new[] { 255, 0, 0 }, motd);
                hasReceiveMotd = true;
            }
        }
    }



Şimdi kodu yazmamız gerekiyor, tüm çözümleri derlemek için Ctrl + Shift + B tuşlarına basabilir veya çözüme sağ tıklayıp Build solution




3347-f80bbacd59db0c0036b150b342e690ec.jpg


3) Kaynağı kurma

Her şeyin çalışması için __resource.lua eklememiz yeterlidir. Komut dosyası adlarını söylemek yerine, derleme adı + uzantıyı dahil etmek istiyoruz. Benim durumumda şuna benzer:



Kod:


Kod:
client_script {
    "BasicResourceShared.net.dll",
    "BasicResourceClient.net.dll"
}
server_script {
    "BasicResourceShared.net.dll",
    "BasicResourceServer.net.dll"
}



Ve server.cfg'ye start komutunu ekleyerek:



Kod:


Kod:
start basic-resource






Kendinize acıdan bir kimlik inşa ettiğiniz zaman, artık ondan kurtulamazsınız. -Eckhart Tolle

Konu alıntıdır, yanlış veya hatalı bir bilgi/paylaşım var ise yanıtlayabilir veya bizimle iletişime geçebilirsiniz.
 

Şu anda bu konu'yu okuyan kullanıcılar

Benzer konular

Üst