Plugin Kodlamada Temel Bilgiler
Fonksiyonlar:
Pawn size kendi fonsiyonlarınızı oluşturmanızı sağlar.
Örnek:
PHP Kod:
merhaba()
{
client_print(0,print_chat,"Fonsiyon calistirildi")
}
client_print ( index, type, const message [], any:.... )
index : Mesajı görecek kişileri belirlersin. Eğer herkesin görmesini istiyorsanız 0 yazınız.
type: 3 farklı tipi vardır. print_chat mesaj say kısmında gözükür.print_center mesaj aimin 2-3 cm yukarısında çıkar.print_console mesaj konsolda gözükür.
Verdiğim en basitinden bir fonksiyon örneğidir.Şimdi başka bir fonsiyon oluşturalım ve parametre koyalım fonksiyona.
PHP Kod:
topla( number1,number2 )
{
new toplam = number1 + number2
return toplam
}
PHP Kod:
topla( Float: number1, Float: number2 )
{
new Float: toplam = number1 + number2
return toplam
}
topla_dizi(array[], a, b)
{
new first = array[a]
new second = array[b]
new sum = topla(first, second) //bir onceki fonksiyon
return sum
}
Şimdi küçük bir say komuduyla bilgilerimizi pekiştirelim.
PHP Kod:
/* Script generated by Pawn Studio */
#include < amxmodx >
#include < amxmisc >
#define PLUGIN "New Plugin"
#define AUTHOR "Unknown"
#define VERSION "1.0"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd( "say /selam", "selamal" )
}
public selamal( id )
{
new name[ 32 ];
get_user_name( id, name, 31 )
client_print( id, print_chat, "Aleykum Selam %s.Servere HosGeldin", name )
}
get_user_name ( index, name[], len ) Bu komut indexin ismini öğrenmemizi sağlar.
Şimdi gelelim mesaj kısmına indexi id yaptık.Böylece sadece mesajı kendisi görücek.print_chat dan dolayı mesaj say kısmında gözükür.Mesaj kısmında %s adlı kısım önemli bir noktadır.Biliyorsunuz name degğişkeni bir string türündedir.( Bir önceki derste anlatıldı. ) Peki değer integer yada float olursa değeri nasıl döndürebiliriz.
%s : String türündeki verileri döndürür.
%i : Integer türündeki verileri döndürür.
%f : Float türündeki verileri döndürür.
KOŞUL İFADELERİ
Koşul ifadeleri pawnın temelini oluşturur ve kullanışlıdırlar.Bunların birkaç çeşidi vardır.
if - else döngüsü : Bu döngü if içindeki koşul doğruysa çalıştırır eğer değer false ise else komudunu çalıştırır.Küçük bir örnekle daha iyi anlamanızı sağlıyacağım.
PHP Kod:
/* Plugin generated by AMXX-Studio */
#include <amxmodx >
#include < amxmisc >
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
}
public client_connect( id )
{
new name[ 32 ];
get_user_name( id, name, 31 );
if( access( id, ADMIN_RESERVATION) ) // Eğer yetkisi varsa
{
client_print( id, print_chat,"%s adli yetkili servere giris yapti.", name )
}
else // Yetkisi yoksa
{
client_print( id, print_chat,"%s adli kisi servere giris yapti.", name )
}
}
client_connect adlı forward amxmodx kütüphanesine bağlı bir komuttur.Bir kişi servere girdiği an çalışır.
access ( id, level ) bu komut yetki kontrolü yapmamızı sağlıyor.
Şimdi önemli operatörlerden bahsedeceğim.
&& ( Ve ) : Bu operatör koşula "ve" anlamını verir.
|| ( ya da ) : Bu operatör koşula "ya da" anlamını katar.
! ( olumsuz ) : Bu operatör koşula olumsuz bir anlam yükler.
!= ( eşit değildir. ) : Bu operatör eşit değil anlamına gelir.
> , >=, <, <= : Sırasıyla büyüktür, büyük veya eşittir, küçüktür, küçük veya eşittir.
Şimdi bu operatör ve if yapısını içeren bir örnek verelim.
PHP Kod:
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < cstrike >
#define PLUGIN "Anil Can"
#define VERSION "1.0"
#define AUTHOR "Frag Satin Al"
new g_ucret;
public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR )
register_clcmd( "say /fragal", "kontrol" );
g_ucret = register_cvar( "frag_ucret", "1000" );
}
public kontrol( id )
{
if( access( id, ADMIN_RESERVATION ) || get_user_team( id ) == 2 )
{
if( !( cs_get_user_money( id ) > get_pcvar_num( g_ucret ) ) )
{
client_print( id, print_chat, "Uzgunum yeterli paran yok.Gereken Ucret %d $", get_pcvar_num( g_ucret ) );
return PLUGIN_HANDLED;
}
else
{
set_user_frags( id, get_user_frags( id ) + 3 );
cs_set_user_money( id, cs_get_user_money( id ) - get_pcvar_num( g_ucret ) );
client_print( id, print_chat, "%d $ karsiliginda frag satin aldin", get_pcvar_num( g_ucret ) );
}
}
return PLUGIN_HANDLED;
}
Belli bir ücret karsiliginda frag satin alma plugini yazdım.Ücreti cvara bağlamak istedim o yüzden
new g_ucret
Frag satin almak için bir say komudu oluşturdum.Sonra şimdi cvarı tanıtmaya gelelim.
g_ucret = register_cvar( "frag_ucret" , "1000" );
Birinci parametre cvarmızın adı , 2. parametre ise cvarın değeridir.
Şimdi saydan /fragal yazınca kontrol adlı publice yönlendiriyor eklenti.Ben sadece "b" yetkisi yada "CT" takımının frag satın almasını istiyorum o yüzden;
if( access( id, ADMIN_RESERVATION ) || get_user_team( id ) == 2 )
Koşulunu ekledim.Şimdi ise oyuncunun parasını kontrol etmemiz lazım.O yüzden 1 tane daha if koşulu ekliyoruz.
if( !( cs_get_user_money( id ) >= get_pcvar_num( g_ucret ) ) )
cs_get_user_money( index ) : Indexin parasını öğrenmemizi sağlar.[
get_pcvar_num adlı komut integer olarak tanımlandırılan cvarları döndürmemizi sağlar.,
Parası yetmiyorsa bir uyarı mesajı koyup çağrıyı durdurdum.Şimdi gelelim frag ekleyip parayı düşürmek kaldı.
set_user_frags( index, frags ) :Indexin fragını değişmemizi sağlar.
get_user_frags( index ) : Indexin fragını öğreneriz.
cs_set_user_money( index, money ) : Indexin parasını değişmemizi sağlar.
swtich : Bu if yapsının bir alternatifidir.
PHP Kod:
if( get_user_team( id ) == 1)
{
//
}
else if(get_user_team( id ) == 2 )
{
//
}
else
{
//
}
PHP Kod:
switch( get_user_team( id )
{
case 1 :
{
//
}
case 2 :
{
//
}
default :
{
//
}
}
koşul ? durum1 : durum2
Eğer koşulun değeri true ise durum1 çalışıcak eğer false ise durum2 çalışıcak.Küçük bir örnek verelim.
PHP Kod:
#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd( "say /bonus" , "bonusver" );
}
public bonusver( id )
{
access( id, ADMIN_KICK ) ? cs_set_user_money( id, cs_get_user_money( id ) +5000 ) : cs_set_user_money( id, cs_get_user_money( id ) +500 );
}
DÖNGÜLER
Döngüler işinize çok yarıyacak ve kullanışlı fonksiyonlardır.
for döngüsü :
for( değişken; koşul; artım )
Buradaki mantık değişken koşul durumunu sağlıyana kadar döngü sürekli dönmeye devam edicektir.Örnekle daha iyi anlamınızı sağlamaya çalışacağım.
PHP Kod:
#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#define PLUGIN "Toplu Slay"
#define VERSION "1.0"
#define AUTHOR "Anil Can"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd( "say /oldur" , "t_oldur" );
}
public t_oldur( Uid )
{
new players[ 32 ], inum, id;
get_players( players, inum, "ae", "TERRORIST" );
for( new i = 0; i < inum; i ++ )
{
players[ i ] = id
user_kill( id, 1 );
}
}
players [ MAXPLAYERS ] : Indexleri depolamamız sağlar.
num : Oyuncu sayısı toplamı
flags :
"a" Ölü oyuncuları içine alma
"b" Canlı oyuncuları içine alma
"c" Botları içine alma
"d" Gerçek oyuncuları ( bot olmayanları ) içine alma
"e" Takıma Özel yapmanızı sağlar
"f" Isme özel yapmanızı sağlar
"g" Büyük küçük harf duyarlılığını yoksay
"h" HLTV proxy içine alma
"i" Bağlı oyuncuları içine al.
team : Eğer flag "e" yada "f" yazdıysanız burayı doldurmalısınız.Örnek yukarıda vardır.
Şimdi anlamanız için bir senaryo kuralım.Farzayalım T 6 da kişi var. 2 kişi ölü 4 kişi canlı.get_players komuduyla num 4' e eşit oldu.Bu arada indexi açıklarsam; indexin değeri bir sayısal değerdir ve bu 4 kişi [1-4] arasında index değeri alır.Hepsini öldürmek için for döngüsünü çalıştırıyoruz.For döngüsünde i değeri 4 e ulaşana kadar döngü dönmeye devam edicek ve döngü sona ericek.Yazım kolaylığı olsun diye players[ i ] = id eşitledim ve o indexi öldürdüm.
while:
Bu daha basit bir döngü tek bir parametresi vardır.Örnekle açılayım.
PHP Kod:
while( i < 5 )
{
//
}
do.. while :
Bunun whileden farkı çalışan komut while önce çalışır buda değeri false olsa bile en az 1 kez döngü çalışır.
PHP Kod:
do
{
//
}
while( i < 5 )