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
  • Respostas 6
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

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

@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

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.
  • Estatísticas dos Fóruns

    96846
    Tópicos
    519602
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo