Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 4
    Гостей: 2
    Пользователи: Vladik
    Роботы: crawl Bot

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 1-09-2011, 14:45 Просмотров: 5174

    make_deathmsg Функция создает сообщение о смерти/убийстве игрока

    Функция make_deathmsg создает объявление о смерти или убийстве игрока ( в правом верхнем углу), там же картинкой показывается какое оружие было использовано атакующим и попадание в голову.
    Внимание: Функция не убивает игрока, а только создает сообщение, все равно что вы в чат напишите что кто то кого то убил.

    Инфо из 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.

    Может есть другой способ получения имени, но мне пока тчо не известен, если вы такой знаете, то пишите в комментариях, и я дополню статью.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Dg_INC

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    register_event( "DeathMsg",     "message_dead",      "a");

    Может так будет лучше? wink
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  58  +

    Эти функции делают абсолютно разные вещи.
    --------------------
    mika3394

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    "о смерти"
    Radius

    7.05.2013
    ICQ: 357188115
    Публикаций: 1
    Комментариев: 57
    Репутация: -  4  +

    Цитата: mika3394
    "о смерти"
    исправлено.

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама