Bağımsız olarak eklenti kontrolü ve komut gönderimi
Gönderilme zamanı: Cum Tem 19, 2019 4:31 am
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.
Biz bu eklentinin sunucudaki varlığını sorgumak için aşağıdaki kodları kullanabiliriz.
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?
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.
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.
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
}
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.")
}
}
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")
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.
}
Oyun içi konuşmaya test yazdığım vakit 3pers eklentisini çalıştırırım. Bütün olay budur.