void SpawnShell::corpseLoc(const corpseLocStruct* corpseLoc) { Item* item = m_spawns.find(corpseLoc->spawnId); if (item != NULL) { Spawn* spawn = (Spawn*)item; // set the corpses location, and make sure it's not moving... spawn->setPos(int16_t(corpseLoc->x), int16_t(corpseLoc->y), int16_t(corpseLoc->z), showeq_params->walkpathrecord, showeq_params->walkpathlength); spawn->killSpawn(); spawn->updateLast(); spawn->updateLastChanged(); // signal that the spawn has changed emit killSpawn(item, NULL, 0); } }
void SpawnShell::updateSpawn(uint16_t id, int16_t x, int16_t y, int16_t z, int16_t xVel, int16_t yVel, int16_t zVel, int8_t heading, int8_t deltaHeading, uint8_t animation) { #ifdef SPAWNSHELL_DIAG printf("SpawnShell::updateSpawn(id=%d, x=%d, y=%d, z=%d, xVel=%d, yVel=%d, zVel=%d)\n", id, x, y, z, xVel, yVel, zVel); #endif Item* item = m_spawns.find(id); if (item != NULL) { Spawn* spawn = (Spawn*)item; spawn->setPos(x, y, z, showeq_params->walkpathrecord, showeq_params->walkpathlength); spawn->setAnimation(animation); if ((animation != 0) && (animation != 66)) { spawn->setDeltas(xVel, yVel, zVel); spawn->setHeading(heading, deltaHeading); } else { spawn->setDeltas(0, 0, 0); spawn->setHeading(heading, 0); } spawn->updateLast(); item->updateLastChanged(); emit changeItem(item, tSpawnChangedPosition); } else if (showeq_params->createUnknownSpawns) { // not the player, so check if it's a recently deleted spawn for (int i =0; i < m_cntDeadSpawnIDs; i++) { // check dead spawn list for spawnID, if it was deleted, shouldn't // see new position updates, so therefore this is probably // for a new spawn (spawn ID being reused) if ((m_deadSpawnID[i] != 0) && (m_deadSpawnID[i] == id)) { // found a match, ignore it m_deadSpawnID[i] = 0; printf("\a(%d) had been removed from the zone, but saw a position update on it, so assuming bogus update.\n", id); return; } } item = new Spawn(id, x, y, z, xVel, yVel, zVel, heading, deltaHeading, animation); updateFilterFlags(item); updateRuntimeFilterFlags(item); m_spawns.insert(id, item); emit addItem(item); // send notification of new spawn count emit numSpawns(m_spawns.count()); } }