AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Changing fall velocity limit that gives damage on the player (https://forums.alliedmods.net/showthread.php?t=89047)

ot_207 04-01-2009 12:25

Changing fall velocity limit that gives damage on the player
 
Before giving more details I don't want any Ham_TakeDamage suggestions.

Well, I've done some tests and found out that the fall velocity that damages the player is 550. Is it possible to make this 300?

Arkshine 04-01-2009 13:24

Re: Changing fall velocity limit that gives damage on the player
 
Try with this player offset : m_flFallVelocity ( 251 )

Dores 04-01-2009 14:16

Re: Changing fall velocity limit that gives damage on the player
 
Create a global var that checks if the player fell. Check his fall velocity in PreThink, and if it's 300(or higher) - assign 1 to the var(or true, whatever).
When he is on the ground, if the var's value is 1/true, then he just fell. Reset the var, and damage the player according to the falling velocity(I don't know what calculation is needed).

ConnorMcLeod 04-01-2009 15:32

Re: Changing fall velocity limit that gives damage on the player
 
Guess all of those value are hardcoded.

For half-life :
Code:

#define PLAYER_FATAL_FALL_SPEED                1024// approx 60 feet
#define PLAYER_MAX_SAFE_FALL_SPEED        580// approx 20 feet
#define DAMAGE_FOR_FALL_SPEED                (float) 100 / ( PLAYER_FATAL_FALL_SPEED - PLAYER_MAX_SAFE_FALL_SPEED )// damage per unit per second.
#define PLAYER_MIN_BOUNCE_SPEED                200
#define PLAYER_FALL_PUNCH_THRESHHOLD (float)350 // won't punch player's screen/make scrape noise unless player falling at least this fast.

-> Player_PostThink :
Code:

        if ( (FBitSet(pev->flags, FL_ONGROUND)) && (pev->health > 0) && m_flFallVelocity >= PLAYER_FALL_PUNCH_THRESHHOLD )
        {
                // ALERT ( at_console, "%f\n", m_flFallVelocity );

                if (pev->watertype == CONTENT_WATER)
                {
                        // Did he hit the world or a non-moving entity?
                        // BUG - this happens all the time in water, especially when
                        // BUG - water has current force
                        // if ( !pev->groundentity || VARS(pev->groundentity)->velocity.z == 0 )
                                // EMIT_SOUND(ENT(pev), CHAN_BODY, "player/pl_wade1.wav", 1, ATTN_NORM);
                }
                else if ( m_flFallVelocity > PLAYER_MAX_SAFE_FALL_SPEED )
                {// after this point, we start doing damage
                       
                        float flFallDamage = g_pGameRules->FlPlayerFallDamage( this );

                        if ( flFallDamage > pev->health )
                        {//splat
                                // note: play on item channel because we play footstep landing on body channel
                                EMIT_SOUND(ENT(pev), CHAN_ITEM, "common/bodysplat.wav", 1, ATTN_NORM);
                        }

                        if ( flFallDamage > 0 )
                        {
                                TakeDamage(VARS(eoNullEntity), VARS(eoNullEntity), flFallDamage, DMG_FALL );
                                pev->punchangle.x = 0;
                        }
                }

-edit-
Forgot that, but i guess you have HLSDK.
Code:

float CHalfLifeMultiplay :: FlPlayerFallDamage( CBasePlayer *pPlayer )
{
        int iFallDamage = (int)falldamage.value;

        switch ( iFallDamage )
        {
        case 1://progressive
                pPlayer->m_flFallVelocity -= PLAYER_MAX_SAFE_FALL_SPEED;
                return pPlayer->m_flFallVelocity * DAMAGE_FOR_FALL_SPEED;
                break;
        default:
        case 0:// fixed
                return 10;
                break;
        }
}


ot_207 04-02-2009 04:17

Re: Changing fall velocity limit that gives damage on the player
 
Quote:

Originally Posted by Dores (Post 794889)
Create a global var that checks if the player fell. Check his fall velocity in PreThink, and if it's 300(or higher) - assign 1 to the var(or true, whatever).
When he is on the ground, if the var's value is 1/true, then he just fell. Reset the var, and damage the player according to the falling velocity(I don't know what calculation is needed).

Thanks for the suggestion but thought of something else. I will add the velocity I need before a player will touch the ground ;).

Quote:

Originally Posted by ConnorMcLeod (Post 794930)
Guess all of those value are hardcoded.

Damn ... so that means that I have to manipulate the fall velocity of the player. Thanks :).

Quote:

Originally Posted by arkshine (Post 794842)
Try with this player offset : m_flFallVelocity ( 251 )

It just says the fall velocity, it is good to add some values to make them fall better :P.

nisam_ja 07-30-2009 12:55

Re: Changing fall velocity limit that gives damage on the player
 
i will be on this thread, very interesting stuff, i am going to implement this on HnS..


All times are GMT -4. The time now is 02:17.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.