Discord sunucumuz açılmıştır, hepinizi bekleriz

https://discord.gg/43gGDQe6tS

Bağımsız olarak eklenti kontrolü ve komut gönderimi

Hazır fonksiyonlar, kütüphaneler, düzenleme programları/araçları/gereçleri, editörler kısacası geliştirme ortamı

Moderatör: Moderatörler

Kullanıcı avatarı

Konu Sahibi
Yek'-ta
Mesajlar: 9624
Kayıt: Cmt Eyl 12, 2015 12:40 pm
İletişim:

Bağımsız olarak eklenti kontrolü ve komut gönderimi

Mesaj gönderen Yek'-ta »

Temel olarak her zaman için native kullandık. Fakat bazı durumlarda native kullanamayız çünkü ana eklentiye erişimimiz olamaz. Yada hâli hazırda sunucuda bulunan bir kod bloğunu, eklentinin native özelliği olmasa bile kullanmak isteriz. Mesela amx super eklentisi.

Fakat ben bu konuyu 3pers eklentisi üzerinden göstereceğim.

Kod: Tümünü seç

#include <amxmodx>
#include <engine>

#define PLUGIN    "3Rd view"
#define AUTHOR    "Ferrari & Sylvanor"
#define VERSION    "1.0"
#define MAX_PLAYERS 32
new g_pCamera
new g_bCamera[ MAX_PLAYERS + 1 ]
public plugin_precache()
{
	precache_model( "models/rpgrocket.mdl" );
}
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    g_pCamera = register_cvar("amx_3rdview", "1")
    register_clcmd("say /3pers", "cmdCamera")
    register_clcmd("say_team /3pers", "cmdCamera")
}

public client_putinserver( id )
{
    g_bCamera[ id ] = false
}

public cmdCamera( id )
{
    if( get_pcvar_num( g_pCamera ) )
    {
        if( (g_bCamera[ id ] = !g_bCamera[ id ]) )
        {
            set_view( id, CAMERA_3RDPERSON )
        }
        else
        {
            set_view( id, CAMERA_NONE );
        }
    }
    return PLUGIN_HANDLED
}
Biz bu eklentinin sunucudaki varlığını sorgumak için aşağıdaki kodları kullanabiliriz.

Kod: Tümünü seç

#include <amxmodx>

#define PLUGIN "Ornek Eklenti"
#define VERSION "Test"
#define AUTHOR "Yek'-ta"

new pluginId

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)

    pluginId = find_plugin_byfile("3pers.amxx")

    if(pluginId >= 0){
        server_print("Eklenti sunucuda kurulu. Bellekteki sırası %i", pluginId)
    }
    else{
        server_print("Eklenti sunucuda kurulu değil.")
    }
}
Burada ben dosya ismi üzerinden sorgulattım. find_plugin_byfile bize eklentinin bellekte kaçıncı sırada olduğunu verdi. Eğer sunucuya amxx plugins gönderir iseniz sunucu size bellekten sıra ile eklentileri listeleyip verir. Bu liste, o listeden oluyor. Fakat o sıralamada 1'den başlar. Yazılımda sıralama 0'dan başlar. Yani ilk eklenti her zaman 0dır. Bu sebep ile pluginId değişkeninin 0'a eşit veya 0'dan büyük olup olmadığını sorgulattım. Eğer eklenti yok ise find_plugin_byfile bize -1 değerini verir. Bu durumda sunucuda sorgulanan eklenti yok demektir.
Peki ben bu eklentinin olup olmadığını dosya ismi yerine direkt eklenti ismi üzerinden sorgulatmak ister isem?

Kod: Tümünü seç

pluginId = is_plugin_loaded("3Rd view")
Sadece tek yapmam gereken pluginId değişkeninin değerini is_plugin_loaded ile vermem. Tırnak içerisine bu sefer dosya ismi yerine doğrudan eklenti ismini yazdım.


Bu eklenti içerisinden sadece cmdCamera kısmını alıp kullanmak ister isem bu sefer fonksiyonları kullanmam gereklidir. Bunlarda korkulacak bir şey yoktur. Kullanımı eklentinin içeriğini bildikten sonra kolay.

Kod: Tümünü seç

#include <amxmodx>

#define PLUGIN "Ornek Eklenti"
#define VERSION "Test2"
#define AUTHOR "Yek'-ta"

new pluginId,funcId

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)

    pluginId = find_plugin_byfile("3pers.amxx")

    if(pluginId == INVALID_PLUGIN_ID)
        set_fail_state("3pers eklentisi bulunamadi")

    funcId = get_func_id("cmdCamera",pluginId) //get_func_id ile pluginIdye bağlı cmdCamera fonksiyonunu fundId değişkenine sabitledim.

    register_clcmd("say test", "KamerayaYonlendir")
}
public KamerayaYonlendir(oyuncu)
{
    callfunc_begin_i(funcId,pluginId) //Fonksiyonu kullanmak istediğimi belirttim.
    callfunc_push_int(oyuncu) //Fonksiyona hangi değeri göndermek istediğimi belirttim.
    callfunc_end() //Fonksiyonu kullanmayı bitirdiğimi belirttim.
}
Bu kodlarda find_plugin_byfile yerine is_plugin_loaded kullanabilirsiniz, iki durumda da çalışır.
Oyun içi konuşmaya test yazdığım vakit 3pers eklentisini çalıştırırım. Bütün olay budur.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

By.King ►EmrullaH◄
Yasaklı Üye
Yasaklı Üye
Mesajlar: 4297
Kayıt: Cmt Şub 24, 2018 6:05 pm
Konum: İstanbul
İletişim:

Bağımsız olarak eklenti kontrolü ve komut gönderimi

Mesaj gönderen By.King ►EmrullaH◄ »

Peki diyelim ki biz bu veriyi 3000 satırlık bir smadan çektik, bunu yaparken serveri yorar mı ?

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
Yek'-ta
Mesajlar: 9624
Kayıt: Cmt Eyl 12, 2015 12:40 pm
İletişim:

Bağımsız olarak eklenti kontrolü ve komut gönderimi

Mesaj gönderen Yek'-ta »

By.King ►EmrullaH◄ yazdı: Cum Tem 19, 2019 8:05 am Peki diyelim ki biz bu veriyi 3000 satırlık bir smadan çektik, bunu yaparken serveri yorar mı ?
Ben amx süper den bahsediyorum, sen 300 satırlık kod diyorsun.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

By.King ►EmrullaH◄
Yasaklı Üye
Yasaklı Üye
Mesajlar: 4297
Kayıt: Cmt Şub 24, 2018 6:05 pm
Konum: İstanbul
İletişim:

Bağımsız olarak eklenti kontrolü ve komut gönderimi

Mesaj gönderen By.King ►EmrullaH◄ »

Doğru orayı unutmuşum.

Link:
Linklerini gizle
Linki Kopyala
Cevapla