Postado Março 6, 2018 7 anos Iae TK, queria pedir 4 scripts que seja configurável.... ele e assim voce equipa x item dai ele te da 4 spells ao clicar com o direito nele, e esse item te da x buff 1-raio: cara hit no inimigo tem 50% de chance de causar dano em area mas so sai effect onde tiver bixo/player 2- fogo: deixa o player/bixo queimando(configuravel o dano tbm) 3-planta: cura o player em porcentagem de vida. com porcentagem de chance de cura 4-agua: da ao player que uso dano em volta dele, tipo exori mais fica por 30 sec obs: se for dificil fazer esses scripts, so queria um que mostra-se 4 magias e desse um hit com porcentagem de chance de ativar esse hit como se fosse um double hit mas com o elemento do item... Projects are being developed....
Postado Março 6, 2018 7 anos @ahrizinhas2, Antes de terminar o script certinho eu gostaria que você me desse um feedback sobre o que devo mudar, o que está faltando, se está tudo errado, etc. achei o tópico um quanto confuso. P.S.: Ainda tenho que mexer algumas coisas pra facilitar a configuração do sistema Em data/creaturescripts/creaturescripts.xml adicione a tag: <event type="attack" name="PlayerAttack" event="script" value="weapon.lua"/> Em data/creaturescripts/scripts crie um arquivo chamado weapon.lua e cole isto dentro dele: local weaponsConfig = { storage = 23000, lightning = { lightChance = 50, lightEffect = 11, }, fire = { burnInterval = 1, -- seconds burnDamage = 5, burnTicks = 5, burnEffect = 15, }, plant = { healPercent = 25, healChance = 25, healEffect = 45, }, water = { cooldown = 30, } } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) local condition = createConditionObject(CONDITION_FIRE) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 10, 2000, -10) setCombatCondition(combat, condition) ------------------------------------------------------------------------ local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) --setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0) local arr = { {0, 0, 0}, {1, 3, 1}, {0, 0, 0} } local area = createCombatArea(arr) setCombatArea(combat1, area) ------------------------------------------------------------------------ local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, 1) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0) local arr2 = { {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local area = createCombatArea(arr2) setCombatArea(combat2, area) ------------------------------------------------------------------------ function onAttack(cid, target) storageStatus = getPlayerStorageValue (cid, weaponsConfig.storage) if storageStatus == 0 then return true elseif storageStatus == 1 then dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) if dist == 1 then if math.random(0, 100) < weaponsConfig.lightning.lightChance then doCombat(cid, combat1, numberToVariant(target)) doSendMagicEffect (getCreaturePosition(target), weaponsConfig.lightning.lightEffect) end end elseif storageStatus == 2 then dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) if dist == 1 then doCombatAreaCondition(cid, getCreaturePosition (target), nil, condition, weaponsConfig.fire.burnEffect) end elseif storageStatus == 3 then random = math.random (0, 100) dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) if dist == 1 then if random < weaponsConfig.plant.healChance then maxHealth = getCreatureMaxHealth (cid) doCreatureAddHealth (cid, getCreatureMaxHealth(cid) * weaponsConfig.plant.healPercent / 100) doSendMagicEffect (getCreaturePosition (cid), weaponsConfig.plant.healEffect) end end elseif storageStatus == 4 then dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) if dist == 1 then if getPlayerStorageValue(cid, 23001) < os.time() then cooldown = weaponsConfig.water.cooldown setPlayerStorageValue (cid, 23001, os.time() + cooldown) addEvent (waterCombat, 1000, cid, cooldown) end end end return true end function waterCombat (cid, times) if times == 0 then return true else doCombat (cid, combat2, numberToVariant(cid)) addEvent (waterCombat, 1000, cid, times - 1) end end Em data/creaturescripts/scripts/login.lua adicione isso: registerCreatureEvent(cid, "PlayerAttack") Para fazer os testes para trocar entre os modos da arma (alternar entre os storageIDs) você pode usar este script: Em data/actions/actions.xml adicione a tag: <action itemid = "XXXX" event = "script" value = "buffSword.lua" /> XXXX é o ID do item que voce vai dar use para alternar entre as formas Em data/actions/scripts/ crie um arquivo buffSword.lua e cole isto nele: function onUse(cid, item, frompos, item2, topos) storageStatus = getPlayerStorageValue (cid, 23000) print (storageStatus) if storageStatus == 0 or storageStatus == -1 then setPlayerStorageValue(cid, 23000, storageStatus + 1) elseif storageStatus == 1 then setPlayerStorageValue(cid, 23000, storageStatus + 1) elseif storageStatus == 2 then setPlayerStorageValue(cid, 23000, storageStatus + 1) elseif storageStatus == 3 then setPlayerStorageValue(cid, 23000, storageStatus + 1) elseif storageStatus == 4 then setPlayerStorageValue(cid, 23000, 0) end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "MODE = ".. getPlayerStorageValue(cid, 23000)) return true end Editado Março 6, 2018 7 anos por marcot (veja o histórico de edições)
Postado Março 7, 2018 7 anos Autor @marcot po cara vlw pela ajuda mais nao tem como separar os scripts nao? e que queria fazer 4 item da mesma quest! saca? mas vo testa e te passo os feedbacks eu tbm achei um pouco confuso tava pensando em editar dnv para esclarecer melhor... @marcot cara funfa 100% sem nenhum erro! Projects are being developed....
Postado Março 7, 2018 7 anos Amanhã vou dar uma otimizada em algumas coisas do script e terminar a parte de configuração. Tem mais algo que você queira? (Mesmo que os itens sejam diferentes ainda dá pra fazer com um só script). @ahrizinhas2 A versão abaixo está um pouco mais intuitiva para configuração e tem uma pequena melhora de desempenho -- Configuracoes do script local globalConfig = { storageID = 23000, } local burnBuff = { interval = 1, -- intervalo entre turnos damage = 5, -- dano de cada turno ticks = 5, -- quantidade de turnos effect = CONST_ME_HITBYFIRE, -- efeito } local energyBuff = { chance = 50, -- % de ativacao, 0~100 effect = CONST_ME_ENERGYHIT, -- efeito } local healBuff = { chance = 25, -- % de ativacao, 0~100 lifePercentage = 25, -- % de vida em cura, 0~100 effect = CONST_ME_SMALLPLANTS, -- efeito } local waterBuff = { cooldown = 30, -- tempo para ativar proximo cooldownStorage = 23001, -- storage interval = 1, -- intevalo entre turnos effect = CONST_ME_LOSEENERGY, -- efeito } -- Caso queira configurar damage/area, que não se apliquem nas configuracoes acima, -- modifique abaixo: -- FIRE EFFECT local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, burnBuff.effect) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) local condition = createConditionObject(CONDITION_FIRE) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, burnBuff.ticks, burnBuff.interval, -burnBuff.damage) setCombatCondition(combat, condition) ------------------------------------------------------------------------ -- ENERGY EFFECT local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0) local arr = { {0, 0, 0}, {1, 3, 1}, {0, 0, 0} } local area = createCombatArea(arr) setCombatArea(combat1, area) ------------------------------------------------------------------------ -- WATER EFFECT local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, waterBuff.effect) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0) local arr2 = { {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local area = createCombatArea(arr2) setCombatArea(combat2, area) ------------------------------------------------------------------------ function onAttack(cid, target) storageStatus = getPlayerStorageValue (cid, globalConfig.storageID) playerPos = getCreaturePosition (cid) targetPos = getCreaturePosition (target) if storageStatus == 0 then return true end -- FIM - jogador sem o buff if getDistanceBetween (playerPos, targetPos) > 1 then return true end -- FIM - jogador longe if storageStatus == 1 then -- Efeito Energy if math.random (0, 100) < energyBuff.chance then -- % de ativacao doCombat(cid, combat1, numberToVariant(target)) -- Dano em area doSendMagicEffect (targetPos, energyBuff.effect) -- efeito end elseif storageStatus == 2 then -- Efeito de Burn doCombatAreaCondition(cid, targetPos, nil, condition, burnBuff.effect) elseif storageStatus == 3 then -- Efeito de Heal if math.random (0, 100) < healBuff.chance then -- % de ativacao doCreatureAddHealth (cid, getCreatureMaxHealth(cid) * healBuff.lifePercentage / 100) -- formula de Heal doSendMagicEffect (playerPos, healBuff.effect) -- efeito end elseif storageStatus == 4 then if getPlayerStorageValue(cid, waterBuff.cooldownStorage) < os.time() then -- respeitando intervalo (para nao stackar 2 skills) setPlayerStorageValue (cid, waterBuff.cooldownStorage, os.time() + waterBuff.cooldown) -- cooldown set addEvent (waterCombat, waterBuff.interval * 1000, cid, waterBuff.cooldown) -- inicia evento waterCombat, responsavel pela skill end end return true end -- evento waterCombat function waterCombat (cid, times) if times == 0 then -- caso base de recursividade, quando termina o evento return true else -- caso recursivo doCombat (cid, combat2, numberToVariant(cid)) -- skill individual addEvent (waterCombat, waterBuff.interval * 1000, cid, times - 1) -- reativa o evento end end Editado Março 7, 2018 7 anos por marcot (veja o histórico de edições)
Postado Março 7, 2018 7 anos Autor @marcot cara eu gostei do seu script namoral, mas faz ele separado em 4 scripts pfv vei Projects are being developed....
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.