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!
info
Grupo: Administrador
Registrado: 08/07/05
Posts: 5.8k
Reputação: +1.4k
Gênero: Outro

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!
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
info
Grupo: Administrador
Registrado: 08/07/05
Posts: 5.8k
Reputação: +1.4k
Gênero: Outro

Tem chance de quebrar o cabo? (acontece na vida real heheheh)
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:
info
Grupo: Administrador
Registrado: 08/07/05
Posts: 5.8k
Reputação: +1.4k
Gênero: Outro

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:
info
Grupo: Conde
Registrado: 14/04/15
Posts: 956
Reputação: +333
Gênero: Masculino

Vdd, se tiver dúvida em complementar este sisteminhas de lenhador da uma MP ai que te ajudo ![]()
info
Grupo: Visconde
Registrado: 01/07/15
Posts: 416
Reputação: +206
Gênero: Masculino
Char no Tibia: Bluester

Muito bom !
Irei postar o de lenhador que fiz ultimamente, parecido com o da PxG ( que troca a outfit )
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.
info
Grupo: Visconde
Registrado: 01/07/15
Posts: 416
Reputação: +206
Gênero: Masculino
Char no Tibia: Bluester

Sim. só adicionar addEvents nas funções
Blz, mando se tiver algum problema
Eu vi o post, não é muito mais complicado, o que muda mais é o tempo do evento.
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.

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
info
Grupo: Grão-Duque
Registrado: 02/10/06
Posts: 3.3k
Reputação: +151
Gênero: Masculino

Gosto de scripts que fogem no padrão.
Muito legal, traga mais conteúdos assim
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
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

Estou acompanhando, muito bom
info
Grupo: Visconde
Registrado: 19/04/09
Posts: 279
Reputação: +64
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 end2º - 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 end3º - 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 end5º - 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 end6º - 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
Exemplo de spells.xml spells\scripts\debuff.lualocal 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) endcreaturescripts\scripts\debuff.luaEditado Janeiro 18 por felzan