User:Dutchmega/code: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
Line 97: Line 97:
with
with
<pre>// DM: Some small improvements for lagcompensation  
<pre>// DM: Some small improvements for lagcompensation  
// From Plan of Attacks-source  
// From Plan of Attack-source  
// did we found a context smaller then target time ?  
// did we found a context smaller then target time ?  
if ( record->m_flSimulationTime <= flTargetTime )  
if ( record->m_flSimulationTime <= flTargetTime )  

Revision as of 05:58, 13 June 2006

Making the antlion burn!

Add the following under protected in npc_antlion.h

virtual	bool		AllowedToIgnite( void ) { return true; }

Well, now the damh thing burns but it doesn't visually respond to it. You can use the drown-animation: Add the following piece of code to the top of the function GatherConditions():

if( IsOnFire() )
{
	SetCondition( COND_ANTLION_IN_WATER );
}

UTIL_LoadTexture

Here's a very handy function from the Plan Of Attack source.

int UTIL_LoadTexture(const char *szFile)
{
#ifdef CLIENT_DLL
	char szStr[256];

	// try to pull it
	int iID = vgui::surface()->DrawGetTextureId(szFile);

	// did we get it?
	if(iID >= 0)
		return iID;

	// does the file exist?
	Q_snprintf(szStr, sizeof(szStr), "materials/%s.vmt", szFile);
	if(!vgui::filesystem()->FileExists(szStr))
	{
		DevMsg("UTIL_LoadTexture: texture %s does not exist!\n", szFile);
		return -1;
	}

	// create the new texture
	iID = vgui::surface()->CreateNewTextureID();
	vgui::surface()->DrawSetTextureFile(iID, szFile, true, false);

	return iID;
#else
	return -1;
#endif
}

Disallow players connecting to a server with a different version

Add the file version.h to your game_shared and add it to both projects. Content:

#define VERSION "0.01"

Then add to cdll_client_int.cpp:

void cl_versionCallback_f( ConVar *var, char const *pOldString )
{
	if( Q_stricmp( var->GetString(), var->GetDefault() ) ) var->Revert();
}
static ConVar	cl_version	( "cl_version", VERSION, FCVAR_USERINFO|FCVAR_CLIENTDLL, "The version of this mod",
				cl_versionCallback_f );

Then open GameInterface.cpp and find the function ClientConnect() Replace the contents of that function with this:

	// DM: Get the version of the client and compare it with the server's version
	const char* version = engine->GetClientConVarValue( engine->IndexOfEdict( pEdict ), "cl_version" );

	if (stricmp(VERSION, version) == 0)
	{
		return g_pGameRules->ClientConnected( pEdict, pszName, pszAddress, reject, maxrejectlen );
		// Aka true
	}
	else
	{
		char string [256];
		Q_snprintf( string, sizeof(string), "The server runs a different version (%s)", VERSION);
		Q_strcpy( reject, string ); 
		maxrejectlen = strlen(string);
		return false;
	}

Just don't forget to change the define everytime you release a new version

Fix for filter_damage_type

dlls/filters.cpp

Replace return info.GetDamageType() == m_iDamageType; around line 343 with return ( (info.GetDamageType() & m_iDamageType ) ? true : false );

Improved lagcompensation code

Open dlls/player_lagcompensation.cpp and replace, around line 369

// lost track, too much difference 
return;

with

// DM: Some small improvements for lagcompensation 
// From Plan of Attack-source 
// did we found a context smaller then target time ? 
if ( record->m_flSimulationTime <= flTargetTime ) 
 break; // hurra, stop  
// store this position for the next time through the loop 
prevOrg = record->m_vecOrigin; 
// go one step back 
curr = track->Next( curr ); 

Also take a look at the code from Sticky Player Collisions

Bugs found while making a HL2 co-op mod

  • NPCs don't work with the HL2MP weapons
  • You don't see blood
  • You hear the warning-sound when you spawn without any weapons & ammo.
  • Fallen items/weapons from NPCs respawn.
  • APC doesn't aim good
  • Metropolice with stunstick doesn't work
  • Citizens with RPG don't work
  • You don't hear footsteps of NPCs.
  • Crash or 'players not dropping objects' when hit hard and have something picked with the gravity gun.
  • Sceneentity doesn't find !player.
  • effects/strider_muzzle not precached when you spawn an combine with the AR2.
  • Deaths are not counted at the scoreboard when killed by an NPC.
  • filter_damage_type-entity doesn't work
  • Commanding citizens doesn't work.
  • Hoppers don't work
  • You don't see tracers & muzzleflash when a NPC shoots
  • Flashlight isn't aimed in the right direction if the model has a stunstick/crowbar/grenade.
  • You don't hear tracer-sounds
  • Items/weapons with the SF_NORESPAWN flag move to their original position.
  • You hear the metropolice deathsound (radio) when you kill it with the combine ball.
  • Scanner doesn't find any players when it's only allowed to inspect players.
  • When you die in the water, the underwater-ambientsound never stopts.
  • Combine soldiers don't do hand signals
  • When you kill a combine with the combine ball, the (dropped) items/weapons aren't dissolved.
  • APCs laserdot isn't hidden
  • Grenades float in the air when dropped by an NPC
  • You hear the ammo-warningsound & deathsound when you spawn without any weapons
  • NPCs aren't frozen at an intermission.
  • env_message doesn't work in MP
  • It's possible to turn on the flashlight without the suit.
  • You don't see the muzzleflash/tracer of a func_tank gun.
  • You don't see underwater bubbles
  • When the player is on fire and dies, the fire doesn't disappear when he respawns
  • Using shield-scanner in maps is not possible unless the mapname begins with d3
  • Scriptsound NPC_CeilingTurret.ShotSounds doesn't exist
  • Not all sk_ variables in the game_shared have the flag FCVAR_REPLICATED
  • The sk_ damage variables for the crowbar and stunstick are removed in HL2DM
  • Stunstick-sparks (random effect) are shown while the stunstick isn't the active weapon
  • Ammo in the HUD doesn't reposition good after an resolution-change
  • Many sounds of the physcannon are disabled in HL2DM


All fixed, so if you ask nice, I'll give you the fix.
Of course, there's a bigger list of missing features. For example: 'Get points when you kill an NPC' or a deathnotice with the name of the NPC that killed you.