⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 player.cpp

📁 this keik game source
💻 CPP
📖 第 1 页 / 共 5 页
字号:
   {
   // world effects
   next_drown_time = 0;
	air_finished    = level.time + 20;
	old_waterlevel  = 0;
	drown_damage    = 0;
   }
	
void Player::InitWeapons
   (
   void
   )

   {
   // weapon stuff
   firing       = false;
   firedown     = false;
   firedowntime = 0;
	gunoffset    = Vector( 0, 0, STAND_HEIGHT );
   }

void Player::InitInventory
   (
   void
   )

   {
   // Don't do anything if we're loading a server game.
   // This is either a loadgame or a restart
   if ( LoadingServer )
      {
      return;
      }

   // Give player the default weapon
   if ( !FindItem( "Magnum" ) )
      {
      giveWeapon( "Magnum" );
      }

   if ( !FindItem( "Fists" ) )
      {
      giveWeapon( "Fists" );
      }

#ifndef SIN_DEMO
   if ( !FindItem( "SpiderMine" ) )
      {
      giveWeapon( "SpiderMine" );
      }
#endif
   }

void Player::InitView
   (
   void
   )

   {
   // Camera stuff
   zoom_mode           = ZOOMED_OUT;
   spectator           = false;
   currentCameraTarget = 0;
   checked_dead_camera = false;
	SetViewMode( defaultViewMode );

   // view stuff
	kick_angles		= vec_zero;
	kick_origin		= vec_zero;
	v_angle			= vec_zero;
	oldviewangles	= vec_zero;
	v_gunoffset    = vec_zero;
	v_gunangles    = vec_zero;
	viewheight	   = STAND_EYE_HEIGHT;

   // blend stuff
	v_dmg_time		= 0;
   damage_blend	= vec_zero;
   flash_color[0] = flash_color[1] = flash_color[2] = flash_color[3] = 0;

   // hud
   hidestats      = false;
   }

void Player::ChooseSpawnPoint
   (
   void
   )

   {
   // set up the player's spawn location
   SelectSpawnPoint( origin, angles, &gravaxis );
	setOrigin( origin	+ "0 0 17" );
	worldorigin.copyTo( edict->s.old_origin );
	edict->s.renderfx |= RF_FRAMELERP;

   KillBox( this );

   // set gravity axis
	SetGravityAxis( gravaxis );
	client->ps.pmove.gravity_axis = gravaxis;

   // setup the orientation
	setAngles( angles );
	v_angle = worldangles;

	// set the delta angle
	client->ps.pmove.delta_angles[0] = ANGLE2SHORT( angles.x - client->resp.cmd_angles[0] );
	client->ps.pmove.delta_angles[1] = ANGLE2SHORT( angles.y - client->resp.cmd_angles[1] );
	client->ps.pmove.delta_angles[2] = ANGLE2SHORT( angles.z - client->resp.cmd_angles[2] );

   if ( deathmatch->value || coop->value )
      {
      SpawnTeleportEffect( worldorigin, 124 );
      }
   }

void Player::InitPath
   (
   void
   )

   {
   // pathnode placement stuff
	nearestNode = NULL;

	if ( ai_createnodes->value )
		{
		nearestNode = new PathNode;
		nearestNode->Setup( worldorigin );
		}

	goalNode    = nearestNode;
	lastNode    = nearestNode;
	lastVisible = worldorigin;
	searchTime  = level.time + 0.1;
   }

Player::~Player()
	{
	if ( client )
		{
		gi.bprintf( PRINT_HIGH, "%s disconnected\n", client->pers.netname );
		}

	if ( watchCamera && ( ( watchCamera == thirdpersonCamera ) || ( watchCamera == spectatorCamera ) ) )
		{
		delete watchCamera;
		watchCamera = NULL;
      thirdpersonCamera = NULL;
      spectatorCamera = NULL;
		}

   if ( crosshair )
		{
		delete crosshair;
      crosshair = NULL;
		}

	if ( path )
		{
		delete path;
		path = NULL;
		}

	edict->s.modelindex = 0;

	gi.configstring( CS_PLAYERSKINS + entnum - 1, "" );
	}

void Player::EndLevel
   (
   Event *ev
   )

   {
   if ( flags & FL_MUTANT )
      {
      Human( NULL );
      }

   InitPowerups();
   if ( health > max_health )
      {
      health = max_health;
      }

   if ( health < 1 )
      {
      health = 1;
      }
   }

void Player::Respawn
	(
	Event *ev
	)

	{
	if ( deathmatch->value || coop->value || level.training )
		{
      assert ( deadflag == DEAD_DEAD );

#ifdef SIN_ARCADE
	   if ( deathmatch->value )
		   {
		   FreeInventory();
         }
#else
		FreeInventory();
#endif

		if ( !gibbed && !level.training )
         {
         CopyToBodyQueue( edict );
         }

		respawn_time = level.time;

      Init();

		// hold in place briefly
		client->ps.pmove.pm_time = 50;
      client->ps.pmove.pm_flags = PMF_TIME_TELEPORT;

		return;
		}

   // force the load game menu to come up
   level.missionfailed = true;
   level.missionfailedtime = level.time - FRAMETIME;
	}

void Player::SetDeltaAngles
   (
   void
   )

   {
   int i;

   // Use v_angle since we may be in a camera
	for( i = 0; i < 3; i++ )
      {
		client->ps.pmove.delta_angles[ i ] = ANGLE2SHORT( v_angle[ i ] );
      }
   }

void Player::Spectator
   ( 
   Event *ev
   )

   {
   hideModel();
   setSolidType( SOLID_NOT );
   spectator = true;
   FreeInventory();

   // Send over a message that lets the player know they are in spectator mode.

   gi.WriteByte (svc_layout);
   gi.WriteString ("jcx jt hstring 0 0 1 \"SPECTATOR MODE\"");
	gi.unicast (edict, true);

	client->ps.stats[ STAT_LAYOUTS ] |= DRAW_SPECTATOR;
   }

void Player::Obituary
	(
	Entity *attacker,
   Entity *inflictor,
   str location,
   int meansofdeath
	)

	{
   const char *message1 = NULL;
   const char *message2 = "";
   int num;
   
   if ( !deathmatch->value )
      return;

   // Client killed themself
	if ( attacker == this )
		{
      switch ( meansofdeath )
         {
         case MOD_FALLING:
            message1 = "fell down";
            break;
         case MOD_ADRENALINE:
            message1 = "overdosed on adrenaline";
            break;
         case MOD_ION_DESTRUCT:
            message1 = "overloaded his gun";
            break;
         default:
            message1  = "cracked under the pressure";
         }

      if ( message1 )
         {
         gi.bprintf( PRINT_MEDIUM, "%s %s.\n", client->pers.netname, message1 );
         }
      else
         {
         gi.bprintf( PRINT_MEDIUM, "%s died.\n", client->pers.netname );
         }
		client->resp.score--;
		return;
		}

   // Killed by another client
	if ( attacker && attacker->isClient() )
		{
      switch (meansofdeath)
         {
         case MOD_FISTS:  // FISTS
            {
            num = G_Random(6); 
            switch (num)
               {
               case 0:
                  message1 = "was knocked out by";
                  break;
               case 1:
                  message1 = "was pummelled by";
                  break;
               case 2:
                  message1 = "was over come by";
                  message2 = "'s ninja technique";
                  break;
               case 3:
                  message1 = "ate a knuckle sandwich courtesy of";
                  break;
               case 4:
                  message1 = "takes";
                  message2 = "'s beating";
                  break;
               case 5:
                  message1 = "liked";
                  message2 = "'s death touch";
                  break;
               default:
                  message1 = "was killed by";
                  message2 = "'s fists";
                  break;
               }
            }
            break;
         case MOD_MUTANTHANDS:
            message1 = "was shredded by";
            break;
         case MOD_MAGNUM:  // Magnum
            {           
            num = G_Random(5); 
            switch (num)
               {
               case 0:
                  message1 = "was capped in the ass by";
                  break;
               case 1:
                  message1 = "was gunned down in broad daylight by";
                  break;
               case 2:
                  message1 = "eats";
                  message2 = "'s magnum";
                  break;
               case 3:
                  message1 = "was punked by";
                  break;
               case 4:
                  message1 = "was jacked by";
                  break;
               default:
                  message1 = "was killed by";
                  message2 = "'s magnum";
                  break;
               }
            break;
            }
         case MOD_SHOTGUN:  // Shotgun
            {
            num = G_Random(5);
            switch (num)
               {
               case 0:
                  message1 = "is a victim of";
                  message2 = "'s shotgun";
                  break;
               case 1:
                  message1 = "was slaughtered by";
                  break;
               case 2:
                  message1 = "drowns in a rain of";
                  message2 = "'s hot lead";
                  break;
               case 3:
                  message1 = "finds out why";
                  message2 = " got an F in gun safety";
                  break;
               case 4:
                  message1 = "was shotgunned by";
                  break;
               default:
                  message1 = "was killed by";
                  message2 = "'s shotgun";
                  break;
               }
            break;
            }
         case MOD_ASSRIFLE:
            {
            num = G_Random(4);
            switch (num)
               {
               case 0:
                  message1 = "was assaulted by";
                  break;
               case 1:
                  message1 = "was cut in half by";
                  break;
               case 2:
                  message1 = "forgot that";
                  message2 = " had a bigger gun";
                  break;
               case 3:
                  message1 = "was machinegunned down by";
                  break;
               default:
                  message1 = "was killed by";
                  message2 = "'s assault rifle";
                  break;
               }
            }
            break;
         case MOD_CHAINGUN:
            message1 = "was mowed down by";
            message2 = "'s chaingun";
            break;
         case MOD_GRENADE:
            message1 = "was fragged by";
            message2 = "'s grenade";
            break;
         case MOD_ROCKET:
            {
            num = G_Random(5);
            switch (num)
               {
               case 0:
                  message1 = "was blown up by";
                  message2 = "'s direct rocket hit";
                  break;
               case 1:
                  message1 = "bows down to";
                  message2 = "'s almighty rocket launcher";
                  break;
               case 2:
                  message1 = "was incinerated by";
                  message2 = "'s rocket";
                  break;
               case 3:
                  message1 = "was obliterated by";
                  message2 = "'s rocket";
                  break;
               case 4:
                  message1 = "likes walking into";
                  message2 = "'s projectiles";
                  break;
               default:
                  message1 = "was killed by";
                  message2 = "'s rocket launcher";
               }
            }
            break;
         case MOD_ROCKETSPLASH:
            {
            num = G_Random(5);
            switch (num)
               {
               case 0:
                  message1 = "was caught in";
                  message2 = "'s explosion";
           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -