diff options
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/GameObject.cpp | 2 | ||||
| -rw-r--r-- | src/game/Object.cpp | 14 | ||||
| -rw-r--r-- | src/game/Player.cpp | 21 | ||||
| -rw-r--r-- | src/game/Spell.cpp | 2 | ||||
| -rw-r--r-- | src/game/Unit.h | 3 |
5 files changed, 35 insertions, 7 deletions
diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index fbeb30144bb..595759a5451 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -1282,4 +1282,6 @@ void GameObject::CastSpell(Unit* target, uint32 spell) trigger->setFaction(14); trigger->CastSpell(target, spell, true); } + //trigger->setDeathState(JUST_DIED); + //trigger->RemoveCorpse(); }
\ No newline at end of file diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 568e9a90a31..0ceb71367ca 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -601,9 +601,19 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask if(cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) { if(target->isGameMaster()) - *data << cinfo->Modelid1; + { + if(cinfo->Modelid2) + *data << cinfo->Modelid1; + else + *data << 17519; // world invisible trigger's model + } else - *data << cinfo->Modelid3; + { + if(cinfo->Modelid2) + *data << cinfo->Modelid2; + else + *data << 11686; // world invisible trigger's model + } } else *data << m_uint32Values[ index ]; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index b00dadc98dd..23aae2cd363 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -16406,7 +16406,16 @@ void Player::HandleStealthedUnitsDetection() // target aura duration for caster show only if target exist at caster client // send data at target visibility change (adding to client) if((*i)!=this && (*i)->isType(TYPEMASK_UNIT)) + { SendAuraDurationsForTarget(*i); + //if(((Unit*)(*i))->isAlive()) //should be always alive + { + if((*i)->GetTypeId()==TYPEID_UNIT) + ((Creature*)(*i))->SendMonsterMoveWithSpeedToCurrentDestination(this); + if(((Unit*)(*i))->getVictim()) + ((Unit*)(*i))->SendAttackStart(((Unit*)(*i))->getVictim()); + } + } i = stealthedUnits.erase(i); continue; @@ -17386,10 +17395,16 @@ void Player::UpdateVisibilityOf(WorldObject* target) // target aura duration for caster show only if target exist at caster client // send data at target visibility change (adding to client) if(target!=this && target->isType(TYPEMASK_UNIT)) + { SendAuraDurationsForTarget((Unit*)target); - - if(target->GetTypeId()==TYPEID_UNIT && ((Creature*)target)->isAlive()) - ((Creature*)target)->SendMonsterMoveWithSpeedToCurrentDestination(this); + if(((Unit*)target)->isAlive()) + { + if(target->GetTypeId()==TYPEID_UNIT) + ((Creature*)target)->SendMonsterMoveWithSpeedToCurrentDestination(this); + if(((Unit*)target)->getVictim()) + ((Unit*)target)->SendAttackStart(((Unit*)target)->getVictim()); + } + } } } } diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 4570e7590cc..95f315c5c13 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1012,7 +1012,7 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask) { // for delayed spells ignore negative spells (after duel end) for friendly targets // TODO: this cause soul transfer bugged - if(m_spellInfo->speed > 0.0f && !IsPositiveSpell(m_spellInfo->Id)) + if(m_spellInfo->speed > 0.0f && unit->GetTypeId() == TYPEID_PLAYER && !IsPositiveSpell(m_spellInfo->Id)) { m_caster->SendSpellMiss(unit, m_spellInfo->Id, SPELL_MISS_EVADE); return; diff --git a/src/game/Unit.h b/src/game/Unit.h index 0f2949b6ee3..61dcaf0d1cd 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -942,6 +942,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject void DeMorph(); + void SendAttackStart(Unit* pVictim); void SendAttackStateUpdate(uint32 HitInfo, Unit *target, uint8 SwingType, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount); void SendSpellNonMeleeDamageLog(Unit *target,uint32 SpellID,uint32 Damage, SpellSchoolMask damageSchoolMask,uint32 AbsorbedDamage, uint32 Resist,bool PhysicalDamage, uint32 Blocked, bool CriticalHit = false); void SendSpellMiss(Unit *target, uint32 spellID, SpellMissInfo missInfo); @@ -1352,7 +1353,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject private: void SendAttackStop(Unit* victim); // only from AttackStop(Unit*) - void SendAttackStart(Unit* pVictim); // only from Unit::AttackStart(Unit*) + //void SendAttackStart(Unit* pVictim); // only from Unit::AttackStart(Unit*) void ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, AuraTypeSet const& procAuraTypes, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage, SpellSchoolMask damageSchoolMask ); bool HandleDummyAuraProc(Unit *pVictim, SpellEntry const *spellProto, uint32 effIndex, uint32 damage, Aura* triggredByAura, SpellEntry const * procSpell, uint32 procFlag,uint32 cooldown); |
