Example #1
0
void raw_kill( char_data* victim )
{
  affect_data    affect;
 
  victim->From( );

  remove_affect( victim );
  remove_leech( victim );

  victim->position  = POS_RESTING;
  victim->hit       = max( 1, victim->hit  );
  victim->mana      = max( 1, victim->mana );
  victim->move      = max( 1, victim->move );

  affect.type      = AFF_DEATH;
  affect.duration  = 20;
  affect.level     = 10;
  affect.leech     = NULL;

  add_affect( victim, &affect );
  delete_list( victim->prepare );
  update_maxes( victim );

  victim->To( get_room_index( ROOM_DEATH, FALSE ) );

  dismount( victim );
  clear_enemies( victim );

  write( player( victim ) );
}
Example #2
0
int NACSIF::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QObject::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: { QVariant _r = command((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QVariant(*)>(_a[2])));
            if (_a[0]) *reinterpret_cast< QVariant*>(_a[0]) = _r; }  break;
        case 1: { bool _r = mount((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2])),(*reinterpret_cast< QString(*)>(_a[3])));
            if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; }  break;
        case 2: { bool _r = dismount((*reinterpret_cast< QString(*)>(_a[1])));
            if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; }  break;
        case 3: { bool _r = format((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2])),(*reinterpret_cast< long(*)>(_a[3])));
            if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; }  break;
        case 4: { bool _r = deleteFormat((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2])));
            if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; }  break;
        case 5: { QString _r = getDiskSerial();
            if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; }  break;
        case 6: { QString _r = hash((*reinterpret_cast< QString(*)>(_a[1])));
            if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; }  break;
        case 7: callExplorer((*reinterpret_cast< QString(*)>(_a[1]))); break;
        default: ;
        }
        _id -= 8;
    }
    return _id;
}
Example #3
0
void Item::mountToShip(Ship *theShip)
{
   TNLAssert(isGhost() || isInDatabase(), "Error, mount item not in database.");
   dismount();
   mMount = theShip;
   if(theShip)
      theShip->mMountedItems.push_back(this);

   mIsMounted = true;
   setMaskBits(MountMask);
}
Example #4
0
void Item::unpackUpdate(GhostConnection *connection, BitStream *stream)
{
   bool interpolate = false;
   bool positionChanged = false;

   if(stream->readFlag())
   {
   }
   if(stream->readFlag())
   {
      ((GameConnection *) connection)->readCompressedPoint(mMoveState[ActualState].pos, stream);
      readCompressedVelocity(mMoveState[ActualState].vel, 511, stream);
      positionChanged = true;
      interpolate = !stream->readFlag();
   }
   if(stream->readFlag())
   {
      bool shouldMount = stream->readFlag();
      if(shouldMount)
      {
         Ship *theShip = NULL;
         if(stream->readFlag())
            theShip = (Ship *) connection->resolveGhost(stream->readInt(GhostConnection::GhostIdBitSize));
         mountToShip(theShip);
      }
      else
         dismount();
   }
   if(stream->readFlag())
   {
      bool hasZone = stream->readFlag();
      if(hasZone)
         mZone = (GoalZone *) connection->resolveGhost(stream->readInt(GhostConnection::GhostIdBitSize));
      else
         mZone = NULL;
   }
   
   if(positionChanged)
   {
      if(interpolate)
      {
         mInterpolating = true;
         move(connection->getOneWayTime() * 0.001f, ActualState, false);
      }
      else
      {
         mInterpolating = false;
         mMoveState[RenderState] = mMoveState[ActualState];
      }
   }
}
Example #5
0
unsigned dodismount(int argc,char *argv[],int qualc,char *qualv[])
{
    struct DEV *dev;
    // note that device lookup interface has changed, fix later
    register int sts = device_lookup(strlen(argv[1]),argv[1],0,&dev);
    if (sts & 1)
    {
        if (dev->vcb != NULL)
        {
            sts = dismount(dev->vcb);
        }
        else
        {
            sts = SS$_DEVNOTMOUNT;
        }
    }
    if ((sts & 1) == 0) printf("%%DISMOUNT-E-STATUS Error: %d\n",sts);
    return sts;
}
Example #6
0
void Item::idle(GameObject::IdleCallPath path)
{
   if(!isInDatabase())
      return;

   if(mIsMounted)
   {
      if(mMount.isNull() || mMount->hasExploded)
      {
         if(!isGhost())
            dismount();
      }
      else
      {
         mMoveState[RenderState].pos = mMount->getRenderPos();
         mMoveState[ActualState].pos = mMount->getActualPos();
      }
   }
   else
   {
      float time = mCurrentMove.time * 0.001f;
      move(time, ActualState, false);
      if(path == GameObject::ServerIdleMainLoop)
      {
         // Only update if it's actually moving...
         if(mMoveState[ActualState].vel.len() > 0.001f)
            setMaskBits(PositionMask);

         mMoveState[RenderState] = mMoveState[ActualState];
         
      }
      else
         updateInterpolation();
   }
   updateExtent();
}
Example #7
0
/*
 *	Main thread.  Sits on the message queue and waits for something to do.
 *
 * The transport thread for the ibm will issue a delayed request for
 * requests supporting delayed requests.  Otherwise will issue the request
 * and wait for response.
 */
