Jump to content

virusav

Members
  • Posts

    84
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by virusav

  1. diff --git a/sql/updates/11169_01_mangos_mangos_string.sql b/sql/updates/11169_01_mangos_mangos_string.sql
    index fba16dc..4d4d1f5 100644
    --- a/sql/updates/11169_01_mangos_mangos_string.sql
    +++ b/sql/updates/11169_01_mangos_mangos_string.sql
    @@ -1,6 +1,6 @@
    ALTER TABLE db_version CHANGE COLUMN required_11117_01_mangos_world_template required_11169_01_mangos_mangos_string bit;
    
    -DELETE FROM mangos_string WHERE entry IN (376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,1500,15001,1502);
    +DELETE FROM mangos_string WHERE entry IN (376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,1500,1501,1502);
    
    INSERT INTO mangos_string VALUES
    (376,'%u - |cffffffff|Hpool:%u|h[%s]|h|r AutoSpawn: %u MaxLimit: %u Creatures: %u GameObjecs: %u Pools %u',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), 

    As I understand it, requests are written to be used safely many times.

    It would be nice if the developers themselves rolls requests at least 2 times, because In this case, the error pops up immediately, and not the first time such a joint.

  2. When using a knife on the corpses of the NPC should be counted killcredit:

    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index 6a3b3db..b06fd85 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -1801,6 +1801,16 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
    
                        return;
                    }
    +                case 52090:                                 // Ahunae's Knife
    +                {
    +                    if (m_caster->GetTypeId() == TYPEID_PLAYER && unitTarget && unitTarget->GetTypeId() == TYPEID_UNIT)
    +                    {
    +                        ((Player*)m_caster)->KilledMonsterCredit(28622);
    +                        ((Creature*)unitTarget)->ForcedDespawn();
    +                    }
    +
    +                    return;
    +                }
                    case 52308:                                 // Take Sputum Sample
                    {
                        switch(eff_idx) 

  3. These spells are needed for a quest http://www.wowhead.com/quest=12527.

    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index 6a3b3db..fa1ee38 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -1411,6 +1411,7 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
                        return;
                    }
                    case 46167:                                 // Planning for the Future: Create Snowfall Glade Pup Cover
    +                case 50918:                                 // Gluttonous Lurkers: Create Basilisk Crystals Cover
                    case 50926:                                 // Gluttonous Lurkers: Create Zul'Drak Rat Cover
                    case 51026:                                 // Create Drakkari Medallion Cover
                    case 51592:                                 // Pickup Primordial Hatchling
    @@ -1426,6 +1427,7 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
                        switch(m_spellInfo->Id)
                        {
                            case 46167: spellId = 46773; break;
    +                        case 50918: spellId = 50919; break;
                            case 50926: spellId = 50927; break;
                            case 51026: spellId = 50737; break;
                            case 51592: spellId = 51593; break;
    @@ -6478,6 +6480,26 @@ void Spell::EffectScriptEffect(SpellEffectIndex eff_idx)
                        ((Player*)caster)->RemoveSpellCategoryCooldown(82, true);
                        return;
                    }
    +                case 50894:                                 // Zul'Drak Rat
    +                {
    +                    if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT)
    +                        return;
    +
    +                    if (Aura* pAura = unitTarget->GetAura(50894, EFFECT_INDEX_0))
    +                        if (pAura->GetStackAmount() >= m_spellInfo->StackAmount - 1)
    +                            // Gluttonous Lurkers: Summon Gorged Lurking Basilisk
    +                            if (const SpellEntry *pSpell = sSpellStore.LookupEntry(50928))
    +                            {
    +                                unitTarget->CastSpell(m_caster, 50928, true);
    +
    +                                Creature* creatureTarget = (Creature*)unitTarget;
    +
    +                                if (const SpellCastTimesEntry *pCastTime = sSpellCastTimesStore.LookupEntry(pSpell->CastingTimeIndex))
    +                                    creatureTarget->ForcedDespawn(pCastTime->CastTime + 1);
    +                            }
    +
    +                    return;
    +                }
                    case 51770:                                 // Emblazon Runeblade
                    {
                        Unit* caster = GetAffectiveCaster(); 

  4. Spell http://www.wowhead.com/spell=1462 should display the details of the NPC or a player in the forms of animals just for the caster.

    Patch (copy http://paste2.org/p/1238101):

    diff --git a/src/game/Object.cpp b/src/game/Object.cpp
    index 2dfa981..728555e 100644
    --- a/src/game/Object.cpp
    +++ b/src/game/Object.cpp
    @@ -637,17 +637,45 @@ void Object::BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask *
                        *data << (m_uint32Values[index] & ~UNIT_FLAG_NOT_SELECTABLE);
                    }
                    // hide lootable animation for unallowed players
    -                else if (index == UNIT_DYNAMIC_FLAGS && GetTypeId() == TYPEID_UNIT)
    +                else if (index == UNIT_DYNAMIC_FLAGS)
                    {
    -                    if (!target->isAllowedToLoot((Creature*)this))
    -                        *data << (m_uint32Values[index] & ~(UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
    -                    else
    +                    uint32 appendValue = m_uint32Values[index];
    +
    +                    // checking SPELL_AURA_EMPATHY and caster
    +                    if (((Unit*)this)->isAlive())
                        {
    -                        // flag only for original loot recipent
    -                        if (target->GetObjectGuid() == ((Creature*)this)->GetLootRecipientGuid())
    -                            *data << m_uint32Values[index];
    +                        bool bIsEmpathy = false;
    +                        bool bIsCaster = false;
    +                        Unit::AuraList const& mAuraEmpathy = ((Unit*)this)->GetAurasByType(SPELL_AURA_EMPATHY);
    +                        for(Unit::AuraList::const_iterator i = mAuraEmpathy.begin(); i != mAuraEmpathy.end(); ++i)
    +                        {
    +                            bIsEmpathy = true;
    +                            if ((*i)->GetCasterGuid() == target->GetObjectGuid())
    +                            {
    +                                bIsCaster = true;
    +                                break;
    +                            }
    +                        }
    +                        if (bIsEmpathy && !bIsCaster)
    +                            appendValue &= ~UNIT_DYNFLAG_SPECIALINFO;
    +                    }
    +
    +                    if (GetTypeId() == TYPEID_UNIT)
    +                    {
    +                        if (!target->isAllowedToLoot((Creature*)this))
    +                            *data << (appendValue & ~(UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
                            else
    -                            *data << (m_uint32Values[index] & ~(UNIT_DYNFLAG_TAPPED | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
    +                        {
    +                            // flag only for original loot recipent
    +                            if (target->GetObjectGuid() == ((Creature*)this)->GetLootRecipientGuid())
    +                                *data << appendValue;
    +                            else
    +                                *data << (appendValue & ~(UNIT_DYNFLAG_TAPPED | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
    +                        }
    +                    }
    +                    else
    +                    {
    +                        *data << appendValue;
                        }
                    }
                    else
    diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
    index bcedb01..dc89c6c 100644
    --- a/src/game/SpellAuras.cpp
    +++ b/src/game/SpellAuras.cpp
    @@ -3066,6 +3066,14 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
    
        Unit *target = GetTarget();
    
    +    // remove SPELL_AURA_EMPATHY
    +    Unit::AuraList const& mAuraEmpathy = target->GetAurasByType(SPELL_AURA_EMPATHY);
    +    for(Unit::AuraList::const_iterator i = mAuraEmpathy.begin(); i != mAuraEmpathy.end(); ++i)
    +    {
    +        target->RemoveAurasByCasterSpell((*i)->GetId(), (*i)->GetCasterGUID());
    +        i = mAuraEmpathy.begin();
    +    }
    +
        SpellShapeshiftFormEntry const* ssEntry = sSpellShapeshiftFormStore.LookupEntry(form);
        if (!ssEntry)
        {
    @@ -6475,12 +6483,10 @@ void Aura::HandleShapeshiftBoosts(bool apply)
    
    void Aura::HandleAuraEmpathy(bool apply, bool /*Real*/)
    {
    -    if(GetTarget()->GetTypeId() != TYPEID_UNIT)
    +    if (GetTarget()->GetTypeId() != TYPEID_UNIT && GetTarget()->GetTypeId() != TYPEID_PLAYER)
            return;
    
    -    CreatureInfo const * ci = ObjectMgr::GetCreatureTemplate(GetTarget()->GetEntry());
    -    if(ci && ci->type == CREATURE_TYPE_BEAST)
    -        GetTarget()->ApplyModUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, apply);
    +    GetTarget()->ApplyModUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, apply);
    }
    
    void Aura::HandleAuraUntrackable(bool apply, bool /*Real*/) 

    Creature Type Mask = 0x00000001 (BEAST)
    Skill (Id 50) "Beast Mastery"

    Questions:

    1. Why when you hover on a player in the forms of cats, bears, etc. damage and armor show 0, but the resistance did not appear? Where is the handling of this moment?

    2. How can we determine the forms of the NPC / player, which can cast a spell, so when you change form to remove it if necessary?

  5. The problem is still there.

    For example, in the quest http://www.wowhead.com/quest=12028 all text says the player instead of the NPC.

    Due to changes in SCRIPT_COMMAND_TALK rewrote the patch: http://paste2.org/p/1193746

    This patch allows you to search not only for NPC entry, but also guid:

    1. If datalong3> 0, then datalong2 = entry.

    2. If datalong3 = 0, then datalong2 = guid (the case with the flight to taxi).

  6. In the quest cache ReqSourdeId an item listed.

    An item falls in the presence of a quest, so the chance of a quest.

    Or we are talking about condition_value1 and condition_value2 in `creature_loot_template`?

    In this case, for each combination of an item and NPC should be created on 2 lines:

    8 CONDITION_QUESTREWARDED Player must have completed a quest first

    9 CONDITION_QUESTTAKEN Players must have the quest in the quest log and not completed yet

    ?

  7. At the moment, if the quest is completed but not delivered, then the player can not receive ancillary an item listed in ReqSourceId, cease to fall, but should.

    Example: http://www.wowhead.com/quest=12068 (also in other quests of the chain). In the quest is the basic requirement to bring an item, but you have to gather 5 auxiliary item is that the player can impose on themselves the aura, see the NPC and to pass the quest.

    Now when taking the quest item is impossible to dislodge support and pass the quest.

    Patch:

    diff --git a/src/game/Player.cpp b/src/game/Player.cpp
    index 8cf5741..bcaad71 100644
    --- a/src/game/Player.cpp
    +++ b/src/game/Player.cpp
    @@ -14765,36 +14765,37 @@ void Player::ReputationChanged(FactionEntry const* factionEntry )
    
    bool Player::HasQuestForItem( uint32 itemid ) const
    {
    -    for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
    +    for (int i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
        {
            uint32 questid = GetQuestSlotQuestId(i);
    -        if ( questid == 0 )
    +        if (questid == 0)
                continue;
    
            QuestStatusMap::const_iterator qs_itr = mQuestStatus.find(questid);
    -        if(qs_itr == mQuestStatus.end())
    +        if (qs_itr == mQuestStatus.end())
                continue;
    
            QuestStatusData const& q_status = qs_itr->second;
    
    -        if (q_status.m_status == QUEST_STATUS_INCOMPLETE)
    +        if (q_status.m_status == QUEST_STATUS_INCOMPLETE || q_status.m_status == QUEST_STATUS_COMPLETE)
            {
                Quest const* qinfo = sObjectMgr.GetQuestTemplate(questid);
    -            if(!qinfo)
    -                continue;
    -
    -            // hide quest if player is in raid-group and quest is no raid quest
    -            if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid() && !InBattleGround())
    +            if (!qinfo)
                    continue;
    
    -            // There should be no mixed ReqItem/ReqSource drop
    -            // This part for ReqItem drop
    -            for (int j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
    +            if (q_status.m_status == QUEST_STATUS_INCOMPLETE)
                {
    -                if(itemid == qinfo->ReqItemId[j] && q_status.m_itemcount[j] < qinfo->ReqItemCount[j] )
    -                    return true;
    +                // hide quest if player is in raid-group and quest is no raid quest
    +                if (GetGroup() && GetGroup()->isRaidGroup() && !qinfo->IsAllowedInRaid() && !InBattleGround())
    +                    continue;
    +
    +                // There should be no mixed ReqItem drop
    +                for (int j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
    +                {
    +                    if (itemid == qinfo->ReqItemId[j] && q_status.m_itemcount[j] < qinfo->ReqItemCount[j])
    +                        return true;
    +                }
                }
    -            // This part - for ReqSource
                for (int j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j)
                {
                    // examined item is a source item 

  8. 1. There Event 15 (fishing in Stranglethorn Valley) is every Sunday from 14:00 to 16:00.

    The database indicated that time.

    In the logs: start opening event at 13:00, ending - at 15:00.

    It turns out that at the start and stop opening event is not considered transfer hours.

    2. To event number 2 is bound pool with NPC [13602].

    At the start of the event NPC does not appear at any point.

    If you remove it from the pool, then the NPC will appear immediately at all points.

    It turns out that this pool does not allow the NPC to appear in the world.

  9. After committing 10842, you can specify the target for spells 43723 in `spell_script_target`, but to implement cast 43753 still need to SPELL_EFFECT_DUMMY, because it is there goal TARGET_AREAEFFECT_INSTANT.

    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index d553575..f198be3 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -1202,17 +1202,13 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
                        unitTarget->CastSpell(unitTarget, 43059, true);
                        return;
                    }
    -                // Demon Broiled Surprise
    -                /* FIX ME: Required for correct work implementing implicit target 7 (in pair (22,7))
    -                case 43723:
    +                case 43723:                                 // Demon Broiled Surprise
                    {
    -                    if (m_caster->GetTypeId() != TYPEID_PLAYER)
    -                        return;
    +                    if (m_caster->GetTypeId() == TYPEID_PLAYER)
    +                        m_caster->CastSpell(m_caster, 43753, false); // Demon-Broiled Surprise
    
    -                    ((Player*)m_caster)->CastSpell(unitTarget, 43753, true);
                        return;
                    }
    -                */
                    case 43882:                                 // Scourging Crystal Controller Dummy
                    {
                        if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT) 

    For database:

    DELETE FROM `spell_script_target` WHERE `entry`=43723;
    INSERT INTO `spell_script_target` SET `entry`=43723, `type`=2, `targetentry`=19973;
    DELETE FROM `spell_scripts` WHERE `id`=43723;

  10. Revision 10829:

    diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
    index 09cace4..dea6a80 100644
    --- a/src/game/SpellAuras.cpp
    +++ b/src/game/SpellAuras.cpp
    @@ -4619,9 +4619,19 @@ void Aura::HandlePeriodicTriggerSpell(bool apply, bool /*Real*/)
                        target->CastSpell(target, 32612, true, NULL, this);
    
                    return;
    -            case 42783:                                     //Wrath of the Astrom...
    +            case 42783:                                     // Wrath of the Astrom...
                    if (m_removeMode == AURA_REMOVE_BY_EXPIRE && GetEffIndex() + 1 < MAX_EFFECT_INDEX)
                        target->CastSpell(target, GetSpellProto()->CalculateSimpleValue(SpellEffectIndex(GetEffIndex()+1)), true);
    +
    +                return;
    +            case 46221:                                     // Animal Blood
    +                if (target->GetTypeId() == TYPEID_PLAYER && m_removeMode == AURA_REMOVE_BY_DEFAULT && target->IsInWater())
    +                {
    +                    float position_z = target->GetTerrain()->GetWaterLevel(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
    +                    // Spawn Blood Pool
    +                    target->CastSpell(target->GetPositionX(), target->GetPositionY(), position_z, 63471, true);
    +                }
    +
                    return;
                case 51912:                                     // Ultra-Advanced Proto-Typical Shortening Blaster
                    if (m_removeMode == AURA_REMOVE_BY_EXPIRE) 

  11. Name effects of spells in the files do not match, so it is hard to find a handler for the effect.

    diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
    index e390eed..fee94da 100644
    --- a/src/game/SharedDefines.h
    +++ b/src/game/SharedDefines.h
    @@ -682,11 +682,11 @@ enum SpellEffects
        SPELL_EFFECT_ACTIVATE_RUNE             = 146,
        SPELL_EFFECT_QUEST_FAIL                = 147,
        SPELL_EFFECT_148                       = 148,
    -    SPELL_EFFECT_149                       = 149,
    +    SPELL_EFFECT_CHARGE2                   = 149,
        SPELL_EFFECT_150                       = 150,
        SPELL_EFFECT_TRIGGER_SPELL_2           = 151,
        SPELL_EFFECT_152                       = 152,
    -    SPELL_EFFECT_153                       = 153,
    +    SPELL_EFFECT_CREATE_PET                = 153,
        SPELL_EFFECT_TEACH_TAXI_NODE           = 154,
        SPELL_EFFECT_TITAN_GRIP                = 155,
        SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC    = 156,
    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index c7d9c24..e5eca83 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -194,7 +194,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
        &Spell::EffectUnused,                                   //131 SPELL_EFFECT_131                      used in some test spells
        &Spell::EffectPlayMusic,                                //132 SPELL_EFFECT_PLAY_MUSIC               sound id in misc value (SoundEntries.dbc)
        &Spell::EffectUnlearnSpecialization,                    //133 SPELL_EFFECT_UNLEARN_SPECIALIZATION   unlearn profession specialization
    -    &Spell::EffectKillCredit,                               //134 SPELL_EFFECT_KILL_CREDIT              misc value is creature entry
    +    &Spell::EffectKillCredit,                               //134 SPELL_EFFECT_KILL_CREDIT2             misc value is creature entry
        &Spell::EffectNULL,                                     //135 SPELL_EFFECT_CALL_PET
        &Spell::EffectHealPct,                                  //136 SPELL_EFFECT_HEAL_PCT
        &Spell::EffectEnergisePct,                              //137 SPELL_EFFECT_ENERGIZE_PCT 

  12. Damage must be applied as a percentage:

    diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
    index 69b1279..64ab7f2 100644
    --- a/src/game/SpellEffects.cpp
    +++ b/src/game/SpellEffects.cpp
    @@ -352,6 +352,7 @@ void Spell::EffectSchoolDMG(SpellEffectIndex effect_idx)
                        case 29142:                             // Eyesore Blaster
                        case 35139:                             // Throw Boom's Doom
                        case 49882:                             // Leviroth Self-Impale
    +                    case 55269:                             // Deathly Stare
                        {
                            damage = damage * unitTarget->GetMaxHealth() / 100;
                            break; 

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use