Postado Fevereiro 25, 2021 4 anos Boa tarde pessoal, peguei um server no meio do caminho e agora estou tendo dificuldade para finalizar alguns sistemas, entre eles um onde o player troca items em um npc para aumentar progressivamente o dano da sua wand em 50%, o npc está funcionando corretamente e consegue fazer essa troca do item para setar um storage novo. Segue parte do script do NPC com a wand que estou tentando arrumar: Citar function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'comuns') then npcHandler:say("Voce deseja evoluir a {jester staff} ou {crystal staff}?", cid) elseif msgcontains(msg, {"jester staff"}) then local a1 = 5 * getPlayerStorageValue(cid, 81) local level1 = 50 * getPlayerStorageValue(cid, 81) if getPlayerStorageValue(cid, 80) < 7500 then if getPlayerItemCount(cid, 5944) >= a1 then doPlayerRemoveItem(cid, 5944, a1) setPlayerStorageValue(cid, 80, getPlayerStorageValue(cid, 80)+500) setPlayerStorageValue(cid, 81, getPlayerStorageValue(cid, 81)+1) doSendAnimatedText(getPlayerPosition(cid), "Upgrade!", TEXTCOLOR_YELLOW) doSendMagicEffect(getCreaturePosition(cid), math.random(28,28)) doBroadcastMessage("[WANDS/RODS SYSTEM]: O jogador (" .. getCreatureName(cid) .. ") aumentou em ".. level1 .."% o ataque com a Jester Staff.", 19) selfSay('Parabéns voce recebeu seu upgrade.', cid) else selfSay('Desculpe voce não tem '.. a1 ..' upgrade sphere.', cid) end else selfSay('Desculpe voce atingiu o limite de upgrade da jester staff.', cid) end A parte que não estou conseguindo resolver é sobre onde utilizar esse storage setado... nesse server as wands são editadas com paralyze critical etc a partir do seguinte script: Citar local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -5.10, -60, -5.10, -60, 5, 5, 4, 7) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_SMALLCLOUDS) local condition = createConditionObject(CONDITION_CURSED) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 9, 600, -2200) addDamageCondition(condition, 9, 600, -2200) setCombatCondition(combat2, condition) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -7.20, -60, -7.20, -60, 5, 5, 4, 7) local function onUseWeapon1(parameters) doCombat(parameters.cid, combat, parameters.var) end local function onUseWeapon2(parameters) doCombat(parameters.cid, combat2, parameters.var) end local function onUseWeapon3(parameters) doCombat(parameters.cid, combat3, parameters.var) end function onUseWeapon(cid, var) local parameters = {cid = cid, var = var, combat = combat, combat2 = combat2, combat3 = combat3} local chance = math.random(1, 100) if chance > 20 then doCombat(cid, combat, var) elseif chance > 1 and chance <= 5 then doCombat(cid, combat2, var) doSendAnimatedText(getPlayerPosition(cid),"CURSED!", TEXTCOLOR_GREY) doCombat(cid, combat, var) elseif chance <= 10 then doCombat(cid, combat3, var) doSendAnimatedText(getPlayerPosition(cid),"CRITICAL!", TEXTCOLOR_GREY) elseif chance <= 8 then doPlayerAddMana(cid, 15000) doSendMagicEffect(getPlayerPosition(cid), COST_ME_MAGIC_BLUE) addEvent(onUseWeapon1, 1, parameters) end return true end Minha idéia foi utilizar essa fórmula de dano para aumentar conforme a storage, porém sou muito iniciante na escrita .lua e acho que estou errando algo, segue o que tentei fazer: Citar local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) if getPlayerStorageValue(cid, 80) then setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -5.10, -60, -5.10, -60, 5, 5, 4, 7) elseif (getPlayerStorageValue(cid, 81) == 1) then setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -15.10, -60, -15.10, -60, 5, 5, 4, 7) end Obtive os seguintes erros no registro e a wand sequer ataca agora Citar [Error - Test Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found [Error - Test Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found [Error - Weapon Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found [Error - Weapon Interface] data/weapons/scripts/anihi/jester.lua Description: (luaGetCreatureStorage) Creature not found (done). Agradeceria muito qualquer ajuda! Desde já obrigado
Postado Fevereiro 26, 2021 4 anos Coloquei alguns comentários pra vc entender passo a passo. Mostrar conteúdo oculto local function damage(cid, critical) local lvl, ml = getPlayerLevel(cid), getPlayerMagLevel(cid) local formula = (lvl + ml + 100) -- crie sua formula do dano da wand aqui if critical == true then -- aqui checa se é dano critical formula = formula * 2 -- aqui é o dano base se tornando critico end if getPlayerStorageValue(cid, XXXX) >= 1 then -- storage que boosta a wand for i = 1, getPlayerStorageValue(cid, XXXX) do formula = formula * 1.5 -- multiplica o dano por 50% end end return(formula) -- retorna o dano da wand após os devidos calculos end local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_SMALLCLOUDS) local condition = createConditionObject(CONDITION_CURSED) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 9, 600, -2200) addDamageCondition(condition, 9, 600, -2200) setCombatCondition(combat2, condition) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) function onTargetCreature(cid, target) -- funcao que eh ativada quando o "combat" for atingir o alvo doTargetCombatHealth(cid, target, COMBAT_DEATHDAMAGE, -damage(cid, false), -damage(cid, false), CONST_ME_NONE) -- causa dano no alvo end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onTargetCreature(cid, target) -- funcao que eh ativada quando o "combat3" for atingir o alvo doTargetCombatHealth(cid, target, COMBAT_DEATHDAMAGE, -damage(cid, true), -damage(cid, true), CONST_ME_NONE) -- causa dano no alvo end setCombatCallback(combat3, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onUseWeapon(cid, var) local chance = math.random(1, 100) if chance > 20 then doCombat(cid, combat, var) elseif chance > 1 and chance <= 5 then doCombat(cid, combat2, var) doSendAnimatedText(getPlayerPosition(cid),"CURSED!", TEXTCOLOR_GREY) doCombat(cid, combat, var) elseif chance <= 10 then doCombat(cid, combat3, var) doSendAnimatedText(getPlayerPosition(cid),"CRITICAL!", TEXTCOLOR_GREY) elseif chance <= 8 then doPlayerAddMana(cid, 15000) doSendMagicEffect(getPlayerPosition(cid), COST_ME_MAGIC_BLUE) doCombat(cid, combat, var) end return true end
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.