felzan 64 Postado Dezembro 22, 2015 Share Postado Dezembro 22, 2015 (editado) Estou recomeçando a aprender Lua, vou postar alguns scripts que fizer, aqui Quem quiser me dar dicas de como melhorar os códigos, a vontade 1º - Mudança na Spell que cria comida: exevo pan O tipo do item é entregue de acordo com o ML, e a quantidade de acordo com o Lv. local food = { {0, 2684}, -- meat {6, 2684}, -- meat {13, 2689}, -- bread {20, 2666}, -- meat {33, 2682}, -- melon {53, 2671}, -- ham {86, 2795}, -- fire mushroom {100, 2672} -- dragon ham } local lv = 30 function onCastSpell(creature, var) if not creature:isPlayer() then return false end local mo for k=1, #food do if (getPlayerMagLevel(creature) >= food[k][1]) then mo = food[k][2] end end creature:addItem(mo,math.random(1, math.ceil(getPlayerLevel(creature)/lv))) creature:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN) return true end 2º - Lenhador A ideia desse é poder usar os machados (estava pensando em qualquer arma) e definir uma chance que o item tem de derrubar a árvore, como não sei os IDs de cor ainda, peguei esses pra testar. function onUse(cid, item, fromPosition, itemEx, toPosition, isHotkey) local chance = true --sera 100%? local axes = { [2386] = {tax = 1}, [2388] = {tax = 50}, [2380] = {tax = 20} } local trees = { [2702] = {qnt_madeira = 2}, [2703] = {qnt_madeira = 4}, [2704] = {qnt_madeira = 8} } if trees[itemEx.itemid] == nil then return true else local wood = 2148 --gold coin local taxa = axes[item.itemid].tax local qnt = math.random((trees[itemEx.itemid].qnt_madeira)/2,trees[itemEx.itemid].qnt_madeira) if chance == false then if (math.random(1,100) <= axes[item.itemid].tax) then Item(itemEx.uid):transform(2768) doSendMagicEffect(toPosition, 4) Player(cid):addItem(wood,qnt) else doSendMagicEffect(toPosition, 3) end else Item(itemEx.uid):transform(2768) doSendMagicEffect(toPosition, 4) Player(cid):addItem(wood,qnt) end end end 3º - Auto-completion TÓPICO SOBRE ISSO https://github.com/felzan/TFSLua_npp Este não é bem um script, mas ajuda na hora de escrever. É uma biblioteca de funções que são apresentadas ao longo que vou escrevendo. Quero completar, adicionar mais funções e seus parâmetros. Ele mostra uma lista de funções (a partir das letras já inseridas) e os parâmetros necessários para a função, e uma descrição. 4º - Explosion Arrow Se é uma flecha explosiva, POR QUE ELA EXPLODE QUANDO É LANÇADA?!!? A ideia dessa modificação é fazer com que a explosão aconteça quando a flecha atingir o alvo. Como é: Como ficou: Se for uma "flecha explosiva com timer (1s)": local combatExplosion = createCombatObject() setCombatParam(combatExplosion, COMBAT_PARAM_BLOCKARMOR, 0) setCombatParam(combatExplosion, COMBAT_PARAM_BLOCKSHIELD, 0) setCombatParam(combatExplosion, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combatExplosion, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ) setCombatArea(combatExplosion, area) local combatArrow = createCombatObject() setCombatParam(combatArrow, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combatArrow, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combatArrow, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combatArrow, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) setCombatFormula(combatArrow, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local function onUseWeaponExplosion(player, var) doCombat(player, combatExplosion, var) end function onUseWeapon(player, var) local name = player:getName() local playerPosition = player:getPosition() local targetPosition = player:getTarget():getPosition() local distance = getDistanceBetween(playerPosition, targetPosition) local waitTimeAfterHit = 0 doPlayerSendTextMessage(player, MESSAGE_EVENT_ORANGE, targetPosition.x) doCombat(player, combatArrow, var) addEvent(onUseWeaponExplosion, (distance*95+waitTimeAfterHit*1000), player, var) return true end 5º - Poison Arrow Só alterei o jeito que o hp é removido, antes era em rounds com dano único. Agora da dano baseado na porcentagem de hp do alvo, mas vai decaindo. local combatArrow = Combat() combatArrow:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW) combatArrow:setParameter(COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE) combatArrow:setFormula(COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local function onUseWeaponPoison(parameters, rounds) if parameters.target == nil then return true else local conditionPoison = Condition(CONDITION_POISON) conditionPoison:setParameter(CONDITION_PARAM_DELAYED, true) for i = rounds, 1,-1 do local hp = getCreatureHealth(parameters.target) print(rounds) local hpp = .001 conditionPoison:addDamage(1, 1000, -hp*hpp*i) end combatArrow:setCondition(conditionPoison) end end function onUseWeapon(player, var) local rounds = 10 local cid = player:getId() parameters = {cid = player, target = Creature(var:getNumber())} combatArrow:execute(player, var) addEvent(onUseWeaponPoison, 1000, parameters, rounds) return true end 6º - Debuff spell Fiz essa spell pra esse pedido Faz com que o player debuffado sofra mais dano. Add no final do creaturescripts\scripts\login.lua player:registerEvent("Debuff")creaturescripts.xml <event type="healthchange" name="Debuff" script="debuff.lua"/> Exemplo de spells.xml <instant group="attack" spellid="61" name="Debuff" words="debuff" lvl="1" mana="0" prem="0" range="4" needtarget="1" blockwalls="1" needweapon="0" exhaustion="6000" groupcooldown="2000" needlearn="0" script="debuff.lua"> </instant>spells\scripts\debuff.lua local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_SKULLVERTICAL) local conditionDebuff = Condition(CONDITION_PARALYZE) conditionDebuff:setParameter(CONDITION_PARAM_TICKS, 10000) conditionDebuff:setFormula(0, 0, 0, 0) combat:setCondition(conditionDebuff) local function removeDebuff(parameters) parameters.target:setStorageValue(parameters.key, parameters.value) end function onCastSpell(creature, var) local cid = creature:getId() parameters = {target = Creature(var:getNumber()), key = 99881, value = 0} parameters.target:setStorageValue(parameters.key, 1) addEvent(removeDebuff, 10000, parameters) return combat:execute(creature, var) end creaturescripts\scripts\debuff.lua function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) local hasdebuff = creature:getStorageValue(99881) --storage dada na debuff spell local percent = 2 -- dobro (50% seria 1.5) local tipoDano = COMBAT_FIREDAMAGE if hasdebuff > 0 then return primaryDamage*percent, tipoDano, secondaryDamage, secondaryType else return primaryDamage, primaryType, secondaryDamage, secondaryType end end Editado Janeiro 19, 2016 por felzan Link para o comentário Compartilhar em outros sites More sharing options...
Administrador Administrador 1435 Postado Dezembro 22, 2015 Administrador Share Postado Dezembro 22, 2015 Foge do básico, eu gostei da ideia. Algo mais complexo ainda poderia ser food dependendo do lugar em que o player está, haha. Acompanhando! Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Dezembro 23, 2015 Autor Share Postado Dezembro 23, 2015 2º - Lenhador A ideia desse é poder usar os machados (estava pensando em qualquer arma) e definir uma chance que o item tem de derrubar a árvore, como não sei os IDs de cor ainda, peguei esses pra testar. function onUse(cid, item, fromPosition, itemEx, toPosition, isHotkey) local chance = true --sera 100%? local axes = { [2386] = {tax = 1}, [2388] = {tax = 50}, [2380] = {tax = 20} } local trees = { [2702] = {qnt_madeira = 2}, [2703] = {qnt_madeira = 4}, [2704] = {qnt_madeira = 8} } if trees[itemEx.itemid] == nil then return true else local wood = 2148 --gold coin local taxa = axes[item.itemid].tax local qnt = math.random((trees[itemEx.itemid].qnt_madeira)/2,trees[itemEx.itemid].qnt_madeira) if chance == false then if (math.random(1,100) <= axes[item.itemid].tax) then Item(itemEx.uid):transform(2768) doSendMagicEffect(toPosition, 4) Player(cid):addItem(wood,qnt) else doSendMagicEffect(toPosition, 3) end else Item(itemEx.uid):transform(2768) doSendMagicEffect(toPosition, 4) Player(cid):addItem(wood,qnt) end end end Link para o comentário Compartilhar em outros sites More sharing options...
Administrador Administrador 1435 Postado Dezembro 23, 2015 Administrador Share Postado Dezembro 23, 2015 Tem chance de quebrar o cabo? (acontece na vida real heheheh) Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Dezembro 23, 2015 Autor Share Postado Dezembro 23, 2015 Tem chance de quebrar o cabo? (acontece na vida real heheheh) UEHASUEASHU poderia, mas daí teria de criar um NPC e um jeito pra poder arrumar :rimbuk: Link para o comentário Compartilhar em outros sites More sharing options...
Administrador Administrador 1435 Postado Dezembro 23, 2015 Administrador Share Postado Dezembro 23, 2015 Faz outro script pra isso hahah, tem uma sprite de uma caixa de ferramentas no tibia, é só o player andar com ela. Dai usa ela no cabo quebrado (tem uma sprite de madeira também, se não me engano) e viva a vida de lenhador! :gcool: :gcool: Link para o comentário Compartilhar em outros sites More sharing options...
Luga03 331 Postado Dezembro 23, 2015 Share Postado Dezembro 23, 2015 Vdd, se tiver dúvida em complementar este sisteminhas de lenhador da uma MP ai que te ajudo Link para o comentário Compartilhar em outros sites More sharing options...
Bluester 205 Postado Dezembro 23, 2015 Share Postado Dezembro 23, 2015 Muito bom ! Irei postar o de lenhador que fiz ultimamente, parecido com o da PxG ( que troca a outfit ) Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Dezembro 23, 2015 Autor Share Postado Dezembro 23, 2015 Vdd, se tiver dúvida em complementar este sisteminhas de lenhador da uma MP ai que te ajudo Blz, mando se tiver algum problema Muito bom ! Irei postar o de lenhador que fiz ultimamente, parecido com o da PxG ( que troca a outfit ) Eu vi o post, não é muito mais complicado, o que muda mais é o tempo do evento. Link para o comentário Compartilhar em outros sites More sharing options...
Bluester 205 Postado Dezembro 23, 2015 Share Postado Dezembro 23, 2015 Blz, mando se tiver algum problema Eu vi o post, não é muito mais complicado, o que muda mais é o tempo do evento. Sim. só adicionar addEvents nas funções Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Dezembro 28, 2015 Autor Share Postado Dezembro 28, 2015 3º Auto-completion https://github.com/felzan/TFSLua_npp Este não é bem um script, mas ajuda na hora de escrever. É uma biblioteca de funções que são apresentadas ao longo que vou escrevendo. Quero completar, adicionar mais funções e seus parâmetros. Ele mostra uma lista de funções (a partir das letras já inseridas) e os parâmetros necessários para a função, e uma descrição. Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Janeiro 15, 2016 Autor Share Postado Janeiro 15, 2016 4º - Explosion Arrow Se é uma flecha explosiva, POR QUE ELA EXPLODE QUANDO É LANÇADA?!!? A ideia dessa modificação é fazer com que a explosão aconteça quando a flecha atingir o alvo. Como é: Como ficou: Se for uma "flecha explosiva com timer (1s)": local combatExplosion = createCombatObject() setCombatParam(combatExplosion, COMBAT_PARAM_BLOCKARMOR, 0) setCombatParam(combatExplosion, COMBAT_PARAM_BLOCKSHIELD, 0) setCombatParam(combatExplosion, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatFormula(combatExplosion, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ) setCombatArea(combatExplosion, area) local combatArrow = createCombatObject() setCombatParam(combatArrow, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combatArrow, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combatArrow, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combatArrow, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) setCombatFormula(combatArrow, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local function onUseWeaponExplosion(player, var) doCombat(player, combatExplosion, var) end function onUseWeapon(player, var) local name = player:getName() local playerPosition = player:getPosition() local targetPosition = player:getTarget():getPosition() local distance = getDistanceBetween(playerPosition, targetPosition) local waitTimeAfterHit = 0 doPlayerSendTextMessage(player, MESSAGE_EVENT_ORANGE, targetPosition.x) doCombat(player, combatArrow, var) addEvent(onUseWeaponExplosion, (distance*95+waitTimeAfterHit*1000), player, var) return true end Link para o comentário Compartilhar em outros sites More sharing options...
Felipe Moraes 151 Postado Janeiro 16, 2016 Share Postado Janeiro 16, 2016 Gosto de scripts que fogem no padrão. Muito legal, traga mais conteúdos assim Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Janeiro 19, 2016 Autor Share Postado Janeiro 19, 2016 5º - Poison ArrowSó alterei o jeito que o hp é removido, antes era em rounds com dano único. Agora da dano baseado na porcentagem de hp do alvo, mas vai decaindo. local combatArrow = Combat() combatArrow:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW) combatArrow:setParameter(COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE) combatArrow:setFormula(COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local function onUseWeaponPoison(parameters, rounds) if parameters.target == nil then return true else local conditionPoison = Condition(CONDITION_POISON) conditionPoison:setParameter(CONDITION_PARAM_DELAYED, true) for i = rounds, 1,-1 do local hp = getCreatureHealth(parameters.target) print(rounds) local hpp = .001 conditionPoison:addDamage(1, 1000, -hp*hpp*i) end combatArrow:setCondition(conditionPoison) end end function onUseWeapon(player, var) local rounds = 10 local cid = player:getId() parameters = {cid = player, target = Creature(var:getNumber())} combatArrow:execute(player, var) addEvent(onUseWeaponPoison, 1000, parameters, rounds) return true end 6º - Debuff spellFiz essa spell pra esse pedidoFaz com que o player debuffado sofra mais dano. Add no final do creaturescripts\scripts\login.lua player:registerEvent("Debuff") creaturescripts.xml <event type="healthchange" name="Debuff" script="debuff.lua"/> Exemplo de spells.xml <instant group="attack" spellid="61" name="Debuff" words="debuff" lvl="1" mana="0" prem="0" range="4" needtarget="1" blockwalls="1" needweapon="0" exhaustion="6000" groupcooldown="2000" needlearn="0" script="debuff.lua"> </instant> spells\scripts\debuff.lua local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_SKULLVERTICAL) local conditionDebuff = Condition(CONDITION_PARALYZE) conditionDebuff:setParameter(CONDITION_PARAM_TICKS, 10000) conditionDebuff:setFormula(0, 0, 0, 0) combat:setCondition(conditionDebuff) local function removeDebuff(parameters) parameters.target:setStorageValue(parameters.key, parameters.value) end function onCastSpell(creature, var) local cid = creature:getId() parameters = {target = Creature(var:getNumber()), key = 99881, value = 0} parameters.target:setStorageValue(parameters.key, 1) addEvent(removeDebuff, 10000, parameters) return combat:execute(creature, var) end creaturescripts\scripts\debuff.lua function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) local hasdebuff = creature:getStorageValue(99881) --storage dada na debuff spell local percent = 2 -- dobro (50% seria 1.5) local tipoDano = COMBAT_FIREDAMAGE if hasdebuff > 0 then return primaryDamage*percent, tipoDano, secondaryDamage, secondaryType else return primaryDamage, primaryType, secondaryDamage, secondaryType end end Link para o comentário Compartilhar em outros sites More sharing options...
Night Wolf 285 Postado Janeiro 19, 2016 Share Postado Janeiro 19, 2016 Estou acompanhando, muito bom Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados