Postado Outubro 17, 2019 5 anos Estou usando esse script para os exercise weapons, porém, você pode usá-lo quantas vezes quiser após esperar o delay. Queria algo para bloquear de usar novamente se já estiver usando. Citar local skills = { [32384] = {id=SKILL_SWORD,voc=4}, [32385] = {id=SKILL_AXE,voc=4}, [32386] = {id=SKILL_CLUB,voc=4}, [32387] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, [32388] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_ENERGY}, [32389] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE}, [33524] = {id=SKILL_SWORD,voc=4}, [33525] = {id=SKILL_AXE,voc=4}, [33526] = {id=SKILL_CLUB,voc=4}, [33527] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, [33528] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_ENERGY}, [33529] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE}, } ------- CONFIG -----// local dummies = {36304, 32142,32147,32148,32143,32144,32145,32146,32149,36299,36300,36301,36302,36303} --local skill_gain = 1 -- per hit function start_train(pid, start_pos, itemid, fpos) local player = Player(pid) if player ~= nil then local pos_n = player:getPosition() if start_pos:getDistance(pos_n) == 0 and getTilePzInfo(pos_n) then if player:getItemCount(itemid) >= 1 then local exercise = player:getItemById(itemid,true) if exercise:isItem() then if exercise:hasAttribute(ITEM_ATTRIBUTE_CHARGES) then local charges_n = exercise:getAttribute(ITEM_ATTRIBUTE_CHARGES) if charges_n >= 1 then exercise:setAttribute(ITEM_ATTRIBUTE_CHARGES, (charges_n-1)) local required = 0 local toadd = 0 local currently = 0 local voc = player:getVocation() if skills[itemid].id == SKILL_MAGLEVEL then if(isInArray({1,2,5,6}, voc:getId())) then if player:getBaseMagicLevel() < 30 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.0633*required) elseif player:getBaseMagicLevel() >= 30 and player:getBaseMagicLevel() < 40 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.0633*required) elseif player:getBaseMagicLevel() >= 40 and player:getBaseMagicLevel() < 50 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.0633*required) elseif player:getBaseMagicLevel() >= 50 and player:getBaseMagicLevel() < 60 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.0633*required) elseif player:getBaseMagicLevel() >= 60 and player:getBaseMagicLevel() < 70 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.00633*required) elseif player:getBaseMagicLevel() >= 70 and player:getBaseMagicLevel() < 80 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.00633*required) elseif player:getBaseMagicLevel() >= 80 and player:getBaseMagicLevel() < 90 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.00633*required) elseif player:getBaseMagicLevel() >= 90 and player:getBaseMagicLevel() < 100 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.00633*required) elseif player:getBaseMagicLevel() >= 100 and player:getBaseMagicLevel() < 110 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.000633*required) elseif player:getBaseMagicLevel() >= 110 and player:getBaseMagicLevel() < 120 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.000633*required) elseif player:getBaseMagicLevel() >= 120 and player:getBaseMagicLevel() < 130 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.000633*required) elseif player:getBaseMagicLevel() >= 130 and player:getBaseMagicLevel() < 140 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.0000633*required) elseif player:getBaseMagicLevel() >= 140 and player:getBaseMagicLevel() < 150 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.0000633*required) elseif player:getBaseMagicLevel() >= 150 then required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1) player:addManaSpent(0.0000633*required) end else end else if(isInArray({3,4,7,8}, voc:getId())) then if player:getSkillLevel(skills[itemid].id) < 30 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.0633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 30 and player:getSkillLevel(skills[itemid].id) < 40 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.0633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 40 and player:getSkillLevel(skills[itemid].id) < 50 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.0633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 50 and player:getSkillLevel(skills[itemid].id) < 60 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.0633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 60 and player:getSkillLevel(skills[itemid].id) < 70 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.00633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 70 and player:getSkillLevel(skills[itemid].id) < 80 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.00633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 80 and player:getSkillLevel(skills[itemid].id) < 90 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.00633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 90 and player:getSkillLevel(skills[itemid].id) < 100 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.00633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 100 and player:getSkillLevel(skills[itemid].id) < 110 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.000633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 110 and player:getSkillLevel(skills[itemid].id) < 120 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.000633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 120 and player:getSkillLevel(skills[itemid].id) < 130 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.000633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 130 and player:getSkillLevel(skills[itemid].id) < 140 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.0000633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 140 and player:getSkillLevel(skills[itemid].id) < 150 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.0000633*required)) elseif player:getSkillLevel(skills[itemid].id) >= 150 then required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1) player:addSkillTries(skills[itemid].id, (0.0000633*required)) end end end fpos:sendMagicEffect(CONST_ME_HITAREA) if skills[itemid].range then pos_n:sendDistanceEffect(fpos, skills[itemid].range) end if charges_n == 1 then exercise:remove(1) return true end local training = addEvent(start_train, voc:getAttackSpeed(), pid, start_pos, itemid, fpos) else exercise:remove(1) stopEvent(training) end end end end end return true end end function onUse(player, item, fromPosition, target, toPosition, isHotkey) local training = addEvent(start_train, pid, start_pos, itemid, fpos) if player:getExhaustion(Storage.Exercisedummy.exaust) > 0 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are already used this item (Wait 5 minutes).") stopEvent(training) return true end local start_pos = player:getPosition() stopEvent(training) -- to prevent from multiple uses if target:isItem() then stopEvent(training) if isInArray(dummies,target:getId()) then if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then stopEvent(training) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You need to be closer to dummy to use this item.") return false end -- if (skills[item.itemid].voc ~= player:getVocation():getId()) or ((skills[item.itemid].voc + 4) ~= player:getVocation():getId()) then if(isInArray({1,2,5,6}, player:getVocation():getId())) and skills[item.itemid].id ~= SKILL_MAGLEVEL then stopEvent(training) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your vocation can't use this exercise item.") return false elseif(isInArray({3,7}, player:getVocation():getId())) and skills[item.itemid].id ~= SKILL_DISTANCE then stopEvent(training) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your vocation can't use this exercise item.") return false elseif(isInArray({4,8}, player:getVocation():getId())) and ((skills[item.itemid].id ~= SKILL_SWORD) and (skills[item.itemid].id ~= SKILL_CLUB) and (skills[item.itemid].id ~= SKILL_AXE)) then stopEvent(training) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your vocation can't use this exercise item.") return false end player:setExhaustion(Storage.Exercisedummy.exaust, 5 * 60) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You started training.") start_train(player:getId(),start_pos,item.itemid,target:getPosition()) stopEvent(training) end end return true end Exercise Weapons Bug.mp4
Postado Outubro 24, 2019 5 anos Solução @Enforc Teste esse e veja se resolve. local skills = { [32384] = {id=SKILL_SWORD,voc=4}, -- KNIGHT [32385] = {id=SKILL_AXE,voc=4}, -- KNIGHT [32386] = {id=SKILL_CLUB,voc=4}, -- KNIGHT [32387] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, -- PALADIN [32388] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_SMALLICE}, -- DRUID [32389] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE}, -- SORCERER [32124] = {id=SKILL_SWORD,voc=4}, -- KNIGHT [32125] = {id=SKILL_AXE,voc=4}, -- KNIGHT [32126] = {id=SKILL_CLUB,voc=4}, -- KNIGHT [32127] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, -- PALADIN [32128] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_SMALLICE}, -- DRUID [32129] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE} -- SORCERER } local houseDummies = {32143, 32144, 32145, 32146, 32147, 32148} local freeDummies = {32142, 32149} local skillRate = configManager.getNumber(configKeys.RATE_SKILL) local magicRate = configManager.getNumber(configKeys.RATE_MAGIC) local function start_train(pid,start_pos,itemid,fpos, bonusDummy) local player = Player(pid) if player ~= nil then local pos_n = player:getPosition() if start_pos:getDistance(pos_n) == 0 and getTilePzInfo(pos_n) then if player:getItemCount(itemid) >= 1 then local exercise = player:getItemById(itemid,true) if exercise:isItem() then if exercise:hasAttribute(ITEM_ATTRIBUTE_CHARGES) then local charges_n = exercise:getAttribute(ITEM_ATTRIBUTE_CHARGES) if charges_n >= 1 then exercise:setAttribute(ITEM_ATTRIBUTE_CHARGES,(charges_n-1)) local voc = player:getVocation() if skills[itemid].id == SKILL_MAGLEVEL then if not bonusDummy then player:addManaSpent(math.ceil(500*magicRate)) else player:addManaSpent(math.ceil(500*magicRate)*1.1) -- 10% end else if not bonusDummy then player:addSkillTries(skills[itemid].id, 1*skillRate) else player:addSkillTries(skills[itemid].id, (1*skillRate)*1.1) -- 10% end end fpos:sendMagicEffect(CONST_ME_HITAREA) if skills[itemid].range then pos_n:sendDistanceEffect(fpos, skills[itemid].range) end local training = addEvent(start_train, voc:getAttackSpeed(), pid,start_pos,itemid,fpos) player:setStorageValue(Storage.isTraining,1) else exercise:remove(1) player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training weapon vanished.") stopEvent(training) player:setStorageValue(Storage.isTraining,0) end end end end else player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training has stopped.") stopEvent(training) player:setStorageValue(Storage.isTraining,0) end else stopEvent(training) if player then -- verificar se o player ainda existe (logado), caso esteja, enviar mensagem de erro e parar treino. isso evita erros no console player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training has stopped.") player:setStorageValue(Storage.isTraining,0) end end return true end function onUse(player, item, fromPosition, target, toPosition, isHotkey) local start_pos = player:getPosition() if player:getStorageValue(Storage.isTraining) == 1 then player:sendTextMessage(MESSAGE_INFO_DESCR, "You are already training.") return false end if target:isItem() then if isInArray(houseDummies,target:getId()) then if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then player:sendTextMessage(MESSAGE_INFO_DESCR, "Get closer to the dummy.") stopEvent(training) return true end player:sendTextMessage(MESSAGE_INFO_DESCR, "You started training.") start_train(player:getId(),start_pos,item.itemid,target:getPosition(), true) elseif isInArray(freeDummies, target:getId()) then if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then player:sendTextMessage(MESSAGE_INFO_DESCR, "Get closer to the dummy.") stopEvent(training) return true end player:sendTextMessage(MESSAGE_INFO_DESCR, "You started training.") start_train(player:getId(),start_pos,item.itemid,target:getPosition(), false) end end return true end
Postado Outubro 24, 2019 5 anos @Enforc só peço por favor para marcar como melhor resposta para o tópico aparecer como resolvido, obrigado!
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.