Внимание: Функция не убивает игрока, а только создает сообщение, все равно что вы в чат напишите что кто то кого то убил.
Инфо из message_stocks.inc:
/* Creates a death message. */
stock make_deathmsg(killer, victim, headshot, const weapon[])
{
message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0);
write_byte(killer);
write_byte(victim);
new mod_name[32];
get_modname(mod_name, 31);
if (equal(mod_name, "cstrike") || equal(mod_name, "czero") || equal(mod_name, "csv15") || equal(mod_name, "cs13"))
write_byte(headshot);
write_string(weapon);
message_end();
return 1;
}
Синтаксис:
make_deathmsg ( killer, victim, headshot, weapon[] )
- killer - id Кто будет убийцей
- victim - id Кто будет жертвой
- headshot - Попадание в голову 0/1 (нет/да)
- weapon[] - Название оружия
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Kill message"
#define VERSION "1.0"
#define AUTHOR "Admin"
//Имена оружия
stock const g_weapon_names[][] ={
"", // NULL
"p228", "shield","scout","grenade",
"xm1014","c4","mac10","aug","smokegrenade",
"elite","fiveseven","ump45","sg550","galil",
"famas","usp","glock18","awp","mp5navy",
"m249","m3","m4a1","tmp","g3sg1","flashbang",
"deagle","sg552","ak47","knife","p90"
}
public plugin_init ( ){
register_plugin ( PLUGIN, VERSION, AUTHOR )
//регистрируем событие получения уона
register_event("Damage", "message_dead", "b", "2!0")
}
public message_dead(id){
new weapon // id оружия
new bodypart // Попадание в голову 0 - нет, 1 да
new attacker // Атакующий
attacker = get_user_attacker(id,weapon,bodypart)
//Если попадание не в голову, то 0, так как есть еще много хитбоксов больше 1
if(bodypart == 1){
bodypart = 1
}else{
bodypart = 0
}
//Выводим сообщеине о смерьте, хотя на самом деле это был лишь урон.
//Когда вы добьете соперника - получится сразу 2 сообщения.
make_deathmsg(attacker,id,bodypart, g_weapon_names[weapon])
}
Описание:
Для того что бы понять как это все работает, зарегистрируем события урона ( именно урона, а не смерти игрока)
В исполняемую функцию при наступление события урона игрока, передает id жертвы.
Но с помощью функции get_user_attacker, мы можем получить информацию о атакующем, а именно:
- id - id жертвы
- weapon - Оружие с которого наносили урон
- bodypart - По какой части попали
И записываем id атакующего в массив attacker.
Далее проверяем попадание было в голову ( 1 ) или в другую часть тела и оставляем 1 или ноль, так как в функции make_deathmsg есть возможность показывать или попадание в голову или обычное попадание.
Ну и наконец выводим наше сообщение.Игрок живой, а сообщение есть :)
Так же обращаю внимание, что имя оружия должно быть не как в константах из amxconst.inc, а чистое имя:
Не верно:
CSW_GALIL
Верно
galil
Именно по этому в самом начале у нас появился массив констант: stock const g_weapon_names
В котором есть все оружие и его номер в массиве совпадает с константами движка, и в функцию вывода сообщения мы подставляем именно этот массив, а индекс указываем который мы получили в функции get_user_attacker.
Может есть другой способ получения имени, но мне пока тчо не известен, если вы такой знаете, то пишите в комментариях, и я дополню статью.
Может так будет лучше?