From b539ac6afafbddcb75855511d66d97bbc2e95c30 Mon Sep 17 00:00:00 2001 From: Shocker Date: Thu, 26 May 2016 13:09:56 +0300 Subject: Core/GameObjects: Add isUse parameter to GossipHello for distinction between CMSG_GAMEOBJECT_USE and CMSG_GAMEOBJECT_REPORT_USE --- .../Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp | 4 +++- .../Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp | 5 ++++- src/server/scripts/World/go_scripts.cpp | 9 ++++----- 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 8c68fe4cc18..9d7c41ffd7b 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -1353,8 +1353,10 @@ class go_twilight_portal : public GameObjectScript } } - bool GossipHello(Player* player) override + bool GossipHello(Player* player, bool isUse) override { + if (!isUse) + return true; if (_spellId != 0) player->CastSpell(player, _spellId, true); return true; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 0d8f9a6bce1..33afada15fd 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -977,8 +977,11 @@ class go_celestial_planetarium_access : public GameObjectScript { } - bool GossipHello(Player* player) override + bool GossipHello(Player* player, bool isUse) override { + if (!isUse) + return true; + if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE)) return true; diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index 0e9a972a3fb..c9481f2e6b8 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -834,12 +834,11 @@ class go_soulwell : public GameObjectScript { } - /// Due to the fact that this GameObject triggers CMSG_GAMEOBJECT_USE - /// _and_ CMSG_GAMEOBJECT_REPORT_USE, this GossipHello hook is called - /// twice. The script's handling is fine as it won't remove two charges - /// on the well. We have to find how to segregate REPORT_USE and USE. - bool GossipHello(Player* player) override + bool GossipHello(Player* player, bool isUse) override { + if (!isUse) + return true; + Unit* owner = go->GetOwner(); if (!owner || owner->GetTypeId() != TYPEID_PLAYER || !player->IsInSameRaidWith(owner->ToPlayer())) return true; -- cgit v1.2.3 From 9d7a17d9f5f29c928e14d175479da68b2118add9 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sun, 5 Jun 2016 16:43:41 +0200 Subject: Core/Commands: Added ".npc set phase" command error message for invalid phaseid Closes #14927 --- sql/updates/world/6.x/2016_06_05_04_world.sql | 3 +++ src/server/game/Miscellaneous/Language.h | 2 +- src/server/scripts/Commands/cs_npc.cpp | 12 +++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 sql/updates/world/6.x/2016_06_05_04_world.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/6.x/2016_06_05_04_world.sql b/sql/updates/world/6.x/2016_06_05_04_world.sql new file mode 100644 index 00000000000..36b52243afd --- /dev/null +++ b/sql/updates/world/6.x/2016_06_05_04_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `trinity_string` WHERE `entry`=5007; +INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES +(5007,"Uses invalid phaseID."); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index a4051c7e865..6f1f4cb2409 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1069,7 +1069,7 @@ enum TrinityStrings LANG_COMMAND_NO_FROZEN_PLAYERS = 5004, LANG_COMMAND_LIST_FREEZE = 5005, LANG_COMMAND_PERMA_FROZEN_PLAYER = 5006, - // = 5007, unused + LANG_PHASE_NOTFOUND = 5007, LANG_INSTANCE_CLOSED = 5008, LANG_COMMAND_PLAYED_TO_ALL = 5009, LANG_NPCINFO_LINKGUID = 5010, diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index d9d54353246..c71e0f01940 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -1106,7 +1106,13 @@ public: if (!*args) return false; - uint32 phase = (uint32) atoi((char*)args); + uint32 phaseID = uint32(atoi((char*)args)); + if (!sPhaseStore.LookupEntry(phaseID)) + { + handler->SendSysMessage(LANG_PHASE_NOTFOUND); + handler->SetSentErrorMessage(true); + return false; + } Creature* creature = handler->getSelectedCreature(); if (!creature || creature->IsPet()) @@ -1117,8 +1123,8 @@ public: } creature->ClearPhases(); - creature->SetInPhase(phase, true, true); - creature->SetDBPhase(phase); + creature->SetInPhase(phaseID, true, true); + creature->SetDBPhase(phaseID); creature->SaveToDB(); -- cgit v1.2.3 From 1c139214b5ffbae993d4162c555c81cf45b52228 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 6 Jun 2016 08:38:39 +0200 Subject: Core/Spells: Silence coverity false positive - CID 1356246 --- src/server/scripts/Spells/spell_shaman.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index d41dcb42411..7ad37ba5bc2 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -442,7 +442,7 @@ class spell_sha_fulmination : public SpellScriptLoader uint32 stacks = aura->GetCharges(); if (stacks > 1) { - SpellInfo const* triggerSpell = sSpellMgr->GetSpellInfo(aura->GetSpellEffectInfo(EFFECT_0)->TriggerSpell); + SpellInfo const* triggerSpell = sSpellMgr->AssertSpellInfo(aura->GetSpellEffectInfo(EFFECT_0)->TriggerSpell); SpellEffectInfo const* triggerEffect = triggerSpell->GetEffect(EFFECT_0); uint32 damage; -- cgit v1.2.3 From 8396dabdad65fbe86c525584e38ccfacde85f9f1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 6 Jun 2016 09:16:59 +0200 Subject: Core/Misc: Fixed coverity issues Uninitialized fields: CID 1354593, 1354595, 1354738 Unchecked return value: CID 1354558 Out of bounds access: CID 1352989, 1352993 Null pointer dereference: CID 1296286 --- src/server/bnetserver/Server/Session.cpp | 2 +- src/server/game/Entities/Unit/StatSystem.cpp | 2 +- src/server/game/Handlers/CharacterHandler.cpp | 4 +-- src/server/game/Handlers/PetHandler.cpp | 17 ++++++------ src/server/game/Server/Packets/BattlenetPackets.h | 4 +-- src/server/game/Server/Packets/PetPackets.cpp | 14 +++++----- src/server/game/Server/Packets/PetPackets.h | 3 +-- src/server/game/Server/WorldSession.cpp | 1 + .../scripts/Northrend/Naxxramas/boss_gluth.cpp | 30 ++++++++++++---------- 9 files changed, 39 insertions(+), 38 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index 66d55480796..844f80cba06 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -647,7 +647,7 @@ bool Battlenet::Session::ReadHeaderHandler() bool Battlenet::Session::ReadDataHandler() { Header header; - header.ParseFromArray(_headerBuffer.GetReadPointer(), _headerBuffer.GetActiveSize()); + ASSERT(header.ParseFromArray(_headerBuffer.GetReadPointer(), _headerBuffer.GetActiveSize())); if (header.service_id() != 0xFE) { diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index f5660efe00e..4fa79a91eee 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -302,7 +302,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) float val2 = 0.0f; float level = float(getLevel()); - ChrClassesEntry const* entry = sChrClassesStore.LookupEntry(getClass()); + ChrClassesEntry const* entry = sChrClassesStore.AssertEntry(getClass()); UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER; uint16 index = UNIT_FIELD_ATTACK_POWER; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index e4b03ed79c7..c1455d355d7 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -2210,8 +2210,8 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(PreparedQueryResult res uint32 title_alliance = it->first; uint32 title_horde = it->second; - CharTitlesEntry const* atitleInfo = sCharTitlesStore.LookupEntry(title_alliance); - CharTitlesEntry const* htitleInfo = sCharTitlesStore.LookupEntry(title_horde); + CharTitlesEntry const* atitleInfo = sCharTitlesStore.AssertEntry(title_alliance); + CharTitlesEntry const* htitleInfo = sCharTitlesStore.AssertEntry(title_horde); // new team if (newTeamId == TEAM_ALLIANCE) { diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 849a5097c61..84b89968dfb 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -515,10 +515,9 @@ void WorldSession::HandlePetSetAction(WorldPackets::Pet::PetSetAction& packet) void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet) { ObjectGuid petguid = packet.RenameData.PetGUID; - bool isdeclined = packet.RenameData.HasDeclinedNames; std::string name = packet.RenameData.NewName; - DeclinedName declinedname = packet.RenameData.DeclinedNames; + DeclinedName* declinedname = packet.RenameData.DeclinedNames.get_ptr(); Pet* pet = ObjectAccessor::GetPet(*_player, petguid); // check it! @@ -546,21 +545,21 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet) pet->RemoveByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED); - if (isdeclined) + if (declinedname) { std::wstring wname; if (!Utf8toWStr(name, wname)) return; - if (!ObjectMgr::CheckDeclinedNames(wname, declinedname)) + if (!ObjectMgr::CheckDeclinedNames(wname, *declinedname)) { - SendPetNameInvalid(PET_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME, name, &declinedname); + SendPetNameInvalid(PET_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME, name, declinedname); return; } } SQLTransaction trans = CharacterDatabase.BeginTransaction(); - if (isdeclined) + if (declinedname) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_PET_DECLINEDNAME); stmt->setUInt32(0, pet->GetCharmInfo()->GetPetNumber()); @@ -571,7 +570,7 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet) stmt->setUInt64(1, _player->GetGUID().GetCounter()); for (uint8 i = 0; i < 5; i++) - stmt->setString(i + 2, declinedname.name[i]); + stmt->setString(i + 2, declinedname->name[i]); trans->Append(stmt); } @@ -717,8 +716,8 @@ void WorldSession::SendPetNameInvalid(uint32 error, const std::string& name, Dec WorldPackets::Pet::PetNameInvalid petNameInvalid; petNameInvalid.Result = error; petNameInvalid.RenameData.NewName = name; - for (int i = 0; i < MAX_DECLINED_NAME_CASES; i++) - petNameInvalid.RenameData.DeclinedNames.name[i] = declinedName[i].name[i]; + if (declinedName) + petNameInvalid.RenameData.DeclinedNames = *declinedName; SendPacket(petNameInvalid.Write()); } diff --git a/src/server/game/Server/Packets/BattlenetPackets.h b/src/server/game/Server/Packets/BattlenetPackets.h index f059b39b75f..76aa499799c 100644 --- a/src/server/game/Server/Packets/BattlenetPackets.h +++ b/src/server/game/Server/Packets/BattlenetPackets.h @@ -76,8 +76,8 @@ namespace WorldPackets WorldPacket const* Write() override; - uint32 Token; - bool Allow; + uint32 Token = 0; + bool Allow = false; ByteBuffer Ticket; }; diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp index 36a71ba9c53..8bbf0b051e4 100644 --- a/src/server/game/Server/Packets/PetPackets.cpp +++ b/src/server/game/Server/Packets/PetPackets.cpp @@ -99,19 +99,19 @@ WorldPacket const* WorldPackets::Pet::PetNameInvalid::Write() _worldPacket << uint8(RenameData.NewName.length()); - _worldPacket.WriteBit(RenameData.HasDeclinedNames); + _worldPacket.WriteBit(RenameData.DeclinedNames.is_initialized()); _worldPacket.FlushBits(); - if (RenameData.HasDeclinedNames) + if (RenameData.DeclinedNames) { for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) { - _worldPacket.WriteBits(RenameData.DeclinedNames.name[i].length(), 7); + _worldPacket.WriteBits(RenameData.DeclinedNames->name[i].length(), 7); _worldPacket.FlushBits(); } for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) - _worldPacket << RenameData.DeclinedNames.name[i]; + _worldPacket << RenameData.DeclinedNames->name[i]; } _worldPacket.WriteString(RenameData.NewName); @@ -126,15 +126,15 @@ void WorldPackets::Pet::PetRename::Read() int8 nameLen = 0; _worldPacket >> nameLen; - RenameData.HasDeclinedNames = _worldPacket.ReadBit(); - if (RenameData.HasDeclinedNames) + if (_worldPacket.ReadBit()) { + RenameData.DeclinedNames = boost::in_place(); int32 count[MAX_DECLINED_NAME_CASES]; for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) count[i] = _worldPacket.ReadBits(7); for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) - RenameData.DeclinedNames.name[i] = _worldPacket.ReadString(count[i]); + RenameData.DeclinedNames->name[i] = _worldPacket.ReadString(count[i]); } RenameData.NewName = _worldPacket.ReadString(nameLen); diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h index f11a71a936c..3d3c3e76f72 100644 --- a/src/server/game/Server/Packets/PetPackets.h +++ b/src/server/game/Server/Packets/PetPackets.h @@ -163,8 +163,7 @@ namespace WorldPackets ObjectGuid PetGUID; int32 PetNumber = 0; std::string NewName; - bool HasDeclinedNames = false; - DeclinedName DeclinedNames; + Optional DeclinedNames; }; class PetNameInvalid final : public ServerPacket diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index c11c85aaffa..59f18bc79b0 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -118,6 +118,7 @@ WorldSession::WorldSession(uint32 id, std::string&& name, uint32 battlenetAccoun _battlenetAccountId(battlenetAccountId), m_expansion(expansion), _os(os), + _battlenetRequestToken(0), _warden(NULL), _logoutTime(0), m_inQueue(false), diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp index ef6ccf5bf4b..69dbc7bf9e6 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp @@ -200,7 +200,7 @@ public: if (zombie) { zombieToBeEatenGUID = zombie->GetGUID(); // save for later use - + // the soon-to-be-eaten zombie should stop moving and stop attacking zombie->AI()->SetData(DATA_ZOMBIE_STATE, STATE_ZOMBIE_TOBE_EATEN); @@ -225,7 +225,7 @@ public: case EVENT_KILL_ZOMBIE_SINGLE: { Creature* zombieToBeEaten = ObjectAccessor::GetCreature(*me, zombieToBeEatenGUID); - if (zombieToBeEaten && zombieToBeEaten->IsAlive() && zombieToBeEaten->IsWithinDistInMap(me, 10.0)) + if (zombieToBeEaten && zombieToBeEaten->IsAlive() && zombieToBeEaten->IsWithinDistInMap(me, 10.0)) DoCast(zombieToBeEaten, SPELL_ZOMBIE_CHOW_SEARCH_SINGLE); // do the killing + healing in done inside by spell script see below. zombieToBeEatenGUID = ObjectGuid::Empty; @@ -249,11 +249,11 @@ public: if (zombie && zombie->IsAlive() && zombie->GetExactDist2d(me) > 18.0) zombie = nullptr; } - + if (zombie) // cast the aoe spell only if at least one zombie is found nearby { Talk(EMOTE_DEVOURS_ALL); - DoCastAOE(SPELL_ZOMBIE_CHOW_SEARCH_MULTI); + DoCastAOE(SPELL_ZOMBIE_CHOW_SEARCH_MULTI); } break; } @@ -269,7 +269,7 @@ public: me->GetMotionMaster()->MoveIdle(); events.ScheduleEvent(EVENT_KILL_ZOMBIE_SINGLE, Seconds(1)); } - + } void DoAction(int32 action) override @@ -405,17 +405,19 @@ public: if (state == STATE_ZOMBIE_DECIMATED) { timer += diff; - Creature* gluth = ObjectAccessor::GetCreature(*me, GluthGUID); // Putting this in the UpdateAI loop fixes an issue where death gripping a decimated zombie would make the zombie stand still until the rest of the fight. // Also fix the issue where if one or more zombie is rooted when decimates hits (and MovePoint() is called), the zombie teleport to the boss. pretty weird behavior. - if (gluth && timer>1600 && me->GetExactDist2d(gluth) > 10.0 && me->CanFreeMove()) // it takes about 1600 ms for the animation to cycle. This way, the animation looks relatively smooth. + if (Creature* gluth = ObjectAccessor::GetCreature(*me, GluthGUID)) { - me->GetMotionMaster()->MovePoint(0, gluth->GetPosition()); // isn't dynamic. So, to take into account Gluth's movement, it must be called periodicly. - timer = 0; - } + if (timer > 1600 && me->GetExactDist2d(gluth) > 10.0 && me->CanFreeMove()) // it takes about 1600 ms for the animation to cycle. This way, the animation looks relatively smooth. + { + me->GetMotionMaster()->MovePoint(0, gluth->GetPosition()); // isn't dynamic. So, to take into account Gluth's movement, it must be called periodicly. + timer = 0; + } - if (me->GetExactDist2d(gluth) <= 10.0) - me->StopMoving(); + if (me->GetExactDist2d(gluth) <= 10.0) + me->StopMoving(); + } } else if (state == STATE_ZOMBIE_NORMAL) DoMeleeAttackIfReady(); @@ -430,10 +432,10 @@ public: { me->SetReactState(ReactStates::REACT_PASSIVE); me->AttackStop(); - me->SetTarget(ObjectGuid::Empty); + me->SetTarget(ObjectGuid::Empty); // at this point, the zombie should be non attacking and non moving. - me->SetWalk(true); // it doesnt seem to work with MoveFollow() (but it does work with MovePoint()). + me->SetWalk(true); // it doesnt seem to work with MoveFollow() (but it does work with MovePoint()). timer = 1000; } -- cgit v1.2.3 From 7eceba09d79823f015d16cdacc6d9477f7f4cea0 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Wed, 8 Jun 2016 13:05:23 +0200 Subject: Core/Misc: Fixed warnings --- src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 6 +++--- src/server/game/Conditions/ConditionMgr.cpp | 2 +- src/server/scripts/Pet/pet_mage.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index b937f2194e2..9fcb66da1ce 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -443,11 +443,11 @@ void AuctionHouseMgr::PendingAuctionProcess(Player* player) totaldeposit = GetAuctionDeposit(itr->auctionHouseEntry, itr->etime, item, totalItems); uint32 depositremain = totaldeposit; - for (auto itr = thisAH->begin(); itr != thisAH->end(); ++itr) + for (auto itrAH = thisAH->begin(); itrAH != thisAH->end(); ++itrAH) { - AuctionEntry* AH = (*itr); + AuctionEntry* AH = (*itrAH); - if (next(itr) == thisAH->end()) + if (next(itrAH) == thisAH->end()) AH->deposit = depositremain; else { diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 2ff7196a2dc..2f9093a31a5 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -446,7 +446,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const if (Unit* unit = object->ToUnit()) { if (ConditionValue1 == 0) - condMeets = (unit->GetStandState() == ConditionValue2); + condMeets = (unit->GetStandState() == UnitStandStateType(ConditionValue2)); else if (ConditionValue2 == 0) condMeets = unit->IsStandState(); else if (ConditionValue2 == 1) diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 9ec779703d3..659a24773b7 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -198,8 +198,8 @@ class npc_pet_mage_mirror_image : public CreatureScript if (!target || me->GetVictim() != target) { Unit* ownerTarget = nullptr; - if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) - ownerTarget = owner->GetSelectedUnit(); + if (Player* ownerPlayer = me->GetCharmerOrOwner()->ToPlayer()) + ownerTarget = ownerPlayer->GetSelectedUnit(); // recognize which victim will be choosen if (ownerTarget && ownerTarget->GetTypeId() == TYPEID_PLAYER) -- cgit v1.2.3 From c529566ac41e6d14c33015664e43c195a7a36bb6 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 12 Jun 2016 00:11:00 +0200 Subject: Core/GameObejcts: Fixed disconnects happening when viewing nearby players on elevators Closes #17335 --- src/server/game/Battlefield/Battlefield.cpp | 2 +- src/server/game/Battlegrounds/Battleground.cpp | 3 +-- src/server/game/Entities/GameObject/GameObject.cpp | 24 ++++++++++++++-------- src/server/game/Entities/GameObject/GameObject.h | 2 +- src/server/game/Entities/Object/Object.cpp | 2 +- src/server/game/Entities/Object/ObjectGuid.h | 16 +++++++++++++-- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Garrison/Garrison.cpp | 5 ++--- src/server/game/Globals/ObjectAccessor.cpp | 13 ++++++++---- src/server/game/Globals/ObjectAccessor.h | 3 ++- src/server/game/Handlers/MovementHandler.cpp | 2 +- src/server/game/Maps/Map.cpp | 2 ++ src/server/game/Maps/MapScripts.cpp | 8 ++------ src/server/game/Maps/TransportMgr.cpp | 2 +- src/server/game/Maps/ZoneScript.h | 2 +- src/server/game/Spells/SpellEffects.cpp | 18 ++++++---------- src/server/scripts/Commands/cs_gobject.cpp | 14 ++++++------- .../HallsOfReflection/halls_of_reflection.cpp | 4 ++-- .../IcecrownCitadel/instance_icecrown_citadel.cpp | 2 +- .../EyeOfEternity/instance_eye_of_eternity.cpp | 3 +-- src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp | 4 ++-- 21 files changed, 72 insertions(+), 61 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 58874e394e5..0db3ed09ef2 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -828,7 +828,7 @@ GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z // Create gameobject GameObject* go = new GameObject; - if (!go->Create(map->GenerateLowGuid(), entry, map, PHASEMASK_NORMAL, x, y, z, o, 0, 0, 0, 0, 100, GO_STATE_READY)) + if (!go->Create(entry, map, PHASEMASK_NORMAL, x, y, z, o, 0, 0, 0, 0, 100, GO_STATE_READY)) { TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Could not create gameobject template %u! Battlefield has not been created!", entry); delete go; diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 68a61a28708..e96286692d2 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1461,8 +1461,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float // and when loading it (in go::LoadFromDB()), a new guid would be assigned to the object, and a new object would be created // So we must create it specific for this instance GameObject* go = new GameObject; - if (!go->Create(GetBgMap()->GenerateLowGuid(), entry, GetBgMap(), - PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, goState)) + if (!go->Create(entry, GetBgMap(), PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, goState)) { TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!", entry, m_MapId, m_InstanceID); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index a43ab95c80c..ee7241a02d7 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -176,7 +176,7 @@ void GameObject::RemoveFromWorld() } } -bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, uint32 /*phaseMask*/, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit) +bool GameObject::Create(uint32 name_id, Map* map, uint32 /*phaseMask*/, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit) { ASSERT(map); SetMap(map); @@ -185,14 +185,14 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u m_stationaryPosition.Relocate(x, y, z, ang); if (!IsPositionValid()) { - TC_LOG_ERROR("misc", "Gameobject (GUID: " UI64FMTD " Spawn id: " UI64FMTD " Entry: %u) not created. Suggested coordinates isn't valid (X: %f Y: %f)", guidlow, GetSpawnId(), name_id, x, y); + TC_LOG_ERROR("misc", "Gameobject (Spawn id: " UI64FMTD " Entry: %u) not created. Suggested coordinates isn't valid (X: %f Y: %f)", GetSpawnId(), name_id, x, y); return false; } SetZoneScript(); if (m_zoneScript) { - name_id = m_zoneScript->GetGameObjectEntry(guidlow, name_id); + name_id = m_zoneScript->GetGameObjectEntry(m_spawnId, name_id); if (!name_id) return false; } @@ -200,26 +200,32 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(name_id); if (!goinfo) { - TC_LOG_ERROR("sql.sql", "Gameobject (GUID: " UI64FMTD " Spawn id: " UI64FMTD " Entry: %u) not created: non-existing entry in `gameobject_template`. Map: %u (X: %f Y: %f Z: %f)", guidlow, GetSpawnId(), name_id, map->GetId(), x, y, z); + TC_LOG_ERROR("sql.sql", "Gameobject (Spawn id: " UI64FMTD " Entry: %u) not created: non-existing entry in `gameobject_template`. Map: %u (X: %f Y: %f Z: %f)", GetSpawnId(), name_id, map->GetId(), x, y, z); return false; } if (goinfo->type == GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) { - TC_LOG_ERROR("sql.sql", "Gameobject (GUID: " UI64FMTD " Spawn id: " UI64FMTD " Entry: %u) not created: gameobject type GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT cannot be manually created.", guidlow, GetSpawnId(), name_id); + TC_LOG_ERROR("sql.sql", "Gameobject (Spawn id: " UI64FMTD " Entry: %u) not created: gameobject type GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT cannot be manually created.", GetSpawnId(), name_id); return false; } - if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT) + ObjectGuid guid; + if (goinfo->type != GAMEOBJECT_TYPE_TRANSPORT) + guid = ObjectGuid::Create(map->GetId(), goinfo->entry, map->GenerateLowGuid()); + else + { + guid = ObjectGuid::Create(map->GenerateLowGuid()); m_updateFlag |= UPDATEFLAG_TRANSPORT; + } - Object::_Create(ObjectGuid::Create(map->GetId(), goinfo->entry, guidlow)); + Object::_Create(guid); m_goInfo = goinfo; if (goinfo->type >= MAX_GAMEOBJECT_TYPE) { - TC_LOG_ERROR("sql.sql", "Gameobject (GUID: " UI64FMTD " Spawn id: " UI64FMTD " Entry: %u) not created: non-existing GO type '%u' in `gameobject_template`. It will crash client if created.", guidlow, GetSpawnId(), name_id, goinfo->type); + TC_LOG_ERROR("sql.sql", "Gameobject (%s Spawn id: " UI64FMTD " Entry: %u) not created: non-existing GO type '%u' in `gameobject_template`. It will crash client if created.", guid.ToString().c_str(), GetSpawnId(), name_id, goinfo->type); return false; } @@ -888,7 +894,7 @@ bool GameObject::LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, boo uint32 artKit = data->artKit; m_spawnId = spawnId; - if (!Create(map->GenerateLowGuid(), entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, artKit)) + if (!Create(entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, artKit)) return false; if (data->phaseid) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index ada26800505..07d1ae7acd6 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -889,7 +889,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject void RemoveFromWorld() override; void CleanupsBeforeDelete(bool finalCleanup = true) override; - bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit = 0); + bool Create(uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit = 0); void Update(uint32 p_time) override; GameObjectTemplate const* GetGOInfo() const { return m_goInfo; } GameObjectData const* GetGOData() const { return m_goData; } diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index f9fa1b3aeb6..9493df4449c 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2385,7 +2385,7 @@ GameObject* WorldObject::SummonGameObject(uint32 entry, float x, float y, float Map* map = GetMap(); GameObject* go = new GameObject(); - if (!go->Create(map->GenerateLowGuid(), entry, map, GetPhaseMask(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY)) + if (!go->Create(entry, map, GetPhaseMask(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY)) { delete go; return NULL; diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 505170a2663..86593a7c211 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -159,7 +159,6 @@ GUID_TRAIT_GLOBAL(HighGuid::CommerceObj) GUID_TRAIT_GLOBAL(HighGuid::ClientSession) GUID_TRAIT_REALM_SPECIFIC(HighGuid::Player) GUID_TRAIT_REALM_SPECIFIC(HighGuid::Item) // This is not exactly correct, there are 2 more unknown parts in highguid: (high >> 10 & 0xFF), (high >> 18 & 0xFFFFFF) -GUID_TRAIT_REALM_SPECIFIC(HighGuid::Transport) GUID_TRAIT_REALM_SPECIFIC(HighGuid::Guild) GUID_TRAIT_MAP_SPECIFIC(HighGuid::WorldTransaction) GUID_TRAIT_MAP_SPECIFIC(HighGuid::Conversation) @@ -181,6 +180,19 @@ GUID_TRAIT_MAP_SPECIFIC(HighGuid::AIResource) GUID_TRAIT_MAP_SPECIFIC(HighGuid::AILock) GUID_TRAIT_MAP_SPECIFIC(HighGuid::AILockTicket) +// Special case +// Global transports are loaded from `transports` table, RealmSpecific part is used for them. +// after worldserver finishes loading, no more global transports can be created, only the ones existing within instances that never change maps +// here is where MapSpecific comes into play - each map takes over the responsibility to generate transport guids +// on top of this, regular elevators (GAMEOBJECT_TYPE_TRANSPORT) must also use Transport highguid type, otherwise client will reject seeing other players on them +template<> +struct ObjectGuidTraits +{ + static bool const Global = false; + static bool const RealmSpecific = true; + static bool const MapSpecific = true; +}; + class ObjectGuid; class PackedGuid; @@ -205,7 +217,7 @@ class TC_GAME_API ObjectGuid static typename std::enable_if::RealmSpecific, ObjectGuid>::type Create(LowType counter) { return RealmSpecific(type, counter); } template - static typename std::enable_if::MapSpecific, ObjectGuid>::type Create(uint16 mapId, uint32 entry, LowType counter) { return MapSpecific(type, 0, mapId, 0, entry, counter); } + static typename std::enable_if::MapSpecific && type != HighGuid::Transport, ObjectGuid>::type Create(uint16 mapId, uint32 entry, LowType counter) { return MapSpecific(type, 0, mapId, 0, entry, counter); } ObjectGuid() : _low(0), _high(0) { } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b9ba699b7d0..4499d5473fb 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22004,7 +22004,7 @@ void Player::UpdateTriggerVisibility() creature->BuildValuesUpdateBlockForPlayer(&udata, this); creature->RemoveFieldNotifyFlag(UF_FLAG_PUBLIC); } - else if (itr->IsGameObject()) + else if (itr->IsAnyTypeGameObject()) { GameObject* go = GetMap()->GetGameObject(*itr); if (!go) diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp index 56cbb9ad58e..5a25f91876e 100644 --- a/src/server/game/Garrison/Garrison.cpp +++ b/src/server/game/Garrison/Garrison.cpp @@ -713,8 +713,7 @@ GameObject* Garrison::Plot::CreateGameObject(Map* map, GarrisonFactionIndex fact Position const& pos = PacketInfo.PlotPos; GameObject* building = new GameObject(); - if (!building->Create(map->GenerateLowGuid(), entry, map, 0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), - 0.0f, 0.0f, 0.0f, 0.0f, 255, GO_STATE_READY)) + if (!building->Create(entry, map, 0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 255, GO_STATE_READY)) { delete building; return nullptr; @@ -726,7 +725,7 @@ GameObject* Garrison::Plot::CreateGameObject(Map* map, GarrisonFactionIndex fact { Position const& pos2 = finalizeInfo->FactionInfo[faction].Pos; GameObject* finalizer = new GameObject(); - if (finalizer->Create(map->GenerateLowGuid(), finalizeInfo->FactionInfo[faction].GameObjectId, map, 0, pos2.GetPositionX(), pos2.GetPositionY(), + if (finalizer->Create(finalizeInfo->FactionInfo[faction].GameObjectId, map, 0, pos2.GetPositionX(), pos2.GetPositionY(), pos2.GetPositionZ(), pos2.GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 255, GO_STATE_READY)) { // set some spell id to make the object delete itself after use diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index 7cb21321f04..553cf67cc3c 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -84,12 +84,12 @@ WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid con case HighGuid::Transport: case HighGuid::GameObject: return GetGameObject(p, guid); case HighGuid::Vehicle: - case HighGuid::Creature: return GetCreature(p, guid); + case HighGuid::Creature: return GetCreature(p, guid); case HighGuid::Pet: return GetPet(p, guid); case HighGuid::DynamicObject: return GetDynamicObject(p, guid); case HighGuid::AreaTrigger: return GetAreaTrigger(p, guid); case HighGuid::Corpse: return GetCorpse(p, guid); - default: return NULL; + default: return nullptr; } } @@ -132,7 +132,7 @@ Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid con break; } - return NULL; + return nullptr; } Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid const& guid) @@ -145,11 +145,16 @@ GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid const return u.GetMap()->GetGameObject(guid); } -Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid const& guid) +Transport* ObjectAccessor::GetTransportOnMap(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetTransport(guid); } +Transport* ObjectAccessor::GetTransport(ObjectGuid const& guid) +{ + return HashMapHolder::Find(guid); +} + DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetDynamicObject(guid); diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 83bbdf42239..4ac3b7a79d1 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -72,7 +72,8 @@ namespace ObjectAccessor TC_GAME_API Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const&, uint32 typemask); TC_GAME_API Corpse* GetCorpse(WorldObject const& u, ObjectGuid const& guid); TC_GAME_API GameObject* GetGameObject(WorldObject const& u, ObjectGuid const& guid); - TC_GAME_API Transport* GetTransport(WorldObject const& u, ObjectGuid const& guid); + TC_GAME_API Transport* GetTransportOnMap(WorldObject const& u, ObjectGuid const& guid); + TC_GAME_API Transport* GetTransport(ObjectGuid const& guid); TC_GAME_API DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const& guid); TC_GAME_API AreaTrigger* GetAreaTrigger(WorldObject const& u, ObjectGuid const& guid); TC_GAME_API Unit* GetUnit(WorldObject const&, ObjectGuid const& guid); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index cace773b65e..6464dd1838a 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -330,7 +330,7 @@ void WorldSession::HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMov { GameObject* go = mover->GetMap()->GetGameObject(movementInfo.transport.guid); if (!go || go->GetGoType() != GAMEOBJECT_TYPE_TRANSPORT) - movementInfo.transport.guid.Clear(); + movementInfo.transport.Reset(); } } else if (plrMover && plrMover->GetTransport()) // if we were on a transport, leave diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 2389d8e0fc1..81aa0fd174c 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -255,6 +255,8 @@ i_scriptLock(false), _defaultLight(GetDefaultMapLight(id)) //lets initialize visibility distance for map Map::InitVisibilityDistance(); + GetGuidSequenceGenerator().Set(sObjectMgr->GetGenerator().GetNextAfterMaxUsed()); + sScriptMgr->OnCreateMap(this); } diff --git a/src/server/game/Maps/MapScripts.cpp b/src/server/game/Maps/MapScripts.cpp index fd1f798d2d0..c60b4d8096d 100644 --- a/src/server/game/Maps/MapScripts.cpp +++ b/src/server/game/Maps/MapScripts.cpp @@ -322,14 +322,12 @@ void Map::ScriptsProcess() source = HashMapHolder::Find(step.sourceGUID); break; case HighGuid::GameObject: + case HighGuid::Transport: source = GetGameObject(step.sourceGUID); break; case HighGuid::Corpse: source = GetCorpse(step.sourceGUID); break; - case HighGuid::Transport: - source = GetTransport(step.sourceGUID); - break; default: TC_LOG_ERROR("scripts", "%s source with unsupported high guid %s.", step.script->GetDebugInfo().c_str(), step.sourceGUID.ToString().c_str()); @@ -353,14 +351,12 @@ void Map::ScriptsProcess() target = HashMapHolder::Find(step.targetGUID); break; case HighGuid::GameObject: + case HighGuid::Transport: target = GetGameObject(step.targetGUID); break; case HighGuid::Corpse: target = GetCorpse(step.targetGUID); break; - case HighGuid::Transport: - target = GetTransport(step.targetGUID); - break; default: TC_LOG_ERROR("scripts", "%s target with unsupported high guid %s.", step.script->GetDebugInfo().c_str(), step.targetGUID.ToString().c_str()); diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index 5de0133c342..4e695547c42 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -389,7 +389,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, ObjectGuid::LowType guid float o = tInfo->keyFrames.begin()->InitialOrientation; // initialize the gameobject base - ObjectGuid::LowType guidLow = guid ? guid : sObjectMgr->GetGenerator().Generate(); + ObjectGuid::LowType guidLow = guid ? guid : ASSERT_NOTNULL(map)->GenerateLowGuid(); if (!trans->Create(guidLow, entry, mapId, x, y, z, o, 255)) { delete trans; diff --git a/src/server/game/Maps/ZoneScript.h b/src/server/game/Maps/ZoneScript.h index e54c96dbb11..e83c6654912 100644 --- a/src/server/game/Maps/ZoneScript.h +++ b/src/server/game/Maps/ZoneScript.h @@ -30,7 +30,7 @@ class ZoneScript virtual ~ZoneScript() { } virtual uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) { return data->id; } - virtual uint32 GetGameObjectEntry(ObjectGuid::LowType /*guidLow*/, uint32 entry) { return entry; } + virtual uint32 GetGameObjectEntry(ObjectGuid::LowType /*spawnId*/, uint32 entry) { return entry; } virtual void OnCreatureCreate(Creature* ) { } virtual void OnCreatureRemove(Creature* ) { } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 71ab0858534..d9930ce890a 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3164,8 +3164,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex) Map* map = target->GetMap(); - if (!pGameObj->Create(map->GenerateLowGuid(), gameobject_id, map, - m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) + if (!pGameObj->Create(gameobject_id, map, m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { delete pGameObj; return; @@ -3191,8 +3190,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex) if (uint32 linkedEntry = pGameObj->GetGOInfo()->GetLinkedGameObjectEntry()) { GameObject* linkedGO = new GameObject; - if (linkedGO->Create(map->GenerateLowGuid(), linkedEntry, map, - m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) + if (linkedGO->Create(linkedEntry, map, m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { linkedGO->CopyPhaseFrom(m_caster); @@ -3785,8 +3783,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex) uint32 gameobject_id = effectInfo->MiscValue; Map* map = m_caster->GetMap(); - if (!pGameObj->Create(map->GenerateLowGuid(), gameobject_id, - map, 0, + if (!pGameObj->Create(gameobject_id, map, 0, m_caster->GetPositionX()+(unitTarget->GetPositionX()-m_caster->GetPositionX())/2, m_caster->GetPositionY()+(unitTarget->GetPositionY()-m_caster->GetPositionY())/2, m_caster->GetPositionZ(), @@ -4154,8 +4151,7 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex) m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE); Map* map = m_caster->GetMap(); - if (!go->Create(map->GenerateLowGuid(), go_id, map, - 0, x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) + if (!go->Create(go_id, map, 0, x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { delete go; return; @@ -4813,8 +4809,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) GameObject* pGameObj = new GameObject; - if (!pGameObj->Create(cMap->GenerateLowGuid(), name_id, cMap, - 0, fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) + if (!pGameObj->Create(name_id, cMap, 0, fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { delete pGameObj; return; @@ -4881,8 +4876,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) if (uint32 linkedEntry = pGameObj->GetGOInfo()->GetLinkedGameObjectEntry()) { GameObject* linkedGO = new GameObject; - if (linkedGO->Create(cMap->GenerateLowGuid(), linkedEntry, cMap, - 0, fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) + if (linkedGO->Create(linkedEntry, cMap, 0, fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { linkedGO->CopyPhaseFrom(m_caster); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 22e9bfe704a..982a15e314d 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -146,9 +146,7 @@ public: Map* map = player->GetMap(); GameObject* object = new GameObject; - ObjectGuid::LowType guidLow = map->GenerateLowGuid(); - - if (!object->Create(guidLow, objectInfo->entry, map, 0, x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) + if (!object->Create(objectInfo->entry, map, 0, x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { delete object; return false; @@ -164,7 +162,7 @@ public: // fill the gameobject data and save to the db object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMask()); - guidLow = object->GetSpawnId(); + ObjectGuid::LowType spawnId = object->GetSpawnId(); // delete the old object and do a clean load from DB with a fresh new GameObject instance. // this is required to avoid weird behavior and memory leaks @@ -172,16 +170,16 @@ public: object = new GameObject(); // this will generate a new guid if the object is in an instance - if (!object->LoadGameObjectFromDB(guidLow, map)) + if (!object->LoadGameObjectFromDB(spawnId, map)) { delete object; return false; } /// @todo is it really necessary to add both the real and DB table guid here ? - sObjectMgr->AddGameobjectToGrid(guidLow, ASSERT_NOTNULL(sObjectMgr->GetGOData(guidLow))); + sObjectMgr->AddGameobjectToGrid(spawnId, ASSERT_NOTNULL(sObjectMgr->GetGOData(spawnId))); - handler->PSendSysMessage(LANG_GAMEOBJECT_ADD, objectId, objectInfo->name.c_str(), guidLow, x, y, z); + handler->PSendSysMessage(LANG_GAMEOBJECT_ADD, objectId, objectInfo->name.c_str(), spawnId, x, y, z); return true; } @@ -669,7 +667,7 @@ public: int32 objectState = atoi(state); if (objectType < 4) - object->SetByteValue(GAMEOBJECT_BYTES_1, objectType, objectState); + object->SetByteValue(GAMEOBJECT_BYTES_1, uint8(objectType), uint8(objectState)); else if (objectType == 4) object->SendCustomAnim(objectState); diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 106c567b24e..d755fa15d23 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1113,7 +1113,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript me->RemoveAurasDueToSpell(SPELL_HARVEST_SOUL); if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) Talk(SAY_JAINA_ESCAPE_9); - if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetGuidData(DATA_GUNSHIP))) + if (Transport* gunship = ObjectAccessor::GetTransportOnMap(*me, _instance->GetGuidData(DATA_GUNSHIP))) gunship->EnableMovement(true); _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, DONE); break; @@ -1185,7 +1185,7 @@ class npc_the_lich_king_escape_hor : public CreatureScript if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ESCAPE_LEADER))) DoCast(target, SPELL_HARVEST_SOUL); - if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetGuidData(DATA_GUNSHIP))) + if (Transport* gunship = ObjectAccessor::GetTransportOnMap(*me, _instance->GetGuidData(DATA_GUNSHIP))) gunship->EnableMovement(true); break; default: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 1d6b1ffb61e..7e8ddeda484 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -400,7 +400,7 @@ class instance_icecrown_citadel : public InstanceMapScript return entry; } - uint32 GetGameObjectEntry(ObjectGuid::LowType /*guidLow*/, uint32 entry) override + uint32 GetGameObjectEntry(ObjectGuid::LowType /*spawnId*/, uint32 entry) override { switch (entry) { diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index e5944841ad5..f6c829590b9 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -86,8 +86,7 @@ public: void SpawnGameObject(uint32 entry, Position const& pos) { GameObject* go = new GameObject(); - if (!go->Create(instance->GenerateLowGuid(), entry, instance, - PHASEMASK_NORMAL, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), + if (!go->Create(entry, instance, PHASEMASK_NORMAL, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), 0, 0, 0, 0, 120, GO_STATE_READY)) { delete go; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index 59ff06ea66b..c7f49a67328 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -163,7 +163,7 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) GameObject* go = new GameObject; Map* map = player->GetMap(); - if (!go->Create(map->GenerateLowGuid(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) + if (!go->Create(SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) { delete go; return true; @@ -194,7 +194,7 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) GameObject* go = new GameObject; Map* map = player->GetMap(); - if (!go->Create(map->GenerateLowGuid(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) + if (!go->Create(SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) { delete go; return true; -- cgit v1.2.3