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

Не умирает игрок, если меньше 50 жизней  [Решено]

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

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

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

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

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

Не умирает игрок, если меньше 50 жизней

Сообщение JustProOnline » 25 июн 2019, 05:38

Доброе утро. Не понимаю как решить данную проблему, а именно, если у человека меньше 50 жизней он должен умереть, то бишь применяется
Код: Выделить всё
ExecuteHamB(Ham_Killed, iVictim, iOwner, 0); 


Код: Выделить всё
    if (!pev_valid(iEntity)) return HAM_IGNORED;
    static szClassName[32]; pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
    if (!equal(szClassName, ENT_PREDATOR_CLASSNAME)) return HAM_IGNORED;
    static Float: vecOrigin[3]; pev(iEntity, pev_origin, vecOrigin);
    static iOwner; iOwner = pev(iEntity, pev_owner); iVictim = -1;
    if (is_user_alive(iVictim) && !zp_core_is_zombie(iVictim)) {
        if (get_user_armor(iVictim) >= 50) set_user_armor(iVictim, get_user_armor(iVictim) - 50);
        else if (get_user_armor(iVictim) < 50 && get_user_armor(iVictim) != 0) set_user_armor(iVictim, 0);
        else if (get_user_health(iVictim) >= 50) set_user_health(iVictim, get_user_health(iVictim) - 50);
        else if (get_user_health(iVictim) < 50) client_print(0,print_chat,"0001000");//ExecuteHamB(Ham_Killed, iVictim, iOwner, 0);
    }
    set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME);
    return HAM_IGNORED


Если стоит
Код: Выделить всё
ExecuteHamB(Ham_Killed, iVictim, iOwner, 0); 
, то урон не наносится и энтити не удаляется.... но вот если вывести любое принтовое сообщение - энтити будет удаляться, но урон конечно же нет (вполне логично :D)

как сделать так, чтобы
Код: Выделить всё
ExecuteHamB(Ham_Killed, iVictim, iOwner, 0); 
работал?
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Не умирает игрок, если меньше 50 жизней  [Решено]

Сообщение RevCrew » 25 июн 2019, 16:25

ты посмотри что ты в коде написал
Код: Выделить всё
static iOwneriOwner pev(iEntitypev_owner); iVictim = -1


а именно
Код: Выделить всё
iVictim = -1


а потом пишешь
Код: Выделить всё
if (is_user_alive(iVictim) && !zp_core_is_zombie(iVictim)) {


ищи ошибки :-)
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Не умирает игрок, если меньше 50 жизней

Сообщение JustProOnline » 25 июн 2019, 17:03

RevCrew, всё правильно) в таче таки обозначается

Код: Выделить всё
RegisterHam(Ham_Touch, "info_target", "CEntity_Touch_Pre", .Post = 0);

public CEntity_Touch_Pre(iEntity, iVictim)


Добавлено спустя 2 минуты 54 секунды:
RevCrew, у меня в мине виктим также обозначен, но почему-то тут всё работает :DDD

Код: Выделить всё
public fw_Touch(iEntity, iVictim) {
    if(!pev_valid(iEntity)) return FMRES_IGNORED; 

    static szClassName
[32]; pev(iEntity, pev_classname, szClassName, charsmax(szClassName));

    if(equal(szClassName, MINE_CLASSNAME)) {
        if(!is_user_alive(iVictim) || !zp_core_is_zombie(iVictim)) return FMRES_IGNORED; 

        static Float
: vecOrigin[3]; pev(iEntity, pev_origin, vecOrigin);
        static iAttacker; iAttacker = pev(iEntity, pev_owner); iVictim = -1;

        while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, vecOrigin, MINE_RADIUS))) {
            if (!is_user_alive(iVictim) || !zp_core_is_zombie(iVictim)) continue;

            // 
        }
        
        REMOVE_ENTITY
(iEntity);
    }

    return FMRES_IGNORED;
}
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Не умирает игрок, если меньше 50 жизней

Сообщение RevCrew » 25 июн 2019, 18:49

JustProOnline, я уже написал тебе про ошибку, ты присваешь iVictim = -1; , и проверяешь его is_user_alive(iVictim), ты же понимаешь что он всегда вернет false?

Добавлено спустя 2 минуты 15 секунд:
Здесь все нормально, поэтому и работает

Добавлено спустя 2 минуты 54 секунды:
RevCrew, у меня в мине виктим также обозначен, но почему-то тут всё работает :DDD

Код: Выделить всё
public fw_Touch(iEntity, iVictim) {
    if(!pev_valid(iEntity)) return FMRES_IGNORED; 

    static szClassName
[32]; pev(iEntity, pev_classname, szClassName, charsmax(szClassName));

    if(equal(szClassName, MINE_CLASSNAME)) {
        if(!is_user_alive(iVictim) || !zp_core_is_zombie(iVictim)) return FMRES_IGNORED; 

        static Float
: vecOrigin[3]; pev(iEntity, pev_origin, vecOrigin);
        static iAttacker; iAttacker = pev(iEntity, pev_owner); iVictim = -1;

        while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, vecOrigin, MINE_RADIUS))) {
            if (!is_user_alive(iVictim) || !zp_core_is_zombie(iVictim)) continue;

            // 
        }
        
        REMOVE_ENTITY
(iEntity);
    }

    return FMRES_IGNORED;
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Не умирает игрок, если меньше 50 жизней

Сообщение JustProOnline » 26 июн 2019, 07:18

RevCrew, если я убираю:
Код: Выделить всё
        if (get_user_armor(iVictim) >= 50set_user_armor(iVictimget_user_armor(iVictim) - 50);
        else if (
get_user_armor(iVictim) < 50 && get_user_armor(iVictim) != 0set_user_armor(iVictim0);
        else if (
get_user_health(iVictim) >= 50set_user_health(iVictimget_user_health(iVictim) - 50);
        else if (
get_user_health(iVictim) < 50client_print(0,print_chat,"0001000");//ExecuteHamB(Ham_Killed, iVictim, iOwner, 0); 
и за место вставляю
Код: Выделить всё
ExecuteHamB(Ham_KillediVictimiOwner0); 
, тогда всё хорошо работает
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Не умирает игрок, если меньше 50 жизней

Сообщение NeoNRider » 04 июл 2019, 01:28

Как-то все равно не логично.
Игрока с айди -1 - не существует, что ты там проверяешь? Просто пустое число.
И в случае со вторым куском кода, ты не заметил что там сфера есть? А точнее, посмотри повнимательнее на условие цикла. Может поймешь почему там все нормально.
Ну и почему же не удаляет энтити и не наносится урон, если воспроизводить событие убийства? может потому что ты пытаешься указать пустой объект для убийства?
Мой тебе совет - научись рационально думать над проблемой и учи павн, ибо копировать код не глядя - идиотизм. Тут всё элементарно.
© Mort3m
Аватара пользователя
NeoNRider
 
Сообщения: 8
Зарегистрирован: 29 май 2016, 22:34
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Не умирает игрок, если меньше 50 жизней

Сообщение 3BEPb » 04 июл 2019, 02:05

Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn


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

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

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