Postado Agosto 4, 2022 2 anos 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!
Postado Agosto 4, 2022 2 anos 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
Postado Agosto 4, 2022 2 anos Autor Obrigado pela ajuda ? Qual o local onde posso salvar/abrir esses arquivos? e onde preciso apontar o id do meu item, para que funcione corretamente?
Postado Agosto 4, 2022 2 anos 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
Postado Agosto 4, 2022 2 anos Autor 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 Agosto 4, 2022 2 anos por zGiovani (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.