Ir para conteúdo

Featured Replies

Postado

Essa é uma modificação do script do Triple Bolt Crossbow(clique aqui). As diferenças são:

 

Você não precisa de um crossbow especifico para usar,

Só gasta 1 bolt por vez,

Você é capaz de definir quantas vezes ele se multiplica.

 

Imagem:

 

hE1v6Gz.png

 

Script:

 

local cfg = {
storage = 15001, -- Esse script usa storages, então ponha uma que ainda não esteja sendo usada
TYPE = COMBAT_PHYSICALDAMAGE, -- Que tipo de combat?
EFFECT = CONST_ME_DRAWBLOOD, -- Que tipo de efeito?
DISTANCEEFFECT = CONST_ANI_PIERCINGBOLT, -- Que tipo de efeito de distancia?
level = 10, -- Level necessário
voc = {3, 7}, -- Vocação(ões) necessária(s)
damage = 1000, -- Dano
extraBullets = 2, -- Balas extras. Com 2 irá atirar 3 balas
range = 4, -- Range das balas extras
}
 
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, cfg.TYPE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, cfg.EFFECT)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, cfg.DISTANCEEFFECT)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)
 
function onUseWeapon(cid, var)
doCombat(cid, combat, var)
 
if getPlayerLevel(cid) >= cfg.level and isInArray(cfg.voc, getPlayerVocation(cid)) or getPlayerGroupId(cid) > 2 then
 
local target = getCreatureTarget(cid)
local level = getPlayerLevel(cid)
local dlevel = getPlayerSkill(cid, 4)
local atkMin = (level/5)
local atkMax = (0.09*0.75*dlevel*cfg.damage+atkMin)
local pPos = getCreaturePosition(cid)
local tPos = getCreaturePosition(target)
 
if getDistanceBetween(pPos, tPos) > cfg.range then
return false
end
 
local function doMimicsShoot(pos)
local hm = getPlayerStorageValue(cid, cfg.storage)
local creature = getTopCreature({x = pos.x, y = pos.y, z = pos.z, stackpos = STACKPOS_TOP_CREATURE})
 
if creature == getTopCreature(pPos) then 
 
return end
 
if creature.type == 1 and hm < cfg.extraBullets or creature.type == 2 and hm < cfg.extraBullets then
 
if creature.type == 1 then
atkMin = (atkMin/2)
atkMax = (atkMax/2)
end
 
local percent90 = (math.random(1,10))
 
if percent90 > 1 then
 
setPlayerStorageValue(cid, cfg.storage, hm+1)
doSendDistanceShoot(pPos, pos, cfg.DISTANCEEFFECT)
doAreaCombatHealth(cid, cfg.TYPE, pos, area, -atkMin, -atkMax, cfg.EFFECT)
 
else
 
setPlayerStorageValue(cid, cfg.storage, hm+1)
doSendDistanceShoot(pPos, pos, cfg.DISTANCEEFFECT)
doSendMagicEffect(pos, CONST_ME_POFF)
end
end
end
 
local tab = {
{x=tPos.x-1, y=tPos.y, z=tPos.z},
{x=tPos.x+1, y=tPos.y, z=tPos.z},
{x=tPos.x, y=tPos.y+1, z=tPos.z},
{x=tPos.x, y=tPos.y-1, z=tPos.z},
{x=tPos.x-1, y=tPos.y-1, z=tPos.z},
{x=tPos.x+1, y=tPos.y-1, z=tPos.z},
{x=tPos.x+1, y=tPos.y+1, z=tPos.z},
{x=tPos.x-1, y=tPos.y+1, z=tPos.z},
}
 
setPlayerStorageValue(cid, cfg.storage, 0)
 
for i = 1, #tab do
doMimicsShoot(tab)
end
end
end

 

Em weapons.xml:

 

TFS 1.0:

 

<distance id="15649" unproperly="1" level="40" function="default" script="nomedoarquivo.lua"/>     <- é só botar essa tag no bolt desejado

 

Outro TFS:

 

<distance id="15649" unproperly="1" level="40" function="default" event="script" value="nomedoarquivo.lua"/>     <- é só botar essa tag no bolt desejado

 

Vou indicar uma lista de efeitos para serem utilizados: 

 

http://www.tibiaking.com/forum/topic/32901-lista-completa-de-magic-effects-e-shoot-type/

Editado por mateusak (veja o histórico de edições)

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Postado

Seu conteúdo foi aprovado, por se tratar de uma edição você poderia ter feito no próprio tópico original mas vou aprovar pelas mudanças terem sido significativas. Com isso estou te dando 1 ponto de reputação por trazer algo relativamente novo ao fórum. Continue assim e fico feliz que o TK tenha te inspirado à aprender lua :D

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado

Belo script! Vai ajudar muita gente ^^

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

  • 4 years later...
Postado

Cara deu esse erro, sabe como resolver?
[19/12/2019 07:58:44] [Warning - Event::loadScript] Cannot load script (data/weapons/scripts/bolttest.lua)
[19/12/2019 07:58:44] data/weapons/scripts/bolttest.lua:84: 'end' expected (to close 'function' at line 19) near '<eof>'

 

Citar

local cfg = {
storage = 15001, -- Esse script usa storages, então ponha uma que ainda não esteja sendo usada
TYPE = COMBAT_PHYSICALDAMAGE, -- Que tipo de combat?
EFFECT = CONST_ME_DRAWBLOOD, -- Que tipo de efeito?
DISTANCEEFFECT = CONST_ANI_PIERCINGBOLT, -- Que tipo de efeito de distancia?
level = 10, -- Level necessário
voc = {3, 7}, -- Vocação(ões) necessária(s)
damage = 1000, -- Dano
extraBullets = 2, -- Balas extras. Com 2 irá atirar 3 balas
range = 4, -- Range das balas extras
}
 
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, cfg.TYPE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, cfg.EFFECT)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, cfg.DISTANCEEFFECT)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)
 
function onUseWeapon(cid, var)
doCombat(cid, combat, var)
 
if getPlayerLevel(cid) >= cfg.level and isInArray(cfg.voc, getPlayerVocation(cid)) or getPlayerGroupId(cid) > 2 then
 
local target = getCreatureTarget(cid)
local level = getPlayerLevel(cid)
local dlevel = getPlayerSkill(cid, 4)
local atkMin = (level/5)
local atkMax = (0.09*0.75*dlevel*cfg.damage+atkMin)
local pPos = getCreaturePosition(cid)
local tPos = getCreaturePosition(target)
 
if getDistanceBetween(pPos, tPos) > cfg.range then
return false
end
 
local function doMimicsShoot(pos)
local hm = getPlayerStorageValue(cid, cfg.storage)
local creature = getTopCreature({x = pos.x, y = pos.y, z = pos.z, stackpos = STACKPOS_TOP_CREATURE})
 
if creature == getTopCreature(pPos) then 
 
return end
 
if creature.type == 1 and hm < cfg.extraBullets or creature.type == 2 and hm < cfg.extraBullets then
 
if creature.type == 1 then
atkMin = (atkMin/2)
atkMax = (atkMax/2)
end
 
local percent90 = (math.random(1,10))
 
if percent90 > 1 then
 
setPlayerStorageValue(cid, cfg.storage, hm+1)
doSendDistanceShoot(pPos, pos, cfg.DISTANCEEFFECT)
doAreaCombatHealth(cid, cfg.TYPE, pos, area, -atkMin, -atkMax, cfg.EFFECT)
 
else
 
setPlayerStorageValue(cid, cfg.storage, hm+1)
doSendDistanceShoot(pPos, pos, cfg.DISTANCEEFFECT)
doSendMagicEffect(pos, CONST_ME_POFF)
end
end
end
 
local tab = {
{x=tPos.x-1, y=tPos.y, z=tPos.z},
{x=tPos.x+1, y=tPos.y, z=tPos.z},
{x=tPos.x, y=tPos.y+1, z=tPos.z},
{x=tPos.x, y=tPos.y-1, z=tPos.z},
{x=tPos.x-1, y=tPos.y-1, z=tPos.z},
{x=tPos.x+1, y=tPos.y-1, z=tPos.z},
{x=tPos.x+1, y=tPos.y+1, z=tPos.z},
{x=tPos.x-1, y=tPos.y+1, z=tPos.z},
}
 
setPlayerStorageValue(cid, cfg.storage, 0)
 
for i = 1, #tab do
doMimicsShoot(tab)
end
end

 

Editado por alexpaimel (veja o histórico de edições)

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo