Ir para conteúdo

marcot

Membro
  • Registro em

  • Última visita

Tudo que marcot postou

  1. @Danxi Na linha 30 tente mudar: if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then Por if (item2.itemid == b.on or item2.itemid == b.off) and (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then E teste para ver se funciona. Dei uma olhada apressada mas estranhei muito esse if, porque quando você tem or e um deles é verdadeiro a expressão se torna verdadeira, então só de cumprir uma das duas primeiras condições já anula todo o restante.
  2. Essa ultima script que você mandou está com vários erros. Tem um erro de sintaxe de um if sem then, e a função RunPart está sendo chamada sem todos seus 5 parâmetros, onde 2 deles não foram definidos no código (dirList e dirEmitPos)
  3. @hallanehallex Consegui fazer seguindo as dicas do Wolf. Hiraishin no Jutsu 2.0: Em data/spells/spells.xml cole: <instant name="Hiraishin No Jutsu" words="hiraishin ni no dan seal" lvl="12" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="hiraishin.lua"> <vocation id="4"/> </instant> <instant name="Hiraishin no Jutsu" words="hiraishin ni no dan" lvl="18" mana="140" prem="1" aggressive="0" params="1" exhaustion="2000" needlearn="0" event="script" value="hiraishinII.lua"> <vocation id="4"/> </instant> Em data/spells/scripts crie hiraishin.lua e cole: local config = { storageID = 49609, mark_time = 6, } local errorMsg = { pz = "Seu alvo nao pode estar fora do PZ.", playerOnly = "Voce so pode usar este jutsu em players.", alreadyMarked = "Voce ja marcou um jogador.", } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) --local target = getThingFromPosition(variantToPosition(var), 1) if isPlayer(getCreatureTarget(cid)) then if not getTilePzInfo(getThingPosition(getCreatureTarget(cid))) then if getPlayerStorageValue (cid, config.storageID) <= 0 then setPlayerStorageValue(cid, config.storageID, 1) doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getCreatureName(getCreatureTarget(cid))) local struct = { left = config.mark_time, player = cid, target = target, var = var } addEvent(teleportIsTrue, 1000, struct) else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.alreadyMarked) end else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.pz) end else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.playerOnly) end return doCombat(cid, combat, var) end function teleportIsTrue (struct) if struct.left ~= 0 then if getPlayerStorageValue (struct.player, config.storageID) == 2 then doTeleportThing(struct.player, getThingPosition(getCreatureTarget(struct.player)), true) setPlayerStorageValue(struct.player, config.storageID, 0) doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") return true end doPlayerSendTextMessage(struct.player,22, struct.left .. " segundos restantes.") struct.left = struct.left - 1 addEvent (teleportIsTrue, 1000, struct) elseif struct.left == 0 then doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") setPlayerStorageValue(struct.player, config.storageID, 0) else return false end end E em hiraishinII.lua cole: local config = { storageID = 49609, mark_time = 6, } function onCastSpell(cid, var) if getPlayerStorageValue (cid, config.storageID) == 1 then setPlayerStorageValue(cid, config.storageID, 2) else doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.") end return true end
  4. @Strung, aqui está. local config = { uniqueID = 5000, -- Unique ID da alavanca playerA_pos = {x = 396, y = 1746, z = 9, stackpos=253}, -- Posicao do "Player A" que sera puxado playerA_posDestino = {x = 398, y = 1746, z = 9, stackpos=253}, -- Posicao para a qual player A sera transportado item = {ID = 6500, count = 40} } local errorMsg = { sqm = "Fique no SQM indicado.", noItem = "Voce nao possui os itens necessarios." } function onUse(cid, item, frompos, item2, topos) if item.uid == config.uniqueID and item.itemid == 1945 then player = getThingfromPos(config.playerA_pos) if player.itemid > 0 then if doPlayerRemoveItem(cid, config.item.ID, config.item.count) == TRUE then doSendMagicEffect(config.playerA_pos, 2) doTeleportThing(player.uid, config.playerA_posDestino) doSendMagicEffect(config.playerA_posDestino, 2) else doPlayerSendTextMessage (cid, 22, errorMsg.noItem) end else doPlayerSendTextMessage (cid, 22, errorMsg.sqm) end doTransformItem(item.uid, item.itemid + 1) else doTransformItem(item.uid,item.itemid-1) end return TRUE end
  5. 1) Dá pra colocar o nome de qualquer pessoa do server 2) O meu problema com spell é que não sei como posso pegar o nome do jogador target como parâmetro 3) Eu não estou sabendo porque o comando de marcar o jogador fala, enquanto o segundo o jogador nao fala 4) Ja esta exclusiva para vocation X, a definição está no config
  6. Qual player, o que puxa a alavanca ou o que é puxado?
  7. @apollo333, @Samu DS Desculpem nao ter respondido, estava maratonando uma série ontem. Aqui a versão upando ML e com exausted: local config = { requiredLevel = 100, -- Level necessario usingMana = 200, -- Mana que sera gasta storageID = 40001, -- Mude se ja estiver em uso timeExausted = 1, -- Tempo de exausted global } local errorMsg = { level = "Not enough level.", exausted = "You are exausted.", mana = "Not enough mana.", } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 49) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, -30, -1.1, 0) local arr = { {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 2, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0} } local area = createCombatArea(arr) setCombatArea(combat, area) function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) > config.requiredLevel then if getPlayerStorageValue (cid, config.storageID) < os.time() then if getPlayerMana(cid) > config.usingMana then doPlayerAddMana(cid, -config.usingMana) doPlayerAddSpentMana(cid, config.usingMana, true) setPlayerStorageValue(cid, config.storageID, os.time() + config.timeExausted) return doCombat(cid, combat, numberToVariant(cid)) else doPlayerSendCancel(cid, errorMsg.mana) doSendMagicEffect(getCreaturePosition(cid), 2) end else doPlayerSendCancel(cid, errorMsg.exausted) doSendMagicEffect(getCreaturePosition(cid), 2) end else doPlayerSendCancel(cid, errorMsg.level) end return TRUE end
  8. Será que você não consegue fazer o que planeja com este script?
  9. Ela inicia o efeito de cura quando você bate, mas não para quando tira o target. Para transformar em um ring acredito que teria que ser outro script, mas acho que não consigo fazer. @Dennyz Nao estou conseguindo transformar o script para OTX 1.2, estou tendo dificuldades de achar as funções correspondentes, mas eu irei tentando. Aceito ajuda de outras pessoas para transformar o script postado anteriormente para OTX e-e
  10. Agora consegui consertar, estava bugando devido aos espaços na talkaction. Hotkeys usadas: hiraishin ni no dan seal Test hiraishin ni no dan Testado em The Forgotten Server 0.4 Em data/talkactions/talkactions.xml insira a TAG: <talkaction words = "hiraishin" event = "script" value = "hiraishin no jutsu.lua"/> OBS.: Tenha atenção pois agora é só um script. Em data/talkactions/scripts/ crie o script hiraishin no jutsu.lua e cole dentro dele: local config = { storage = 49608, time = 6, vocation = 4 } local errorMsg = { pz = "Voce so pode usar este jutsu fora do PZ.", playerOnly = "Voce so pode usar este jutsu em players.", alreadyMarked = "Voce ja marcou um jogador.", doesntExist = "Este jogador nao existe ou nao esta online.", noVocation = "Voce nao tem a vocation necessaria" } function onSay(cid, words, param) if getPlayerVocation(cid) ~= config.vocation then doPlayerSendCancel (cid, errorMsg.noVocation) return true end parametros = string.explode (param, " ") if #parametros == 3 then if parametros[1] == "ni" and parametros[2] == "no" and parametros[3] == "dan" then if getPlayerStorageValue (cid, config.storage) == 1 then setPlayerStorageValue(cid, config.storage, 2) else doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.") end end return true end if not parametros[1] == "ni" and not parametros[2] == "no" and not parametros[3] == "dan" and not parametros[4] == "seal" then return false end playerName = parametros[5] for i = 6, #parametros do playerName = playerName .. " " .. parametros[i] end caster = cid target = getPlayerByName (playerName) if target == nil then doPlayerSendCancel (cid, errorMsg.doesntExist) return false end if not getTilePzInfo(getThingPosition(cid)) and not getTilePzInfo(getThingPosition(target)) then if isPlayer (target) then if getPlayerStorageValue (cid, config.storage) <= 0 then setPlayerStorageValue(cid, config.storage, 1) doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getPlayerName(target)) local struct = { left = config.time, player = cid, target = target } addEvent(teleportIsTrue, 1000, struct) elseif getPlayerStorageValue (cid, config.storage) > 0 then doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel (cid, errorMsg.alreadyMarked) end else doPlayerSendCancel (cid, errorMsg.playerOnly) end else doPlayerSendCancel (cid, errorMsg.pz) end end function teleportIsTrue (struct) if struct.left ~= 0 then if getPlayerStorageValue (struct.player, config.storage) == 2 then doTeleportThing(struct.player, getThingPosition(struct.target), true) setPlayerStorageValue(struct.player, config.storage, 0) doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") return TRUE end doPlayerSendTextMessage(struct.player,22, struct.left .. " segundos restantes.") struct.left = struct.left - 1 addEvent (teleportIsTrue, 1000, struct) elseif struct.left == 0 then doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") setPlayerStorageValue(struct.player, config.storage, 0) else return FALSE end end Acredito eu que isso dificulte um pouco as coisas, porque é uma margem enorme para bugs, como a possibilidade do jogador parar em lugares que bugue ou que não tenha como sair. Mas aqui tem um script semelhante a esse que você pediu:
  11. Na versão que testei só funcionava quando abria as aspas. Eu so vou terminar um script aqui e ja olho esse em uma versão mais recente de tibia hiraishin "Teste3 teleport /\ foram as hotkeys usadas pra teleportar, mas por conta das tags que usei diferentes pra deixar mais rápido
  12. Em qual versão de TFS você está testando? P.S.: Dá pra colocar por vocation com talkaction também Usou as aspas? exemplo: hiraishin ni no dan seal "JogadorX
  13. Tente este: local config = { healingHP = 200, -- HP curado por segundo healingMP = 200, -- MP curado por segundo time = 6 -- Quantos segundos de cura } local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_MEELEFFECT, CONST_ANI_PHYSICAL) setCombatFormula(combat1, COMBAT_FORMULA_SKILL, -1.0, -40, -0.8, -95) local function onUseWeapon1(parameters) doCombat(parameters.cid, parameters.combat1, parameters.var) end function onUseWeapon(cid, var) local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2 } addEvent(onUseWeapon1, 0, parameters) local struct = { times = config.time, cid = cid } if getCreatureMaxHealth(cid) > getCreatureHealth(cid) then addEvent(heal, 1000, struct) end end function heal ( struct ) if struct.times == 0 then return true else if getCreatureMaxHealth(struct.cid) > getCreatureHealth(struct.cid) then return true end doPlayerAddHealth (struct.cid , config.healingHP) doPlayerAddMana (struct.cid, config.healingMP) struct.times = struct.times - 1 addEvent (heal, 1000, struct) end return true end Quando sua vida está cheia ele não enche, e quando sua vida enche ele para de curar.
  14. Ela está healando a vida do player que está usando a espada. Nem me passou pela cabeça qual dos dois foi pedido, esqueci desse detalhe @Dennyz qual dos dois você pediu?
  15. @xWhiteWolf, Então, eu estou começando a mexer com LUA ainda, comecei pra valer na semana passada... Antigamente eu mexia com otserver (quando tinha uns 12 anos) mas eu sempre reutilizava scripts para tentar fazer outros e nunca sabia nada sobre a sintaxe de programação (como condicionais ou iteradores) o que me limitava muito. Agora já sei ou pouco mais, ai ajuda. Obrigado pelas dicas. Sobre a segunda eu tenho um pouco de medo porque ao menos na versão 8.1 o TRUE e FALSE são definidos no global.lua como 0 e 1, e não sabia se em lua é feito igual em C++ (0 = false e o restante = true). Sobre a redundancia na terceira acho que entra um pouco na segunda, no servidor 8.1 que tenho enfrentei problemas quando nao colocava a redundância em alguns scripts, mas eu vi que no outro source que tenho já não dava erro (TFS). Tipo, eu meio que sei sobre isso, mas tenho medo pelo desconhecimento ainda das sources e de LUA em si... O storage eu nao consigo trocar ainda porque sou meio que fechado com 8.1 e se não me engano ele não aceita storage com strings (e ele não usa banco de dados, mas arquivos de texto para armazenar os personagens). (P.S.: Mt obrigado pela dica do uid do jogador, acho que ja da pra usar em uns scripts que eu estava pensando)
  16. Vá em data/weapons/weapons.xml e adicione a tag: <melee id="XXXX" enabled="1" exhaustion="0" hitchance="80" script="swordHeal.lua"></melee> Onde XXXX é a arma que terá o script executado. Em seguida vá para data/weapons/scripts/ e crie um arquivo chamado swordHeal.lua e cole isto nele: local config = { healingHP = 200, -- HP curado por segundo healingMP = 200, -- MP curado por segundo time = 6 -- Quantos segundos de cura } local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_MEELEFFECT, CONST_ANI_PHYSICAL) setCombatFormula(combat1, COMBAT_FORMULA_SKILL, -1.0, -40, -0.8, -95) local function onUseWeapon1(parameters) doCombat(parameters.cid, parameters.combat1, parameters.var) end function onUseWeapon(cid, var) local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2 } addEvent(onUseWeapon1, 0, parameters) local struct = { times = config.time, cid = cid } addEvent(heal, 1000, struct) end function heal ( struct ) if struct.times == 0 then return TRUE else doPlayerAddHealth (struct.cid , config.healingHP) doPlayerAddMana (struct.cid, config.healingMP) struct.times = struct.times - 1 addEvent (heal, 1000, struct) end end Foi testado em Aries Server to Tibia 8.1 - Version 4.0 based on OTServ SVN Version 0.6.0 e, aparentemente, funcionando normalmente. Caso não funcione em seu servidor me envie sua versão do TFS para eu tentar adaptar o script/tag.
  17. Bom, eu tentei fazer o bruto, se faltar alguma coisa me dá o toque. Eu preferi fazer por talkaction pra deixar mais fácil o codigo, porque daria muito trampo negócio de guardar o nome do jogador que o player marcou fora do script. Vá em data/talkactions/talkactions.xml e adicione as tags: <talkaction words="hiraishin ni no dan seal" script="hiraishin no jutsu.lua" /> <talkaction words="hiraishin ni no dan" script="teleport hiraishin.lua" /> Agora em data/talkactions/scripts/ crie os arquivos hiraishin no jutsu.lua e teleport hiraishin.lua. hiraishin no jutsu.lua local config = { storage = 49608, time = 6 } local errorMsg = { pz = "Voce so pode usar este jutsu fora do PZ.", playerOnly = "Voce so pode usar este jutsu em players.", alreadyMarked = "Voce ja marcou um jogador." } function onSay(cid, words, param) caster = cid target = getPlayerByName (param) if getTilePzInfo(getPlayerPosition(caster)) == FALSE and getTilePzInfo(getPlayerPosition(target)) == FALSE then if isPlayer (target) == TRUE then if getPlayerStorageValue (cid, config.storage) <= 0 then setPlayerStorageValue(cid, config.storage, 1) doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getPlayerName(target)) local struct = { left = config.time, player = cid, target = target } addEvent(teleportIsTrue, 1000, struct) elseif getPlayerStorageValue (cid, config.storage) > 0 then doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel (cid, errorMsg.alreadyMarked) end else doPlayerSendCancel (cid, errorMsg.playerOnly) end else doPlayerSendCancel (cid, errorMsg.pz) end end function teleportIsTrue (struct) if struct.left ~= 0 then if getPlayerStorageValue (struct.player, config.storage) == 2 then doTeleportThing(struct.player, getThingPos(struct.target)) setPlayerStorageValue(struct.player, config.storage, 0) doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") return TRUE end doPlayerSendTextMessage(struct.player,22, struct.left .. " segundos restantes.") struct.left = struct.left - 1 addEvent (teleportIsTrue, 1000, struct) elseif struct.left == 0 then doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") setPlayerStorageValue(struct.player, config.storage, 0) else return FALSE end end hiraishin teleport.lua local config = { storage = 49608 } function onSay (cid, words, param) if getPlayerStorageValue (cid, config.storage) == 1 then setPlayerStorageValue(cid, config.storage, 2) else doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.") end end Testei em Aries Server to Tibia 8.1 - Version 4.0 based on OTServ SVN Version 0.6.0 e funcionou normalmente, caso dê algum erro me envie o que houve no console. Espero ter ajudado!
  18. Um action não vai funcionar se tiver o function onCastSpell (cid, var). Então você troca para function onUse(cid, item, frompos, item2, topos) e para o action chamar a skill você deve ter o doCombat(cid, combat, var), mas você não tem var numa action, então você troca para doCombat(cid, combat, numberToVariant(cid)). Se você preferir faz assim: Pega o spell que você quer que seja o item e copie numa nova action. Adicione ao começo local config = { requiredLevel = 100, usingMana = 200 } E substitua o function onCastSpell(cid, var) return doCombat(cid, combat, var) end Por function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) > config.requiredLevel then if getPlayerMana(cid) > config.usingMana then doPlayerAddMana(cid, -config.usingMana) return doCombat(cid, combat, numberToVariant(cid)) else doPlayerSendCancel(cid, "Not enough mana.") end else doPlayerSendCancel(cid, "Not enough level.") end return TRUE end
  19. Vou tentar explicar dando um exemplo. Quero fazer um item que solte "Exevo Mas San", o script equivalente no meu servidor é o holy light.lua. A princípio temos: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 49) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, -30, -1.1, 0) local arr = { {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 3, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0} } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Quando você usa uma skill o que você chamou na verdade é a parte do script: function onCastSpell(cid, var) return doCombat(cid, combat, var) end E a parte responsável por soltar uma magia é o "doCombat(cid, combat, var)". Botando os parâmetros "cid" e "var" de lado, quem é "combat"? A parte a seguir não é necessária para compreender totalmente como fazer para o item usar uma skill mas vamos lá: Vamos voltar ao começo do script para entender quem é combat: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 49) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, -30, -1.1, 0) local arr = { {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 3, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0} } local area = createCombatArea(arr) setCombatArea(combat, area) Na primeira linha criamos a variável "combat" e usamos uma espécie de construtor dessa variável. Depois disso definimos cada parte do script. Na segunda linha definimos o "COMBAT_PARAM_TYPE", que é o tipo de dano. Na terceira linha, definimos "COMBAT_PARAM_EFFECT", que é o efeito (49). Na quarta linha, definimos "COMBAT_FORMULA_LEVELMAGIC" que vai ser a quantidade de dano. Depois disso definimos a área, criamos a variável arr que é uma matriz definindo a área da skill, facilitando a vida de pessoas que vão fazer skills. E depois simplesmente "linkamos" essa matriz ao combat. Enfim, quando usamos uma magia temos a função onCastSpell e quando usamos um action temos a função onUse, logo, não podemos simplesmente dar ctrl+c e ctrl+v para fazê-lo. Então vamos fazer o que está sendo feito dentro do onCastSpell dentro do onUse. O que temos dentro do onCastSpell que queremos no onUse? function onCastSpell(cid, var) return doCombat(cid, combat, var) end E o que temos no action? function onUse(cid, item, frompos, item2, topos) <codigo> end Note que no doCombat(cid, combat, var) temos uma variável que não temos no onUse, então vamos colocar numberToVariant(cid) no lugar, ficando assim: function onUse(cid, item, frompos, item2, topos) return doCombat(cid, combat, numberToVariant(cid)) end No final das contas, o script do exevo mas san por item ficaria assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 49) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, -30, -1.1, 0) local arr = { {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 3, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0} } local area = createCombatArea(arr) setCombatArea(combat, area) function onUse(cid, item, frompos, item2, topos) return doCombat(cid, combat, numberToVariant(cid)) end [EDIT]: Tinha me esquecido desse detalhe. Já edito e mando o exemplo acima gastando mana. [EDIT2]: local config = { requiredLevel = 100, usingMana = 200 } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 49) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, -30, -1.1, 0) local arr = { {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 3, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0} } local area = createCombatArea(arr) setCombatArea(combat, area) function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) > config.requiredLevel then if getPlayerMana(cid) > config.usingMana then doPlayerAddMana(cid, -config.usingMana) return doCombat(cid, combat, numberToVariant(cid)) else doPlayerSendCancel(cid, "Not enough mana.") end else doPlayerSendCancel(cid, "Not enough level.") end return TRUE end
  20. Você vai fazer o seguinte: copia tudo que está na magia e cola no action, depois procura essa parte: function onCastSpell(cid, var) return doCombat(cid, combat, var) end e substitua por: function onUse(cid, item, frompos, item2, topos) return doCombat(cid, combat, numberToVariant(cid)) end
  21. Você pode fazer assim no caso da exura, cria o arquivo item_skill.lua em data/actions/scripts: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function onGetFormulaValues(cid, level, maglevel) min = (level * 2 + maglevel * 3) * 0.5 - 30 max = (level * 2 + maglevel * 3) * 0.6 if min < 25 then min = 25 end return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onUse(cid, item, frompos, item2, topos) return doCombat(cid, combat, numberToVariant(cid)) end E adicionar em actions.xml a tag: <action itemid="2195" script="item_skill.lua" /> Isso no OTServ SVN Version 0.6.0. Basicamente, qual a diferença? Um action você teria que ter a função "onUse". Dentro dela você chama o "doCombat" e como não temos o parâmetro "var" vamos usar o "numberToVariant(cid)".
  22. Usa meu script com essa tag no movements.xml: <movevent type="StepIn" actionid="13541" event="script" value="outfit_tile.lua"/>
  23. Isso já foge o script. Teria que ser um addon já pronto ou algo do tipo.
  24. @bismarkzika Qual seu TFS? Aqui funcionou normalmente.

Informação Importante

Confirmação de Termo