Core/Misc: Reduce differences between branches

This commit is contained in:
Shauren
2025-02-20 23:57:25 +01:00
parent 12197b7cff
commit ff6a107ac0
8 changed files with 38 additions and 30 deletions

View File

@@ -485,7 +485,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac
SetInventorySlotCount(INVENTORY_DEFAULT_SIZE);
// set starting level
SetLevel(GetStartLevel(createInfo->Race, createInfo->Class, createInfo->TemplateSet));
SetLevel(GetStartLevel(createInfo->Race, createInfo->Class, createInfo->TemplateSet), false);
InitRunes();
@@ -10966,7 +10966,7 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool
{
// Do not allow polearm to be equipped in the offhand (rare case for the only 1h polearm 41750)
if (type == INVTYPE_WEAPON && pProto->GetSubClass() == ITEM_SUBCLASS_WEAPON_POLEARM)
return EQUIP_ERR_2HSKILLNOTFOUND;
return EQUIP_ERR_WRONG_SLOT;
else if (type == INVTYPE_WEAPON)
{
if (!CanDualWield())

View File

@@ -7425,14 +7425,14 @@ void ObjectMgr::SetHighestGuids()
result = CharacterDatabase.Query("SELECT MAX(guid) FROM item_instance");
if (result)
GetGuidSequenceGenerator(HighGuid::Item).Set((*result)[0].GetUInt64() + 1);
GetGenerator<HighGuid::Item>().Set((*result)[0].GetUInt64() + 1);
// Cleanup other tables from nonexistent guids ( >= _hiItemGuid)
CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '{}'", GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '{}'", GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '{}'", GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '{}'", GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
CharacterDatabase.PExecute("DELETE a, ab, ai FROM auctionhouse a LEFT JOIN auction_bidders ab ON ab.auctionId = a.id LEFT JOIN auction_items ai ON ai.auctionId = a.id WHERE ai.itemGuid >= '{}'",
GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '{}'", GetGuidSequenceGenerator(HighGuid::Item).GetNextAfterMaxUsed()); // One-time query
GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '{}'", GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed()); // One-time query
result = WorldDatabase.Query("SELECT MAX(guid) FROM transports");
if (result)

View File

@@ -31,6 +31,7 @@
#include "QueryPackets.h"
#include "RealmList.h"
#include "TerrainMgr.h"
#include "Transport.h"
#include "World.h"
void WorldSession::BuildNameQueryData(ObjectGuid guid, WorldPackets::Query::NameCacheLookupResult& lookupData)
@@ -168,7 +169,7 @@ void WorldSession::HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLoc
packet.MapID = corpseMapID;
packet.ActualMapID = mapID;
packet.Position = Position(x, y, z);
packet.Transport = ObjectGuid::Empty;
packet.Transport = ObjectGuid::Empty; // TODO: If corpse is on transport, send transport offsets and transport guid
SendPacket(packet.Write());
}
@@ -236,13 +237,18 @@ void WorldSession::HandleQueryCorpseTransport(WorldPackets::Query::QueryCorpseTr
{
WorldPackets::Query::CorpseTransportQuery response;
response.Player = queryCorpseTransport.Player;
if (Player* player = ObjectAccessor::FindConnectedPlayer(queryCorpseTransport.Player))
if (Player* player = ObjectAccessor::FindConnectedPlayer(queryCorpseTransport.Player); player && _player->IsInSameRaidWith(player))
{
Corpse* corpse = player->GetCorpse();
if (_player->IsInSameRaidWith(player) && corpse && !corpse->GetTransGUID().IsEmpty() && corpse->GetTransGUID() == queryCorpseTransport.Transport)
if (Corpse const* corpse = _player->GetCorpse())
{
response.Position = corpse->GetTransOffset();
response.Facing = corpse->GetTransOffsetO();
if (Transport const* transport = dynamic_cast<Transport const*>(corpse->GetTransport()))
{
if (transport->GetGUID() == queryCorpseTransport.Transport)
{
response.Position = transport->GetPosition();
response.Facing = transport->GetOrientation();
}
}
}
}

View File

@@ -376,20 +376,20 @@ namespace WorldPackets
SpellHealPrediction Predict;
};
class SpellGo final : public CombatLog::CombatLogServerPacket
class SpellStart final : public ServerPacket
{
public:
SpellGo() : CombatLog::CombatLogServerPacket(SMSG_SPELL_GO) { }
SpellStart() : ServerPacket(SMSG_SPELL_START) { }
WorldPacket const* Write() override;
SpellCastData Cast;
};
class SpellStart final : public ServerPacket
class SpellGo final : public CombatLog::CombatLogServerPacket
{
public:
SpellStart() : ServerPacket(SMSG_SPELL_START) { }
SpellGo() : CombatLog::CombatLogServerPacket(SMSG_SPELL_GO) { }
WorldPacket const* Write() override;

View File

@@ -6093,20 +6093,9 @@ void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) con
caster->SendSpellNonMeleeDamageLog(&damageInfo);
}
bool AuraEffect::CanPeriodicTickCrit() const
{
if (GetSpellInfo()->HasAttribute(SPELL_ATTR2_CANT_CRIT))
return false;
if (GetSpellInfo()->HasAttribute(SPELL_ATTR8_PERIODIC_CAN_CRIT))
return true;
return false;
}
float AuraEffect::CalcPeriodicCritChance(Unit const* caster) const
{
if (!caster || !CanPeriodicTickCrit())
if (!caster || !GetBase()->CanPeriodicTickCrit())
return 0.0f;
Player* modOwner = caster->GetSpellModOwner();

View File

@@ -355,7 +355,6 @@ class TC_GAME_API AuraEffect
void HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) const;
void HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const;
bool CanPeriodicTickCrit() const;
float CalcPeriodicCritChance(Unit const* caster) const;
// aura effect proc handlers

View File

@@ -512,6 +512,17 @@ void Aura::_InitEffects(uint32 effMask, Unit* caster, int32 const* baseAmount)
_effects.pop_back();
}
bool Aura::CanPeriodicTickCrit() const
{
if (GetSpellInfo()->HasAttribute(SPELL_ATTR2_CANT_CRIT))
return false;
if (GetSpellInfo()->HasAttribute(SPELL_ATTR8_PERIODIC_CAN_CRIT))
return true;
return false;
}
Aura::~Aura()
{
// unload scripts

View File

@@ -225,6 +225,9 @@ class TC_GAME_API Aura
AuraKey GenerateKey(uint32& recalculateMask) const;
void SetLoadedState(int32 maxDuration, int32 duration, int32 charges, uint8 stackAmount, uint32 recalculateMask, int32* amount);
// helpers for aura effects
bool CanPeriodicTickCrit() const;
bool HasEffect(uint8 effIndex) const { return GetEffect(effIndex) != nullptr; }
bool HasEffectType(AuraType type) const;
static bool EffectTypeNeedsSendingAmount(AuraType type);