diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/server/game/AI/CoreAI/PetAI.cpp | 40 | ||||
| -rwxr-xr-x | src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp | 7 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp | 9 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 8 | ||||
| -rwxr-xr-x | src/server/shared/Logging/Log.cpp | 12 | ||||
| -rwxr-xr-x | src/server/shared/Logging/Log.h | 1 | 
6 files changed, 41 insertions, 36 deletions
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index 442da862b8a..5a0c199a4c0 100755 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -141,13 +141,8 @@ void PetAI::UpdateAI(const uint32 diff)              if (me->GetCharmInfo() && me->GetCharmInfo()->GetGlobalCooldownMgr().HasGlobalCooldown(spellInfo))                  continue; -            // ignore some combinations of combat state and combat/noncombat spells -            if (!me->getVictim()) +            if (spellInfo->IsPositive())              { -                // ignore attacking spells, and allow only self/around spells -                if (!spellInfo->IsPositive()) -                    continue; -                  // non combat spells allowed                  // only pet spells have IsNonCombatSpell and not fit this reqs:                  // Consume Shadows, Lesser Invisibility, so ignore checks for its @@ -163,36 +158,21 @@ void PetAI::UpdateAI(const uint32 diff)                      if (cooldown >= 0 && duration >= 0 && cooldown > duration)                          continue;                  } -            } -            else -            { -                // just ignore non-combat spells -                if (!spellInfo->CanBeUsedInCombat()) -                    continue; -            } -            Spell* spell = new Spell(me, spellInfo, TRIGGERED_NONE, 0); +                Spell* spell = new Spell(me, spellInfo, TRIGGERED_NONE, 0); -            // Fix to allow pets on STAY to autocast -            if (me->getVictim() && _CanAttack(me->getVictim()) && spell->CanAutoCast(me->getVictim())) -            { -                targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(me->getVictim(), spell)); -                continue; -            } -            else -            {                  bool spellUsed = false;                  for (std::set<uint64>::const_iterator tar = m_AllySet.begin(); tar != m_AllySet.end(); ++tar)                  { -                    Unit* Target = ObjectAccessor::GetUnit(*me, *tar); +                    Unit* target = ObjectAccessor::GetUnit(*me, *tar);                      //only buff targets that are in combat, unless the spell can only be cast while out of combat -                    if (!Target) +                    if (!target)                          continue; -                    if (spell->CanAutoCast(Target)) +                    if (spell->CanAutoCast(target))                      { -                        targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(Target, spell)); +                        targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(target, spell));                          spellUsed = true;                          break;                      } @@ -200,6 +180,14 @@ void PetAI::UpdateAI(const uint32 diff)                  if (!spellUsed)                      delete spell;              } +            else if (me->getVictim() && _CanAttack(me->getVictim()) && spellInfo->CanBeUsedInCombat()) +            { +                Spell* spell = new Spell(me, spellInfo, TRIGGERED_NONE, 0); +                if (spell->CanAutoCast(me->getVictim())) +                    targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(me->getVictim(), spell)); +                else +                    delete spell; +            }          }          //found units to cast on to diff --git a/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp b/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp index 69c1cc5edfe..1810016d22e 100755 --- a/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/BattleGroundHandler.cpp @@ -339,7 +339,7 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket &recv_data)      BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId);      if (!bl)      { -        sLog->outError("Battleground: invalid bgtype received."); +        sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, GUID: %u) received.", bgTypeId, _player->GetName(), _player->GetGUIDLow());          return;      } @@ -362,12 +362,13 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recv_data)      if (!sBattlemasterListStore.LookupEntry(bgTypeId_))      { -        sLog->outError("BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, GUID: %u) received.", bgTypeId_, _player->GetName(), _player->GetGUIDLow()); +        sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, GUID: %u) received.", bgTypeId_, _player->GetName(), _player->GetGUIDLow());          return;      } +      if (!_player->InBattlegroundQueue())      { -        sLog->outError("BattlegroundHandler: Invalid CMSG_BATTLEFIELD_PORT received from player (%u), he is not in bg_queue.", _player->GetGUIDLow()); +        sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BattlegroundHandler: Invalid CMSG_BATTLEFIELD_PORT received from player (Name: %s, GUID: %u), he is not in bg_queue.", _player->GetName(), _player->GetGUIDLow());          return;      } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 7d355b2f71a..1a153474416 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -237,12 +237,13 @@ class spell_intense_cold : public SpellScriptLoader              void HandlePeriodicTick(AuraEffect const* aurEff)              { +                if (aurEff->GetBase()->GetStackAmount() < 2) +                    return;                  Unit* caster = GetCaster(); -                if (!caster) +                //TODO: the caster should be boss but not the player +                if (!caster || !caster->GetAI())                      return; - -                if (aurEff->GetBase()->GetStackAmount() >= 2) -                    caster->GetAI()->SetGUID(GetTarget()->GetGUID(), DATA_INTENSE_COLD); +                caster->GetAI()->SetGUID(GetTarget()->GetGUID(), DATA_INTENSE_COLD);              }              void Register() diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 19f9cea8ed1..b30841e19cc 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -167,9 +167,11 @@ class spell_dk_anti_magic_zone : public SpellScriptLoader              {                  SpellInfo const* talentSpell = sSpellMgr->GetSpellInfo(DK_SPELL_ANTI_MAGIC_SHELL_TALENT);                  amount = talentSpell->Effects[EFFECT_0].CalcValue(GetCaster()); -                // assume caster is a player here -                if (Unit* caster = GetCaster()) -                     amount += int32(2 * caster->ToPlayer()->GetTotalAttackPowerValue(BASE_ATTACK)); +                Unit* caster = GetCaster(); +                if(!caster) +                    return; +                if(Player* player = caster->ToPlayer()) +                     amount += int32(2 * player->GetTotalAttackPowerValue(BASE_ATTACK));              }              void Absorb(AuraEffect*  /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index d7222c8564f..55bfe76cb12 100755 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -1039,3 +1039,15 @@ void Log::outChat(const char * str, ...)          va_end(ap);      }  } + +void Log::outErrorST(const char * str, ...) +{ +    va_list ap; +    va_start(ap, str); +    char nnew_str[MAX_QUERY_LEN]; +    vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap); +    va_end(ap); + +    ACE_Stack_Trace st; +    outError("%s [Stacktrace: %s]", nnew_str, st.c_str()); +} diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index aba1708232f..5c23616ac5c 100755 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -114,6 +114,7 @@ class Log          void SetColor(bool stdout_stream, ColorTypes color);          void ResetColor(bool stdout_stream); +        void outErrorST( const char * err, ... )                ATTR_PRINTF(2, 3);          void outDB( LogTypes type, const char * str );          void outString( const char * str, ... )                 ATTR_PRINTF(2, 3);          void outString( );  | 
