Ir para conteúdo
  • Cadastre-se

(Resolvido)Armas Voadoras


Ir para solução Resolvido por FlameArcixt,

Posts Recomendados

Spoiler

-- NORMAL ATTACK

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)


-- PASSIVE ATK

local function weaponType(cid)
    local weapons = {[1] = 24, [2] = 26, [3] = 25}
    return weapons[getItemWeaponType(getPlayerWeapon(cid).uid)]
end

local function choose(...)
    local arg = {...}
    return arg[math.random(1,#arg)]
end

local function check_pos(fromPos, toPos)
    x = fromPos.x - toPos.x
    y = fromPos.y - toPos.y
    if (x == -1) and (y == -1) then
        return choose({-1, -1}, {-1, 0}, {0, -1})
    elseif (x == 0) and (y == -1) then
        return choose({-1, -1}, {0, -1}, {1, -1})
    elseif (x == 1) and (y == -1) then
        return choose({0, -1}, {1, -1}, {1, 0})
    elseif (x == -1) and (y == 0) then
        return choose({-1, -1}, {-1, 0}, {-1, 1})
    elseif (x == 1) and (y == 0) then
        return choose({1, -1}, {1, 0}, {1, 1})
    elseif (x == -1) and (y == 1) then
        return choose({-1, 0}, {-1, 1}, {0, 1})
    elseif (x == 0) and (y == 1) then
        return choose({-1, 1}, {0, 1}, {1, 1})
    elseif (x == 1) and (y == 1) then
        return choose({0, 1}, {1, 0}, {1, 1})
    else
        return choose({-1, -1}, {-1, 0}, {0, -1}, {-1, -1}, {0, -1}, {1, -1}, {0, -1}, {1, -1}, {1, 0}, {-1, -1}, {-1, 0}, {-1, 1}, {1, -1}, {1, 0}, {1, 1}, {-1, 0}, {-1, 1}, {0, 1}, {-1, 1}, {0, 1}, {1, 1}, {0, 1}, {1, 0}, {1, 1})
    end
end

local function distEffect(cid)
    player_pos = getCreaturePosition(cid)
    target_pos = getCreaturePosition(getCreatureTarget(cid))
    var = check_pos(player_pos, target_pos)
    start_pos = {x = player_pos.x+var[1], y = player_pos.y+var[2], z = player_pos.z}
    final_pos = {x = target_pos.x+(var[1]*-1), y = target_pos.y+(var[2]*-1), z = target_pos.z}
    doSendDistanceShoot(start_pos, final_pos, weaponType(cid))
end

local combat_passive = createCombatObject()
setCombatParam(combat_passive, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

function onGetFormulaValues(cid, level, skill, attack, element, factor)
    local levelTotal = level / 5
    local skillTotal = skill * attack
    local min = levelTotal + (skillTotal * 0.01)
    local max = levelTotal + (skillTotal * 0.03)
    distEffect(cid)
    return -math.ceil(min), -math.ceil(max), -math.random(levelTotal + (element * skill * 0.01), levelTotal + (element * skill * 0.01))
end

setCombatCallback(combat_passive, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")


function onUseWeapon(cid, var)
    doCombat(cid, combat, var)
    if isPlayer(getCreatureTarget(cid)) then
        addEvent(doCombat, choose(100, 200, 300), cid, combat_passive, var)
    end
    return true    
end

 

Spoiler

[8/12/2020 17:36:28] [Error - Weapon Interface] 
[8/12/2020 17:36:28] In a callback: data/weapons/scripts/LV600/Melee.lua:onGetFormulaValues
[8/12/2020 17:36:28] (Unknown script file)
[8/12/2020 17:36:28] Description: 
[8/12/2020 17:36:28] (LuaInterface::luaGetThingPosition) Thing not found

[8/12/2020 17:36:29] [Error - Weapon Interface] 
[8/12/2020 17:36:29] In a callback: data/weapons/scripts/LV600/Melee.lua:onGetFormulaValues
[8/12/2020 17:36:29] (Unknown script file)
[8/12/2020 17:36:29] Description: 
[8/12/2020 17:36:29] data/weapons/scripts/LV600/Melee.lua:23: attempt to index local 'toPos' (a boolean value)

Eu fiz esse script e ele fuciona como esperado, porem tem algumas situações que da esse erro no addevent

Essa é a maneira correta de fazer esse script?

Editado por iTzBrHue3 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@iTzBrHue3 o que era para ser isso um código pronto para uso, pedido/suporte para corrigir algo no código qual o intuito desse tópico?

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

A função onGetFormulaValues(cid, level, skill, attack, element, factor) não aceita cid  como valido, o certo seria thing, ao menos o que eu li é isso.

 

O outro erro, [8/12/2020 17:36:29] data/weapons/scripts/LV600/Melee.lua:23: attempt to index local 'toPos' (a boolean value)

Diz que o valor toPos não é boolean, ou seja, ele não é numérico.

Link para o post
Compartilhar em outros sites
1 hora atrás, FlameArcixt disse:

A função onGetFormulaValues(cid, level, skill, attack, element, factor) não aceita cid  como valido, o certo seria thing, ao menos o que eu li é isso.

 

O outro erro, [8/12/2020 17:36:29] data/weapons/scripts/LV600/Melee.lua:23: attempt to index local 'toPos' (a boolean value)

Diz que o valor toPos não é boolean, ou seja, ele não é numérico.

me liguei nisso tbm, só que esse erro acontece quando o player que ataca perde o target(quando sobe escada, morre), quando eu tiro o addEvent esse erro para de acontecer, eu queria saber como deixa com o addEvent pq esse delay dele deixa o negocio saindo mais bonito

Link para o post
Compartilhar em outros sites
  • Solução
54 minutos atrás, iTzBrHue3 disse:

me liguei nisso tbm, só que esse erro acontece quando o player que ataca perde o target(quando sobe escada, morre), quando eu tiro o addEvent esse erro para de acontecer, eu queria saber como deixa com o addEvent pq esse delay dele deixa o negocio saindo mais bonito

Não sei dizer ao certo, mas acho que vc deveria criar uma função dentro do add event, que checaria se tem target ou nao na hora do addevent

Link para o post
Compartilhar em outros sites
16 horas atrás, FlameArcixt disse:

Não sei dizer ao certo, mas acho que vc deveria criar uma função dentro do add event, que checaria se tem target ou nao na hora do addevent

Obrigado,  consegui arrumar não sabia que poderia se fazer uma função dentro do addEvent

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Bruno Minervino
      Introdução:
      É uma wand que ataca vários elementos aleatoriamente, porém não somente isso, você pode alterar o elemento dela com uma talkaction.
       
      Instalação:
      Vá até data/weapons/scripts e crie um arquivo chamando wandelementos.lua e coloque o seguinte conteúdo:
       
      local min, max = 1700,1900 --Ataque mínino e ataque máximo local w = { [1] = {ef = 36, sh = 3, dmg = COMBAT_FIREDAMAGE}, [2] = {ef = 42, sh = 28, dmg = COMBAT_ICEDAMAGE}, [3] = {ef = 46, sh = 38, dmg = COMBAT_POISONDAMAGE}, [4] = {ef = 17, sh = 31, dmg = COMBAT_DEATHDAMAGE}, [5] = {ef = 47, sh = 35, dmg = COMBAT_ENERGYDAMAGE}, [6] = {ef = 36, sh = 31, dmg = COMBAT_PHYSICALDAMAGE}, [7] = {ef = 49, sh = 37, dmg = COMBAT_HOLYDAMAGE} } function onUseWeapon(cid, var) local effect = getPlayerStorageValue(cid, 4561) local target = getCreatureTarget(cid) if target ~= 0 then local wx = w[effect] or w[math.random(#w)] doSendDistanceShoot(getThingPos(cid), getThingPos(target), wx.sh) addEvent(doAreaCombatHealth, 100, cid, wx.dmg, getThingPos(target), 0, -min, -max, wx.ef) end return true end Altere o min e max de acordo com sua necessidade.
       
      Agora vá em data/weapons/weapons.xml e coloque o seguinte conteúdo:
       
      <wand id="7424" level="100" mana="30" event="script" value="wandelementos.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="5" showInDescription="0"/> <vocation id="6" showInDescription="0"/> </wand> Altere o id, level e mana de acordo com sua necessidade.

      Agora vamos configurar a talkaction que troca os elementos.
      Vá até data/talkactions/scripts e crie um arquivo chamando elementos.lua e coloque o seguinte conteúdo:
       
      local config = { wand_id = 7424, --ID da wand types = { ["all"] = -1, --Ataca os elementos aleatoriamente ["fire"] = 1, ["ice"] = 2, ["poison"] = 3, ["death"] = 4, ["energy"] = 5, ["physical"] = 6, ["holy"] = 7 } } function onSay(cid, words, param) local wand_left = getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid local wand_right = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid if wand_left ~= config.wand_id and wand_right ~= config.wand_id then doPlayerSendCancel(cid, "Voce deve estar equipado com uma ".. getItemNameById(config.wand_id) .." para usar este comando.") return true end if config.types[param] then setPlayerStorageValue(cid, 4561, config.types[param]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Sua wand ira atacar ".. param .. ".") else local str = "" for i, _ in pairs(config.types) do str = str .. ", ".. i end doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Os elementos disponiveis sao: ".. string.sub(str, 3, #str) ..".") end return true end Altere o wand_id conforme configurado em weapons.

      Agora vá em data/talkactions/talkactions.xml e coloque o seguinte conteúdo:
       
      <talkaction words="!elemento;/elemento" event="script" value="elementos.lua"/> Exemplo de funcionamento:
      https://www.youtube.com/watch?v=HHmZ1RpsrD0
       
      Gostaria de deixar um agradecimento especial para MaXwEllDeN, pela ajuda.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo