• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

TFS 1.X+ BLOCKARMOR Not work in PVP...

Ascuas Funkeln

Rakkedo Game
Joined
Apr 14, 2013
Messages
549
Solutions
32
Reaction score
307
Location
Poland
GitHub
AscuasFunkeln
Hello, i need little help.
For example Whirwind Throw
Code:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WEAPONTYPE)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true)
combat:setParameter(COMBAT_PARAM_USECHARGES, true)

function onGetFormulaValues(player, skill, attack, factor)
    local min = (player:getLevel() / 5) + (skill * attack * 0.01) + 1
    local max = (player:getLevel() / 5) + (skill * attack * 0.03) + 6
    return -min, -max
end

combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onCastSpell(creature, variant)
    return combat:execute(creature, variant)
end
When cast spell BLOCKARMOR work perfect on monsters(Monster armor reduce damage)... But when spell hit player, armor dont block any damage.
Any idea?
 
Ok, ofc i change PvP system
I make some tests... And got it! Damage and Armor in this function is /100. I make spell cause 1000 damage and wear item with 10 armor, 100 armor and 1000 armor. Results its = 1000 Armor Reduce damage by 10. I will make some more tests and will post result here for knowledge ;)
Anyway already still need help with split it xD
C++:
void Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data)
{
    assert(data);
    CombatDamage damage = *data;
    if (g_game.combatBlockHit(damage, caster, target, params.blockedByShield, params.blockedByArmor, params.itemId != 0)) {
        return;
    }

    if ((damage.primary.value < 0 || damage.secondary.value < 0) && caster) {
        Player* targetPlayer = target->getPlayer();
        if (targetPlayer && caster->getPlayer() && targetPlayer->getSkull() != SKULL_BLACK) {
            damage.primary.value /= 100;
            damage.secondary.value /= 100;
        }
    }

    if (g_game.combatChangeHealth(caster, target, damage)) {
        CombatConditionFunc(caster, target, params, nullptr);
        CombatDispelFunc(caster, target, params, nullptr);
    }
}
 
Last edited:

Similar threads

Back
Top