Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
21.05.2008, 16:34
RikkuZooo



Hallo ich will für mein coop folgendes einbauen das die waffen
aus denn alten level mit übernommen werden so wie in Singleplayer

ich hab erstmal versuch in der trigger.cpp folgendes zu programieren:

In code der class:
Quellcode:class CChangeLevel : public CBaseTrigger
{
public:
bla...
    void SaveData( void );
bla...
}
und unter:
Quellcode:edict_t *CChangeLevel :: FindLandmark( const char *pLandmarkName ) steht das hier:
Quellcode://=========================================================
// Rikku: Savedata to file...
void CChangeLevel::SaveData( void )
{
    FILE *fp;

    fp = fopen( "hlplu/server/stats.txt", "w" );
        fprintf( fp, "say this is a test.\n" );
    fclose( fp );
}
weis jemand wie ich weiter machen kann.

--

AirChina Mobile

zum Seitenanfang zum Seitenende Profil || Suche
001
21.05.2008, 19:04
Bluthund



Wenn du jetzt noch ne Frage formulierst kann dir sicher auch geholfen werden...

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
002
21.05.2008, 19:09
RikkuZooo



also ich hab mir mal die stats.cpp angeschaut und diese in die player.cpp implemtiert und will nun versuchen die so auszurichten das sie funktionirt.
da diese die munitions und health werte in eine text datei speichert.

villeicht hilft das ja :) so habe ich das in die player.cpp reingebaut:

Quellcode://=========================================================
// Rikku: Savedata to file...
float AmmoDamage( const char *pName )
{
    if ( !pName )
        return 0;

    if ( !strcmp( pName, "9mm" ) )
        return gSkillData.plrDmg9MM;
    if ( !strcmp( pName, "357" ) )
        return gSkillData.plrDmg357;
    if ( !strcmp( pName, "ARgrenades" ) )
        return gSkillData.plrDmgM203Grenade;
    if ( !strcmp( pName, "buckshot" ) )
        return gSkillData.plrDmgBuckshot;
    if ( !strcmp( pName, "bolts") )
        return gSkillData.plrDmgCrossbowMonster;
    if ( !strcmp( pName, "rockets") )
        return gSkillData.plrDmgRPG;
    if ( !strcmp( pName, "uranium") )
        return gSkillData.plrDmgGauss;
    if ( !strcmp( pName, "Hand Grenade") )
        return gSkillData.plrDmgHandGrenade;
    if ( !strcmp( pName, "Satchel Charge") )
        return gSkillData.plrDmgSatchel;
    if ( !strcmp( pName, "Trip Mine") )
        return gSkillData.plrDmgTripmine;

    return 0;
}

void CBasePlayer::UpdateCoopFile( float dataTime, char *pMapname, float health, float ammo, int skillLevel )
{
    FILE *fp;

    fp = fopen( "hlplu/server/stats.txt", "a" );
    // if ( !fp )
    //     return;
    fprintf( fp, "%6.2f, %6.2f, %6.2f, %s, %2d\n", dataTime, health, ammo, pMapname, skillLevel );
    fclose( fp );
}


#define AMMO_THRESHOLD 10
#define HEALTH_THRESHOLD 10
#define OUTPUT_LATENCY 3

typedef struct
{
    int    lastAmmo;
    float    lastHealth;
    float    lastOutputTime;
    float    nextOutputTime;
    float    dataTime;
    float    gameTime;
    float    lastGameTime;
} TESTSTATS;

TESTSTATS gCoop = {0,0,0,0,0,0,0};

void CBasePlayer::UpdateCoop( CBasePlayer *pPlayer )
{
    int i;

    int ammoCount[ MAX_AMMO_SLOTS ];
    memcpy( ammoCount, pPlayer->m_rgAmmo, MAX_AMMO_SLOTS * sizeof(int) );

    if ( gpGlobals->time < gCoop.lastGameTime )
    {
        gCoop.lastGameTime = gpGlobals->time;
        gCoop.dataTime = gCoop.gameTime;
    }

    gCoop.gameTime += gpGlobals->time - gCoop.lastGameTime;
    gCoop.lastGameTime = gpGlobals->time;

    for (i = 0; i < MAX_ITEM_TYPES; i++)
    {
        CBasePlayerItem *p = pPlayer->m_rgpPlayerItems[i];
        while (p)
        {
            ItemInfo II;
            
            memset(&II, 0, sizeof(II));
            p->GetItemInfo(&II);

            int index = pPlayer->GetAmmoIndex(II.pszAmmo1);
            if ( index >= 0 )
                ammoCount[ index ] += ((CBasePlayerWeapon *)p)->m_iClip;
            
            p = p->m_pNext;
        }
    }

    float ammo = 0;
    for (i = 1; i < MAX_AMMO_SLOTS; i++)
    {
        ammo += ammoCount[i] * AmmoDamage( CBasePlayerItem::AmmoInfoArray[i].pszName );
    }

    float health = pPlayer->pev->health + pPlayer->pev->armorvalue * 2;
    float ammoDelta = fabs( ammo - gCoop.lastAmmo );
    float healthDelta = fabs( health - gCoop.lastHealth );
    int forceWrite = 0;
    if ( health <= 0 && gCoop.lastHealth > 0 )
        forceWrite = 1;

    if ( (ammoDelta > AMMO_THRESHOLD || healthDelta > HEALTH_THRESHOLD) && !forceWrite )
    {
        if ( gCoop.nextOutputTime == 0 )
            gCoop.dataTime = gCoop.gameTime;

        gCoop.lastAmmo = ammo;
        gCoop.lastHealth = health;

        gCoop.nextOutputTime = gCoop.gameTime + OUTPUT_LATENCY;
    }
    else if ( (gCoop.nextOutputTime != 0 && gCoop.nextOutputTime < gCoop.gameTime) || forceWrite )
    {
        UpdateCoopFile( gCoop.dataTime, (char *)STRING(gpGlobals->mapname), health, ammo, (int)CVAR_GET_FLOAT("skill") );

        gCoop.lastAmmo = ammo;
        gCoop.lastHealth = health;
        gCoop.lastOutputTime = gCoop.gameTime;
        gCoop.nextOutputTime = 0;
    }
}

void CBasePlayer::InitCoop( CBasePlayer *pPlayer )
{
    gCoop.lastGameTime = gpGlobals->time;
}

--

AirChina Mobile

zum Seitenanfang zum Seitenende Profil || Suche
003
15.06.2008, 11:27
Hanfling



Vielleicht wäre es sinnvoll folgende Funktion aus der dlls/client.cpp zu benutzen. um an die Bewaffnung zu kommen. Evtl. gibts was ähnliches zum laden wieder oder drehst die Funktion mal schnell um.

int GetWeaponData( struct edict_s *player, struct weapon_data_s *info )

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o

zum Seitenanfang zum Seitenende Profil || Suche