Komut Oluşturma ve MultiLanguage Pluginler

Konu

#1
                                                                             Komut Oluşturma

     Bu derste sourcemod'da nasıl kullanıcı ve admin komudu oluşturmayı göstereceğim.Şimdi kullanıcının kendi ipsini öğrenmesini sağlayan bir eklenti yazalım.!myip yazınca kullanıcı kendi ipsini öğrensin.Bunun için bir konsol komudu oluşturmamız gerekiyor.RegConsoleCmd komudunu kullanarak oluşturalım.

PHP Kod:
#include < sourcemod >

public Plugin myinfo =
{
 
name "IP",
 
author "Anil Can",
 
description "Kullanıcı Kendi IP ogrenir",
 
version "1.0",
 
url "https://forum.webdiyo.com/newthread.php?fid=99"
}
public 
void OnPluginStart( )
{
 
RegConsoleCmd"sm_myip"MyIp"Kendi ip numaranızı öğrenirsiniz" );

       Sourcemod da amxmodx e göre farkı say komudu için ekstra bir komut girmenize gerek yoktur.Bu komutla !myip , .myip veya konsola sm_myip ile kullanıcı komudu çalıştıracaktır.1. parametre kullanıcının gireceği komut, 2. paramtetre komut girildikten sonra çalışacak fonksiyon ismi,  3. parametre ise komut hakkında bilgi vermedir.Şimdi yapacağımız şeyler kullanıcı eğer sm_myip den sonra bir arguman girerse plugini durdurup doğru kullanımı gösterelim.GetClientIp ile kullanıcının ipsini alıp print edelim.


PHP Kod:
#include < sourcemod >

public Plugin myinfo =
{
 
name "IP",
 
author "Anil Can",
 
description "Kullanıcı Kendi IP ogrenir",
 
version "1.0",
 
url "https://forum.webdiyo.com/newthread.php?fid=99"
}
public 
void OnPluginStart( )
{
 
RegConsoleCmd"sm_myip"MyIp"Kendi ip numaranızı öğrenirsiniz" );
}
public 
Action MyIpint clientint args )
{
 if( 
args )
 {
 
ReplyToCommandclient"Kullanımı <sm_myip>" );
 return 
Plugin_Handled;
 }
 
char buffer32 ];
 
GetClientIPclientbuffersizeofbuffer ) );
 
PrintToChatclient"Senin IP NO : %s"buffer );
 return 
Plugin_Handled;

    
      Böylece pluginimiz bitti.Kullanıcı !myip yazınca kendi ipsini öğrendiği bir eklenti yazdım.Şimdi ise bir admin komutu nasıl yapılacağına dair bir örnek plugin yazalım.Şimdi bir respawn plugini yazalım.Bunun için RegAdminCmd komudunu kullanacağız.
PHP Kod:
#include < sourcemod >

public Plugin myinfo =
{
 
name "Revive",
 
author "Anil Can",
 
description "Ölü oyuncuları canlandırma",
 
version "1.0",
 
url "https://forum.webdiyo.com/newthread.php?fid=99"
}
public 
void OnPluginStart( )
{
 
RegAdminCmd"sm_rev"Admn_ReviveADMFLAG_SLAY"Ölü oyuncuları revlemenizi sağlar" );

      Şimdi komudumuzu yarattık.Komuttan sonraki yazdığımız ismi GetCmdArg komuduyla yakalıyacağız.Bu komutla ilgili önemli bir özellik var.Bu komut alınan verileri stringe çevirir.Eğer bir sayı değeri kullanmak istiyorsanız daha sonra bu değeri çevirmeniz gerek fakat biz zaten string isteiğimiz için sorun yok.Adminin yazdığı nick otomatik tanımlayacak komut kullanacağız.FindTarget komuduyla hedefimizi yakalayacağız.Fakat eğer hedef yakalama başarısız olduysa bunu bir if koşuluyla kontrol edip durdurualım.Ayrıca sadece ölü oyuncuları canlandıralım bu komutla.O yüzden 2. if koşulu oluşturalım.Kodumuz aşağıdaki gibi olacaktır.

PHP Kod:
#include < sourcemod >
#include < cstrike >

public Plugin myinfo =
{
 
name "Revive",
 
author "Anil Can",
 
description "Ölü oyuncuları canlandırma",
 
version "1.0",
 
url "https://forum.webdiyo.com/newthread.php?fid=99"
}
public 
void OnPluginStart( )
{
 
RegAdminCmd"sm_rev"Admn_ReviveADMFLAG_SLAY"Ölü oyuncuları revlemeniz sağlar" );
}
public 
Action Admn_Reviveint clientint args )
{
 if( 
args )
 {
 
ReplyToCommandclient"<sm_rev> nick " );
 return 
Plugin_Handled;
 }
 
char arg32 ], nameMAX_NAME_LENGTH ];
 
GetCmdArg1argsizeofargs ) );
 
int target FindTargetclientarg );
 if( 
target == -)
 {
 
ReplyToCommandclient"Oyuncu bulunamadı." );
 return 
Plugin_Handled;
 }
 if( 
IsPlayerAlivetarget ) || !IsClientConnectedtarget ) )
 {
 
ReplyToCommandclient"Sadece ölü oyuncuları canlandırabilirsin." );
 return 
Plugin_Handled;
 }
 
CS_RespawnPlayertarget );
 
GetClientNameclientnamesizeofname ) );
 
PrintToChatAll"%s %N adlı yetkili tarafından canlandırıldı."nameclient );
 return 
Plugin_Handled;

      GetCmdArg Kullanımı
Örnek vererek anlatıyım. Kullanıcı sm_haydar ali 3  diye komut girdi.Dediğim örnek yukarıdaki örnekten bağımsızdır.Fonkisyonun içindeki int args girilen tüm ifadeyi alır.GetCmdArg ile biz bunu parçalara  ayırırız.İlk parametreyi 0 girersek "sm_haydar", 1 girersek "ali" 2 girersek ise "3" ü alır.Dikkat etmeniz gereken durum ise  tüm ifadeler string türünde alınır.2. parametre ise depolanacağı değişken ve 3. değişken ise stringin maksimum uzunluğu.sizeof otomatik stringin uzunluğunu hesaplar.

   Burada kafanızı karıştırabilecek kısım %N olan bölüm olabilir.Çünkü bu format şekli 1.6'da mevcut değil.%N clientin ismini çevirmemizi sağlayan bir dönüşümdür.Şimdi komudumuz düzgünce çalışıyor fakat pratik değil.Eğer topluca canlandırmak isteğimizde bu komut işe yaramazdır.Bunu yapmamızı sağlayan tek bir komut vardır.ProcessTargetString komuduyla hem tek tek hemde topluca komud uygulamamız sağlar.Bu şekile dönüştürmeden önce multiplelanguage( çokludil ) pluginlerin uzantısı olan translation dosyaları nasıl oluşurulur onu anlatmam gerekiyor.

                                               MultiLanguage Pluginler
MultiLanguage pluginler eklentinizdeki chat menu vs. kısmı bir çok dilde görüntülenmesini sağlar. Plugine entegre etmeden önce bir translation textin nasıl olması gerektiğini anlatacağım.Bu dosyalar key-value( anahtar değer ) formatındadır.


5ce6b98686a98_deneme
Şeklinde oluşturulur.Eğer döndürelecek bir kısım varsa ( %s %i ) gibi bunu eklemenin  yöntemi ise

5ce6bff4613f0_dcf

       Bu şekilde format yapısı yapılır bu formatların numaralandırması pluginde yazılan sıraya bağlıdır.Şimdi ise pluginde nasıl yapılcağını anlatalım.İlk Önce bu dosyları yükletmemiz gerekir.Bunun için ise  LoadTranslations(  "Dosya İsmi"komudunu kullanacağız.Print ederken ise ilk örnekteki "Welcome" bizim anahtar kelimemizdir.Pluginde şu şekilde olacaktır.PrintToChat( client, "%t", "Welcome" ). Görüldüğü üzere %t Translation kısmını döndürür.

       Şimdi örneğimize geri dönersek şimdi pluginimize translation kısımlarını ve toplu komut ekliyoruz.


PHP Kod:
#include < sourcemod >
#include < cstrike >

public Plugin myinfo =
{
name "Revive",
author "Anil Can",
description "Ölü oyuncuları canlandırma",
version "1.0",
url "https://forum.webdiyo.com/newthread.php?fid=99"
}
public 
void OnPluginStart( )
{
RegAdminCmd"sm_rev"Admn_ReviveADMFLAG_SLAY"Ölü oyuncuları revlemeniz sağlar" );
LoadTranslations"respawn.phrases" );
LoadTranslations"common.phrases" );
}
public 
Action Admn_Reviveint clientint args )
{
if( 
args )
{
ReplyToCommandclient"<sm_rev> nick " );
return 
Plugin_Handled;
}
char arg32 ], target_nameMAX_NAME_LENGTH ], nameMAX_NAME_LENGTH ];
int target_listMAXPLAYERS ], target_count;
bool tn_is_ml;
GetCmdArg1argsizeofarg ) );
if( ( 
target_count ProcessTargetStringarg, 
client
, 
target_list
, 
MAXPLAYERS
, 
COMMAND_FILTER_DEAD
, 
target_name
, 
sizeof
target_name ), 
tn_is_ml 
) ) <= )
{
ReplyToTargetErrorclienttarget_count );
return 
Plugin_Handled;
}
for( 
int i 0target_counti++  )
{
CS_RespawnPlayertarget_list] );
}
GetClientNameclientnamesizeofname ) );
if( 
tn_is_ml )
{
PrintToChatAll"%t""Revive"target_nameclient );
}
else
{
PrintToChatAll"%s %N yetkili tarafından canlandırıldı." );
}
return 
Plugin_Handled;


              ProcessTargetString Kullanımı
Bu yapı ileride çok kullancağımızı gelişmiş ve kullanımı kolay bir yapıdır.Paramterlerini tek tek açıklamya başlayalım.1. parametre hedefimizi belirlememizi sağlar.2. parametre komudu çalıştıran kişi, 3. parametre  hedefin kaç kişi olduğunu belirler,4. parametre hedeflenebilecek maksimum oyuncu sayısı, 5. parametre hedefleri geçirebilidğimiz bazı filtereler örneğin COMMAND_FILTER_DEAD ile sadece ölü oyuncuların geçebilceği bir filtre, 6. parametre hedefin ismi, 7. parametre ise hedef isminin maksimum uzunluğu ve son parametre ise dil dosyasının var olup olmadığını kontrol eder.

       COMMAND_FILTER_ALIVE                                 Canlı oyuncular filtrrden geçer.
       COMMAND_FILTER_DEAD                                  Ölü oyuncular filtreden geçer.
       COMMAND_FILTER_CONNECTED                      Servere bağlı oyuncular filtreden geçer.
       COMMAND_FILTER_NO_IMMUNITY                 Dokunulmazlığı yok sayar.
      COMMAND_FILTER_NO_MULTI                         Toplu komud filtreden geçmez
       COMMAND_FILTER_NO_BOTS                           Botlar filtreden geçmez.


Yaptığım tüm pluginleri eke koydum inceleyebilirsiniz.
Son Düzenleme: 04-02-2020, 02:49, Düzenleyen: Anıl Can.
Cevapla
#2
Teşekkürler
Cevapla
#3
Teşekkürler
Cevapla
#4
Teşekkürler.
Cevapla
#5
Teşekkürler
Uygun Fiyata Uygun TasarımlarFacebook  / Steam
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task
Kayıt Ol