void *
transport_thread(
	void *vxport)
{
	robo_event_t 	*event;
	xport_state_t 	*transport = (xport_state_t *)vxport;
	struct sigaction sig_action;
	sigset_t signal_set, full_block_set;

	sigfillset(&full_block_set);
	sigemptyset(&signal_set);	/* signals to except. */
	sigaddset(&signal_set, SIGCHLD);

	mutex_lock(&transport->mutex);	/* wait for go */
	mutex_unlock(&transport->mutex);
	l_mess = transport->library->un->dis_mes[DIS_MES_NORM];
	lc_mess = transport->library->un->dis_mes[DIS_MES_CRIT];
	thr_sigsetmask(SIG_SETMASK, &full_block_set, NULL);
	memset(&sig_action, 0, sizeof (struct sigaction));
	(void) sigemptyset(&sig_action.sa_mask);
	sig_action.sa_flags = SA_RESTART;
	sig_action.sa_handler = SIG_DFL;
	(void) sigaction(SIGCHLD, &sig_action, NULL);
	for (;;) {
		mutex_lock(&transport->list_mutex);
		if (transport->active_count == 0)
			cond_wait(&transport->list_condit,
			    &transport->list_mutex);

		if (transport->active_count == 0) {	/* check to make sure */
			mutex_unlock(&transport->list_mutex);
			continue;
		}
		event = transport->first;
		transport->first = unlink_list(event);
		transport->active_count--;
		mutex_unlock(&transport->list_mutex);
		ETRACE((LOG_NOTICE, "EvTr %#x(%#x) - \n",
		    event, (event->type == EVENT_TYPE_MESS) ?
		    event->request.message.command :
		    event->request.internal.command));
		event->next = NULL;

		/* Everyone must take care of disposing of the event */
		switch (event->type) {
		case EVENT_TYPE_INTERNAL:
			switch (event->request.internal.command) {
			case ROBOT_INTRL_LOAD_MEDIA:
				if (transport->library->un->state <= DEV_IDLE) {
					load(transport->library, event);
				} else {
					disp_of_event(transport->library,
					    event, EINVAL);
				}
				break;

			case ROBOT_INTRL_FORCE_MEDIA:
				force(transport->library, event);
				break;

			case ROBOT_INTRL_DISMOUNT_MEDIA:
				dismount(transport->library, event);
				break;

			case ROBOT_INTRL_INIT:
				init_transport(transport);
				disp_of_event(transport->library, event, 0);
				break;

			case ROBOT_INTRL_VIEW_DATABASE:
				view(transport->library, event);
				break;

			case ROBOT_INTRL_QUERY_DRIVE:
				query_drv(transport->library, event);
				break;

			case ROBOT_INTRL_QUERY_LIBRARY:
				query_lib(transport->library, event);
				break;

			case ROBOT_INTRL_SET_CATEGORY:
				set_category(transport->library, event);
				break;

			case ROBOT_INTRL_SHUTDOWN:
				transport->thread = (thread_t)- 1;
				thr_exit((void *)NULL);
				break;

			default:
				disp_of_event(transport->library, event,
				    EINVAL);
				break;
			}
			break;

		case EVENT_TYPE_MESS:
			if (event->request.message.magic != MESSAGE_MAGIC) {
				if (DBG_LVL(SAM_DBG_DEBUG))
					sam_syslog(LOG_DEBUG,
					    "xpt_thr:bad magic: %s:%d.\n",
					    __FILE__, __LINE__);

				disp_of_event(transport->library, event,
				    EINVAL);
				break;
			}
			switch (event->request.message.command) {
			default:
				if (DBG_LVL(SAM_DBG_DEBUG))
					sam_syslog(LOG_DEBUG,
					    "xpt_thr:msq_bad: %s:%d.\n",
					    __FILE__, __LINE__);
				disp_of_event(transport->library, event,
				    EINVAL);
				break;
			}

		default:
			if (DBG_LVL(SAM_DBG_DEBUG))
				sam_syslog(LOG_DEBUG,
				    "xpt_thr:event_bad: %s:%d.\n",
				    __FILE__, __LINE__);
			disp_of_event(transport->library, event, EINVAL);
			break;
		}
	}
}
Example #8
0
bool can_die( char_data* victim )
{
  obj_data*    obj;
  room_data*  room;

  if( victim->species != NULL )
    return TRUE;

  if( ( room = Room( victim->array->where ) ) != NULL
    && is_set( &room->room_flags, RFLAG_ARENA ) ) {
    send( *victim->array, "In a flash of light %s disappears.\n\r", victim );
    victim->hit = 1;
    update_pos( victim );
    victim->From( );
    victim->To( get_temple( victim ) );
    dismount( victim );
    victim->position = POS_RESTING;
    return FALSE;
    }  

  if( victim->shdata->level >= LEVEL_BUILDER ) {
    fsend_seen( victim, "The body of %s slowly fades out of existence.",
      victim );
    fsend( *victim->array,
      "A swirling mist appears and %s slowly reforms.", victim );
    send( victim, "You find yourself alive again.\n\r" );
    victim->hit = victim->max_hit;
    update_max_move( victim );
    update_pos( victim );
    return FALSE;
    }   

  for( int i = 0 ; ; i++ ) {
    if( i >= victim->affected ) {
      for( int j = 0; ; j++ ) {
        if( j >= victim->wearing )
          return TRUE;
        obj = (obj_data*) victim->wearing[j];
        if( is_set( obj->pIndexData->affect_flags, AFF_LIFE_SAVING ) )
          break;
        }
      fsend( *victim->array,
        "%s that %s was wearing starts to glow a deep purple!",
        obj, victim );
      fsend_seen( victim, "The body of %s slowly disappears!", victim );
      obj->Extract( 1 ); 
      break;
      } 
    if( victim->affected[i]->type == AFF_LIFE_SAVING
      && number_range( 0, 100 ) > 60-2*victim->affected[i]->level ) {
      send_seen( victim,
        "%s disappears in an explosion of light and energy.\n\r", victim );
      break;
      }
    }  

  victim->From( );

  remove_affect( victim );
  remove_leech( victim );

  rejuvenate( victim );

  victim->To( get_temple( victim ) );
  dismount( victim );
  victim->position = POS_RESTING;

  send_seen( victim, "%s slowly materializes.\n\rFrom %s appearance\
 %s obviously came close to death.\n\r",
    victim, victim->His_Her( ), victim->He_She( ) );
  send( victim, "You wake up confused and dazed, but seem alive despite\
 your memories.\n\r" );

  return FALSE;
}
Example #9
0
 void dismount(iterator it) {dismount(it.pos());}
Example #10
0
void Item::onMountDestroyed()
{
   dismount();
}