Postado Junho 5, 2018 6 anos Autor 7 horas atrás, Zazeros disse: @Zzyzx Então voce pode criar 2 itens, uma espada que de esse dano 3x3 e outra igual a ela que não, ai voce põe nos actions que quando clicar nela, ela "liga" e o script transforma ela na espada 3x3 que voce criou, quando voce clica de novo, o script "desliga" ela, transformando ela na outra espada. mas ai que ta, essa pedra vai poder usar em qualquer item que a pessoa quiser, "WAND, SWORD, CLUB, ARROW, AXE", em todos desde a mais fraca até a mais forte.
Postado Junho 5, 2018 6 anos 3 horas atrás, Zzyzx disse: mas ai que ta, essa pedra vai poder usar em qualquer item que a pessoa quiser, "WAND, SWORD, CLUB, ARROW, AXE", em todos desde a mais fraca até a mais forte. Da pra copiar o sistema de encantamento de armas do tibia. Talvez baixar um items.otb editor e duplicar as sprites das armas, dai quando usa a pedra nelas se transformam em outro id (mesma sprite) por um tempo configurável, depois volta pro id original. Esse id duplicado seria a arma em 3x3. (outro script) exemplo: Por tempo de duração actions/scripts/triweapon Citar function onUse(cid, item, fromPosition, itemEx, toPosition) if(item.itemid == IDPEDRA and itemEx.itemid == IDARMA) then doTransformItem(itemEx.uid, IDARMADUPLICADA) doItemSetAttribute(item.uid, "duration", os.time() + 30 * 24 * 60 * 60 doDecayItem(itemEx.uid) doRemoveItem(item.uid, 1) doSendMagicEffect(toPosition, CONST_ME_MAGIC_RED) return true end Se volta ao normal usando a pedra nela: actions/scripts/triweaponback Citar function onUse(cid, item, fromPosition, itemEx, toPosition) if(item.itemid == IDPEDRA and itemEx.itemid == IDARMADUPLICADA) then doTransformItem(itemEx.uid, IDARMA) doDecayItem(itemEx.uid) doRemoveItem(item.uid, 1) doSendMagicEffect(toPosition, CONST_ME_MAGIC_RED) return true end Tempo de duração: creaturescripts/login.lua Citar local items = getAllItemsById(cid) for i = 1, #items do local dur = getItemAttribute(items[i].uid, "duration") if dur and dur < os.time() then doRemoveItem(items[i].uid) end end items/items.xml Citar <attribute key="duration" value="X" /> Dano 3x3 weapons/scripts/triweapon01 (com critical) Citar local chance = 85 local arr = {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1 , 1, 0}, {0, 1, 1, 1, 3, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}} local combat = {} for i = 1, 2 do table.insert(combat, createCombatObject()) if i == 1 then setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -107100, 0, -137100) else setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -100000, 0, -300000) local area = createCombatArea(arr) setCombatArea(combat, area) endend function onUseWeapon(cid, var) local index = math.random(100) <= chance and 2 or 1 if index == 2 then doSendAnimatedText(getPlayerPosition(cid),"White Star", TEXTCOLOR_YELLOW) end return doCombat(cid, combat[index], var)end Não é bem a solução pro seu problema, até por que essa weapon com critical tem um dano diferente. Mas ta ai uma opção caso você não consiga o código 100% do sistema. Editado Junho 5, 2018 6 anos por Daniel (veja o histórico de edições) Ot Design: https://discord.gg/VgtVRNmCD7
Postado Junho 5, 2018 6 anos Autor @Daniel interessante essa parada ai, mas deixa eu tirar algumas duvidas, se eu editar no "items.otb", duplicar algumas sprites, para as pessoas ver esse item eles vão ter que baixar o cliente do servidor, ou no cliente normal 8.6 eles conseguem ver normal? outra coisa essa parte do dano 3x3, é possivel por ela pra funcionar com o ataque normal do item, tipo balanceado pelo skill sabe, se ele hitar 100, vai hitar 100 nos 3x3, não por uma base, com min "500 - 1000" e max?
Postado Junho 5, 2018 6 anos Tópico muito mal explicado, assim não da pra saber o que você quer exatamente. Script da pedra que transformará a Sword; local config = { Pedra = 2220, -- ID da pedra que transformará um item em outro Normal = 2350, -- ID da arma normal Transform = 2351, -- ID da arma transformada Effect = 5 -- Efeito ao transformar a arma } function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == config.Pedra and itemEx.itemid == config.Normal then doTransformItem(itemEx.uid, config.Transform) doSendMagicEffect(getCreaturePosition(cid), config.Effect) doPlayerSendTextMessage(cid, 27, "Voce transformou sua arma!!") return true elseif item.itemid == config.Pedra and itemEx.itemid == config.Transform then doTransformItem(itemEx.uid, config.Normal) doSendMagicEffect(getCreaturePosition(cid), config.Effect) doPlayerSendTextMessage(cid, 27, "Sua arma voltou ao estado natural.") return true else doSendMagicEffect(getCreaturePosition(cid), 2) doPlayerSendTextMessage(cid, 27, "Algo deu errado.") return false end return true end Weapons.XML <melee id="ID da arma transformada" event="script" value="Weapon.lua"> <vocation id="ida das voc que poderão usar"/> </melee> Weapons/scripts; local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WHIRLWINDSWORD) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -5.0, -2000, -5.0, -15000) local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ) setCombatArea(combat, area) function onUseWeapon(cid, var) return doCombat(cid, combat, var) end
Postado Junho 5, 2018 6 anos O sttorm resolveu. Meu método não precisaria baixar client, uma vez que a sprite duplicada ja existe no utilizado pelos players. O que mudaria seria um id/item novo cadastrado no items.xml Ot Design: https://discord.gg/VgtVRNmCD7
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.