Ir para conteúdo
  • 0

Alguns scripts


Clarym

Pergunta

Iae smile.png

 

Bom, vim pedir alguns scripts para TFS 0.3.6... Vou explica-los.

 

1º- Atributos por storages:

 

 

Funcionaria da seguinte maneira: Existem 4 storages no meu servidor (21201) (21202) (21203) (21204), cada storage corresponde a uma quest de cada vocação de Sorcerer(01) até knight (04). O pedido é se alguém conseguiria fazer um script onde cada storage adicionaria um atributo ao jogador (obs: esses storages são para sempre).

Atributos:

21201: Adicionaria uma porcentagem de regeneração de mana. (Se a porcentagem for 50%, o jogador tem 50% de chance de curar 20% de sua mana).

21202: Adicionaria uma porcentagem de absorver sangue de jogadores ou monstros em sua volta (3x3). (Se a porcentagem for 50%, o jogador tem 50% de chance de sugar 20% de life e mana de seus inimigos). obs: não sei e a absorção de mana funcionaria em monstros.

2103: A​diciona uma quantidade de velocidade ao jogador e aumenta uma porcentagem em sua precisão com armas de distancia. (Aumenta 20% em acertar ataques a longa distância). sabe quando o paladino erra o ataque? Então, essa porcentagem diminuiria a chance desses erros acontecerem.

2104: Aumenta uma porcentagem em refletir uma porcentagem do dano recebido dos inimigos. (Se a porcentagem for 50%, o jogador tem 50% de chance de refletir 20% do dano recebido).​

obs: Esses valores são exemplos, eles podem ser mudados*

 

2º- Magias passivas:

 

 

Funcionaria da seguinte maneira: O jogador iria receber uma storage já configurada no meu servidor, essa storage desbloquearia uma magia passiva. Após conseguir esse storage o jogador ficaria com um efeito nele mesmo eternamente. A magia teria uma porcentagem para lançar por exemplo: Se configurar 50% na magia, ela teria 50% de chance de se enfurecer e atacar quem está te atacando. Vou dar alguns exemplos de magias que se parecem com isso:

soul system/ - Esse sistema contém 3 scripts, o que se parece com meu pedido é o sistema de auras, onde o jogador fica com uma aura o rondando e ela tem uma chance de atacar quem o ataca. Mas eu não quero que ela fique em volta do jogador.

O estilo do ataque seria assim: Um efeito cairia do céu e atingira o alvo(ou os alvos) que a magia quer atingir, tenho esse script:

 

 

 

 

local water = {490, 491, 492, 493}

local combat = createCombatObject()

local meteor = createCombatObject()
setCombatParam(meteor, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(meteor, COMBAT_PARAM_EFFECT, 47)
setCombatFormula(meteor, COMBAT_FORMULA_LEVELMAGIC, -9.0, -30, -10.0, 4)


local condition = createConditionObject(CONDITION_ENERGY)
setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
addDamageCondition(condition, 10, 2000, -50)
setCombatCondition(combat, condition)

combat_arr = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
}

local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)

local function meteorCast(p)
doCombat(p.cid, p.combat, positionToVariant(p.pos))
end

local function stunEffect(cid)
doSendMagicEffect(getThingPos(cid), CONST_ME_STUN)
end

function onTargetTile(cid, pos)
if (math.random(0, 0) == 0) then
local ground = getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})
if (isInArray(water, ground.itemid) == TRUE) then
local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z}
doSendDistanceShoot(newpos, pos, 35)
addEvent(meteorCast, 200, {cid = cid, pos = pos, combat = meteor_water})
else
local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z}
doSendDistanceShoot(newpos, pos, 35)
addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
end
end
end

setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end

 

 

 

Ele foi modificado na gambiarra kkk, Mas é essa noção.

 

 

3º - Magia que absorve. Resolvido por Zipter98 ​

 

 

F​uncionaria da seguinte forma: Já viram o movimento "Lech Seed" nos poketibias? Então é o mesmo conceito. O jogador mandaria a magia no inimigo e a magia absorveria uma quantidade de sangue a cada 1 segundo por 10 segundos. Cada vez que a magia absorveria o sangue aparece um efeito no inimigo, mesma coisa que o lech seed.

 

 

Bom, não sei se isso é possível, mas eu tive essas ideias só que não sei fazer os scripts. Espero que alguém me ajude, se eu tiver mais ideias eu posto aqui. Bjs :*​

Editado por Clarym
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

3º pedido:

 

local config = {
    distance_effect = xxx,        --Distance effect. Se não quiser, basta colocar false.
    effect = xxx,                 --Efeito que aparecerá no alvo.
    times = 10,                   --Quantos hits, no total.
    interval = 1000               --Intervalo de tempo entre as absorções.
}
 
function leech_seed(cid, target, times)
    local damage_formula = {min = getPlayerLevel(cid) * 3, max = getPlayerLevel(cid) * 6}            --Fórmula de dano.
    
    if not isCreature(cid) or not isCreature(target) or times <= 0 then return true end
    local damage = math.random(damage_formula.min, damage_formula.max)
    
    doSendMagicEffect(getThingPos(target), config.effect)
    doSendAnimatedText(getThingPos(target), "-"..damage, 144)
    doCreatureAddHealth(target, -damage)
    doCreatureAddHealth(cid, damage)
    addEvent(leech_seed, config.interval, cid, target, times - 1)
end
 
function onCastSpell(cid, var)
    local target = variantToNumber(var)
    
    if not isCreature(target) then
        return doPlayerSendCancel(cid, "You need a target to cast this spell.")
    end
    if config.distance_effect then
        doSendDistanceShoot(getThingPos(cid), getThingPos(target), config.distance_effect)
    end
    leech_seed(cid, target, config.times)
    return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

 

3º pedido:

local config = {
    distance_effect = xxx,        --Distance effect. Se não quiser, basta colocar false.
    effect = xxx,                 --Efeito que aparecerá no alvo.
    times = 10,                   --Quantos hits, no total.
    interval = 1000               --Intervalo de tempo entre as absorções.
}
 
function leech_seed(cid, target, times)
    local damage_formula = {min = getPlayerLevel(cid) * 3, max = getPlayerLevel(cid) * 6}            --Fórmula de dano.
    
    if not isCreature(cid) or not isCreature(target) or times <= 0 then return true end
    local damage = math.random(damage_formula.min, damage_formula.max)
    
    doSendMagicEffect(getThingPos(target), config.effect)
    doSendAnimatedText(getThingPos(target), "-"..damage, 144)
    doCreatureAddHealth(target, -damage)
    doCreatureAddHealth(cid, damage)
    addEvent(leech_seed, config.interval, cid, target, times - 1)
end
 
function onCastSpell(cid, var)
    local target = variantToNumber(var)
    
    if not isCreature(target) then
        return doPlayerSendCancel(cid, "You need a target to cast this spell.")
    end
    if config.distance_effect then
        doSendDistanceShoot(getThingPos(cid), getThingPos(target), config.distance_effect)
    end
    leech_seed(cid, target, config.times)
    return true
end

 

Perfeito! wub.png

 

Você poderia fazer uma parecida com essa? Só que em vez de tirar vida, deixaria o jogador sem se mexer e sem poder curar por X segundos? E durante esses X segundos o jogador viraria um item (id 7171)

Link para o comentário
Compartilhar em outros sites

  • 0

Spell:

local config = {
    itemId = 7171,                 --Outfit (item) que o target irá assumir.
    time = 10,                     --Duração do debuff.
    distance_effect = xxx          --Distance effect. Se não quiser, basta colocar false.
}
 
function onCastSpell(cid, var)
    local target = variantToNumber(var)
    
    if not isCreature(target) then
        return doPlayerSendCancel(cid, "You need a target to cast this spell.")
    end
    if config.distance_effect then
        doSendDistanceShoot(getThingPos(cid), getThingPos(target), config.distance_effect)
    end
    doSetCreatureOutfit(cid, {lookTypeEx = config.itemId}, config.time * 1000)
    setPlayerStorageValue(cid, 9182, os.time() + config.time)
    doCreatureSetNoMove(cid, true)
    addEvent(function()
        if not isPlayer(cid) then return true end
        doCreatureSetNoMove(cid, false)
    end, config.time * 1000)
    return true
end
Creatureevent (não se esqueça de registrá-lo em login.lua):
function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHGAIN and isPlayer(cid) and getPlayerStorageValue(cid, 9182) > os.time() then
        return false
    end
    return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Spell:

local config = {
    itemId = 7171,                 --Outfit (item) que o target irá assumir.
    time = 10,                     --Duração do debuff.
    distance_effect = xxx          --Distance effect. Se não quiser, basta colocar false.
}
 
function onCastSpell(cid, var)
    local target = variantToNumber(var)
    
    if not isCreature(target) then
        return doPlayerSendCancel(cid, "You need a target to cast this spell.")
    end
    if config.distance_effect then
        doSendDistanceShoot(getThingPos(cid), getThingPos(target), config.distance_effect)
    end
    doSetCreatureOutfit(cid, {lookTypeEx = config.itemId}, config.time * 1000)
    setPlayerStorageValue(cid, 9182, os.time() + config.time)
    doCreatureSetNoMove(cid, true)
    addEvent(function()
        if not isPlayer(cid) then return true end
        doCreatureSetNoMove(cid, false)
    end, config.time * 1000)
    return true
end
Creatureevent (não se esqueça de registrá-lo em login.lua):
function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHGAIN and isPlayer(cid) and getPlayerStorageValue(cid, 9182) > os.time() then
        return false
    end
    return true
end

 

 

A tag pro creatureevent seria "combat"?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...