Ir para conteúdo
  • Cadastre-se

[AJUDA] CRIAR ARMA COM ATAQUE DE ARROWS OU SKILLS


Posts Recomendados

Olá pessoal, hoje venho pedir a ajuda de como criar uma arma que da dano de skills ou daqueles arrows elementais que atacam o monstro nesse padrão de squares:

 

1   1   1

1   x   1

1   1   1           

 

ou com skills que dão dano em uma área maior, tipo uma arma que solta magia.

 

 

Se alguém puder me ajudar eu agradeço muito..

 

Obrigado!

Link para o post
Compartilhar em outros sites

Este tópico foi movido para a seção de Suporte Otserv Alternativo

21 minutos atrás, zGiovani disse:

Olá pessoal, hoje venho pedir a ajuda de como criar uma arma que da dano de skills ou daqueles arrows elementais que atacam o monstro nesse padrão de squares:

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat1, COMBAT_PARAM_BLOCKSHIELD, 1)
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_NONE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

local area = createCombatArea({
	{1, 1, 1},
	{1, 3, 1},
	{1, 1, 1}
})
setCombatArea(combat1, area)
function onGetFormulaValues(cid, level, skill, attack, factor)
	local skills = getPlayerSkill(cid, SKILL_DISTANCE)
	return -((skills*5)+8000), -((skills*5)+12000)		--minimo, maximo
end
setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")


function onUseWeapon(cid, var)
	return doCombat(cid, combat1, var)
end



ja meu bow elemental eu uso:
bow elemental + burst

ai uso o mesmo script da wand elemental, dupliquei pra mudar a storage conforme chama o elemento pro bow, e !bow burst, pra chamar o uso em area

local combat_types = {
	[1] = {cond = CONDITION_FREEZING, effect = CONST_ME_ICEATTACK, anim = 34, damage = COMBAT_ICEDAMAGE},
	[2] = {cond = CONDITION_FIRE, effect = CONST_ME_FIREATTACK, anim = 33, damage = COMBAT_FIREDAMAGE},
	[3] = {cond = CONDITION_POISON, effect = CONST_ME_SMALLPLANTS, anim = 5, damage = COMBAT_EARTHDAMAGE},
	[4] = {cond = CONDITION_ENERGY, effect = CONST_ME_ENERGYHIT, anim = 32, damage = COMBAT_ENERGYDAMAGE},
	[5] = {effect = CONST_ME_HOLYDAMAGE, anim = 40, damage = COMBAT_HOLYDAMAGE},
	[6] = {cond = CONDITION_CURSED, effect = CONST_ME_MORTAREA, anim = 7, damage = COMBAT_DEATHDAMAGE},
	[7] = {},

	[-1] = {cond = CONDITION_CURSED, effect = CONST_ME_BLEEDING, anim = 1, damage = COMBAT_PHYSICALDAMAGE},
	
	default = {damage = COMBAT_PHYSICALDAMAGE},
}

local config = {
	storage = 101050,
	block_armor = true,
	condition_rounds = 0,
	condition_value = 0,
	condition_time = 2000,
}
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat1, COMBAT_PARAM_BLOCKSHIELD, 1)
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_NONE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

local area = createCombatArea({
	{1, 1, 1},
	{1, 3, 1},
	{1, 1, 1}
})
setCombatArea(combat1, area)
function onGetFormulaValues(cid, level, skill, attack, factor)
	local skills = getPlayerSkill(cid, SKILL_DISTANCE)
	return -((skills*5)+8000), -((skills*5)+12000)		--minimo, maximo
end
setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")


