Page 6 of 7 FirstFirst ... 234567 LastLast
Results 76 to 90 of 91

Thread: Bugs Fixing

http://idgs.in/581078
  1. #76
    secreal's Avatar
    Join Date
    Oct 2006
    Location
    bogor
    Posts
    1,533
    Points
    36,503.74
    Thanks: 322 / 346 / 156

    Default

    siapa tau ada yg mau baca2 biar liat dmn salahnya... script yg diupload...
    http://collab.kpsn.org/display/tc/How+to:+Spell+system

  2. Hot Ad
  3. #77
    AdyaMaulana's Avatar
    Join Date
    Mar 2012
    Location
    Yogyakarta
    Posts
    141
    Points
    74.51
    Thanks: 7 / 8 / 5

    Default

    Mau nanya Om Secreal, test servernya cuma buat yang bisa scripting aja ya?
    "I will always watch you... in the shadow."

  4. #78
    secreal's Avatar
    Join Date
    Oct 2006
    Location
    bogor
    Posts
    1,533
    Points
    36,503.74
    Thanks: 322 / 346 / 156

    Default

    Quote Originally Posted by AdyaMaulana View Post
    Mau nanya Om Secreal, test servernya cuma buat yang bisa scripting aja ya?
    buat yg berkepentingan...

  5. #79
    secreal's Avatar
    Join Date
    Oct 2006
    Location
    bogor
    Posts
    1,533
    Points
    36,503.74
    Thanks: 322 / 346 / 156

    Default

    utk yg mau tahu fungsi dari masing2 function, dan asal muasalnya silahkan buka ini
    http://www.trinitycore.net
    search di situ dan dapatkan jawabannya..

  6. #80

    Join Date
    Feb 2012
    Posts
    86
    Points
    146.21
    Thanks: 3 / 7 / 4

    Default

    Quote Originally Posted by secreal View Post
    ini gw **** amat ya maen pake2 ga dibaca
    akwkawkawkaw
    itu...
    spell_warl_soul_swap() : SpellScriptLoader("spell_warl_soul_swap") { }
    tapi di DBnya (86121, "spell_warlock_soul_swap"),
    @_@ pantesan kgk keproc2

    soul swapnya uda jalan, exhalenya uda bisa
    tapi dotnya ga pindah ke momon yg 1 lg
    ini ud gw edit yg di spell_warlock.cpp


    --- SOUL SWAP ---

    di database
    Spoiler untuk database :
    Code:
    DELETE FROM spell_script_names WHERE spell_id IN (86121, 86211, 92795, 86213);
    INSERT INTO spell_script_names (spell_id, ScriptName) VALUES
    (86121, "spell_warlock_soul_swap"),
    (86211, "spell_warlock_soul_swap_override"),
    (92795, "spell_warlock_soul_swap_dot_marker"),
    (86213, "spell_warlock_soul_swap_exhale");


    kemudian di spell_warlock.cpp
    Spoiler untuk spell_warlock.cpp :
    di bagian enum WarlockSpells tambahin
    Spoiler untuk enumWarlockSpells :
    Code:
    SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP                = 56226,
    SPELL_WARLOCK_SOUL_SWAP_CD_MARKER               = 94229,
    SPELL_WARLOCK_SOUL_SWAP_OVERRIDE                = 86211,
    SPELL_WARLOCK_SOUL_SWAP_MOD_COST                = 92794,
    SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER              = 92795


    terus tambahin ini
    Code:
    // 86121 - Soul Swap
    class spell_warl_soul_swap : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap() : SpellScriptLoader("spell_warlock_soul_swap") { }
    
        class spell_warl_soul_swap_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_warl_soul_swap_SpellScript);
    
            bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
            {
                if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP)
                    || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_CD_MARKER)
                    || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    return false;
                return true;
            }
    
            void HandleHit(SpellEffIndex /*effIndex*/)
            {
                GetCaster()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_OVERRIDE, true);
                GetHitUnit()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER, true);
            }
    
            void Register() OVERRIDE
            {
                OnEffectHitTarget += SpellEffectFn(spell_warl_soul_swap_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
            }
        };
    
        SpellScript* GetSpellScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_SpellScript();
        }
    };
    
    // 86211 - Soul Swap Override
    class spell_warl_soul_swap_override : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap_override() : SpellScriptLoader("spell_warlock_soul_swap_override") { }
    
        class spell_warl_soul_swap_override_AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_warl_soul_swap_override_AuraScript);
    
            bool Load() OVERRIDE
            {
                swapCaster = NULL;
                return true;
            }
    
            //! Forced to, pure virtual functions must have a body when linking
            void Register() OVERRIDE { }
    
        public:
            void AddDot(uint32 id)                          { dotList.push_back(id); }
            std::list<uint32> const GetDotList() const      { return dotList; }
            Unit* GetOriginalSwapSource() const             { return swapCaster; }
            void SetOriginalSwapSource(Unit* victim)        { swapCaster = victim; }
    
        private:
            std::list<uint32> dotList;
            Unit* swapCaster;
        };
    
        AuraScript* GetAuraScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_override_AuraScript();
        }
    };
    
    typedef spell_warl_soul_swap_override::spell_warl_soul_swap_override_AuraScript SoulSwapOverrideAuraScript;
    
    //Soul Swap Copy Spells - 92795
    class spell_warl_soul_swap_dot_marker : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap_dot_marker() : SpellScriptLoader("spell_warlock_soul_swap_dot_marker") { }
    
        class spell_warl_soul_swap_dot_marker_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_warl_soul_swap_dot_marker_SpellScript);
    
            void HandleHit(SpellEffIndex effIndex)
            {
                Unit* swapVictim = GetCaster();
                Unit* warlock    = GetHitUnit();
                if (!warlock || !swapVictim)
                    return;
    
                flag96 classMask = GetSpellInfo()->Effects[effIndex].SpellClassMask;
    
                Unit::AuraApplicationMap const& appliedAuras = swapVictim->GetAppliedAuras();
                SoulSwapOverrideAuraScript* swapSpellScript = NULL;
                if (Aura* swapOverrideAura = warlock->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    swapSpellScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverrideAura->GetScriptByName("spell_warlock_soul_swap_override"));
    
                if (swapSpellScript == NULL)
                    return;
    
                for (Unit::AuraApplicationMap::const_iterator itr = appliedAuras.begin(); itr != appliedAuras.end(); ++itr)
                {
                    SpellInfo const* spellProto = itr->second->GetBase()->GetSpellInfo();
                    if (itr->second->GetBase()->GetCaster() == warlock)
                        if (spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && (spellProto->SpellFamilyFlags & classMask))
                            swapSpellScript->AddDot(itr->first);
                }
    
                swapSpellScript->SetOriginalSwapSource(swapVictim);
            }
    
            void Register() OVERRIDE
            {
                OnEffectHitTarget += SpellEffectFn(spell_warl_soul_swap_dot_marker_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_DUMMY);
            }
        };
    
        SpellScript* GetSpellScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_dot_marker_SpellScript();
        }
    };
    
    // 86213 - Soul Swap Exhale
    class spell_warl_soul_swap_exhale : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap_exhale() : SpellScriptLoader("spell_warlock_soul_swap_exhale") { }
    
        class spell_warl_soul_swap_exhale_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_warl_soul_swap_exhale_SpellScript);
    
            bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
            {
                if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_MOD_COST) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    return false;
                return true;
            }
    
            SpellCastResult CheckCast()
            {
                Unit* currentTarget = GetExplTargetUnit();
                Unit* swapTarget = NULL;
                if (Aura const* swapOverride = GetCaster()->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    if (SoulSwapOverrideAuraScript* swapScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverride->GetScriptByName("spell_warlock_soul_swap_override")))
                        swapTarget = swapScript->GetOriginalSwapSource();
    
                // Soul Swap Exhale can't be cast on the same target than Soul Swap
                if (swapTarget && currentTarget && swapTarget == currentTarget)
                    return SPELL_FAILED_BAD_TARGETS;
    
                return SPELL_CAST_OK;
            }
    
            void OnEffectHit(SpellEffIndex /*effIndex*/)
            {
                GetCaster()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_MOD_COST, true);
                bool hasGlyph = GetCaster()->HasAura(SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP);
    
                std::list<uint32> dotList;
                Unit* swapSource = NULL;
                if (Aura const* swapOverride = GetCaster()->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                {
                    SoulSwapOverrideAuraScript* swapScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverride->GetScriptByName("spell_warlock_soul_swap_override"));
                    if (!swapScript)
                        return;
                    dotList = swapScript->GetDotList();
                    swapSource = swapScript->GetOriginalSwapSource();
                }
    
                if (dotList.empty())
                    return;
    
                for (std::list<uint32>::const_iterator itr = dotList.begin(); itr != dotList.end(); ++itr)
                {
                    GetCaster()->AddAura(*itr, GetHitUnit());
                    if (!hasGlyph && swapSource)
                        swapSource->RemoveAurasDueToSpell(*itr);
                }
    
                // Remove Soul Swap Exhale buff
                GetCaster()->RemoveAurasDueToSpell(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE);
    
                if (hasGlyph) // Add a cooldown on Soul Swap if caster has the glyph
                    GetCaster()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_CD_MARKER, false);
            }
    
            void Register() OVERRIDE
            {
                OnCheckCast += SpellCheckCastFn(spell_warl_soul_swap_exhale_SpellScript::CheckCast);
                OnEffectHitTarget += SpellEffectFn(spell_warl_soul_swap_exhale_SpellScript::OnEffectHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
            }
        };
    
        SpellScript* GetSpellScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_exhale_SpellScript();
        }
    };

    terus di bagian AddSC_warlock_spell_scripts tambahin
    Spoiler untuk AddSC_warlock_spell_scripts :
    Code:
    new spell_warl_soul_swap();
    new spell_warl_soul_swap_dot_marker();
    new spell_warl_soul_swap_exhale();
    new spell_warl_soul_swap_override();

  7. #81
    secreal's Avatar
    Join Date
    Oct 2006
    Location
    bogor
    Posts
    1,533
    Points
    36,503.74
    Thanks: 322 / 346 / 156

    Default

    Quote Originally Posted by bloodyx View Post
    ini ud gw edit yg di spell_warlock.cpp


    --- SOUL SWAP ---

    di database
    Spoiler untuk database :
    Code:
    DELETE FROM spell_script_names WHERE spell_id IN (86121, 86211, 92795, 86213);
    INSERT INTO spell_script_names (spell_id, ScriptName) VALUES
    (86121, "spell_warlock_soul_swap"),
    (86211, "spell_warlock_soul_swap_override"),
    (92795, "spell_warlock_soul_swap_dot_marker"),
    (86213, "spell_warlock_soul_swap_exhale");


    kemudian di spell_warlock.cpp
    Spoiler untuk spell_warlock.cpp :
    di bagian enum WarlockSpells tambahin
    Spoiler untuk enumWarlockSpells :
    Code:
    SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP                = 56226,
    SPELL_WARLOCK_SOUL_SWAP_CD_MARKER               = 94229,
    SPELL_WARLOCK_SOUL_SWAP_OVERRIDE                = 86211,
    SPELL_WARLOCK_SOUL_SWAP_MOD_COST                = 92794,
    SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER              = 92795


    terus tambahin ini
    Code:
    // 86121 - Soul Swap
    class spell_warl_soul_swap : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap() : SpellScriptLoader("spell_warlock_soul_swap") { }
    
        class spell_warl_soul_swap_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_warl_soul_swap_SpellScript);
    
            bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
            {
                if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP)
                    || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_CD_MARKER)
                    || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    return false;
                return true;
            }
    
            void HandleHit(SpellEffIndex /*effIndex*/)
            {
                GetCaster()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_OVERRIDE, true);
                GetHitUnit()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER, true);
            }
    
            void Register() OVERRIDE
            {
                OnEffectHitTarget += SpellEffectFn(spell_warl_soul_swap_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
            }
        };
    
        SpellScript* GetSpellScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_SpellScript();
        }
    };
    
    // 86211 - Soul Swap Override
    class spell_warl_soul_swap_override : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap_override() : SpellScriptLoader("spell_warlock_soul_swap_override") { }
    
        class spell_warl_soul_swap_override_AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_warl_soul_swap_override_AuraScript);
    
            bool Load() OVERRIDE
            {
                swapCaster = NULL;
                return true;
            }
    
            //! Forced to, pure virtual functions must have a body when linking
            void Register() OVERRIDE { }
    
        public:
            void AddDot(uint32 id)                          { dotList.push_back(id); }
            std::list<uint32> const GetDotList() const      { return dotList; }
            Unit* GetOriginalSwapSource() const             { return swapCaster; }
            void SetOriginalSwapSource(Unit* victim)        { swapCaster = victim; }
    
        private:
            std::list<uint32> dotList;
            Unit* swapCaster;
        };
    
        AuraScript* GetAuraScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_override_AuraScript();
        }
    };
    
    typedef spell_warl_soul_swap_override::spell_warl_soul_swap_override_AuraScript SoulSwapOverrideAuraScript;
    
    //Soul Swap Copy Spells - 92795
    class spell_warl_soul_swap_dot_marker : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap_dot_marker() : SpellScriptLoader("spell_warlock_soul_swap_dot_marker") { }
    
        class spell_warl_soul_swap_dot_marker_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_warl_soul_swap_dot_marker_SpellScript);
    
            void HandleHit(SpellEffIndex effIndex)
            {
                Unit* swapVictim = GetCaster();
                Unit* warlock    = GetHitUnit();
                if (!warlock || !swapVictim)
                    return;
    
                flag96 classMask = GetSpellInfo()->Effects[effIndex].SpellClassMask;
    
                Unit::AuraApplicationMap const& appliedAuras = swapVictim->GetAppliedAuras();
                SoulSwapOverrideAuraScript* swapSpellScript = NULL;
                if (Aura* swapOverrideAura = warlock->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    swapSpellScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverrideAura->GetScriptByName("spell_warlock_soul_swap_override"));
    
                if (swapSpellScript == NULL)
                    return;
    
                for (Unit::AuraApplicationMap::const_iterator itr = appliedAuras.begin(); itr != appliedAuras.end(); ++itr)
                {
                    SpellInfo const* spellProto = itr->second->GetBase()->GetSpellInfo();
                    if (itr->second->GetBase()->GetCaster() == warlock)
                        if (spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && (spellProto->SpellFamilyFlags & classMask))
                            swapSpellScript->AddDot(itr->first);
                }
    
                swapSpellScript->SetOriginalSwapSource(swapVictim);
            }
    
            void Register() OVERRIDE
            {
                OnEffectHitTarget += SpellEffectFn(spell_warl_soul_swap_dot_marker_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_DUMMY);
            }
        };
    
        SpellScript* GetSpellScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_dot_marker_SpellScript();
        }
    };
    
    // 86213 - Soul Swap Exhale
    class spell_warl_soul_swap_exhale : public SpellScriptLoader
    {
    public:
        spell_warl_soul_swap_exhale() : SpellScriptLoader("spell_warlock_soul_swap_exhale") { }
    
        class spell_warl_soul_swap_exhale_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_warl_soul_swap_exhale_SpellScript);
    
            bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
            {
                if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_MOD_COST) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    return false;
                return true;
            }
    
            SpellCastResult CheckCast()
            {
                Unit* currentTarget = GetExplTargetUnit();
                Unit* swapTarget = NULL;
                if (Aura const* swapOverride = GetCaster()->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                    if (SoulSwapOverrideAuraScript* swapScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverride->GetScriptByName("spell_warlock_soul_swap_override")))
                        swapTarget = swapScript->GetOriginalSwapSource();
    
                // Soul Swap Exhale can't be cast on the same target than Soul Swap
                if (swapTarget && currentTarget && swapTarget == currentTarget)
                    return SPELL_FAILED_BAD_TARGETS;
    
                return SPELL_CAST_OK;
            }
    
            void OnEffectHit(SpellEffIndex /*effIndex*/)
            {
                GetCaster()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_MOD_COST, true);
                bool hasGlyph = GetCaster()->HasAura(SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP);
    
                std::list<uint32> dotList;
                Unit* swapSource = NULL;
                if (Aura const* swapOverride = GetCaster()->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))
                {
                    SoulSwapOverrideAuraScript* swapScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverride->GetScriptByName("spell_warlock_soul_swap_override"));
                    if (!swapScript)
                        return;
                    dotList = swapScript->GetDotList();
                    swapSource = swapScript->GetOriginalSwapSource();
                }
    
                if (dotList.empty())
                    return;
    
                for (std::list<uint32>::const_iterator itr = dotList.begin(); itr != dotList.end(); ++itr)
                {
                    GetCaster()->AddAura(*itr, GetHitUnit());
                    if (!hasGlyph && swapSource)
                        swapSource->RemoveAurasDueToSpell(*itr);
                }
    
                // Remove Soul Swap Exhale buff
                GetCaster()->RemoveAurasDueToSpell(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE);
    
                if (hasGlyph) // Add a cooldown on Soul Swap if caster has the glyph
                    GetCaster()->CastSpell(GetCaster(), SPELL_WARLOCK_SOUL_SWAP_CD_MARKER, false);
            }
    
            void Register() OVERRIDE
            {
                OnCheckCast += SpellCheckCastFn(spell_warl_soul_swap_exhale_SpellScript::CheckCast);
                OnEffectHitTarget += SpellEffectFn(spell_warl_soul_swap_exhale_SpellScript::OnEffectHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
            }
        };
    
        SpellScript* GetSpellScript() const OVERRIDE
        {
            return new spell_warl_soul_swap_exhale_SpellScript();
        }
    };

    terus di bagian AddSC_warlock_spell_scripts tambahin
    Spoiler untuk AddSC_warlock_spell_scripts :
    Code:
    new spell_warl_soul_swap();
    new spell_warl_soul_swap_dot_marker();
    new spell_warl_soul_swap_exhale();
    new spell_warl_soul_swap_override();

    ini yg berubah?

    Code:
    src/server/scripts/Spells/spell_warlock.cpp | 14 +++++++------- 1 file changed, 7 insertions(+)
    , 7 deletions(-)diff --git a/src/server/scripts/Spells/spell_warlock.cpp
    b/src/server/scripts/Spells/spell_warlock.cppindex b6b4a55..59ad71b 100755--- a/src/server/scripts/Spells/spell_warlock.cpp+++ b/src/server/scripts/Spells/spell_warlock.cpp@@ -46,7 +46,6 @@ enum WarlockSpells     SPELL_WARLOCK_DEMON_SOUL_VOIDWALKER             = 79454,     SPELL_WARLOCK_FEL_SYNERGY_HEAL                  = 54181,     SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE              = 63106,-    SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP                = 56226,     SPELL_WARLOCK_HAUNT                             = 48181,     SPELL_WARLOCK_HAUNT_HEAL                        = 48210,     SPELL_WARLOCK_IMMOLATE                          = 348,@@ -63,10 +62,11 @@ enum WarlockSpells     SPELL_WARLOCK_UNSTABLE_AFFLICTION               = 30108,     SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL        = 31117,    SPELL_WARLOCK_DRAIN_LIFE                        = 89653,+    SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP                = 56226,     SPELL_WARLOCK_SOUL_SWAP_CD_MARKER               = 94229,     SPELL_WARLOCK_SOUL_SWAP_OVERRIDE                = 86211,     SPELL_WARLOCK_SOUL_SWAP_MOD_COST                = 92794,-    SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER              = 92795,+    SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER              = 92795 };  enum WarlockSpellIcons@@ -1010,7 +1010,7 @@ public: class spell_warl_soul_swap : public SpellScriptLoader { public:-    spell_warl_soul_swap() : SpellScriptLoader("spell_warl_soul_swap") { }+    spell_warl_soul_swap() : SpellScriptLoader("spell_warlock_soul_swap") { }      class spell_warl_soul_swap_SpellScript : public SpellScript     {@@ -1047,7 +1047,7 @@ public: class spell_warl_soul_swap_override : public SpellScriptLoader { public:-    spell_warl_soul_swap_override() : SpellScriptLoader("spell_warl_soul_swap_override") { }+    spell_warl_soul_swap_override() : SpellScriptLoader("spell_warlock_soul_swap_override") { }      class spell_warl_soul_swap_override_AuraScript : public AuraScript     {@@ -1085,7 +1085,7 @@ typedef spell_warl_soul_swap_override::spell_warl_soul_swap_override_AuraScript class spell_warl_soul_swap_dot_marker : public SpellScriptLoader { public:-    spell_warl_soul_swap_dot_marker() : SpellScriptLoader("spell_warl_soul_swap_dot_marker") { }+    spell_warl_soul_swap_dot_marker() : SpellScriptLoader("spell_warlock_soul_swap_dot_marker") { }      class spell_warl_soul_swap_dot_marker_SpellScript : public SpellScript     {@@ -1103,7 +1103,7 @@ public:             Unit::AuraApplicationMap const& appliedAuras = swapVictim->GetAppliedAuras();             SoulSwapOverrideAuraScript* swapSpellScript = NULL;             if (Aura* swapOverrideAura = warlock->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))-                swapSpellScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverrideAura->GetScriptByName("spell_warl_soul_swap_override"));+                swapSpellScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverrideAura->GetScriptByName("spell_warlock_soul_swap_override"));              if (swapSpellScript == NULL)                 return;@@ -1135,7 +1135,7 @@ public: class spell_warl_soul_swap_exhale : public SpellScriptLoader { public:-    spell_warl_soul_swap_exhale() : SpellScriptLoader("spell_warl_soul_swap_exhale") { }+    spell_warl_soul_swap_exhale() : SpellScriptLoader("spell_warlock_soul_swap_exhale") { }      class spell_warl_soul_swap_exhale_SpellScript : public SpellScript     {-- 1.8.3.msysgit.0

  8. #82

    Join Date
    Feb 2012
    Posts
    86
    Points
    146.21
    Thanks: 3 / 7 / 4

    Default

    Quote Originally Posted by secreal View Post
    ini yg berubah?

    Code:
    src/server/scripts/Spells/spell_warlock.cpp | 14 +++++++------- 1 file changed, 7 insertions(+)
    , 7 deletions(-)diff --git a/src/server/scripts/Spells/spell_warlock.cpp
    b/src/server/scripts/Spells/spell_warlock.cppindex b6b4a55..59ad71b 100755--- a/src/server/scripts/Spells/spell_warlock.cpp+++ b/src/server/scripts/Spells/spell_warlock.cpp@@ -46,7 +46,6 @@ enum WarlockSpells     SPELL_WARLOCK_DEMON_SOUL_VOIDWALKER             = 79454,     SPELL_WARLOCK_FEL_SYNERGY_HEAL                  = 54181,     SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE              = 63106,-    SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP                = 56226,     SPELL_WARLOCK_HAUNT                             = 48181,     SPELL_WARLOCK_HAUNT_HEAL                        = 48210,     SPELL_WARLOCK_IMMOLATE                          = 348,@@ -63,10 +62,11 @@ enum WarlockSpells     SPELL_WARLOCK_UNSTABLE_AFFLICTION               = 30108,     SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL        = 31117,    SPELL_WARLOCK_DRAIN_LIFE                        = 89653,+    SPELL_WARLOCK_GLYPH_OF_SOUL_SWAP                = 56226,     SPELL_WARLOCK_SOUL_SWAP_CD_MARKER               = 94229,     SPELL_WARLOCK_SOUL_SWAP_OVERRIDE                = 86211,     SPELL_WARLOCK_SOUL_SWAP_MOD_COST                = 92794,-    SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER              = 92795,+    SPELL_WARLOCK_SOUL_SWAP_DOT_MARKER              = 92795 };  enum WarlockSpellIcons@@ -1010,7 +1010,7 @@ public: class spell_warl_soul_swap : public SpellScriptLoader { public:-    spell_warl_soul_swap() : SpellScriptLoader("spell_warl_soul_swap") { }+    spell_warl_soul_swap() : SpellScriptLoader("spell_warlock_soul_swap") { }      class spell_warl_soul_swap_SpellScript : public SpellScript     {@@ -1047,7 +1047,7 @@ public: class spell_warl_soul_swap_override : public SpellScriptLoader { public:-    spell_warl_soul_swap_override() : SpellScriptLoader("spell_warl_soul_swap_override") { }+    spell_warl_soul_swap_override() : SpellScriptLoader("spell_warlock_soul_swap_override") { }      class spell_warl_soul_swap_override_AuraScript : public AuraScript     {@@ -1085,7 +1085,7 @@ typedef spell_warl_soul_swap_override::spell_warl_soul_swap_override_AuraScript class spell_warl_soul_swap_dot_marker : public SpellScriptLoader { public:-    spell_warl_soul_swap_dot_marker() : SpellScriptLoader("spell_warl_soul_swap_dot_marker") { }+    spell_warl_soul_swap_dot_marker() : SpellScriptLoader("spell_warlock_soul_swap_dot_marker") { }      class spell_warl_soul_swap_dot_marker_SpellScript : public SpellScript     {@@ -1103,7 +1103,7 @@ public:             Unit::AuraApplicationMap const& appliedAuras = swapVictim->GetAppliedAuras();             SoulSwapOverrideAuraScript* swapSpellScript = NULL;             if (Aura* swapOverrideAura = warlock->GetAura(SPELL_WARLOCK_SOUL_SWAP_OVERRIDE))-                swapSpellScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverrideAura->GetScriptByName("spell_warl_soul_swap_override"));+                swapSpellScript = dynamic_cast<SoulSwapOverrideAuraScript*>(swapOverrideAura->GetScriptByName("spell_warlock_soul_swap_override"));              if (swapSpellScript == NULL)                 return;@@ -1135,7 +1135,7 @@ public: class spell_warl_soul_swap_exhale : public SpellScriptLoader { public:-    spell_warl_soul_swap_exhale() : SpellScriptLoader("spell_warl_soul_swap_exhale") { }+    spell_warl_soul_swap_exhale() : SpellScriptLoader("spell_warlock_soul_swap_exhale") { }      class spell_warl_soul_swap_exhale_SpellScript : public SpellScript     {-- 1.8.3.msysgit.0
    yup,, gw cmn ubah biar sama ama field scriptname dari db,,
    Code:
    -    spell_warl_soul_swap() : SpellScriptLoader("spell_warl_soul_swap") { }
    +    spell_warl_soul_swap() : SpellScriptLoader("spell_warlock_soul_swap") { }
    bener kan field scriptname ny make yg "spell_warlock_soul_swap%" ??

  9. #83
    secreal's Avatar
    Join Date
    Oct 2006
    Location
    bogor
    Posts
    1,533
    Points
    36,503.74
    Thanks: 322 / 346 / 156

    Default

    Quote Originally Posted by bloodyx View Post
    yup,, gw cmn ubah biar sama ama field scriptname dari db,,
    Code:
    -    spell_warl_soul_swap() : SpellScriptLoader("spell_warl_soul_swap") { }
    +    spell_warl_soul_swap() : SpellScriptLoader("spell_warlock_soul_swap") { }
    bener kan field scriptname ny make yg "spell_warlock_soul_swap%" ??
    yg itu mah uda ane samain waktu situ kasi scriptnya...
    yg error bukan yg itu...
    hehehe

  10. #84

    Join Date
    Feb 2012
    Posts
    86
    Points
    146.21
    Thanks: 3 / 7 / 4

    Default

    Quote Originally Posted by secreal View Post
    yg itu mah uda ane samain waktu situ kasi scriptnya...
    yg error bukan yg itu...
    hehehe
    itu ada 7 insertions(+), 7 deletions(-)

    ke-7 ny semua ud yah??

  11. #85

    Join Date
    Feb 2012
    Posts
    86
    Points
    146.21
    Thanks: 3 / 7 / 4

    Default

    oke ane barusan nyoba di test server,,, soul swap fixed,, thx secreal

  12. #86
    yogzh's Avatar
    Join Date
    Jul 2013
    Posts
    5
    Points
    0.05
    Thanks: 0 / 0 / 0

    Default

    bisa bantu script quest di twilight highland?

    quest: Once more into the fire
    npc: Cayden Dunwald

    disini npc nya ada 3 biji seharusnya ada 1.

  13. #87
    secreal's Avatar
    Join Date
    Oct 2006
    Location
    bogor
    Posts
    1,533
    Points
    36,503.74
    Thanks: 322 / 346 / 156

    Default

    baiklah... mau ngomong dari mana...
    semua yg di sini sudah diapply ke server kita
    namun dikarenakan si TrinityCore ganti function2 core mereka setiap minggu selama 4 bulan ini..
    semua script2 ini menjadi tdk bisa dipakai lagi di Revisi yg semakin baru...
    dikarenakan beberapa script yg berada di sini adalah custom script (disebut custom artinya bukan fresh dari TrinityCore), pada saat si TrintiyCore mengupdate semua script mereka berdasarkan kata2 yg baru mereka terapkan, kata2 yg dipakai oleh script2 di sini byk yg berubah sehingga tidak bisa dipakai lagi, karena sudah menggunakan kata yg berbeda... jadi jika ada yg ingin membantu selanjutnya mungkin hanya dalam bentuk SQL saja.. karena perubahan di SQL tidak terlalu drastis, hanya drastis di bagian smart_scripts saja
    ... ... ...
    ada solusinya?

  14. #88

    Join Date
    Feb 2012
    Posts
    86
    Points
    146.21
    Thanks: 3 / 7 / 4

    Default

    Quote Originally Posted by secreal View Post
    resillience masih error?
    ini uda diapply dari 2 bulan lalu ternyata...
    Quote Originally Posted by Achernar_Altair View Post
    Description : good bye bug abuser, no more Bloodthirsty user rusuh2 berasa dewa di hit damage masuk tinggal 1/4 apa cobak, with this fix, combat rating formula udah difix jadi formula Cata, bukan formula Wotlk sperti skarang

    Reference : here

    Code : spertinya this code goes to /src/server/game/Entities/Unit/Unit.cpp, not really sure karena g dikasih penjelasan

    Spoiler untuk C++ :

    Code:
    From 732d4af506bdddf0bad638b2737517bf5dc9502c Mon Sep 17 00:00:00 2001
    From: Northstrider <[email protected]>
    Date: Wed, 6 Feb 2013 19:13:31 +0100
    Subject: [PATCH] Core/Units: updated combat damage reduction to cataclysm.
     this will fix the relisience damage bug.
    
    ---
     src/server/game/Entities/Unit/Unit.cpp |   21 +++++++++++++--------
     1 file changed, 13 insertions(+), 8 deletions(-)
    
    diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
    index 37fbf93..17516d7 100644
    --- a/src/server/game/Entities/Unit/Unit.cpp
    +++ b/src/server/game/Entities/Unit/Unit.cpp
    @@ -15741,20 +15741,25 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ)
     
     float Unit::GetCombatRatingReduction(CombatRating cr) const
     {
    -    if (Player const* player = ToPlayer())
    -        return player->GetRatingBonusValue(cr);
    -    // Player's pet get resilience from owner
    -    else if (isPet() && GetOwner())
    -        if (Player* owner = GetOwner()->ToPlayer())
    -            return owner->GetRatingBonusValue(cr);
    +    if (GetTypeId() == TYPEID_PLAYER)
    +        return ((Player const*)this)->GetRatingBonusValue(cr);
    +    else if (((Creature const*)this)->isPet())
    +    {
    +        // Player's pet get resilience from owner
    +        if (Unit* owner = GetOwner())
    +            if (owner->GetTypeId() == TYPEID_PLAYER)
    +                return ((Player*)owner)->GetRatingBonusValue(cr);
    +    }
     
         return 0.0f;
     }
     
     uint32 Unit::GetCombatRatingDamageReduction(CombatRating cr, float rate, float cap, uint32 damage) const
     {
    -    float percent = std::min(GetCombatRatingReduction(cr) * rate, cap);
    -    return CalculatePct(damage, percent);
    +    float percent = GetCombatRatingReduction(cr) * rate;
    +    if (percent > cap)
    +        percent = cap;
    +    return uint32 (percent * damage / 100.0f);
     }
     
     uint32 Unit::GetModelForForm(ShapeshiftForm form) const
    -- 
    1.7.10.msysgit.1



    Status : jelas blom saya test sendiri

    klo gw liat di scriptny, resi masih ngurangin crit damage (padahal di cata ud gk ada, tp di ampm masih ad),, terus formula resi brubah di cata sejak patch 4.1,, sdgkn di ampm masih make formula wotlk,,

    jd ane buat script sendiri,,

    Spoiler untuk ngilangin reduce crit damage :

    /src/server/game/Entities/Unit/Unit.cpp
    Spoiler untuk unit.cpp :

    Spoiler untuk 1 :
    Code:
     void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 damage, SpellInfo const* spellInfo, WeaponAttackType attackType, bool crit)
     {
        if (damage < 0)
            return;
    
        Unit* victim = damageInfo->target;
        if (!victim || !victim->IsAlive())
            return;
    
        SpellSchoolMask damageSchoolMask = SpellSchoolMask(damageInfo->schoolMask);
    
        if (IsDamageReducedByArmor(damageSchoolMask, spellInfo))
            damage = CalcArmorReducedDamage(victim, damage, spellInfo, attackType);
    
        bool blocked = false;
        // Per-school calc
        switch (spellInfo->DmgClass)
        {
            // Melee and Ranged Spells
            case SPELL_DAMAGE_CLASS_RANGED:
            case SPELL_DAMAGE_CLASS_MELEE:
            {
                // Physical Damage
                if (damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL)
                {
                    // Get blocked status
                    blocked = isSpellBlocked(victim, spellInfo, attackType);
                }
    
                if (crit)
                {
                    damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
    
                    // Calculate crit bonus
                    uint32 crit_bonus = damage;
                    // Apply crit_damage bonus for melee spells
                    if (Player* modOwner = GetSpellModOwner())
                        modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus);
                    damage += crit_bonus;
    
                    // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
                    float critPctDamageMod = 0.0f;
                    if (attackType == RANGED_ATTACK)
                        critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
                    else
                        critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
    
                    // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
                    critPctDamageMod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellInfo->GetSchoolMask()) - 1.0f) * 100;
    
                    if (critPctDamageMod != 0)
                        AddPct(damage, critPctDamageMod);
                }
    
                // Spell weapon based damage CAN BE crit & blocked at same time
                if (blocked)
                {
                    // double blocked amount if block is critical
                    uint32 value = victim->GetBlockPercent();
                    if (victim->isBlockCritical())
                        value *= 2; // double blocked percent
                    damageInfo->blocked = CalculatePct(damage, value);
                    damage -= damageInfo->blocked;
                }
    
    -           ApplyResilience(victim, &damage, crit);
    +	    ApplyResilience(victim, &damage);
                break;
            }
            // Magical Attacks
            case SPELL_DAMAGE_CLASS_NONE:
            case SPELL_DAMAGE_CLASS_MAGIC:
            {
                // If crit add critical bonus
                if (crit)
                {
                    damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT;
                    damage = SpellCriticalDamageBonus(spellInfo, damage, victim);
                }
    
    -           ApplyResilience(victim, &damage, crit);
    +	    ApplyResilience(victim, &damage);
                break;
            }
            default:
                break;
        }
    
        // Script Hook For CalculateSpellDamageTaken -- Allow scripts to change the Damage post class mitigation calculations
        sScriptMgr->ModifySpellDamageTaken(damageInfo->target, damageInfo->attacker, damage);
    
        // Calculate absorb resist
        if (damage > 0)
        {
            CalcAbsorbResist(victim, damageSchoolMask, SPELL_DIRECT_DAMAGE, damage, &damageInfo->absorb, &damageInfo->resist, spellInfo);
            damage -= damageInfo->absorb + damageInfo->resist;
        }
        else
            damage = 0;
    
        damageInfo->damage = damage;
     }

    Spoiler untuk 2 :
    Code:
     void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* damageInfo, WeaponAttackType attackType)
     {
        damageInfo->attacker         = this;
        damageInfo->target           = victim;
        damageInfo->damageSchoolMask = GetMeleeDamageSchoolMask();
        damageInfo->attackType       = attackType;
        damageInfo->damage           = 0;
        damageInfo->cleanDamage      = 0;
        damageInfo->absorb           = 0;
        damageInfo->resist           = 0;
        damageInfo->blocked_amount   = 0;
    
        damageInfo->TargetState      = 0;
        damageInfo->HitInfo          = 0;
        damageInfo->procAttacker     = PROC_FLAG_NONE;
        damageInfo->procVictim       = PROC_FLAG_NONE;
        damageInfo->procEx           = PROC_EX_NONE;
        damageInfo->hitOutCome       = MELEE_HIT_EVADE;
    
        if (!victim)
            return;
    
        if (!IsAlive() || !victim->IsAlive())
            return;
    
        // Select HitInfo/procAttacker/procVictim flag based on attack type
        switch (attackType)
        {
            case BASE_ATTACK:
                damageInfo->procAttacker = PROC_FLAG_DONE_MELEE_AUTO_ATTACK | PROC_FLAG_DONE_MAINHAND_ATTACK;
                damageInfo->procVictim   = PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK;
                break;
            case OFF_ATTACK:
                damageInfo->procAttacker = PROC_FLAG_DONE_MELEE_AUTO_ATTACK | PROC_FLAG_DONE_OFFHAND_ATTACK;
                damageInfo->procVictim   = PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK;
                damageInfo->HitInfo      = HITINFO_OFFHAND;
                break;
            default:
                return;
        }
    
        // Physical Immune check
        if (damageInfo->target->IsImmunedToDamage(SpellSchoolMask(damageInfo->damageSchoolMask)))
        {
           damageInfo->HitInfo       |= HITINFO_NORMALSWING;
           damageInfo->TargetState    = VICTIMSTATE_IS_IMMUNE;
    
           damageInfo->procEx        |= PROC_EX_IMMUNE;
           damageInfo->damage         = 0;
           damageInfo->cleanDamage    = 0;
           return;
        }
    
        damage += CalculateDamage(damageInfo->attackType, false, true);
        // Add melee damage bonus
        damage = MeleeDamageBonusDone(damageInfo->target, damage, damageInfo->attackType);
        damage = damageInfo->target->MeleeDamageBonusTaken(this, damage, damageInfo->attackType);
    
        // Script Hook For CalculateMeleeDamage -- Allow scripts to change the Damage pre class mitigation calculations
        sScriptMgr->ModifyMeleeDamage(damageInfo->target, damageInfo->attacker, damage);
    
        // Calculate armor reduction
        if (IsDamageReducedByArmor((SpellSchoolMask)(damageInfo->damageSchoolMask)))
        {
            damageInfo->damage = CalcArmorReducedDamage(damageInfo->target, damage, NULL, damageInfo->attackType);
            damageInfo->cleanDamage += damage - damageInfo->damage;
        }
        else
            damageInfo->damage = damage;
    
        damageInfo->hitOutCome = RollMeleeOutcomeAgainst(damageInfo->target, damageInfo->attackType);
    
        switch (damageInfo->hitOutCome)
        {
            case MELEE_HIT_EVADE:
                damageInfo->HitInfo        |= HITINFO_MISS | HITINFO_SWINGNOHITSOUND;
                damageInfo->TargetState     = VICTIMSTATE_EVADES;
                damageInfo->procEx         |= PROC_EX_EVADE;
                damageInfo->damage = 0;
                damageInfo->cleanDamage = 0;
                return;
            case MELEE_HIT_MISS:
                damageInfo->HitInfo        |= HITINFO_MISS;
                damageInfo->TargetState     = VICTIMSTATE_INTACT;
                damageInfo->procEx         |= PROC_EX_MISS;
                damageInfo->damage          = 0;
                damageInfo->cleanDamage     = 0;
                break;
            case MELEE_HIT_NORMAL:
                damageInfo->TargetState     = VICTIMSTATE_HIT;
                damageInfo->procEx         |= PROC_EX_NORMAL_HIT;
                break;
            case MELEE_HIT_CRIT:
            {
                damageInfo->HitInfo        |= HITINFO_CRITICALHIT;
                damageInfo->TargetState     = VICTIMSTATE_HIT;
    
                damageInfo->procEx         |= PROC_EX_CRITICAL_HIT;
                // Crit bonus calc
                damageInfo->damage += damageInfo->damage;
                float mod = 0.0f;
                // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
                if (damageInfo->attackType == RANGED_ATTACK)
                    mod += damageInfo->target->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
                else
                    mod += damageInfo->target->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
    
                // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
                mod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, damageInfo->damageSchoolMask) - 1.0f) * 100;
    
                if (mod != 0)
                    AddPct(damageInfo->damage, mod);
                break;
            }
            case MELEE_HIT_PARRY:
                damageInfo->TargetState  = VICTIMSTATE_PARRY;
                damageInfo->procEx      |= PROC_EX_PARRY;
                damageInfo->cleanDamage += damageInfo->damage;
                damageInfo->damage = 0;
                break;
            case MELEE_HIT_DODGE:
                damageInfo->TargetState  = VICTIMSTATE_DODGE;
                damageInfo->procEx      |= PROC_EX_DODGE;
                damageInfo->cleanDamage += damageInfo->damage;
                damageInfo->damage = 0;
                break;
            case MELEE_HIT_BLOCK:
                damageInfo->TargetState = VICTIMSTATE_HIT;
                damageInfo->HitInfo    |= HITINFO_BLOCK;
                damageInfo->procEx     |= PROC_EX_BLOCK | PROC_EX_NORMAL_HIT;
                // 30% damage blocked, double blocked amount if block is critical
                damageInfo->blocked_amount = CalculatePct(damageInfo->damage, damageInfo->target->isBlockCritical() ? damageInfo->target->GetBlockPercent() * 2 : damageInfo->target->GetBlockPercent());
                damageInfo->damage      -= damageInfo->blocked_amount;
                damageInfo->cleanDamage += damageInfo->blocked_amount;
                break;
            case MELEE_HIT_GLANCING:
            {
                damageInfo->HitInfo     |= HITINFO_GLANCING;
                damageInfo->TargetState  = VICTIMSTATE_HIT;
                damageInfo->procEx      |= PROC_EX_NORMAL_HIT;
                int32 leveldif = int32(victim->getLevel()) - int32(getLevel());
                if (leveldif > 3)
                    leveldif = 3;
                float reducePercent = 1 - leveldif * 0.1f;
                damageInfo->cleanDamage += damageInfo->damage - uint32(reducePercent * damageInfo->damage);
                damageInfo->damage = uint32(reducePercent * damageInfo->damage);
                break;
            }
            case MELEE_HIT_CRUSHING:
                damageInfo->HitInfo     |= HITINFO_CRUSHING;
                damageInfo->TargetState  = VICTIMSTATE_HIT;
                damageInfo->procEx      |= PROC_EX_NORMAL_HIT;
                // 150% normal damage
                damageInfo->damage += (damageInfo->damage / 2);
                break;
            default:
                break;
        }
    
        // Always apply HITINFO_AFFECTS_VICTIM in case its not a miss
        if (!(damageInfo->HitInfo & HITINFO_MISS))
            damageInfo->HitInfo |= HITINFO_AFFECTS_VICTIM;
    
        int32 resilienceReduction = damageInfo->damage;
    -   ApplyResilience(victim, &resilienceReduction, damageInfo->hitOutCome == MELEE_HIT_CRIT);
    +   ApplyResilience(victim, &resilienceReduction);
        resilienceReduction = damageInfo->damage - resilienceReduction;
        damageInfo->damage      -= resilienceReduction;
        damageInfo->cleanDamage += resilienceReduction;
    
        // Calculate absorb resist
        if (int32(damageInfo->damage) > 0)
        {
            damageInfo->procVictim |= PROC_FLAG_TAKEN_DAMAGE;
            // Calculate absorb & resists
            CalcAbsorbResist(damageInfo->target, SpellSchoolMask(damageInfo->damageSchoolMask), DIRECT_DAMAGE, damageInfo->damage, &damageInfo->absorb, &damageInfo->resist);
    
            if (damageInfo->absorb)
            {
                damageInfo->HitInfo |= (damageInfo->damage - damageInfo->absorb == 0 ? HITINFO_FULL_ABSORB : HITINFO_PARTIAL_ABSORB);
                damageInfo->procEx  |= PROC_EX_ABSORB;
            }
    
            if (damageInfo->resist)
                damageInfo->HitInfo |= (damageInfo->damage - damageInfo->resist == 0 ? HITINFO_FULL_RESIST : HITINFO_PARTIAL_RESIST);
    
            damageInfo->damage -= damageInfo->absorb + damageInfo->resist;
        }
        else // Impossible get negative result but....
            damageInfo->damage = 0;
     }

    Spoiler untuk 3 :
    Code:
    -void Unit::ApplyResilience(Unit const* victim, int32* damage, bool isCrit) const
    +void Unit::ApplyResilience(Unit const* victim, int32* damage) const
     {
        // player mounted on multi-passenger mount is also classified as vehicle
        if (IsVehicle() || (victim->IsVehicle() && victim->GetTypeId() != TYPEID_PLAYER))
            return;
    
        // Don't consider resilience if not in PvP - player or pet
        if (!GetCharmerOrOwnerPlayerOrPlayerItself())
            return;
    
        Unit const* target = NULL;
        if (victim->GetTypeId() == TYPEID_PLAYER)
            target = victim;
        else if (victim->GetTypeId() == TYPEID_UNIT && victim->GetOwner() && victim->GetOwner()->GetTypeId() == TYPEID_PLAYER)
            target = victim->GetOwner();
    
        if (!target)
            return;
    
    -   if (isCrit)
    -       *damage -= target->GetCritDamageReduction(*damage);
    +
        *damage -= target->GetDamageReduction(*damage);
     }


    /src/server/game/Entities/Unit/Unit.h
    Spoiler untuk unit.h :

    Spoiler untuk 1 :
    Code:
             // player or player's pet resilience (-1%)
    -       uint32 GetCritDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_RESILIENCE_CRIT_TAKEN, 2.2f, 33.0f, damage); }
            uint32 GetDamageReduction(uint32 damage) const { return GetCombatRatingDamageReduction(CR_RESILIENCE_PLAYER_DAMAGE_TAKEN, 2.0f, 100.0f, damage); }
    
    -       void ApplyResilience(Unit const* victim, int32 * damage, bool isCrit) const;
    +	void ApplyResilience(Unit const* victim, int32 * damage) const;

    Spoiler untuk untuk formula resi cata :

    src/server/game/Entities/Player/Player.cpp
    Spoiler untuk player.cpp :

    Spoiler untuk 1 :
    Code:
     float Player::GetRatingBonusValue(CombatRating cr) const
     {
        float baseResult = float(GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr)) * GetRatingMultiplier(cr);
        if (cr != CR_RESILIENCE_PLAYER_DAMAGE_TAKEN)
            return baseResult;
    -   return float(1.0f - pow(0.99f, baseResult)) * 100.0f;
    +   return float(0.01050120510299f * m_baseRatingValue[cr] + 0.000605956904f) * 100.0f;
     }


    /src/server/game/Entities/Unit/Unit.cpp
    Spoiler untuk unit.cpp :

    Spoiler untuk 1 :
    Quote Originally Posted by Achernar_Altair View Post
    Description : good bye bug abuser, no more Bloodthirsty user rusuh2 berasa dewa di hit damage masuk tinggal 1/4 apa cobak, with this fix, combat rating formula udah difix jadi formula Cata, bukan formula Wotlk sperti skarang

    Reference : here

    Code : spertinya this code goes to /src/server/game/Entities/Unit/Unit.cpp, not really sure karena g dikasih penjelasan

    Spoiler untuk C++ :

    Code:
    From 732d4af506bdddf0bad638b2737517bf5dc9502c Mon Sep 17 00:00:00 2001
    From: Northstrider <[email protected]>
    Date: Wed, 6 Feb 2013 19:13:31 +0100
    Subject: [PATCH] Core/Units: updated combat damage reduction to cataclysm.
     this will fix the relisience damage bug.
    
    ---
     src/server/game/Entities/Unit/Unit.cpp |   21 +++++++++++++--------
     1 file changed, 13 insertions(+), 8 deletions(-)
    
    diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
    index 37fbf93..17516d7 100644
    --- a/src/server/game/Entities/Unit/Unit.cpp
    +++ b/src/server/game/Entities/Unit/Unit.cpp
    @@ -15741,20 +15741,25 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ)
     
     float Unit::GetCombatRatingReduction(CombatRating cr) const
     {
    -    if (Player const* player = ToPlayer())
    -        return player->GetRatingBonusValue(cr);
    -    // Player's pet get resilience from owner
    -    else if (isPet() && GetOwner())
    -        if (Player* owner = GetOwner()->ToPlayer())
    -            return owner->GetRatingBonusValue(cr);
    +    if (GetTypeId() == TYPEID_PLAYER)
    +        return ((Player const*)this)->GetRatingBonusValue(cr);
    +    else if (((Creature const*)this)->isPet())
    +    {
    +        // Player's pet get resilience from owner
    +        if (Unit* owner = GetOwner())
    +            if (owner->GetTypeId() == TYPEID_PLAYER)
    +                return ((Player*)owner)->GetRatingBonusValue(cr);
    +    }
     
         return 0.0f;
     }
     
     uint32 Unit::GetCombatRatingDamageReduction(CombatRating cr, float rate, float cap, uint32 damage) const
     {
    -    float percent = std::min(GetCombatRatingReduction(cr) * rate, cap);
    -    return CalculatePct(damage, percent);
    +    float percent = GetCombatRatingReduction(cr) * rate;
    +    if (percent > cap)
    +        percent = cap;
    +    return uint32 (percent * damage / 100.0f);
     }
     
     uint32 Unit::GetModelForForm(ShapeshiftForm form) const
    -- 
    1.7.10.msysgit.1



    Status : jelas blom saya test sendiri

    Spoiler untuk source formula :
    Prior to Patch 4.1, Resilience followed a linear return. Where y represented the damage reduction percentage, and x represented the amount of resilience, the linear formulas was as followed:
    Code:
    y = 0.01050120510299x + 0.000605956904
    For example, damage was reduced by 15.75% when 1500 resilience was equipped:
    Code:
    15.75241361 = 0.01050120510299(1500) + 0.000605956904
    http://www.wowwiki.com/Resilience




    tambahan : ngilangin mana drain effect from resi
    Spoiler untuk ngilangin mana drain effect :

    /src/server/game/Spells/SpellEffects.cpp
    Spoiler untuk SpellEffects.cpp :

    Spoiler untuk 1 :
    Code:
     void Spell::EffectPowerBurn(SpellEffIndex effIndex)
     {
        if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
            return;
    
        if (m_spellInfo->Effects[effIndex].MiscValue < 0 || m_spellInfo->Effects[effIndex].MiscValue >= int8(MAX_POWERS))
            return;
    
        Powers powerType = Powers(m_spellInfo->Effects[effIndex].MiscValue);
    
        if (!unitTarget || !unitTarget->IsAlive() || unitTarget->getPowerType() != powerType || damage < 0)
            return;
    
        // burn x% of target's mana, up to maximum of 2x% of caster's mana (Mana Burn)
        if (m_spellInfo->Id == 8129)
        {
            int32 maxDamage = int32(CalculatePct(m_caster->GetMaxPower(powerType), damage * 2));
            damage = int32(CalculatePct(unitTarget->GetMaxPower(powerType), damage));
            damage = std::min(damage, maxDamage);
        }
    
        int32 power = damage;
    	
    -   // resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
    -   if (powerType == POWER_MANA)
    -       power -= unitTarget->GetSpellCritDamageReduction(power);
    +
    
        int32 newDamage = -(unitTarget->ModifyPower(powerType, -power));
    
        // NO - Not a typo - EffectPowerBurn uses effect value multiplier - not effect damage multiplier
        float dmgMultiplier = m_spellInfo->Effects[effIndex].CalcValueMultiplier(m_originalCaster, this);
    
        // add log data before multiplication (need power amount, not damage)
        ExecuteLogEffectTakeTargetPower(effIndex, unitTarget, powerType, newDamage, 0.0f);
    
        newDamage = int32(newDamage* dmgMultiplier);
    
        m_damage += newDamage;
     }
    Last edited by bloodyx; 29-08-13 at 04:38.

  15. #89
    secreal's Avatar
    Join Date
    Oct 2006
    Location
    bogor
    Posts
    1,533
    Points
    36,503.74
    Thanks: 322 / 346 / 156

    Default

    pengen apply test server ke live server...
    kapan ya waktu yg tepat...

  16. #90
    rize_death's Avatar
    Join Date
    Aug 2009
    Posts
    477
    Points
    244.42
    Thanks: 33 / 75 / 26

    Default

    Sekarang hehe..
    Secepatnya

Page 6 of 7 FirstFirst ... 234567 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •