Русское сообщество по скриптингу

Удаление трупа после возрождения  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Удаление трупа после возрождения

Сообщение HolyDorus » 01 май 2021, 01:35

При возрождении игрока на карте остается его "прошлый" труп, как можно удалить труп с карты перед/после возрождения?
Пробовал тремя разными способами прятать труп непосредственно перед возрождением, но увы, не вышло.

Код: Выделить всё
set_pev(id, pev_effects, pev(id, pev_effects) | EF_NODRAW)
set_entity_visibility(id, 0)
fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0,kRenderTransAlpha, 0)
Группа плагинов: vk.com/remake_dorus
Аватара пользователя
HolyDorus
 
Сообщения: 19
Зарегистрирован: 30 апр 2021, 21:04
Благодарил (а): 2 раз.
Поблагодарили: 2 раз.
Опыт программирования: Больше трех лет
Языки программирования: Python
PAWN
C++
JavaScript

Re: Удаление трупа после возрождения

Сообщение Leonidddd » 01 май 2021, 06:55

HolyDorus, полагаю, вам поможет это

Код: Выделить всё
#include <amxmodx>

public plugin_init() set_msg_block( get_user_msgid( "ClCorpse" ), BLOCK_SET );
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2546
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 190 раз.
Поблагодарили: 716 раз.

Re: Удаление трупа после возрождения

Сообщение HolyDorus » 01 май 2021, 23:39

Leonidddd писал(а):HolyDorus, полагаю, вам поможет это

Код: Выделить всё
#include <amxmodx>

public plugin_init() set_msg_block( get_user_msgid( "ClCorpse" ), BLOCK_SET );

Вы меня не правильно поняли. Я реализовываю респавн систему. После смерти игрока на его месте остается труп, другой игрок (из его же команды) может подойти и возродить своего тиммейта. Я уже полностью реализовал весь функционал, но при респавне игрока на том же месте остается его "прошлый" труп. И получается так, что игрок уже живой, но его труп все еще валяется на карте.

Вот на этом сервере реализована система удаления трупа именно после респавна игрока:
46.174.53.36:27015
Группа плагинов: vk.com/remake_dorus
Аватара пользователя
HolyDorus
 
Сообщения: 19
Зарегистрирован: 30 апр 2021, 21:04
Благодарил (а): 2 раз.
Поблагодарили: 2 раз.
Опыт программирования: Больше трех лет
Языки программирования: Python
PAWN
C++
JavaScript

Re: Удаление трупа после возрождения

Сообщение Leonidddd » 02 май 2021, 06:56

HolyDorus, т.к. модели трупов на сервере это уже клиентская часть, то нужно блокировать полностью событие ClCorpse, в момент вызова этого события можете создавать свою модель трупа и через PLUGIN_HANDLED; заблокировать её. При возрождении/выходе игрока проверяете в массиве, есть ли его труп на карте, чтоб не забросало всю карту моделями трупов, идекс игрока можно сохранить в pev_owner или других свободных переменных у объектов(трупов, в данном случае).
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2546
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 190 раз.
Поблагодарили: 716 раз.

Re: Удаление трупа после возрождения  [Решено]

Сообщение HolyDorus » 02 май 2021, 14:32

Leonidddd писал(а):HolyDorus, т.к. модели трупов на сервере это уже клиентская часть, то нужно блокировать полностью событие ClCorpse, в момент вызова этого события можете создавать свою модель трупа и через PLUGIN_HANDLED; заблокировать её. При возрождении/выходе игрока проверяете в массиве, есть ли его труп на карте, чтоб не забросало всю карту моделями трупов, идекс игрока можно сохранить в pev_owner или других свободных переменных у объектов(трупов, в данном случае).

Нашел описание аргументов Вы должны зарегистрироваться, чтобы видеть ссылки.
Реализовал следующее:
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta_util> 

const m_coord_mult = 128

public plugin_init
() {
    register_plugin("Respawn system", "1.0", "HolyDorus")

    register_message(get_user_msgid("ClCorpse"), "message_clcorpse")
}

public message_clcorpse() {
    new model[100]
    get_msg_arg_string(1, model, charsmax(model))
    format(model, charsmax(model), "models/player/%s/%s.mdl", model, model)

    new Float:origin[3]
    origin[0] = float(get_msg_arg_int(2) / m_coord_mult)
    origin[1] = float(get_msg_arg_int(3) / m_coord_mult)
    origin[2] = float(get_msg_arg_int(4) / m_coord_mult)

    new Float:angles[3]
    angles[0] = get_msg_arg_float(5)
    angles[1] = get_msg_arg_float(6)
    angles[2] = get_msg_arg_float(7)

    new sequence = get_msg_arg_int(9)
    new id = get_msg_arg_int(12)

    new ent = create_entity("info_target")

    if(!is_valid_ent(ent)) return PLUGIN_HANDLED

    entity_set_string
(ent, EV_SZ_classname, "custom_body")
    entity_set_int(ent, EV_INT_solid, SOLID_NOT)
    entity_set_model(ent, model)
    entity_set_size(ent, Float:{-5.0, -5.0, -5.0}, Float:{5.0, 5.0, 5.0})
    entity_set_origin(ent, origin)
    set_pev(ent, pev_angles, angles)
    set_pev(ent, pev_owner, id)
    set_pev(ent, pev_sequence, sequence)

    return PLUGIN_HANDLED
}

Модель устанавливается правильно, номер анимации тоже, но также нужно выставить финальный кадр анимации (так как сейчас положение тела находится в первом кадре анимации смерти). Так вот, как можно получить номер финального кадра анимации?

P.S: Достаточно было добавить следующую строку, и кадр анимации автоматически выставляется на последний:
Код: Выделить всё
set_pev(entpev_framerate1.0
Группа плагинов: vk.com/remake_dorus
Аватара пользователя
HolyDorus
 
Сообщения: 19
Зарегистрирован: 30 апр 2021, 21:04
Благодарил (а): 2 раз.
Поблагодарили: 2 раз.
Опыт программирования: Больше трех лет
Языки программирования: Python
PAWN
C++
JavaScript


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

cron