Exemple #1
0
void death( char_data* victim, char_data* ch, char* dt )
{
  char               tmp  [ TWO_LINES ];
  obj_data*       corpse;
  content_array*   where  = victim->array;
  char_data*         rch;
  bool           survive;
 
  remove_bit( &victim->status, STAT_BERSERK );

  if( ch == NULL ) 
    for( int i = 0; i < *where; i++ ) 
      if( ( rch = character( where->list[i] ) ) != NULL 
        && includes( rch->aggressive, victim ) ) {
        ch = rch;
        break;
        }

  stop_fight( victim );
  clear_queue( victim );

  if( !can_die( victim ) )
    return;
 
  disburse_exp( victim );
  register_death( victim, ch, dt );

  clear_queue( victim );
  death_cry( victim );

  if( survive = !die_forever( victim ) )
    raw_kill( victim );

  corpse = make_corpse( victim, where );
  loot_corpse( corpse, ch, victim );

  if( survive ) 
    return;

  if( mob( victim ) != NULL ) {
    victim->Extract( );
    return;
    }

  sprintf( tmp, "%s's soul is taken by death.", victim->Name( ) );
  info( tmp, LEVEL_BUILDER, tmp, IFLAG_DEATHS, 1, victim );

  clear_screen( victim );
  reset_screen( victim );

  send( victim, "Death is surprisingly peaceful.\n\r" );
  send( victim, "Good night.\n\r" );

  purge( player( victim ) );
}
Exemple #2
0
ascii_man::ascii_man()
{
	did_move(false);
	did_collide(false);
	feels_gravity(true);
	did_gravity(false);
	is_fixed(false);
	isdead(false);
	can_die(true);

	initialize(0);
}
Exemple #3
0
void ascii_man::collide(object *obj2, float adj, vector2d temp_mv, float x_over, float y_over)
{
	set_hit_object(obj2);

	if(x_over > y_over) 
	{
		if(this->get_pt().get_x() < obj2->get_pt().get_x())
		{set_hitR(true);}
		else
		{set_hitL(true);}
	}
	if(x_over < y_over)
	{
		if(this->get_pt().get_y() < obj2->get_pt().get_y())
		{set_hitD(true);}
		else
		{set_hitU(true);}
	}
	if (adj < 0.0001)
	{adj=1;}
	set_pt(get_pt() + (get_mv()* adj));
	set_mv(temp_mv * obj2->get_mass());

	if(this->get_mv().get_y() > 0 && get_hitD()==true && obj2->is_fixed()==true)
	{set_mv(get_mv().get_x(),0);}


	if (can_die()==true)
	{
		set_health(get_health()-obj2->get_damage());
	}
	if (get_health() <= 0)
	{
		isdead(true);
	}
	did_collide(true);
	did_move(true);
}