bool Corpse::Summon(Client* client, bool spell, bool CheckDistance) { uint32 dist2 = 10000; // pow(100, 2); if (!spell) { if (this->GetCharID() == client->CharacterID()) { if (IsLocked() && client->Admin() < 100) { client->Message(13, "That corpse is locked by a GM."); return false; } if (!CheckDistance || (DistanceSquaredNoZ(m_Position, client->GetPosition()) <= dist2)) { GMMove(client->GetX(), client->GetY(), client->GetZ()); is_corpse_changed = true; } else { client->Message(0, "Corpse is too far away."); return false; } } else { bool consented = false; std::list<std::string>::iterator itr; for(itr = client->consent_list.begin(); itr != client->consent_list.end(); ++itr) { if(strcmp(this->GetOwnerName(), itr->c_str()) == 0) { if (!CheckDistance || (DistanceSquaredNoZ(m_Position, client->GetPosition()) <= dist2)) { GMMove(client->GetX(), client->GetY(), client->GetZ()); is_corpse_changed = true; } else { client->Message(0, "Corpse is too far away."); return false; } consented = true; } } if(!consented) { client->Message(0, "You do not have permission to move this corpse."); return false; } } } else { GMMove(client->GetX(), client->GetY(), client->GetZ()); is_corpse_changed = true; } Save(); return true; }
void Client::ProcessMovePC(uint32 zoneID, uint32 instance_id, float x, float y, float z, float heading, uint8 ignorerestrictions, ZoneMode zm) { // From what I have read, dragged corpses should stay with the player for Intra-zone summons etc, but we can implement that later. ClearDraggedCorpses(); if(zoneID == 0) zoneID = zone->GetZoneID(); if(zoneID == zone->GetZoneID() && instance_id == zone->GetInstanceID()) { // TODO: Determine if this condition is necessary. if(IsAIControlled()) { GMMove(x, y, z); return; } if(GetPetID() != 0) { //if they have a pet and they are staying in zone, move with them Mob *p = GetPet(); if(p != nullptr){ p->SetPetOrder(SPO_Follow); p->GMMove(x+15, y, z); //so it dosent have to run across the map. } } } switch(zm) { case GateToBindPoint: ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); break; case EvacToSafeCoords: case ZoneToSafeCoords: ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); break; case GMSummon: Message(15, "You have been summoned by a GM!"); ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); break; case ZoneToBindPoint: ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); break; case ZoneSolicited: ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); break; case SummonPC: Message(15, "You have been summoned!"); ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); break; case Rewind: Message(15, "Rewinding to previous location."); ZonePC(zoneID, instance_id, x, y, z, heading, ignorerestrictions, zm); break; default: LogFile->write(EQEMuLog::Error, "Client::ProcessMovePC received a reguest to perform an unsupported client zone operation."); break; } }