Bienvenido a Open Games Community

Únete ahora para acceder a todas nuestras funciones. Una vez que te registres e inicies sesión, podrás crear temas, responder a hilos existentes, valorar la reputación de otros miembros y muchísimo más. Además, es rápido y totalmente gratuito; ¿a qué esperas?

Soporte Buenas algun script de pet sistem que pueda funcionar? me refiero para atravesar a los pets

R

Ryusteck

Invitado
buenas miren manejo este script en mi pet sistem pero tengo un problema no es posible caminar sobre los pets y necesito que sea asi que hay que modificar? tambien si es necesario en las sources que se modifica? es tfs 1.4.2

Código Lua:
local bijuuBuffs = {
    [26382] = { name = "Kurama", buff = { healthRegenPercent = 5, manaRegenPercent = 5, magicLevelPercent = 10 } },
    [26390] = { name = "Shukaku", buff = { healthRegenPercent = 3, manaRegenPercent = 3 } },
    [26389] = { name = "Matatabi", buff = { criticalChance = 15, criticalDamage = 15 } },
    [26388] = { name = "Isobu", buff = { magicLevelPercent = 5 } },
    [26387] = { name = "Son Goku", buff = { healthRegenPercent = 4 } },
    [26386] = { name = "Kokuo", buff = { manaRegenPercent = 4 } },
    [26385] = { name = "Saiken", buff = { magicLevelPercent = 3, manaRegenPercent = 2 } },
    [26384] = { name = "Chomei", buff = { speed = 50, criticalChance = 10 } },
    [26383] = { name = "Gyuki", buff = { healthRegenPercent = 1, manaRegenPercent = 1 } }
}

local function calculateRegenValue(player, percentValue, isHealth)
    local maxValue = isHealth and player:getMaxHealth() or player:getMaxMana()
    return math.floor((maxValue * percentValue) / 100)
end

local function calculateMagicLevelBonus(player, percentValue)
    local baseMagicLevel = player:getBaseMagicLevel()
    return math.floor((baseMagicLevel * percentValue) / 100)
end

local function applyBijuuBuffs(player, bijuuData)
    local buff = bijuuData.buff

    if buff.healthRegenPercent or buff.manaRegenPercent then
        local condition = Condition(CONDITION_REGENERATION)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)

        if buff.healthRegenPercent then
            local healthGain = calculateRegenValue(player, buff.healthRegenPercent, true)
            condition:setParameter(CONDITION_PARAM_HEALTHGAIN, healthGain)
            condition:setParameter(CONDITION_PARAM_HEALTHTICKS, 2000)
        end

        if buff.manaRegenPercent then
            local manaGain = calculateRegenValue(player, buff.manaRegenPercent, false)
            condition:setParameter(CONDITION_PARAM_MANAGAIN, manaGain)
            condition:setParameter(CONDITION_PARAM_MANATICKS, 2000)
        end

        player:addCondition(condition)
    end

    if buff.criticalChance then
        local condition = Condition(CONDITION_ATTRIBUTES)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE, buff.criticalChance)
        if buff.criticalDamage then
            condition:setParameter(CONDITION_PARAM_SKILL_CRITICAL_HIT_DAMAGE, buff.criticalDamage)
        end
        player:addCondition(condition)
    end

    if buff.magicLevelPercent then
        local magicLevelBonus = calculateMagicLevelBonus(player, buff.magicLevelPercent)
        local condition = Condition(CONDITION_ATTRIBUTES)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, magicLevelBonus)
        player:addCondition(condition)
    end

    if buff.skillPoints then
        local condition = Condition(CONDITION_ATTRIBUTES)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_SKILL_FIST, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_CLUB, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_SWORD, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_AXE, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_DISTANCE, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_SHIELD, buff.skillPoints)
        player:addCondition(condition)
    end

    if buff.speed then
        local condition = Condition(CONDITION_HASTE)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_SPEED, buff.speed)
        player:addCondition(condition)
    end
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local bijuuData = bijuuBuffs[item:getId()]
    if not bijuuData then
        player:sendCancelMessage("Este item no invoca ningún bijuu.")
        return true
    end

    -- Si ya tiene un summon, lo removemos junto con sus buffs
    if #player:getSummons() > 0 then
        for _, summon in ipairs(player:getSummons()) do
            summon:remove()
        end

        -- Remover todos los buffs
        player:removeCondition(CONDITION_REGENERATION)
        player:removeCondition(CONDITION_ATTRIBUTES)
        player:removeCondition(CONDITION_HASTE)

        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Has regresado a tu bijuu!")
        return true
    end

    -- Invocar al bijuu
    local position = player:getPosition()
    local summon = Game.createMonster(bijuuData.name, position)

    if summon then
        summon:setMaster(player)
        summon:setFollowCreature(player)

        -- En su lugar, la lógica para que sea atravesable va en isWalkable() usando getMaster()

        position:sendMagicEffect(CONST_ME_TELEPORT)
        summon:registerEvent("BijuuFollow")
        summon:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
        player:addSummon(summon)

        applyBijuuBuffs(player, bijuuData)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Has invocado a " .. bijuuData.name .. "!")
    else
        player:sendCancelMessage("No se pudo invocar el bijuu.")
    end
    return true
end
 
Última edición por un moderador:

Alex

Administrador
Dev
Registrado
1 Sep 2021
Mensajes
2.362
Puntuación de reacción
28.641
Puntos
707
buenas miren manejo este script en mi pet sistem pero tengo un problema no es posible caminar sobre los pets y necesito que sea asi que hay que modificar? tambien si es necesario en las sources que se modifica? es tfs 1.4.2

Código Lua:
local bijuuBuffs = {
    [26382] = { name = "Kurama", buff = { healthRegenPercent = 5, manaRegenPercent = 5, magicLevelPercent = 10 } },
    [26390] = { name = "Shukaku", buff = { healthRegenPercent = 3, manaRegenPercent = 3 } },
    [26389] = { name = "Matatabi", buff = { criticalChance = 15, criticalDamage = 15 } },
    [26388] = { name = "Isobu", buff = { magicLevelPercent = 5 } },
    [26387] = { name = "Son Goku", buff = { healthRegenPercent = 4 } },
    [26386] = { name = "Kokuo", buff = { manaRegenPercent = 4 } },
    [26385] = { name = "Saiken", buff = { magicLevelPercent = 3, manaRegenPercent = 2 } },
    [26384] = { name = "Chomei", buff = { speed = 50, criticalChance = 10 } },
    [26383] = { name = "Gyuki", buff = { healthRegenPercent = 1, manaRegenPercent = 1 } }
}

local function calculateRegenValue(player, percentValue, isHealth)
    local maxValue = isHealth and player:getMaxHealth() or player:getMaxMana()
    return math.floor((maxValue * percentValue) / 100)
end

local function calculateMagicLevelBonus(player, percentValue)
    local baseMagicLevel = player:getBaseMagicLevel()
    return math.floor((baseMagicLevel * percentValue) / 100)
end

local function applyBijuuBuffs(player, bijuuData)
    local buff = bijuuData.buff

    if buff.healthRegenPercent or buff.manaRegenPercent then
        local condition = Condition(CONDITION_REGENERATION)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)

        if buff.healthRegenPercent then
            local healthGain = calculateRegenValue(player, buff.healthRegenPercent, true)
            condition:setParameter(CONDITION_PARAM_HEALTHGAIN, healthGain)
            condition:setParameter(CONDITION_PARAM_HEALTHTICKS, 2000)
        end

        if buff.manaRegenPercent then
            local manaGain = calculateRegenValue(player, buff.manaRegenPercent, false)
            condition:setParameter(CONDITION_PARAM_MANAGAIN, manaGain)
            condition:setParameter(CONDITION_PARAM_MANATICKS, 2000)
        end

        player:addCondition(condition)
    end

    if buff.criticalChance then
        local condition = Condition(CONDITION_ATTRIBUTES)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE, buff.criticalChance)
        if buff.criticalDamage then
            condition:setParameter(CONDITION_PARAM_SKILL_CRITICAL_HIT_DAMAGE, buff.criticalDamage)
        end
        player:addCondition(condition)
    end

    if buff.magicLevelPercent then
        local magicLevelBonus = calculateMagicLevelBonus(player, buff.magicLevelPercent)
        local condition = Condition(CONDITION_ATTRIBUTES)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, magicLevelBonus)
        player:addCondition(condition)
    end

    if buff.skillPoints then
        local condition = Condition(CONDITION_ATTRIBUTES)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_SKILL_FIST, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_CLUB, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_SWORD, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_AXE, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_DISTANCE, buff.skillPoints)
        condition:setParameter(CONDITION_PARAM_SKILL_SHIELD, buff.skillPoints)
        player:addCondition(condition)
    end

    if buff.speed then
        local condition = Condition(CONDITION_HASTE)
        condition:setParameter(CONDITION_PARAM_TICKS, -1)
        condition:setParameter(CONDITION_PARAM_SPEED, buff.speed)
        player:addCondition(condition)
    end
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local bijuuData = bijuuBuffs[item:getId()]
    if not bijuuData then
        player:sendCancelMessage("Este item no invoca ningún bijuu.")
        return true
    end

    -- Si ya tiene un summon, lo removemos junto con sus buffs
    if #player:getSummons() > 0 then
        for _, summon in ipairs(player:getSummons()) do
            summon:remove()
        end

        -- Remover todos los buffs
        player:removeCondition(CONDITION_REGENERATION)
        player:removeCondition(CONDITION_ATTRIBUTES)
        player:removeCondition(CONDITION_HASTE)

        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Has regresado a tu bijuu!")
        return true
    end

    -- Invocar al bijuu
    local position = player:getPosition()
    local summon = Game.createMonster(bijuuData.name, position)

    if summon then
        summon:setMaster(player)
        summon:setFollowCreature(player)

        -- En su lugar, la lógica para que sea atravesable va en isWalkable() usando getMaster()

        position:sendMagicEffect(CONST_ME_TELEPORT)
        summon:registerEvent("BijuuFollow")
        summon:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
        player:addSummon(summon)

        applyBijuuBuffs(player, bijuuData)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Has invocado a " .. bijuuData.name .. "!")
    else
        player:sendCancelMessage("No se pudo invocar el bijuu.")
    end
    return true
end

Hola,
Poder andar por encima de una criatura es la funcion canWalkTo si no digo tonterias, en sources.
Pienso que en un script no bastara escribirlo tendras que editar sources.
 
R

Ryusteck

Invitado
Hola,
Poder andar por encima de una criatura es la funcion canWalkTo si no digo tonterias, en sources.
Pienso que en un script no bastara escribirlo tendras que editar sources.
si mi estimado alex ya las modifique modifique esta parte
  1. bool Player::canWalkthrough(const Creature* creature) const { if (group->access || creature->isInGhostMode()) { return true; }
    //Start const Monster* monster = creature->getMonster(); if (monster) { if (monster->isSummon() && monster->getMaster()->getPlayer()) { return true; } return false; } pero lo que pasa ahora es que si puedo pasar el summon pero solo dandole click donde esta el cuando intento caminar normal a traves de el no funciona igualmente si estas en 1 espacio de 1sqm y das click y esta el pet en medio no avanza porque esta el pet
 
shape1
shape2
shape3
shape4
shape5
shape6
Arriba