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:
class CChangeLevel : public CBaseTrigger { public: bla... void SaveData( void ); bla... } und unter:
edict_t *CChangeLevel :: FindLandmark( const char *pLandmarkName ) steht das hier:
//========================================================= // 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
|
|
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-
|
|
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:
//========================================================= // 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
|
|
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
|
|
Profil || Suche
|