Jump to content

onClientPlayerDamage И cancelEvent И setElementHealth


Recommended Posts

Доброго времени суток! Перейду сразу к проблеме.

Если в событии onClientPlayerDamage прописать отмену события (cancelEvent), но после отмены дописать вычитание жизней, то выходит какой то баг.. или что-то такое. После первого выстрела в человека все нормально, жизни отнимаются как указано в скрипте, но после второго выстрела человека поворачивает на 0 и убирается оружие. Как это можно исправить или обойти такой баг?

Сам простенький код могу предоставить:

function playerDamage ( attacker, weapon, bodypart, loss ) 
    cancelEvent() 
    if attacker and attacker ~= localPlayer and getElementType ( attacker ) == "player" then 
        setElementHealth ( localPlayer, getElementHealth ( localPlayer )-loss ) 
    end 
end 
addEventHandler ( "onClientPlayerDamage", getLocalPlayer(), playerDamage ) 

Link to comment
Тогда ищи другие обработчики onClientPlayerDamage и onPlayerDamage.

например? я знаю что можно переписать систему жизней на ту, которая в дэйз (там такого бага нет), но она более геморная и мне не подходит.

Link to comment

в этом же ресурсе ничего больше не считает жизни. Да и баг происходит только при совмещении функций cancelEvent и setElementHealth, если их по отдельности писать в событии, то все нормально, но мне нужно именно эти 2 функции.

Link to comment
  • 2 weeks later...

Немного пришлось задержаться.

Проверил на тестовом сервере, там было отключено все, кроме самых важных скриптов (админка, плэй и еще пара), все работало точно так же как и на моем. я обнаружил что человека поворачивает на 0 в тот момент, когда он должен был умереть после выстрела, но не умер. Я мог бы скриптом сделать урон всему оружию на единицу, но тогда не будет идти урон транспорту, точнее будет, но совсем мизерный. Есть еще идеи? Мне нужно обязательно сделать cancelEvent, без него не получится скрипт.

Link to comment

только сегодня снайперке отпиливал фриз при попадании в целящегося:

function isPedAiming ( thePedToCheck ) 
    if isElement(thePedToCheck) then 
        if getElementType(thePedToCheck) == "player" or getElementType(thePedToCheck) == "ped" then 
            if getPedTask(thePedToCheck, "secondary", 0) == "TASK_SIMPLE_USE_GUN" then 
                return true 
            end 
        end 
    end 
    return false 
end 
  
function stopSniperFreeze ( attacker, weapon, bodypart, loss) 
    if (weapon == 34 and isPedAiming(localPlayer) and getPedWeapon(localPlayer) ~= 34) then 
        if (getElementHealth(localPlayer) > 2) then 
            cancelEvent() 
            setElementHealth(localPlayer,getElementHealth(localPlayer)) 
        end 
    end 
end 
addEventHandler ( "onClientPlayerDamage", getLocalPlayer(), stopSniperFreeze ) 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...