Kod:
/*
* ============================================================
* BICAK DUYURUSU + SES - SylnexClan
* Counter-Strike 1.6 / AMX Mod X
* ============================================================
*
* Bir oyuncu baska bir oyuncuyu BICAKLA oldurdugunde:
* 1) Sunucudaki herkese ses calar
* 2) Chat'e 2 kere yazar:
* (SylnexClan)ABOOOOOOOOOO X adli oyuncu Y adli oyuncuya bicak atti!
*
* ------------------------------------------------------------
* >>>>>>>>>>>> SES DOSYASI <<<<<<<<<<<<
*
* WAV dosyani TAM OLARAK buraya koy:
*
* cstrike/sound/sylnex/bicak.wav
*
* "sound" klasorunun icinde "sylnex" diye bir klasor yoksa
* kendin olustur, dosyayi da adi "bicak.wav" olacak sekilde
* icine at.
*
* WAV SARTLARI (bunlar tutmazsa oyuncular sesi DUYMAZ):
* - Format : WAV (PCM)
* - Bit : 16 bit
* - Kanal : MONO (stereo OLMAZ)
* - Hz : 22050 (44100 de olur, 22050 daha garanti)
* - Sure : 2-4 saniye
*
* Dosya adinda Turkce karakter (i, ç, ş, ğ, ö, ü) OLMASIN,
* HL bu dosyalari bulamaz.
*
* Baska bir isim kullanacaksan asagidaki KNIFE_SOUND satirini
* degistirmen yeterli, baska hicbir yeri elleme.
* ------------------------------------------------------------
*
*
*
* NOTLAR:
* - Ses dosyasi yoksa sunucu COKMEZ; logda uyari verir,
* mesaj yine calisir. Dosyayi koyunca kendiliginden acilir.
* - Mesaj motora dogrudan gonderilir (emessage_begin), bu
* yuzden chat manager / renkli chat / reklam engel gibi
* eklentiler bu mesaji goremez, engelleyemez, degistiremez.
* - AMXX 1.8.1 dahil tum surumlerde derlenir; client_print_color
* gibi yeni native'ler kullanilmadi.
* ============================================================
*/
#include <amxmodx>
#include <fakemeta>
#pragma semicolon 1;
#define PLUGIN_NAME "Bicak Duyurusu"
#define PLUGIN_VERSION "2.0"
#define PLUGIN_AUTHOR "blue"
// ============================================================
// DEGISTIREBILECEGIN YERLER
// ============================================================
// Ses dosyasi ("sound/" klasorunden sonraki yol)
new const KNIFE_SOUND[] = "sylnex/bicak.wav";
// Mesajin basindaki etiket
new const TAG_TEXT[] = "(SylnexClan)ABOOOOOOOOOO";
// Mesaj kac kere yazilsin
#define REPEAT_COUNT 2
new const MESSAGE_FORMAT[] = "^x04%s^x03 %s ^x01adli oyuncu ^x03%s ^x01adli oyuncuya bicak atti!";
// ============================================================
new g_MsgSayText;
new bool:g_SoundReady = false;
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
// TUTTUGU silahi verir, olduren silahi degil. DeathMsg olduren
// silahin adini motordan dogrudan aldigi icin sasmaz.
register_event("DeathMsg", "OnKnifeKill", "a", "4=knife");
g_MsgSayText = get_user_msgid("SayText");
}
public plugin_precache() {
// Dosya yoksa precache_sound sunucuyu "Cannot continue without
// sound ..." hatasiyla dusurur. Once var mi diye bakiyoruz.
new path[128];
formatex(path, charsmax(path), "sound/%s", KNIFE_SOUND);
if (file_exists(path)) {
precache_sound(KNIFE_SOUND);
g_SoundReady = true;
} else {
g_SoundReady = false;
log_amx("[Bicak] UYARI: Ses dosyasi yok -> cstrike/%s", path);
log_amx("[Bicak] Mesaj calisiyor ama ses calmayacak. Dosyayi koyup map degistir.");
}
}
// ============================================================
// BICAK KILL
// ============================================================
public OnKnifeKill() {
new killer = read_data(1);
new victim = read_data(2);
if (killer < 1 || killer > 32) return; // world / bomba
if (victim < 1 || victim > 32) return;
if (killer == victim) return; // intihar
if (!is_user_connected(killer)) return;
new killerName[32], victimName[32];
get_user_name(killer, killerName, charsmax(killerName));
get_user_name(victim, victimName, charsmax(victimName));
new msg[192];
formatex(msg, charsmax(msg), MESSAGE_FORMAT, TAG_TEXT, killerName, victimName);
// Bagli, bot olmayan oyuncularin listesi
new players[32], num;
get_players(players, num, "ch"); // c = botsuz, h = HLTV'siz
for (new i = 0; i < num; i++) {
new id = players[i];
// --- SES ---
// Sesi oyuncunun kendi uzerinden calariz; boylece herkes
// haritanin neresinde olursa olsun tam ses seviyesinde duyar.
if (g_SoundReady) {
emit_sound(id, CHAN_STATIC, KNIFE_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
// --- CHAT (2 kere) ---
// emessage_begin(), message_begin()'in aksine mesaji dogrudan
// motora yollar; AMXX'in kanca zincirini atlar. Yani chat'e
// mudahale eden eklentiler bu mesaji hic gormez.
for (new r = 0; r < REPEAT_COUNT; r++) {
emessage_begin(MSG_ONE_UNRELIABLE, g_MsgSayText, _, id);
ewrite_byte(killer); // ^x03 rengi olduren oyuncunun takimina gore
ewrite_string(msg);
emessage_end();
}
}
}