Ir para conteúdo

Galeria de aprendizado


felzan

Posts Recomendados

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.

 

7PWbtTi.png

 

 

 

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.

 

9uc540m.png

 

 

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.

 

NHPgklf.png

 

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 é:

ImMWRjY.gif

 

Como ficou:

QVhI9m7.gif

 

Se for uma "flecha explosiva com timer (1s)":

RCeuT6o.gif

 

 

 

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.

 

sOt2gkQ.gif

 

 

 

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.

 

0oI8VNz.gif

 

 

 

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 por felzan
Link para o comentário
Compartilhar em outros sites

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.

 

9uc540m.png

 

 

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

  • Administrador

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

Vdd, se tiver dúvida em complementar este sisteminhas de lenhador da uma MP ai que te ajudo :D

 

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

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.

NHPgklf.png

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

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 é:

ImMWRjY.gif

 

Como ficou:

QVhI9m7.gif

 

Se for uma "flecha explosiva com timer (1s)":

RCeuT6o.gif

 

 

 

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

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.

 

sOt2gkQ.gif

 

 

 

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.

0oI8VNz.gif


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

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...