diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index ee9d930af..2e83ce973 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1012,7 +1012,7 @@ void WorldObject::setActive(bool on) m_isActive = on; - if (!IsInWorld()) + if (on && !IsInWorld()) return; Map* map = FindMap(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 6bf71f3d6..fb27b9896 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16760,6 +16760,9 @@ void Unit::SetStunned(bool apply) { if (apply) { + if (m_rootTimes > 0) // blizzard internal check? + m_rootTimes++; + SetTarget(0); SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); @@ -16769,10 +16772,19 @@ void Unit::SetStunned(bool apply) RemoveUnitMovementFlag(MOVEMENTFLAG_MASK_MOVING); AddUnitMovementFlag(MOVEMENTFLAG_ROOT); - WorldPacket data(SMSG_FORCE_MOVE_ROOT, 8); - data.append(GetPackGUID()); - data << uint32(0); - SendMessageToSet(&data, true); + if (GetTypeId() == TYPEID_PLAYER) + { + WorldPacket data(SMSG_FORCE_MOVE_ROOT, 10); + data.append(GetPackGUID()); + data << m_rootTimes; + SendMessageToSet(&data, true); + } + else + { + WorldPacket data(SMSG_SPLINE_MOVE_ROOT, 8); + data.append(GetPackGUID()); + SendMessageToSet(&data, true); + } // xinef: inform client about our current orientation SendMovementFlagUpdate(); @@ -16807,10 +16819,19 @@ void Unit::SetStunned(bool apply) if (!HasUnitState(UNIT_STATE_ROOT)) // prevent moving if it also has root effect { - WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 8+4); - data.append(GetPackGUID()); - data << uint32(0); - SendMessageToSet(&data, true); + if (GetTypeId() == TYPEID_PLAYER) + { + WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 10); + data.append(GetPackGUID()); + data << ++m_rootTimes; + SendMessageToSet(&data, true); + } + else + { + WorldPacket data(SMSG_SPLINE_MOVE_UNROOT, 8); + data.append(GetPackGUID()); + SendMessageToSet(&data, true); + } RemoveUnitMovementFlag(MOVEMENTFLAG_ROOT); } diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 37c16e768..6ed6c7e23 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -72,7 +72,22 @@ public: if (target->GetGuildId()) { handler->SendSysMessage(LANG_PLAYER_IN_GUILD); - return true; + handler->SetSentErrorMessage(true); + return false; + } + + if (sGuildMgr->GetGuildByName(guildName)) + { + handler->SendSysMessage(LANG_GUILD_RENAME_ALREADY_EXISTS); + handler->SetSentErrorMessage(true); + return false; + } + + if (sObjectMgr->IsReservedName(guildName) || !sObjectMgr->IsValidCharterName(guildName)) + { + handler->SendSysMessage(LANG_BAD_VALUE); + handler->SetSentErrorMessage(true); + return false; } Guild* guild = new Guild;