Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
22.12.2002, 15:28
pr0n00b



Sers ich schon wieder!! Ich weiss das ich nerver!
Aber ich hab schon wieder ein Problem!
Also ich habe der MP5 ein neues Model gegeben und nen Zoom. Jetzt ist es aber so das die waffe nicht genau ist wie z.B. in CS. Wie stelle ich also ein das die Waffe wie in CS feuert?? Genau.... ist das der Recoil?? Ich hab da mal was versucht ging aber nicht!

MFG

--

zum Seitenanfang zum Seitenende Profil || Suche
001
22.12.2002, 19:51
Jonathan Dark



Ich würde erst mal schreiben, welche CS-Waffe. Es gibt über 20 verschiedene da. Und dann kann ich dir vielleicht helfen

--

Ach wie gut das niemand weiss, dass ich undercover-bild-redakteur heiss... :P
---------------------------------------
BTS_Splitta:lighting is noch voll fürn arsch...
-Sir_Pepe-:Mach mich nicht arbeitslos.

zum Seitenanfang zum Seitenende Profil || Suche
002
22.12.2002, 21:23
McMapper



Quellcode:
Vector CBaseEntity::FireBulletsPlayer ( ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker, int shared_rand )
{
    static int tracerCount;
    TraceResult tr;
    Vector vecRight = gpGlobals->v_right;
    Vector vecUp = gpGlobals->v_up;
    float x, y, z;

    if ( pevAttacker == NULL )
        pevAttacker = pev;  // the default attacker is ourselves

    ClearMultiDamage();
    gMultiDamage.type = DMG_BULLET | DMG_NEVERGIB;

    for ( ULONG iShot = 1; iShot <= cShots; iShot++ )
    {
        //Use player's random seed.
        // get circular gaussian spread
        x = UTIL_SharedRandomFloat( shared_rand + iShot, -0.5, 0.5 ) + UTIL_SharedRandomFloat( shared_rand + ( 1 + iShot ) , -0.5, 0.5 );
        y = UTIL_SharedRandomFloat( shared_rand + ( 2 + iShot ), -0.5, 0.5 ) + UTIL_SharedRandomFloat( shared_rand + ( 3 + iShot ), -0.5, 0.5 );
        z = x * x + y * y;

        Vector vecDir = vecDirShooting +
                        x * vecSpread.x * vecRight +
                        y * vecSpread.y * vecUp;
        Vector vecEnd;

        vecEnd = vecSrc + vecDir * flDistance;
        UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, ENT(pev)/*pentIgnore*/, &tr);
        
        // do damage, paint decals
        if (tr.flFraction != 1.0)
        {
            CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);

            if ( iDamage )
            {
                pEntity->TraceAttack(pevAttacker, iDamage, vecDir, &tr, DMG_BULLET | ((iDamage > 16) ? DMG_ALWAYSGIB : DMG_NEVERGIB) );
                
                TEXTURETYPE_PlaySound(&tr, vecSrc, vecEnd, iBulletType);
                DecalGunshot( &tr, iBulletType );
            }
            else switch(iBulletType)
            {
            default:
            case BULLET_PLAYER_9MM:        
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmg9MM, vecDir, &tr, DMG_BULLET);
                break;

            case BULLET_PLAYER_MP5:        
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmgMP5, vecDir, &tr, DMG_BULLET);
                break;

            case BULLET_PLAYER_BUCKSHOT:    
                 // make distance based!
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmgBuckshot, vecDir, &tr, DMG_BULLET);
                break;
            
            case BULLET_PLAYER_357:        
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmg357, vecDir, &tr, DMG_BULLET);
                break;
                
            case BULLET_NONE: // FIX
                pEntity->TraceAttack(pevAttacker, 50, vecDir, &tr, DMG_CLUB);
                TEXTURETYPE_PlaySound(&tr, vecSrc, vecEnd, iBulletType);
                // only decal glass
                if ( !FNullEnt(tr.pHit) && VARS(tr.pHit)->rendermode != 0)
                {
                    UTIL_DecalTrace( &tr, DECAL_GLASSBREAK1 + RANDOM_LONG(0,2) );
                }

                break;
            }
        }
        // make bullet trails
        UTIL_BubbleTrail( vecSrc, tr.vecEndPos, (flDistance * tr.flFraction) / 64.0 );
    }
    ApplyMultiDamage(pev, pevAttacker);

    return Vector( x * vecSpread.x, y * vecSpread.y, 0.0 );
}

Diese funktion kannst du mit:

