mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
Merge commit 'origin/master' into 310
This commit is contained in:
commit
c9f5062955
28 changed files with 327 additions and 153 deletions
|
|
@ -223,7 +223,7 @@ bool PlayerTaxi::LoadTaxiDestinationsFromString( const std::string& values, uint
|
|||
}
|
||||
|
||||
// can't load taxi path without mount set (quest taxi path?)
|
||||
if(!objmgr.GetTaxiMount(GetTaxiSource(),team))
|
||||
if(!objmgr.GetTaxiMount(GetTaxiSource(),team,true))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
@ -1454,7 +1454,7 @@ void Player::BuildEnumData( QueryResult * result, WorldPacket * p_data )
|
|||
uint32 petFamily = 0;
|
||||
|
||||
// show pet at selection character in character list only for non-ghost character
|
||||
if(result && isAlive() && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER))
|
||||
if (result && isAlive() && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT))
|
||||
{
|
||||
uint32 entry = fields[10].GetUInt32();
|
||||
CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(entry);
|
||||
|
|
@ -16270,7 +16270,7 @@ void Player::PetSpellInitialize()
|
|||
uint8 addlist = 0;
|
||||
data << uint8(addlist); // placeholder
|
||||
|
||||
if(pet->isControlled() && ((pet->getPetType() == HUNTER_PET) || ((pet->GetCreatureInfo()->type == CREATURE_TYPE_DEMON) && (getClass() == CLASS_WARLOCK))))
|
||||
if (pet->IsPermanentPetFor(this))
|
||||
{
|
||||
// spells loop
|
||||
for (PetSpellMap::const_iterator itr = pet->m_spells.begin(); itr != pet->m_spells.end(); ++itr)
|
||||
|
|
@ -16643,34 +16643,13 @@ void Player::HandleStealthedUnitsDetection()
|
|||
}
|
||||
}
|
||||
|
||||
bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_id, Creature* npc)
|
||||
bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc /*= NULL*/, uint32 spellid /*= 0*/)
|
||||
{
|
||||
if(nodes.size() < 2)
|
||||
return false;
|
||||
|
||||
// not let cheating with start flight mounted
|
||||
if(IsMounted())
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIPLAYERALREADYMOUNTED);
|
||||
GetSession()->SendPacket(&data);
|
||||
return false;
|
||||
}
|
||||
|
||||
if( m_ShapeShiftFormSpellId && m_form != FORM_BATTLESTANCE && m_form != FORM_BERSERKERSTANCE && m_form != FORM_DEFENSIVESTANCE && m_form != FORM_SHADOW )
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIPLAYERSHAPESHIFTED);
|
||||
GetSession()->SendPacket(&data);
|
||||
return false;
|
||||
}
|
||||
|
||||
// not let cheating with start flight in time of logout process || if casting not finished || while in combat || if not use Spell's with EffectSendTaxi
|
||||
if(GetSession()->isLogingOut() ||
|
||||
(!m_currentSpells[CURRENT_GENERIC_SPELL] ||
|
||||
m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->Effect[0] != SPELL_EFFECT_SEND_TAXI)&&
|
||||
IsNonMeleeSpellCasted(false) ||
|
||||
isInCombat())
|
||||
if(GetSession()->isLogingOut() || isInCombat())
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIPLAYERBUSY);
|
||||
|
|
@ -16681,6 +16660,52 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_i
|
|||
if(HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE))
|
||||
return false;
|
||||
|
||||
// taximaster case
|
||||
if(npc)
|
||||
{
|
||||
// not let cheating with start flight mounted
|
||||
if(IsMounted())
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIPLAYERALREADYMOUNTED);
|
||||
GetSession()->SendPacket(&data);
|
||||
return false;
|
||||
}
|
||||
|
||||
if( m_ShapeShiftFormSpellId && m_form != FORM_BATTLESTANCE && m_form != FORM_BERSERKERSTANCE && m_form != FORM_DEFENSIVESTANCE && m_form != FORM_SHADOW )
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIPLAYERSHAPESHIFTED);
|
||||
GetSession()->SendPacket(&data);
|
||||
return false;
|
||||
}
|
||||
|
||||
// not let cheating with start flight in time of logout process || if casting not finished || while in combat || if not use Spell's with EffectSendTaxi
|
||||
if(IsNonMeleeSpellCasted(false))
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIPLAYERBUSY);
|
||||
GetSession()->SendPacket(&data);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// cast case or scripted call case
|
||||
else
|
||||
{
|
||||
RemoveSpellsCausingAura(SPELL_AURA_MOUNTED);
|
||||
|
||||
if( m_ShapeShiftFormSpellId && m_form != FORM_BATTLESTANCE && m_form != FORM_BERSERKERSTANCE && m_form != FORM_DEFENSIVESTANCE && m_form != FORM_SHADOW )
|
||||
RemoveAurasDueToSpell(m_ShapeShiftFormSpellId);
|
||||
|
||||
if(m_currentSpells[CURRENT_GENERIC_SPELL] && m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->Id != spellid)
|
||||
InterruptSpell(CURRENT_GENERIC_SPELL,false);
|
||||
|
||||
InterruptSpell(CURRENT_AUTOREPEAT_SPELL,false);
|
||||
|
||||
if(m_currentSpells[CURRENT_CHANNELED_SPELL] && m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->Id != spellid)
|
||||
InterruptSpell(CURRENT_CHANNELED_SPELL,true);
|
||||
}
|
||||
|
||||
uint32 sourcenode = nodes[0];
|
||||
|
||||
// starting node too far away (cheat?)
|
||||
|
|
@ -16708,8 +16733,8 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_i
|
|||
return false;
|
||||
}
|
||||
}
|
||||
// node must have pos if not spell case (npc!=0)
|
||||
else if(npc)
|
||||
// node must have pos if taxi master case (npc != NULL)
|
||||
else if (npc)
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIUNSPECIFIEDSERVERERROR);
|
||||
|
|
@ -16761,10 +16786,11 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_i
|
|||
prevnode = lastnode;
|
||||
}
|
||||
|
||||
if(!mount_id) // if not provide then attempt use default.
|
||||
mount_id = objmgr.GetTaxiMount(sourcenode, GetTeam());
|
||||
// get mount model (in case non taximaster (npc==NULL) allow more wide lookup)
|
||||
uint16 mount_id = objmgr.GetTaxiMount(sourcenode, GetTeam(), npc == NULL);
|
||||
|
||||
if (mount_id == 0 || sourcepath == 0)
|
||||
// in spell case allow 0 model
|
||||
if (mount_id == 0 && spellid == 0 || sourcepath == 0)
|
||||
{
|
||||
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
|
||||
data << uint32(ERR_TAXIUNSPECIFIEDSERVERERROR);
|
||||
|
|
@ -16806,6 +16832,21 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_i
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Player::ActivateTaxiPathTo( uint32 taxi_path_id, uint32 spellid /*= 0*/ )
|
||||
{
|
||||
TaxiPathEntry const* entry = sTaxiPathStore.LookupEntry(taxi_path_id);
|
||||
if(!entry)
|
||||
return false;
|
||||
|
||||
std::vector<uint32> nodes;
|
||||
|
||||
nodes.resize(2);
|
||||
nodes[0] = entry->from;
|
||||
nodes[1] = entry->to;
|
||||
|
||||
return ActivateTaxiPathTo(nodes,NULL,spellid);
|
||||
}
|
||||
|
||||
void Player::ProhibitSpellScholl(SpellSchoolMask idSchoolMask, uint32 unTimeMs )
|
||||
{
|
||||
// last check 2.0.10
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue