void Game_Vehicle::LoadSystemSettings() { switch (type) { case None: break; case Boat: SetSpriteName(Data::system.boat_name); SetSpriteIndex(Data::system.boat_index); bgm = Data::system.boat_music; SetMapId(Data::treemap.start.boat_map_id); SetX(Data::treemap.start.boat_x); SetY(Data::treemap.start.boat_y); break; case Ship: SetSpriteName(Data::system.ship_name); SetSpriteIndex(Data::system.ship_index); bgm = Data::system.ship_music; SetMapId(Data::treemap.start.ship_map_id); SetX(Data::treemap.start.ship_x); SetY(Data::treemap.start.ship_y); break; case Airship: SetSpriteName(Data::system.airship_name); SetSpriteIndex(Data::system.airship_index); bgm = Data::system.airship_music; SetMapId(Data::treemap.start.airship_map_id); SetX(Data::treemap.start.airship_x); SetY(Data::treemap.start.airship_y); break; } }
void Transport::TeleportTransport(uint32 oldMapid, uint32 newMapid, float x, float y, float z) { //MapManager::Instance().GetMap(oldMapid)->Remove((GameObject *)this, false); SetMapId(newMapid); //MapManager::Instance().LoadGrid(newMapid,x,y,true); this->Relocate(x, y, z, GetOrientation()); //2.594172f); //MapManager::Instance().GetMap(newMapid)->Add<GameObject>((GameObject *)this); for(set<Player *>::iterator itr = m_passengers.begin(); itr != m_passengers.end();) { set<Player *>::iterator it2 = itr; ++itr; Player *plr = *it2; if(!plr) { m_passengers.erase(it2); continue; } plr->TeleportTo(newMapid, x, y, z, GetOrientation(), true,false); WorldPacket data(0x32B, 4); data << uint32(0); plr->GetSession()->SendPacket(&data); } return; }
bool Transporter::CreateAsTransporter(uint32 EntryID, const char* Name, int32 Time) { // Lookup GameobjectInfo if(!CreateFromProto(EntryID,0,0,0,0,0)) return false; // Override these flags to avoid mistakes in proto SetUInt32Value(GAMEOBJECT_FLAGS,40); SetUInt32Value(GAMEOBJECT_ANIMPROGRESS, 100); // Set period m_period = Time; // Generate waypoints if(!GenerateWaypoints()) return false; // Set position SetMapId(m_WayPoints[0].mapid); SetPosition(m_WayPoints[0].x, m_WayPoints[0].y, m_WayPoints[0].z, 0); // Add to world AddToWorld(); return true; }
bool Transporter::CreateAsTransporter(uint32 EntryID, const char* Name) { // Lookup GameobjectInfo if(!CreateFromProto(EntryID,0,0,0,0,0)) return false; SetUInt32Value(GAMEOBJECT_FLAGS,40); SetByte(GAMEOBJECT_BYTES_1,GAMEOBJECT_BYTES_ANIMPROGRESS, 100); //Maybe this would be the perfect way, so there would be no extra checks in Object.cpp: SetByte( GAMEOBJECT_BYTES_1, 0, GAMEOBJECT_TYPE_TRANSPORT ); //but these fields seems to change often and between server flavours (ArcEmu, Aspire, name another one) - by: VLack aka. VLsoft if( pInfo ) pInfo->Type = GAMEOBJECT_TYPE_TRANSPORT; else sLog.outString("Transporter id[%i] name[%s] - can't set GAMEOBJECT_TYPE - it will behave badly!",EntryID,Name); // Generate waypoints if(!GenerateWaypoints()) return false; // Set position SetMapId(m_WayPoints[0].mapid); SetPosition(m_WayPoints[0].x, m_WayPoints[0].y, m_WayPoints[0].z, 0); SetUInt32Value(GAMEOBJECT_LEVEL, m_period); // ITS OVER 9000!!!!! No, really, it is. // Add to world AddToWorld(); return true; }
bool Vehicle::Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehicleId, uint32 team) { SetMapId(map->GetId()); SetInstanceId(map->GetInstanceId()); Object::_Create(guidlow, Entry, HIGHGUID_VEHICLE); if(!InitEntry(Entry, team)) return false; m_defaultMovementType = IDLE_MOTION_TYPE; AIM_Initialize(); SetVehicleId(vehicleId); SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); CreatureInfo const *ci = GetCreatureInfo(); setFaction(team == ALLIANCE ? ci->faction_A : ci->faction_H); SetMaxHealth(ci->maxhealth); SelectLevel(ci); SetHealth(GetMaxHealth()); for( int i = 0; i < 4; ++i ) this->m_spells[i] = this->GetCreatureInfo()->spells[i]; // So our vehicles can have spells on bar GetMotionMaster()->MovePoint(0, GetPositionX(), GetPositionY(), GetPositionZ()+2 ); // So we can fly with Dragon Vehicles return true; }
//This must be an event to stay in the correct context! void Player::EventClusterMapChange(uint32 mapid, uint32 instanceid, LocationVector location) { WorldPacket data; uint32 status = sInstanceMgr.PreTeleport(mapid, this, instanceid); if(status != INSTANCE_OK) { data.Initialize(SMSG_TRANSFER_ABORTED); data << mapid << status; GetSession()->SendPacket(&data); return; } if(instanceid) m_instanceId = instanceid; if(IsInWorld()) RemoveFromWorld(); data.Initialize(SMSG_NEW_WORLD); data << (uint32)mapid << location << location.o; GetSession()->SendPacket( &data ); SetMapId(mapid); SetPlayerStatus(TRANSFER_PENDING); m_sentTeleportPosition = location; SetPosition(location); ResetHeartbeatCoords(); z_axisposition = 0.0f; }
bool Transporter::CreateAsTransporter(uint32 EntryID, const char* Name, int32 Time) { // Lookup GameobjectInfo if (!CreateFromProto(EntryID, 0, 0, 0, 0, 0)) return false; // Override these flags to avoid mistakes in proto SetFlags(40); SetAnimProgress(100); //Maybe this would be the perfect way, so there would be no extra checks in Object.cpp: //but these fields seems to change often and between server flavours (ArcEmu, Aspire, name another one) - by: VLack aka. VLsoft if (pInfo) pInfo->Type = GAMEOBJECT_TYPE_TRANSPORT; else LOG_ERROR("Transporter id[%i] name[%s] - can't set GAMEOBJECT_TYPE - it will behave badly!", EntryID, Name); m_overrides = GAMEOBJECT_INFVIS | GAMEOBJECT_ONMOVEWIDE; //Make it forever visible on the same map // Set period m_period = Time; // Generate waypoints if (!GenerateWaypoints()) return false; // Set position SetMapId(m_WayPoints[0].mapid); SetPosition(m_WayPoints[0].x, m_WayPoints[0].y, m_WayPoints[0].z, 0); SetLevel(m_period); // Add to world AddToWorld(); return true; }
void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) { //MapManager::Instance().GetMap(oldMapid)->Remove((GameObject *)this, false); SetMapId(newMapid); //MapManager::Instance().LoadGrid(newMapid,x,y,true); Relocate(x, y, z); //MapManager::Instance().GetMap(newMapid)->Add<GameObject>((GameObject *)this); for(PlayerSet::iterator itr = m_passengers.begin(); itr != m_passengers.end();) { PlayerSet::iterator it2 = itr; ++itr; Player *plr = *it2; if(!plr) { m_passengers.erase(it2); continue; } if (plr->isDead() && !plr->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) { plr->ResurrectPlayer(1.0); } plr->TeleportTo(newMapid, x, y, z, GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT); //WorldPacket data(SMSG_811, 4); //data << uint32(0); //plr->GetSession()->SendPacket(&data); } }
bool Vehicle::Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehicleId, uint32 team) { SetMapId(map->GetId()); SetInstanceId(map->GetInstanceId()); Object::_Create(guidlow, Entry, HIGHGUID_VEHICLE); if(!InitEntry(Entry, team)) return false; m_defaultMovementType = IDLE_MOTION_TYPE; AIM_Initialize(); SetVehicleId(vehicleId); SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); CreatureInfo const *ci = GetCreatureInfo(); setFaction(team == ALLIANCE ? ci->faction_A : ci->faction_H); SetMaxHealth(ci->maxhealth); SelectLevel(ci); SetHealth(GetMaxHealth()); return true; }
void Game_Vehicle::SetPosition(int _map_id, int _x, int _y) { SetMapId(_map_id); SetX(_x); SetY(_y); real_x = _x * SCREEN_TILE_WIDTH; real_y = _y * SCREEN_TILE_WIDTH; }
Game_Event::Game_Event(int map_id, const RPG::Event& event) : event(event), from_save(false) { SetMapId(map_id); MoveTo(event.x, event.y); Refresh(); }
bool GameObject::Create(uint32 guidlow, uint32 name_id, uint32 mapid, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, uint32 dynflags) { Relocate(x,y,z,ang); SetMapId(mapid); if(!IsPositionValid()) { sLog.outError("ERROR: Gameobject (GUID: %u Entry: %u ) not created. Suggested coordinates isn't valid (X: %d Y: ^%d)",guidlow,name_id,x,y); return false; } Object::_Create(guidlow, HIGHGUID_GAMEOBJECT); m_DBTableGuid = guidlow; GameObjectInfo const* goinfo = objmgr.GetGameObjectInfo(name_id); if (!goinfo) { sLog.outErrorDb("Gameobject not created: it have not exist entry in `gameobject_template`. guidlow: %u id: %u map: %u (X: %f Y: %f Z: %f) ang: %f rotation0: %f rotation1: %f rotation2: %f rotation3: %f",guidlow, name_id, mapid, x, y, z, ang, rotation0, rotation1, rotation2, rotation3); return false; } // SetUInt32Value(GAMEOBJECT_TIMESTAMP, (uint32)time(NULL)); SetFloatValue(GAMEOBJECT_POS_X, x); SetFloatValue(GAMEOBJECT_POS_Y, y); SetFloatValue(GAMEOBJECT_POS_Z, z); SetFloatValue(GAMEOBJECT_FACING, ang); //this is not facing angle SetFloatValue (GAMEOBJECT_ROTATION, rotation0); SetFloatValue (GAMEOBJECT_ROTATION+1, rotation1); SetFloatValue (GAMEOBJECT_ROTATION+2, rotation2); SetFloatValue (GAMEOBJECT_ROTATION+3, rotation3); SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); m_flags = goinfo->flags; SetUInt32Value (OBJECT_FIELD_ENTRY, goinfo->id); SetUInt32Value (GAMEOBJECT_DISPLAYID, goinfo->displayId); SetUInt32Value (GAMEOBJECT_STATE, 1); SetUInt32Value (GAMEOBJECT_TYPE_ID, goinfo->type); SetUInt32Value (GAMEOBJECT_ANIMPROGRESS, animprogress); SetUInt32Value (GAMEOBJECT_DYN_FLAGS, dynflags); return true; }
Game_Event::Game_Event(int map_id, const RPG::Event& event) : starting(false), trigger(-1), event(event), page(NULL), from_save(false) { ID = event.ID; through = true; SetMapId(map_id); MoveTo(event.x, event.y); Refresh(); }
bool Corpse::LoadFromDB(uint32 guid, Field *fields) { // 0 1 2 3 4 5 6 7 8 //result = CharacterDatabase.PQuery("SELECT position_x,position_y,position_z,orientation,map,data,time,corpse_type,instance FROM corpse WHERE guid = '%u'",guid); float positionX = fields[0].GetFloat(); float positionY = fields[1].GetFloat(); float positionZ = fields[2].GetFloat(); float ort = fields[3].GetFloat(); uint32 mapid = fields[4].GetUInt32(); Object::_Create(guid, 0, HIGHGUID_CORPSE); if(!LoadValues( fields[5].GetString() )) { sLog.outError("Corpse #%d have broken data in `data` field. Can't be loaded.",guid); return false; } m_time = time_t(fields[6].GetUInt64()); m_type = CorpseType(fields[7].GetUInt32()); if(m_type >= MAX_CORPSE_TYPE) { sLog.outError("Corpse (guidlow %d, owner %d) have wrong corpse type, not load.",GetGUIDLow(),GUID_LOPART(GetOwnerGUID())); return false; } uint32 instanceid = fields[8].GetUInt32(); // overwrite possible wrong/corrupted guid SetUInt64Value(OBJECT_FIELD_GUID, MAKE_NEW_GUID(guid, 0, HIGHGUID_CORPSE)); // place SetInstanceId(instanceid); SetMapId(mapid); Relocate(positionX, positionY, positionZ, ort); if(!IsPositionValid()) { sLog.outError("Corpse (guidlow %d, owner %d) not created. Suggested coordinates isn't valid (X: %f Y: %f)", GetGUIDLow(), GUID_LOPART(GetOwnerGUID()), GetPositionX(), GetPositionY()); return false; } m_grid = MaNGOS::ComputeGridPair(GetPositionX(), GetPositionY()); return true; }
bool Transport::Create(uint32 guidlow, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags) { Relocate(x,y,z,ang); SetMapId(mapid); // instance id and phaseMask isn't set to values different from std. if(!IsPositionValid()) { sLog.outError("Transport (GUID: %u) not created. Suggested coordinates isn't valid (X: %f Y: %f)", guidlow,x,y); return false; } Object::_Create(guidlow, 0, HIGHGUID_MO_TRANSPORT); GameObjectInfo const* goinfo = objmgr.GetGameObjectInfo(guidlow); if (!goinfo) { sLog.outErrorDb("Transport not created: entry in `gameobject_template` not found, guidlow: %u map: %u (X: %f Y: %f Z: %f) ang: %f",guidlow, mapid, x, y, z, ang); return false; } m_goInfo = goinfo; SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); //SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); SetUInt32Value(GAMEOBJECT_FLAGS, MAKE_PAIR32(0x28, 0x64)); SetUInt32Value(GAMEOBJECT_LEVEL, m_period); SetEntry(goinfo->id); SetUInt32Value(GAMEOBJECT_DISPLAYID, goinfo->displayId); SetGoState(GO_STATE_READY); SetGoType(GameobjectTypes(goinfo->type)); SetGoAnimProgress(animprogress); if(dynflags) SetUInt32Value(GAMEOBJECT_DYNAMIC, MAKE_PAIR32(0, dynflags)); SetName(goinfo->name); return true; }
bool Transport::Create(uint32 guidlow, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags) { Relocate(x,y,z,ang); SetMapId(mapid); if (!IsPositionValid()) { sLog.outLog(LOG_DEFAULT, "ERROR: Transport (GUID: %u) not created. Suggested coordinates isn't valid (X: %f Y: %f)", guidlow,x,y); return false; } Object::_Create(guidlow, 0, HIGHGUID_MO_TRANSPORT); GameObjectInfo const* goinfo = ObjectMgr::GetGameObjectInfo(guidlow); if (!goinfo) { sLog.outLog(LOG_DB_ERR, "Transport not created: entry in `gameobject_template` not found, guidlow: %u map: %u (X: %f Y: %f Z: %f) ang: %f",guidlow, mapid, x, y, z, ang); return false; } m_goInfo = goinfo; SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); SetUInt32Value(OBJECT_FIELD_ENTRY, goinfo->id); SetUInt32Value(GAMEOBJECT_DISPLAYID, goinfo->displayId); SetGoState(GO_STATE_READY); SetGoType(GameobjectTypes(goinfo->type)); SetGoAnimProgress(animprogress); if (dynflags) SetUInt32Value(GAMEOBJECT_DYN_FLAGS, dynflags); SetName(goinfo->name); return true; }
bool Vehicle::Create(uint32 guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 vehicleId, uint32 team, const CreatureData *data) { SetMapId(map->GetId()); SetInstanceId(map->GetInstanceId()); SetPhaseMask(phaseMask,false); CreatureInfo const *cinfo = objmgr.GetCreatureTemplate(Entry); if(!cinfo) { sLog.outErrorDb("Creature entry %u does not exist.", Entry); return false; } Object::_Create(guidlow, Entry, HIGHGUID_VEHICLE); if(!UpdateEntry(Entry, team, data)) return false; if(!vehicleId) { CreatureDataAddon const *cainfo = GetCreatureAddon(); if(!cainfo) return false; vehicleId = cainfo->vehicle_id; } if(!SetVehicleId(vehicleId)) return false; LoadCreaturesAddon(); m_regenHealth = false; m_creation_time = getMSTime(); SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); //RemoveMonsterMoveFlag(MONSTER_MOVE_WALK); //Notify the map's instance data. //Only works if you create the object in it, not if it is moves to that map. //Normally non-players do not teleport to other maps. if(map->IsDungeon() && ((InstanceMap*)map)->GetInstanceData()) { ((InstanceMap*)map)->GetInstanceData()->OnCreatureCreate(this); } return true; }
bool Creature::Create (uint32 guidlow, uint32 mapid, float x, float y, float z, float ang, uint32 Entry) { respawn_cord[0] = x; respawn_cord[1] = y; respawn_cord[2] = z; SetMapId(mapid); Relocate(x,y,z); if(!IsPositionValid()) { sLog.outError("ERROR: Creature (guidlow %d, entry %d) not created. Suggested coordinates isn't valid (X: %d Y: ^%d)",guidlow,Entry,x,y); return false; } SetOrientation(ang); //oX = x; oY = y; dX = x; dY = y; m_moveTime = 0; m_startMove = 0; return CreateFromProto(guidlow, Entry); }
void Game_Vehicle::Refresh() { if (IsInUse()) { SetMapId(Game_Map::GetMapId()); } else if (IsInCurrentMap()) { SetProcessed(true); // RPG_RT compatibility MoveTo(GetX(), GetY()); } switch (type) { case None: break; case Boat: case Ship: SetMoveSpeed(RPG::EventPage::MoveSpeed_normal); break; case Airship: SetMoveSpeed(RPG::EventPage::MoveSpeed_double); break; } }
bool Transport::Create(uint32 guidlow, uint32 displayId, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags) { Relocate(x,y,z,ang); SetMapId(mapid); if(!IsPositionValid()) { sLog.outError("ERROR: Transport (GUID: %u) not created. Suggested coordinates isn't valid (X: %d Y: ^%d)",guidlow,x,y); return false; } Object::_Create(guidlow, HIGHGUID_TRANSPORT); GameObjectInfo const* goinfo = objmgr.GetGameObjectInfo(guidlow); if (!goinfo) { sLog.outErrorDb("Transport not created: entry in `gameobject_template` not found, guidlow: %u map: %u (X: %f Y: %f Z: %f) ang: %f",guidlow, mapid, x, y, z, ang); return false; } SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); m_flags = goinfo->flags; SetUInt32Value (OBJECT_FIELD_ENTRY, goinfo->id); SetUInt32Value (GAMEOBJECT_DISPLAYID, goinfo->displayId); SetUInt32Value (GAMEOBJECT_STATE, 1); SetUInt32Value (GAMEOBJECT_TYPE_ID, goinfo->type); SetUInt32Value (GAMEOBJECT_ANIMPROGRESS, animprogress); SetUInt32Value (GAMEOBJECT_DYN_FLAGS, dynflags); return true; }
void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z) { Map const* oldMap = GetMap(); SetMapId(newMapid); Relocate(x, y, z); for (PlayerSet::iterator itr = m_passengers.begin(); itr != m_passengers.end();) { PlayerSet::iterator it2 = itr; ++itr; Player *plr = *it2; if (!plr) { m_passengers.erase(it2); continue; } if (plr->isDead() && !plr->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) { plr->ResurrectPlayer(1.0); } plr->TeleportTo(newMapid, x, y, z, GetOrientation(), TELE_TO_NOT_LEAVE_TRANSPORT); //WorldPacket data(SMSG_811, 4); //data << uint32(0); //plr->BroadcastPacketToSelf(&data); } Map* newMap = sMapMgr.CreateMap(newMapid, this); SetMap(newMap); if (oldMap != newMap) { UpdateForMap(oldMap); UpdateForMap(newMap); } }
bool Transporter::Create(uint32 entry, int32 Time) { auto gameobject_info = sMySQLStore.getGameObjectProperties(entry); if (gameobject_info == nullptr) { LOG_ERROR("Failed to create Transporter with go entry %u. Invalid gameobject!", entry); return false; } // Create transport float x, y, z, o; uint32 mapid; x = m_WayPoints[0].x; y = m_WayPoints[0].y; z = m_WayPoints[0].z; mapid = m_WayPoints[0].mapid; o = m_WayPoints[0].o; if (!CreateFromProto(entry, mapid, x, y, z, o)) return false; // Override these flags to avoid mistakes in proto setFlags(GO_FLAG_TRANSPORT | GO_FLAG_NEVER_DESPAWN); setAnimationProgress(255); setOType(GAMEOBJECT_TYPE_MO_TRANSPORT); m_overrides = GAMEOBJECT_INFVIS | GAMEOBJECT_ONMOVEWIDE; m_period = Time; // Set position SetMapId(mapid); SetPosition(x, y, z, o); setLevel(m_period); return true; }
void Transporter::TeleportTransport(uint32 newMapid, uint32 oldmap, float x, float y, float z) { //sEventMgr.RemoveEvents(this, EVENT_TRANSPORTER_NEXT_WAYPOINT); RemoveFromWorld(false); SetMapId(newMapid); SetPosition(x, y, z, m_position.o, false); AddToWorld(); WorldPacket packet(SMSG_TRANSFER_PENDING, 12); packet << newMapid; packet << getEntry(); packet << oldmap; for (auto passengerGuid : m_passengers) { auto passenger = objmgr.GetPlayer(passengerGuid); if (passenger == nullptr) continue; passenger->GetSession()->SendPacket(&packet); bool teleport_successful = passenger->Teleport(LocationVector(x, y, z, passenger->GetOrientation()), this->GetMapMgr()); if (!teleport_successful) { passenger->RepopAtGraveyard(passenger->GetPositionX(), passenger->GetPositionY(), passenger->GetPositionZ(), passenger->GetMapId()); } else { if (!passenger->HasUnitMovementFlag(MOVEFLAG_TRANSPORT)) { passenger->AddUnitMovementFlag(MOVEFLAG_TRANSPORT); } } } this->RespawnCreaturePassengers(); }
void Game_Vehicle::Refresh() { if (!driving && Main_Data::game_player->GetVehicle() == this) driving = true; if (driving) SetMapId(Game_Map::GetMapId()); else if (IsInCurrentMap()) MoveTo(GetX(), GetY()); switch (type) { case None: break; case Boat: case Ship: SetLayer(RPG::EventPage::Layers_same); SetMoveSpeed(RPG::EventPage::MoveSpeed_normal); break; case Airship: SetLayer(driving ? RPG::EventPage::Layers_above : RPG::EventPage::Layers_below); SetMoveSpeed(RPG::EventPage::MoveSpeed_double); break; } walk_animation = (type != Airship) || driving; }
bool Transporter::CreateAsTransporter(uint32 EntryID, const char* Name) { // Try to spawn the Gameobject, no need for locations. if(!CreateFromProto(EntryID,0,0.0f,0.0f,0.0f,0.0f)) return false; SetUInt32Value(GAMEOBJECT_FLAGS,40); SetByte(GAMEOBJECT_BYTES_1,GAMEOBJECT_BYTES_ANIMPROGRESS, 100); // Generate waypoints if(!GenerateWaypoints()) return false; // Set position SetMapId(m_WayPoints[0].mapid); SetPosition(m_WayPoints[0].x, m_WayPoints[0].y, m_WayPoints[0].z, 0); SetUInt32Value(GAMEOBJECT_LEVEL, m_period); // ITS OVER 9000!!!!! No, really, it is. // Add to world AddToWorld(); return true; }
bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, uint32 go_state) { Relocate(x,y,z,ang); SetMapId(map->GetId()); SetInstanceId(map->GetInstanceId()); if(!IsPositionValid()) { sLog.outError("ERROR: Gameobject (GUID: %u Entry: %u ) not created. Suggested coordinates isn't valid (X: %f Y: %f)",guidlow,name_id,x,y); return false; } GameObjectInfo const* goinfo = objmgr.GetGameObjectInfo(name_id); if (!goinfo) { sLog.outErrorDb("Gameobject (GUID: %u Entry: %u) not created: it have not exist entry in `gameobject_template`. Map: %u (X: %f Y: %f Z: %f) ang: %f rotation0: %f rotation1: %f rotation2: %f rotation3: %f",guidlow, name_id, map->GetId(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3); return false; } Object::_Create(guidlow, goinfo->id, HIGHGUID_GAMEOBJECT); m_DBTableGuid = guidlow; if (goinfo->type >= MAX_GAMEOBJECT_TYPE) { sLog.outErrorDb("Gameobject (GUID: %u Entry: %u) not created: it have not exist GO type '%u' in `gameobject_template`. It's will crash client if created.",guidlow,name_id,goinfo->type); return false; } // SetUInt32Value(GAMEOBJECT_TIMESTAMP, (uint32)time(NULL)); SetFloatValue(GAMEOBJECT_POS_X, x); SetFloatValue(GAMEOBJECT_POS_Y, y); SetFloatValue(GAMEOBJECT_POS_Z, z); SetFloatValue(GAMEOBJECT_FACING, ang); //this is not facing angle SetFloatValue (GAMEOBJECT_ROTATION, rotation0); SetFloatValue (GAMEOBJECT_ROTATION+1, rotation1); SetFloatValue (GAMEOBJECT_ROTATION+2, rotation2); SetFloatValue (GAMEOBJECT_ROTATION+3, rotation3); SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); m_flags = goinfo->flags; SetUInt32Value (OBJECT_FIELD_ENTRY, goinfo->id); SetUInt32Value (GAMEOBJECT_DISPLAYID, goinfo->displayId); SetUInt32Value (GAMEOBJECT_STATE, go_state); SetUInt32Value (GAMEOBJECT_TYPE_ID, goinfo->type); SetUInt32Value (GAMEOBJECT_ANIMPROGRESS, animprogress); // Spell charges for GAMEOBJECT_TYPE_SPELLCASTER (22) if (goinfo->type == GAMEOBJECT_TYPE_SPELLCASTER) m_charges = goinfo->spellcaster.charges; //Notify the map's instance data. //Only works if you create the object in it, not if it is moves to that map. //Normally non-players do not teleport to other maps. if(map && map->GetInstanceData()) { map->GetInstanceData()->OnObjectCreate(this); } return true; }
void Transporter::TransportPassengers(uint32 mapid, uint32 oldmap, float x, float y, float z) { sEventMgr.RemoveEvents(this, EVENT_TRANSPORTER_NEXT_WAYPOINT); if(mPassengers.size() > 0) { PassengerIterator itr = mPassengers.begin(); PassengerIterator it2; WorldPacket Pending(SMSG_TRANSFER_PENDING, 12); Pending << mapid << GetEntry() << oldmap; WorldPacket NewWorld; LocationVector v; for(; itr != mPassengers.end();) { it2 = itr++; Player* plr = objmgr.GetPlayer(it2->first); if(!plr) { // remove from map mPassengers.erase(it2); continue; } if(!plr->GetSession() || !plr->IsInWorld()) continue; plr->GetMovementInfo()->GetTransportPosition(v); v.x += x; v.y += y; v.z += z; v.o += plr->GetOrientation(); if(mapid == 530 && !plr->GetSession()->HasFlag(ACCOUNT_FLAG_XPACK_01)) { // player is not flagged to access bc content, repop at graveyard plr->RepopAtGraveyard(plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), plr->GetMapId()); continue; } if(mapid == 571 && !plr->GetSession()->HasFlag(ACCOUNT_FLAG_XPACK_02)) { plr->RepopAtGraveyard(plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), plr->GetMapId()); continue; } // Lucky bitch. Do it like on official. if(plr->isDead()) plr->RemoteRevive(); if( plr->GetVehicle() ) plr->GetVehicle()->RemovePassenger( plr ); plr->GetMovementInfo()->SetTransportLock(true); plr->GetSession()->SendPacket(&Pending); plr->_Relocate(mapid, v, false, true, 0); } } // Set our position RemoveFromWorld(false); SetMapId(mapid); SetPosition(x,y,z,m_position.o); AddToWorld(); }
void Transporter::TransportPassengers(uint32 mapid, uint32 oldmap, float x, float y, float z) { sEventMgr.RemoveEvents(this, EVENT_TRANSPORTER_NEXT_WAYPOINT); if (mPassengers.size() > 0) { PassengerIterator itr = mPassengers.begin(); PassengerIterator it2; WorldPacket Pending(SMSG_TRANSFER_PENDING, 12); Pending << mapid << GetEntry() << oldmap; WorldPacket NewWorld; LocationVector v; for (; itr != mPassengers.end();) { it2 = itr; ++itr; Player* plr = objmgr.GetPlayer(it2->first); if (!plr) { // remove all non players from map mPassengers.erase(it2); continue; } if (!plr->GetSession() || !plr->IsInWorld()) continue; v.x = x + plr->transporter_info.x; v.y = y + plr->transporter_info.y; v.z = z + plr->transporter_info.z; v.o = plr->GetOrientation(); if (mapid == 530 && !plr->GetSession()->HasFlag(ACCOUNT_FLAG_XPACK_01)) { // player does not have BC content, repop at graveyard plr->RepopAtGraveyard(plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), plr->GetMapId()); continue; } if (mapid == 571 && !plr->GetSession()->HasFlag(ACCOUNT_FLAG_XPACK_02)) { plr->RepopAtGraveyard(plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), plr->GetMapId()); continue; } plr->GetSession()->SendPacket(&Pending); plr->_Relocate(mapid, v, false, true, 0); // Lucky bitch. Do it like on official. if (plr->IsDead()) { plr->ResurrectPlayer(); plr->SetHealth(plr->GetMaxHealth()); plr->SetPower(POWER_TYPE_MANA, plr->GetMaxPower(POWER_TYPE_MANA)); } } } // Set our position RemoveFromWorld(false); SetMapId(mapid); SetPosition(x, y, z, m_position.o, false); AddToWorld(); }
void Game_Vehicle::SetPosition(int _map_id, int _x, int _y) { SetMapId(_map_id); MoveTo(_x, _y); }
bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, uint32 go_state) { Relocate(x,y,z,ang); SetMapId(map->GetId()); SetInstanceId(map->GetInstanceId()); if(!IsPositionValid()) { sLog.outError("ERROR: Gameobject (GUID: %u Entry: %u ) not created. Suggested coordinates isn't valid (X: %f Y: %f)",guidlow,name_id,x,y); return false; } GameObjectInfo const* goinfo = objmgr.GetGameObjectInfo(name_id); if (!goinfo) { sLog.outErrorDb("Gameobject (GUID: %u Entry: %u) not created: it have not exist entry in `gameobject_template`. Map: %u (X: %f Y: %f Z: %f) ang: %f rotation0: %f rotation1: %f rotation2: %f rotation3: %f",guidlow, name_id, map->GetId(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3); return false; } Object::_Create(guidlow, goinfo->id, HIGHGUID_GAMEOBJECT); m_goInfo = goinfo; if (goinfo->type >= MAX_GAMEOBJECT_TYPE) { sLog.outErrorDb("Gameobject (GUID: %u Entry: %u) not created: it have not exist GO type '%u' in `gameobject_template`. It's will crash client if created.",guidlow,name_id,goinfo->type); return false; } SetFloatValue(GAMEOBJECT_POS_X, x); SetFloatValue(GAMEOBJECT_POS_Y, y); SetFloatValue(GAMEOBJECT_POS_Z, z); SetFloatValue(GAMEOBJECT_FACING, ang); //this is not facing angle int64 rotation = 0; float f_rot1 = sin(ang / 2.0f); int64 i_rot1 = f_rot1 / atan(pow(2.0f, -20.0f)); rotation |= (i_rot1 << 43 >> 43) & 0x00000000001FFFFF; //float f_rot2 = sin(0.0f / 2.0f); //int64 i_rot2 = f_rot2 / atan(pow(2.0f, -20.0f)); //rotation |= (((i_rot2 << 22) >> 32) >> 11) & 0x000003FFFFE00000; //float f_rot3 = sin(0.0f / 2.0f); //int64 i_rot3 = f_rot3 / atan(pow(2.0f, -21.0f)); //rotation |= (i_rot3 >> 42) & 0x7FFFFC0000000000; SetUInt64Value(GAMEOBJECT_ROTATION, rotation); SetFloatValue(GAMEOBJECT_PARENTROTATION+0, rotation0); SetFloatValue(GAMEOBJECT_PARENTROTATION+1, rotation1); SetFloatValue(GAMEOBJECT_PARENTROTATION+2, rotation2); SetFloatValue(GAMEOBJECT_PARENTROTATION+3, rotation3); SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); SetEntry(goinfo->id); SetUInt32Value(GAMEOBJECT_DISPLAYID, goinfo->displayId); SetGoState(go_state); SetGoType(GameobjectTypes(goinfo->type)); SetGoAnimProgress(animprogress); // Spell charges for GAMEOBJECT_TYPE_SPELLCASTER (22) if (goinfo->type == GAMEOBJECT_TYPE_SPELLCASTER) m_charges = goinfo->spellcaster.charges; //Notify the map's instance data. //Only works if you create the object in it, not if it is moves to that map. //Normally non-players do not teleport to other maps. if(map->IsDungeon() && ((InstanceMap*)map)->GetInstanceData()) { ((InstanceMap*)map)->GetInstanceData()->OnObjectCreate(this); } return true; }