Hudmessage Değişken Tanımlama
Hudmessage a değişken tanımlama mümkün müdür? Ayrıca oluyorsa bi örneğini gösterebilir misiniz? "Saniye : %d" gibi bir şey üzerinden.
Anlatmak gerekirse; Slotol plugininde "say /slotol" yazınca sol üstte Şifre: diye bir şey açılıyo ve siz şifrenizi yazıyorsunuz. Ben bunu bu pluginde kullanmak istiyorum. "say /kronometre" yazıldığı zaman sol üstte Saniye: diye bi değişken tanımlama şeyi çıksın ve kaç saniye isteniyorsa oraya girilsin hud message daki değişken bu saniyeyi görüp girilen değişkenden geri saymaya başlasın.
EDIT: Biraz kötü anlattığımı düşündüm ve resim koymamın daha yararlı olacağını fark ettim :)
https://img12.imageshack.us/img12/5746/79e.png
Cevap: Hudmessage Değişken Tanımlama
PHP- Kodu:
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Geri Sayim Sayaci"
#define VERSION "1.0"
#define AUTHOR "akcaliberkk"
new is_plugin_request[33];
new bool:is_counting;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /kronometre","GetStartTime")
register_clcmd("Saniye","ReceiveStartTime")
}
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
}
show_hudmessage(0,"Geri Sayim: %d Saniye",sure)
sure--
set_task(1.0,"StartCountDown",sure)
return PLUGIN_CONTINUE
}
tam olarak istediğin şey sanırım :)
is_plugin_request değişkeni ne için diye sorabilirsin, söyleyeyim;
Konsola Saniye diye bir komut kaydettiğimiz için, konsola Saniye 10 yazarsak geri saymaya başlayacaktır. Fakat biz sadece say'dan yazılan kod ile çalışmasını istiyoruz.
Bu değişken ile kişi sayacı başlatmak için /kronometre komutunu kullandı mı kullanmadı mı ayırt edebiliyoruz. Özellikle banka, şifre vs içeren pluginlerde güvenlik ve bug oluşmaması açısından bunu yapmak son derece faydalıdır. Oyuncu komutu konsoldan tetiklemeye çalıştığı zaman "Geçersiz İstek" şeklinde bir uyarı ile karşılaşıcaktır.
Cevap: Hudmessage Değişken Tanımlama
Aynen, TAM olarak istediğim şey buydu ve çok teşekkür ederim :) Fakat bir sorum daha olucak değişken son 10 saniyeye geldiğinde devreye ses sokabilir miyiz? bu değeri cvara bağlayabilir miyiz(sesin kaçıncı saniyeden sonra devriye gireceğini)?
Cevap: Hudmessage Değişken Tanımlama
nasıl bir ses ? şu ingilizce geri sayım sesini mi diyorsun yoksa basit bir ton mu ?
Eğer ten-nine-eight-seven... diye ses istiyorsan cvarla ayarlayamazsın. Ama sabit bir sesden bahsediyorsan ayarlayabilirsin
Cevap: Hudmessage Değişken Tanımlama
Hayır sesi ben kendim yüklicem. Basit bir dıt dıt dıt sesi olucak.
Cevap: Hudmessage Değişken Tanımlama
PHP- Kodu:
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)) {
// ses
}
show_hudmessage(0,"Geri Sayim: %d Saniye",sure)
sure--
set_task(1.0,"StartCountDown",sure)
return PLUGIN_CONTINUE
}
bu şekilde ?
Cevap: Hudmessage Değişken Tanımlama
Aynen bu şekil, bu değişkeni cvara bağlayıp istediğim saniyeden sonra ses çıkmasını da sağlayabilir miyiz?
EDIT: Bu arada aklıma takıldı;
PHP- Kodu:
new get_pcvar_num(ses) = register_cvar("kronometre_ses", "5")
Bu şekilde yapılabilir mi?
Cevap: Hudmessage Değişken Tanımlama
new ses (global)
ses = register_cvar("kronometre_ses","5") (plugin initialize / precache / cfg)
Cevap: Hudmessage Değişken Tanımlama
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;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
ses = register_cvar("kronometre_ses","5")
register_clcmd("say /kronometre","GetStartTime")
register_clcmd("Saniye","ReceiveStartTime")
}
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)) {
//ses
}
show_hudmessage(0,"Geri Sayim: %d Saniye",sure)
sure--
set_task(1.0,"StartCountDown",sure)
return PLUGIN_CONTINUE
}
Şey... ben nası ses tanıtıcam bilmiyorum :$
Birde (plugin initialize / precache / cfg) bunlar ne işe yarıyor?
Cevap: Hudmessage Değişken Tanımlama
Cevap: Hudmessage Değişken Tanımlama
plugin_init : Pluginlerin yüklendiği forward.
plugin_precache : Mapin yüklendiği forward.
plugin_cfg : Tüm pluginler yüklendikten sonra çalıştırılan forward.
----
new const SOUND[] = "ding.wav"; [global]
precache_sound(SOUND) [plugin_precache]
emit_sound( id, CHAN_STREAM, SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) [sesi çalar]
Cevap: Hudmessage Değişken Tanımlama
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 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)) {
precache_sound(SOUND)
emit_sound(id, 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
}
Kod:
kronometre.sma(68) : error 017: undefined symbol "id"kronometre.sma(68) : warning 215: expression has no effect
kronometre.sma(68) : error 001: expected token: ";", but found ")"
kronometre.sma(68) : error 029: invalid expression, assumed zero
kronometre.sma(68) : fatal error 107: too many error messages on one line
Valla bi göz gezdirdim de soruna bi çözüm bulamadım.
Birde;
new
new const
bool
static
ve daha bilmediklerimin ne işe yaradıklarını söylerseniz çok sevinirim. Bi tek new i çözebildim :D
Cevap: Hudmessage Değişken Tanımlama
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 :D 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.
Cevap: Hudmessage Değişken Tanımlama
Ufak bi mantık yürütülürse basit pluginlerde değilde karışık pluginlerde new yerine static kullanılması pluginin kullanacağı CPU değerini düşürecektir diye düşündüm. Doğru mudur? Normal olarakta new yerine static kullansakta bi sorun olmaz sanırım aralarında tek fark değişkenin değiştirilmesi 2side aynı işlemi yapıyor sonuçta?
Sorun çözülmüştür.
Cevap: Hudmessage Değişken Tanımlama
Cevap: Hudmessage Değişken Tanımlama