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 ) ); }
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; }
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); }
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]; } } }
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; }
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(); }
/* * 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; } } }
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; }
void dismount(iterator it) {dismount(it.pos());}
void Item::onMountDestroyed() { dismount(); }