Bu derste basit bir respawn plugininin nasıl yapıldığını tüm ayrıntılarıyla öğreniceksiniz. Önce bize gerekenleri bulalım.
1. Kullanıcının parasını öğrenme ve düzenleme için cs_get_user_money ve cs_set_user_money kodları gerek. Bu kodları
"cstrike" kütüphanesinde bulabiliriz.
2. Kullanıcının canlı mı ölü mü olduğunu öğrenmek için is_user_alive kodu gerekli. Bu kod zaten amxmodx kütüphanesinde mevcut.
3. Plugini tetiklemek için bir konsol komutu kaydetmemiz gerek. Bunun için register_clcmd kodunu kullanıcaz.
4. Respawnın fiyatını ayarlamak için bir cvar ayarı kaydetme kodu ve cvar öğrenme kodu gerekli. Bunlar da register_cvar ve
get_pcvar_num olucak.
5. Son olarak kullanıcıyı yeniden canlandırmak için ExecuteHamB kodu gereki bunu da "hamsandwich" kütüphanesinde bulabiliriz.
İlk başlayanlara hamsandwich zor gelebilir. Bu yüzden spawn(id) kodunu kullanabilirsiniz bu da "fun" kütüphanesinde yer alıyor.
Bize gereken kütüphaneler:
cstrike
hamsandwich
Bu kütüphaneleri kullanabilmemiz için çağırmamız gerek. Çağırmak için de #include kodunu kullanıyoruz. include, içermek demektir
yani plugine içermesini istediğimiz kütüphaneler için kullanıyoruz.
PHP- Kodu:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
Şimdi birde ücreti belirleyebileceğimiz bir cvar kaydetmemiz gerek.
bunun için bir değişken yaratalım. Değişkenimiz global olmalı yani tüm publiclerde kullanılabilir olmalı.
Eğer bir publicin içinde yaratırsak diğer publiclerde kullanmaya çalıştığımızda değişkeni tanıyamadığı için hata verir.
Ama global olarak yaratırsam yani tüm publiclerin dışında yaratırsam bir sorun olmaz.
Değişkeni yarattık. "Ucret"in başındaki "g"nin bir önemi yok. Scripterlar kolaylık olsun diye stringleri, integerları vs değişkenleri karıştırmamak için bu tür kısaltmalar kullanırlar. "g" ön eki global değişkenler için kullanılır.
Plugin_init, pluginin tetikleyicilerini kaydettiğimiz bölümdür.
Şimdi plugin_init e geçelim.
Öncelikle bize bir public tetikleyici gerek. Yani konsoldan bir komut girildiğinde çalışmasını istediğimiz kodları tetikleyecek.
Bunun için register_clcmd kodunu kullanıcaz
PHP- Kodu:
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /respawn","Respawn_Satin_Al")
}
Konsolda say /respawn komutu çalıştığında yani bir oyuncu /respawn yazdığında, Respawn_Satin_Al publici tetiklenicek ve o
publicteki kodlar okunacak.
Şimdi bir cvar yaratıp gUcret global değişkenini o cvarla tanımlayalım
PHP- Kodu:
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
gUcret = register_cvar("respawn_ucreti","10000")
register_clcmd("say /respawn","Respawn_Satin_Al")
}
Cvarlarda ilk kısım cvar kodu, 2. kısım default değerdir.
Şimdi Respawn_Satin_Al publicine geçelim.
PHP- Kodu:
public Respawn_Satin_Al(id) {
}
Parantez içerisine yazdigimiz yazi kullanicinin pawndaki id sidir. Yani oyundaki id ile bir alakasi yok.
Parantez içine yazdiğimiz herhangi bir yazi bu publici tetikleyen kişi olur.id yazmak zorunlu degildir
isterseniz x, abc, vs yazabilirsiniz. burda bilmemiz gereken id = publici tetikleyen kullanici
/respawn yazıldı ve motor burayı okumaya başlıyor.Kullanıcıyı canlandırmadan önce birkaç kontrol yapmamız gerekir.
Bunlardan biri kullanıcının canlı olup olmadığıdır. Doğal olarak zaten canlı bir kullanıcının tekrar canlanamaması gerekir. Bu sayede bazı buglar önlenmiş olur. Bunu kontrol etmek için ise is_user_alive kodunu kulanıyoruz.
Bu bir bool dur yani ancak iki farklı değer alabilir. 1 yani true, 0 yani false. True doğru, false yanlış demektir.
Eğer id kişisi canlıysa motor burayi true olarak okur, eğer canlı değilse false olarak okur.Ve motorun if kısmını okuması
için parantez içinin true olması gerekir. Eğer false olursa motor if kısmını yanlış diye es geçer.
PHP- Kodu:
public Respawn_Satin_Al(id) {
if(is_user_alive(id)) {
}
}
Motor id kişisinin canlı olduğunu görünce is_user_alive kodunu true olarak okudu ve if bölümüne girdi.
Şimdi canlı olan kullanıcının yeniden canlandırılmaması için bir uyarı mesajı ve plugini durdur kodlarını girmeliyiz.
PHP- Kodu:
public Respawn_Satin_Al(id) {
if(is_user_alive(id)) {
client_print(id,print_chat,"Zaten Canlisiniz")
return PLUGIN_HANDLED
}
}
client_print, id kişisinin ekranında yazı çıkması için kullanılır.
client printin 4 farklı çeşiti vardır.
print_chat -> Chat kısmında mesaj gösterir
print_console -> Konsolda mesaj gosterir
print_center -> Ekranın ortasında mesaj gosterir
print_notify -> Konsolda mesaj gösterir.
client_print(id,print_tipi,"Yazi") şeklinde kullanılır.
Respawn_Satin_Al publicinin çağrısını durdurmak için return PLUGIN_HANDLED kullandık. PLUGIN_HANDLED kullanıcının /respawn komutunu durduracaktır.
return PLUGIN_HANDLED -> Çağrıyı Durdur
return PLUGIN_CONTINUE -> Çağrıyı bu pluginde durdur, Diğer pluginlerde devam ettir.
şimdilik bu ikisini bilmeniz yeterli.
Kullanici canli değilse motor is_user_alive kodunu false olarak okur ve if kısmını atlar. Şimdi eğer kullanıcı
canlı değilse neler olucak onları ayarlayalım. Canlı - Ölü kontrolünden geçtik şimdi sırada para kontrolü var.
id kişisinin parasını öğrenmek için cs_get_user_money(id) kullanıyoruz. Örneğin kullanıcının parası 2000.
Motor cs_get_user_money(id) kodunu 2000 olarak okuyacaktır.
Parayı öğrendikten sonra id kişisinin mevcut parasını cvara girilen değer ile karşılaştırmamız gerek. Bu karşılaştırmayı
yapabilmek için motorun cvarı okumasını sağlamamız gerek. get_pcvar_num(pcvar) yani pcvar olarak tanımlanmış cvar ayarındaki
mevcut numarayı öğren kodu bunu sağlıyor. Daha önce ücreti ayarladığımız cvarı tanımladığımız değişkeni buluyoruz.
Bizim kullandığımız değişken gUcret idi.
PHP- Kodu:
public Respawn_Satin_Al(id) {
if(is_user_alive(id)) {
client_print(id,print_chat,"Zaten Canlisiniz")
return PLUGIN_HANDLED
}
if(cs_get_user_money(id) < get_pcvar_num(gUcret)) {
}
}
Eğer kullanıcının parası gUcret ile tanımlanmış cvardan küçük ise if kısmını oku. anlamına geliyor.
id kişisinin parası 2000 dedik. gUcret ile tanımladığımız cvara da 10000 yazdık. Yani motor parantez içini
if(2000<10000) olarak okuyacaktır. 2000 < 10000 karşılaştırması da doğru bir karşılaştırma olduğu için
motor parantez içini true olarak görecek ve if kısmını okuyacaktır.
Fakat eğer id kişisinin parası 15000 olsaydı,
15000 < 1000 karşılaştırması yanlış bir karşılaştırma olacağından if kısmını okumayacaktı.
Şimdi id kişisinin yeterli parası olmadığını öğrendik. Bu durumda bir uyarı mesajı ve plugini durdur kodu girmeliyiz.
PHP- Kodu:
public Respawn_Satin_Al(id) {
if(is_user_alive(id)) {
client_print(id,print_chat,"Zaten Canlisiniz")
return PLUGIN_HANDLED
}
if(cs_get_user_money(id) < get_pcvar_num(gUcret)) {
client_print(id,print_chat,"Yeterli Paraniz Yok. Gereken %d",get_pcvar_num(gUcret))
return PLUGIN_HANDLED
}
}
Eğer id kişisine gösterilecek mesajda bir değişkenin olmasını istiyorsak
%s, %i, %d, %f gibi belirteçler kullanırız...
%d -> Doğal sayı değişkenlerini belirtmemizi sağlar. Doğal Sayı kümesi:{0,1,2,3... }
%f -> Ondalık sayı değişkenlerini belirtmemizi sağlar. Ondalık sayı kümesi:{...-1...-0,5...0...0.5...1...}
%i -> Tamsayi değişkenlerini belirtmemizi sağlar. Tamsayilar kümesi:{...-3,-2,-1,0,1,2,3...}
%s -> Düz yazı değişkenlerin belirtilmesini sağlar. Düz yazılar: "1234...abcdefgh..."
Örnek bir print:
PHP- Kodu:
client_print(id,print_chat,"Degisken 1: %d Degisken 2: %s Degisken 3: %d",degisken1,degisken2,degisken3)
Virgülden sonra yazdığımız değişkenler yazıda doğru sırada ve doğru belirteçlerle gösterilmelidir.
Para kontrolünü de yaptık. Şimdi sıra para eksiltme ve yeniden canlandırmada.
PHP- Kodu:
public Respawn_Satin_Al(id) {
if(is_user_alive(id)) {
client_print(id,print_chat,"Zaten Canlisiniz")
return PLUGIN_HANDLED
}
if(cs_get_user_money(id) < get_pcvar_num(gUcret)) {
client_print(id,print_chat,"Yeterli Paraniz Yok. Gereken %d",get_pcvar_num(gUcret))
return PLUGIN_HANDLED
}
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gUcret))
}
cs_set_user_money(id,yeni para)
Yeni para yerine şunu yazdık "cs_get_user_money(id) - get_pcvar_num(gUcret)" . Kullanıcının parasının 15000 olduğunu varsaymıştık.
ve gUcret tanımlı cvar ayarını da 10000 olarak ayarlamıştık. Bu durumda motor yeni para kısmını şöyle görüyor:
15000 - 10000
Bu da 5000 olduğu için id kişisinin yeni parası 5000 olmuş oluyor yani sadece 10000 eksiliyor.
Şimdi sıra yeniden canlandırmada.
Ham Sandwich modülü sanal fonksiyonları ve varlıkları çağırma veya yakalamada kullanılabilir.
Biz bir round başladığında insanların canlanma fonksiyonunu çağırıcaz yani kullanıcaz.
bu fonksiyonun adı Ham_CS_RoundRespawn
ve fonksiyonu çağırmaya yarayan kod ExecuteHamB
PHP- Kodu:
public Respawn_Satin_Al(id) {
if(is_user_alive(id)) {
client_print(id,print_chat,"Zaten Canlisiniz")
return PLUGIN_HANDLED
}
if(cs_get_user_money(id) < get_pcvar_num(gUcret)) {
client_print(id,print_chat,"Yeterli Paraniz Yok. Gereken %d",get_pcvar_num(gUcret))
return PLUGIN_HANDLED
}
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gUcret))
ExecuteHamB(Ham_CS_RoundRespawn,id)
client_print(id,print_chat,"Basariyla Yeniden Canlandiniz !")
return PLUGIN_HANDLED
}
id kişisinde Ham_CS_RoundRespawn fonksiyonunu çalıştırdık ve canlandırdık.
Eğer bu kodu aklınızda tutmakta zorlanırsanız "fun" kütüphanesindeki spawn(id) kodunu da kullanabilirsiniz.
return PLUGIN_HANDLED kodunun buradaki görevi bu çağrının diğer pluginlere sıçramasını önlemektir.
Ve Son Hali:
PHP- Kodu:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#define PLUGIN "Plugin ismi"
#define VERSION "versiyonu"
#define AUTHOR "yapimcisi"
new gUcret;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
gUcret = register_cvar("respawn_ucreti","10000")
register_clcmd("say /respawn","Respawn_Satin_Al")
}
public Respawn_Satin_Al(id) {
if(is_user_alive(id)) {
client_print(id,print_chat,"Zaten Canlisiniz")
return PLUGIN_HANDLED
}
if(cs_get_user_money(id) < get_pcvar_num(gUcret)) {
client_print(id,print_chat,"Yeterli Paraniz Yok. Gereken %d",get_pcvar_num(gUcret))
return PLUGIN_HANDLED
}
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(gUcret))
ExecuteHamB(Ham_CS_RoundRespawn,id)
client_print(id,print_chat,"Basariyla Yeniden Canlandiniz !")
return PLUGIN_HANDLED
}
Not: Aklınıza takılan herhangi bir şey olursa sorabilirsiniz. Ek olarak öğrenmek istediklerinizi belirtebilirsiniz. Ona göre ders paylaşabilirim.