Rehber - C# Programlama Sistemi

Fivem.com.tr

Fivem.com.tr
Katılım
1 Eki 2022
Mesajlar
5,891
Tepki
79
2600-f4e3acab894329fb4c957278dd6a7d90.jpg

2601-d41489eda12e81ac83d15928916898b1.jpg



Hepinize merhaba! FiveM'in C # ortamındaki özel durumları kapsayan küçük bir kılavuz yapmaya karar verdim.

1. Yerel / API Geri Çağırmaları

Yerel veya API sarma yöntemleri , BaseScript'ten türetilmiş bir sınıfın yapıcısında çalıştırılmamalıdır (buradaki davranış tam olarak bilinmemekle birlikte bu çoğunlukla istemci için geçerlidir)

-

Bu sınırlama için bir geçici çözüm, Function veya API çağrılarını ve ilk tıklamada Function veya API çağrılarını kullanan herhangi bir yöntemi yürütmektir:




C#:


Kod:
public class TestScript : BaseScript
{
    #region Private Fields

    private bool firstTick = false;
    #endregion

    #region Initialization

    public TestScript()
    {
        Tick += OnTick;
    }
    #endregion

    #region Private Methods

    private async Task OnTick()
    {
        if(!firstTick)
        {
            firstTick = true;
            // API calls.
        }
    }
    #endregion
}



2. NUI Geri Çağırmaları (İstemci)

API geri aramaları aldatıcıdır. NUI ve istemci arasındaki iletişim JavaScript'te yapıldığından, döndürülen veriler zaten ayrıştırılır ve ExpandoObject özelliklerine gönderilir.



C#:


Kod:
// ... Inside BaseScript
# NUI Implementation
private void RegisterNUICallback(string msg, Func<IDictionary, CallbackDelegate, CallbackDelegate> callback)
{
    API.RegisterNuiCallbackType(msg); // Remember API calls must be executed on the first tick at the earliest!

    EventHandlers[$"__cfx_nui:{msg}"] += new Action((body, resultCallback) =>
    {
        callback.Invoke(body, resultCallback);
    });
}
#endregion





Eğer nüfuz etmesi için bir saniye gerekir ve sistem düzenleyecektir. Burada yaptığımız özel olay önceki ile NUI olayları dinlemek olduğu.: _

_cfx_nui:{eventName}. FiveM çerçevesi bunu böyle yapıyor, bu yüzden itaat etmemiz gerekiyor. Şimdi özel olan, geçirilen argümanlardır. DAİMA ExpandoObject ve CallbackDelegate türünde olacaktır. ExpandoObject bizim verilerimizdir (daha fazla bilgi için tür ve DLR hakkında google). ExpandoObject, IDictionary tipindedir ve esasen verileri ile tutar.

Esasen RegisterNUICallback komutumuz, olay ortaya çıktığında çağırdığımız bir geri aramayı kabul eder. Bu yüzden hayatı kolaylaştırır ve geri aramaya IDictionary olarak aktarırız.




Not: İkinci geçirilen parametrenin (CallbackDelegate türünde) ne için olduğunu henüz keşfetmedim. Lütfen yapabiliyorsanız paylaşın!



3. API RegisterCommand (Sunucu)

Bu da başka bir zor komuttur. RegisterCommand uzak konsolda yazılan komutları dinler. API işlevi, komut adı için bir dize, garip bir 'InputArgument' türü ve kısıtlı adında bir bool ister. Kısıtlı genellikle yanlıştır ve girdi argümanı, komut geçildiğinde yürütmemiz için bir temsilci olarak hareket edecektir. Buradaki soru, bu geri arama ile hangi argümanların iletildiğidir. Görünüşe göre bunlar int kaynak olduğunda, List gerçekte parametre dizelerinin bir listesidir ve son dize tüm komuttur.



C#:


Kod:
// ... fyi: This function works in the constructor of the server BaseScript.
API.RegisterCommand("say", new Action<int, List, string>((source, arguments, raw) =>
{
    Debug.WriteLine($"{source}{raw}");
    foreach (var arg in arguments)
        Debug.WriteLine($"  {arg}");
}), false);

// Console command: say hello world!
// Debug:
// 0,
// say hello world!
//   hello
//   world!

2602-6cf8e24751adec37556e17875294b067.jpg





Dalın ucuna gitmekten korkma, meyve oradadır. -H. Jackson Browne

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