for key, combat in pairs(combat_types) do
	combat.object = createCombatObject()

	setCombatParam(combat.object, COMBAT_PARAM_TYPE, combat.damage or COMBAT_PHYSICALDAMAGE)
	setCombatParam(combat.object, COMBAT_PARAM_EFFECT, combat.effect or CONST_ME_NONE)
	setCombatParam(combat.object, COMBAT_PARAM_DISTANCEEFFECT, combat.anim or CONST_ANI_NONE)
	setCombatParam(combat.object, COMBAT_PARAM_BLOCKARMOR, config.block_armor and 1 or 0)
	
	
	function onGetFormulaValues(cid, level, skill, attack, factor)
		local skills = getPlayerSkill(cid, SKILL_DISTANCE)
		return -((skills*10)+25000), -((skills*20)+28000)		--minimo, maximo
	end
	setCombatCallback(combat.object, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

	if combat.cond then
		local condition = createConditionObject(combat.cond)
		setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
		addDamageCondition(condition, config.condition_rounds, config.condition_time, config.condition_value)
		setCombatCondition(combat.object, condition)
	end
end

local function find_combat(id)
	return combat_types[id] or false
end

function onUseWeapon(cid, var)
	local combat = find_combat(getCreatureStorage(cid, config.storage))

	if not combat then
		if getDistanceBetween(getThingPosition(cid), getThingPosition(var.number)) > 1 then
			return false
		end

		combat = combat_types.default
	end
	if getCreatureStorage(cid, config.storage) == 7 then
		return doCombat(cid, combat1, var)
	else
		return doCombat(cid, combat.object, var)
	end
end

 

Link para o post
Compartilhar em outros sites
3 minutos atrás, zGiovani disse:

Qual o local onde posso salvar/abrir esses arquivos? e onde preciso apontar o id do meu item, para que funcione corretamente?


Weapons > scripts > ElementalBow.lua

depois ir no weapons.xml
 

<distance id="ID-DO_ITEM" range="8" lvl="8" swing="true" enabled="1" exhaustion="0" script="elementalBow.lua"></distance>



o primeiro script corresponde ao Burst em
1  1  1
1  x  1
1  1  1

o segundo script que mandei corresponde ao Bow elemental com Burst nele

Link para o post
Compartilhar em outros sites

Não está funcionando, tem algo errado ?

 

 

No meu caso não tem esse weapons,xml porque talvez seja de uma versão diferente, o meu acho que é:  unscripted_weapons,lua

 

E ficou assim o script da minha axe

 

Antes:    burst_arrow,lua

Spoiler

 

local area = createCombatArea({
     {1, 1, 1},
     {1, 3, 1},
     {1, 1, 1}
 })

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true)
combat:setFormula(COMBAT_FORMULA_SKILL, 0, 0, 1, 0)
combat:setArea(area)

local burstArrow = Weapon(WEAPON_AMMO)

burstArrow.onUseWeapon = function(player, variant)
    if player:getSkull() == SKULL_BLACK then
        return false
    end

    return combat:execute(player, variant)
end

burstArrow:id(3449)
burstArrow:attack(27)
burstArrow:action("removecount")
burstArrow:ammoType("arrow")
burstArrow:shootType(CONST_ANI_BURSTARROW)
burstArrow:maxHitChance(100)
burstArrow:register()

 

 

 

 

Depois: ornateremedyaxe.lua

Spoiler

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat1, COMBAT_PARAM_BLOCKSHIELD, 1)
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_NONE)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

local area = createCombatArea({
    {1, 1, 1},
    {1, 3, 1},
    {1, 1, 1}
})
setCombatArea(combat1, area)
function onGetFormulaValues(cid, level, skill, attack, factor)
    local skills = getPlayerSkill(cid, SKILL_DISTANCE)
    return -((skills*5)+8000), -((skills*5)+12000)        --minimo, maximo
end
setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")


function onUseWeapon(cid, var)
    return doCombat(cid, combat1, var)
end

 

E em unscripted_weapons,lua meu item foi registrado assim:    

Spoiler

    {
        -- ornate remedy axe
        itemid = 26022,
        type = WEAPON_AXE,
        level = 200,
        unproperly = true,
        script = "ornateremedyaxe.lua",
        vocation = {
            {"Knight", true},
            {"Elite Knight"}
        }
    },

 

Não deu nenhum erro de código, o item funciona normalmente, só que sem o skill da burst arrow. como se fosse um item de ataque normal, não carregando a script "ornateremedyaxe.lua" que foi criada ?

Editado por zGiovani (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
58 minutos atrás, FeeTads disse:

storage = 101050,

alterou a storage conforme o dano elemental?

pode usar algum script talkaction pra isso, ou qualquer outra coisa, pra vc testar no ADM, da o comando /storage nome-do-char, 101050, 7
que provavelmente vai mudar, me parece que seu OT é revScript, não sei se vai funcionar esse Script pra ele

Link para o post
Compartilhar em outros sites

Realmente deve ser de outra maneira que faz o item funcionar nesse server...

 

 

Uso o  OTServBR-Global - Version 1.4.0 Client 12.86

 

https://github.com/opentibiabr/otservbr-global/releases/tag/stable-v1.4.0

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo