emit_sound da id yazmışsın. Bir bak bakalım o fonksiyonda "id" diye bir şey belirtilmiş mi
id yoksa 0 yazıcaksın ki herkese çalsın. Yalnız her fonksiyonda 0 yazamazsın. 0 yapamadığın durumlarda da for döngüsüyle oyundaki herkes için fonksiyonu çalıştırıcaksın.
Ayrıca precache_sound fonksiyonunu
plugin_precache forwardında kullanıcaksın.
PHP- Kodu:
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Geri Sayim Sayaci"
#define VERSION "1.0"
#define AUTHOR "akcaliberkk"
new ses
new is_plugin_request[33];
new bool:is_counting;
new const SOUND[] = "ding.wav";
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
ses = register_cvar("kronometre_ses","5")
register_clcmd("say /kronometre","GetStartTime")
register_clcmd("Saniye","ReceiveStartTime")
}
public plugin_precache() {
precache_sound(SOUND)
}
public GetStartTime(id) {
is_plugin_request[id] = true;
client_cmd(id,"messagemode Saniye")
}
public ReceiveStartTime(id) {
if(!is_plugin_request[id]) {
console_print(id,"Gecersiz Istek")
return PLUGIN_HANDLED
}
new szSaniye[6];
read_args(szSaniye, charsmax(szSaniye))
remove_quotes(szSaniye)
if(!szSaniye[0]) {
client_print(id, print_chat, "Bos Birakamazsiniz !")
client_cmd(id,"messagemode Saniye")
return PLUGIN_HANDLED
}
new iSaniye = str_to_num(szSaniye);
if(iSaniye < 1) {
client_print(id, print_chat, "Pozitif Bir Tamsayi Girmelisiniz.")
client_cmd(id,"messagemode Saniye")
return PLUGIN_HANDLED
}
is_plugin_request[id] = false;
if(is_counting) {
client_print(id, print_chat, "Suanda Zaten Bir Geri Sayim Aktif.")
return PLUGIN_HANDLED
}
is_counting = true;
StartCountDown(iSaniye)
return PLUGIN_HANDLED
}
public StartCountDown(sure) {
set_hudmessage(255, 170, 0, -1.0, -1.0, 0, 1.0, 1.0)
if(!sure) {
show_hudmessage(0,"Geri Sayim Doldu !")
is_counting = false;
return PLUGIN_HANDLED
}
if(sure <= get_pcvar_num(ses)) {
emit_sound(0, CHAN_STREAM, SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
show_hudmessage(0,"Geri Sayim: %d Saniye",sure)
sure--
set_task(1.0,"StartCountDown",sure)
return PLUGIN_CONTINUE
}
Son sorunu yeni farkettim yazıyorum...
new ile static arasındaki fark;
Her ikiside değişken yaratır. Ancak aralarında ufak bir fark var. Öncelikle new ile yaratılan değişkenin nasıl çalıştığını anlatayım.
New ile yaratılan değişken, her değer değişikliğine uğradığında hafızada tekrar yaratılır.
Örneğin;
new degisken = 3;
degisken = 5;
Bu olay engine'de şu şekilde gerçekleşir;
1.Degisken yarat
2.Degiskene 3 ata
3.Degiskeni sil
4.Degisken yarat
5.Degiskene 5 ata
Static ile yaratılan değişkenler, engine'de tekrar tekrar yaratılmaz sadece değeri değiştirilir.
static degisken;
degisken = 3;
degisken = 5;
1.Degisken yarat
2.Degiskene 3 ata
3.Degiskene 5 ata
Boolean yani bool değişkenleri sadece iki farklı değer alabilir. 1 veya 0 (true veya false)
new bool:degisken = true;
Floatlar, ondalık sayı depolarlar.
new Float:degisken = 5.25;
Constantlar yani const değişkenleri aslında değişken değildir
Sadece bir defa değer atanabilir. Atanan değer değiştirilemez. Bir nevi #define gibi.
Tek farkı constantları motor okurken, defineler makro olduğundan compile edilirken çevrilir.