mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Misc: Reduce differences between branches
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user