Quellcode:
Vector CBaseEntity::FireBulletsPlayer ( ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker, int shared_rand )
{
    static int tracerCount;
    TraceResult tr;
    Vector vecRight = gpGlobals->v_right;
    Vector vecUp = gpGlobals->v_up;
    float x, y, z;

    if ( pevAttacker == NULL )
        pevAttacker = pev;  // the default attacker is ourselves

    ClearMultiDamage();
    gMultiDamage.type = DMG_BULLET | DMG_NEVERGIB;

    for ( ULONG iShot = 1; iShot <= cShots; iShot++ )
    {
        Vector vecDir = vecDirShooting;
                          Vector vecEnd;
        vecEnd = vecSrc + vecDir * flDistance;
        UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, ENT(pev)/*pentIgnore*/, &tr);
        
        // do damage, paint decals
        if (tr.flFraction != 1.0)
        {
            CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);

            if ( iDamage )
            {
                pEntity->TraceAttack(pevAttacker, iDamage, vecDir, &tr, DMG_BULLET | ((iDamage > 16) ? DMG_ALWAYSGIB : DMG_NEVERGIB) );
                
                TEXTURETYPE_PlaySound(&tr, vecSrc, vecEnd, iBulletType);
                DecalGunshot( &tr, iBulletType );
            }
            else switch(iBulletType)
            {
            default:
            case BULLET_PLAYER_9MM:        
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmg9MM, vecDir, &tr, DMG_BULLET);
                break;

            case BULLET_PLAYER_MP5:        
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmgMP5, vecDir, &tr, DMG_BULLET);
                break;

            case BULLET_PLAYER_BUCKSHOT:    
                 // make distance based!
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmgBuckshot, vecDir, &tr, DMG_BULLET);
                break;
            
            case BULLET_PLAYER_357:        
                pEntity->TraceAttack(pevAttacker, gSkillData.plrDmg357, vecDir, &tr, DMG_BULLET);
                break;
                
            case BULLET_NONE: // FIX
                pEntity->TraceAttack(pevAttacker, 50, vecDir, &tr, DMG_CLUB);
                TEXTURETYPE_PlaySound(&tr, vecSrc, vecEnd, iBulletType);
                // only decal glass
                if ( !FNullEnt(tr.pHit) && VARS(tr.pHit)->rendermode != 0)
                {
                    UTIL_DecalTrace( &tr, DECAL_GLASSBREAK1 + RANDOM_LONG(0,2) );
                }

                break;
            }
        }
        // make bullet trails
        UTIL_BubbleTrail( vecSrc, tr.vecEndPos, (flDistance * tr.flFraction) / 64.0 );
    }
    ApplyMultiDamage(pev, pevAttacker);

    return Vector( x, y , 0.0 );
}

ersetzen

Wenn du das machst, schiessen alle Kugelwaffen immer genau dorthin wo man zielt, egal wie lange man schiesst.

Wenn du aber die Waffe so wie in Cs haben willst, wo sie, wenn man zu lange scheisst ungenau wird, musst du in der mp5.cpp folgendes ändern:
Quellcode:
// optimized multiplayer. Widened to make it easier to hit a moving player
        vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_6DEGREES, 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );

wird zu:
Quellcode:
// optimized multiplayer. Widened to make it easier to hit a moving player
        vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, Vector (0,0,0), 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );

Die Waffe sollte nun den ersten Schuss genau dorthin schiessen, wo man ziehlt, aber je länger man schiesst, desto ungenauer wird sie (so interpretier ich den code ;-) )
Alle Angaben ohne Gewähr, ich hab schon lang nimmer gecoded ;-)

--


Dieser Beitrag wurde am 22.12.2002 um 21:27 von McMapper bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
22.12.2002, 23:14
Jonathan Dark



Man glaubt es nicht, ich bin nupp und hätte es auch so gemacht *stolz*

--

Ach wie gut das niemand weiss, dass ich undercover-bild-redakteur heiss... :P
---------------------------------------
BTS_Splitta:lighting is noch voll fürn arsch...
-Sir_Pepe-:Mach mich nicht arbeitslos.

zum Seitenanfang zum Seitenende Profil || Suche
004
22.12.2002, 23:15
Onkel Dittmeyer



Wenn du noch rausfinden willst ob der Spieler läuft, springt oder sich duckt, kannste das mit pev->flags rausfinden und demnach auch den "Streuvektor" verändern.

--


Dieser Beitrag wurde am 22.12.2002 um 23:19 von Onkel Dittmeyer bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
23.12.2002, 15:16
McMapper



Ich merke grad, die zweite Lösung wäre wohl doch besser, denn bei der ersten würde der client ne streuung anzeigen, aber in wahrheit trifft man immer

--

zum Seitenanfang zum Seitenende Profil || Suche
006
23.12.2002, 19:17
pr0n00b



thx für eure antworten ich werds versuchen!

--

zum Seitenanfang zum Seitenende Profil || Suche