Jump to content

Show Show

Membros Veteranos
  • Joined

  • Last visited

  1. Show Show posted a post in a topic in OTClient
    Segue um script que fiz para automatizar o processo de refinamento de gemas na máquina da ilha Elite Kingdom. Segue um vídeo com a demonstração do funcionamento do script. https://www.youtube.com/watch?v=wYjdhYRdsV8 --[[GUIA DE USO: Colocar as gemas a serem updadas em uma BP vazia. Duvidas -> Discord: Dimerism#5429]]-- idGemas = {3029,3030,3032,3033,9057} FlagRefinaGema = macro(200,"Refina Gema",function() if posx()~=990 or posy()~=1741 or posz()~=7 then return end local containers = g_game.getContainers() if not containers then return end flagGuardaGema = true for k=-1,0 do posMesa = {x=990-1,y=1741+k,z=7} Mesa = g_map.getTile(posMesa) itemMesa = Mesa:getTopLookThing() if itemMesa:getId() ~= 9532 and k==-1 then flagGuardaGema = false elseif itemMesa:getId() == 9532 and k==0 then flagGuardaGema = false end end --[[GUIA DE USO: Colocar as gemas a serem updadas em uma BP vazia. Duvidas -> Discord: Dimerism#5429]]-- flagMoveGema = true for _, container in pairs(containers) do for k=-1,1 do posMesa = {x=990-1,y=1741+k,z=7} Mesa = g_map.getTile(posMesa) itemMesa = Mesa:getTopLookThing() if itemMesa:getId() ~= 9532 and itemMesa:getCount()>1 then g_game.move(itemMesa, container:getSlotPosition(container:getItemsCount()), itemMesa:getCount()-1) print(itemMesa:getCount() .. " gemas na posicao " .. k) return end end if flagGuardaGema then posMesa = {x=990-1,y=1741,z=7} Mesa = g_map.getTile(posMesa) itemMesa = Mesa:getTopLookThing() g_game.move(itemMesa, container:getSlotPosition(container:getItemsCount()), itemMesa:getCount()) print("Guardando gema upada...") flagMoveGema = false return end items = container:getItems() if not items then return end lastItem = items[#items] if table.find(idGemas, lastItem:getId()) then for k=-1,1 do posMesa = {x=990-1,y=1741+k,z=7} Mesa = g_map.getTile(posMesa) itemMesa = Mesa:getTopLookThing() if itemMesa:getId() == 9532 and flagMoveGema then g_game.move(lastItem, posMesa, 1) flagMoveGema = false end end end end flagUseAlavancaGema = true for k=-1,1 do posMesa = {x=990-1,y=1741+k,z=7} Mesa = g_map.getTile(posMesa) itemMesa = Mesa:getTopLookThing() if not table.find(idGemas, lastItem:getId()) then flagUseAlavancaGema = false end end if flagUseAlavancaGema then posAlavancaGema = {x=990,y=1741+1,z=7} AlavancaGemaTile = g_map.getTile(posAlavancaGema) g_game.use(AlavancaGemaTile:getTopUseThing()) flagUseAlavancaGema = false end end) FlagRefinaGema.setOff() onTextMessage(function(mode, text) if string.find(text,"All gems must have the same level.") then print(text) local containers = g_game.getContainers() if not containers then return end for _, container in pairs(containers) do posMesa = {x=990-1,y=1741,z=7} Mesa = g_map.getTile(posMesa) itemMesa = Mesa:getTopLookThing() if itemMesa:getId() ~= 9532 then g_game.move(itemMesa, container:getSlotPosition(container:getItemsCount()-1), itemMesa:getCount()) print("Guardando gema do meio...") end end end end)
  2. Sim. Fiz com esse propósito. https://www.youtube.com/watch?v=AJfZ7xX7drM
  3. Coloque em uma BP somente os Flawless +0. O Char vai colocar no sqm sul do char um flaw e irá refina-lo até o nível que você definir de +1 a +7. Após conseguir refinar o flawless, ele vai jogar o flaw para um de 7 sqms atrás do char de acordo com o nível de refinamento do cristal. Obs.: Não coloque nenhum flawless que não seja +0 na BP aberta, pois o macro poderá usar o item para refinar o flawless que está no chão. Vídeo com demonstração: https://www.youtube.com/watch?v=7nArfJjS_iY timeRefineFlaw = now flagRefineFlaw = macro(500,"Refine Flaws",function() flagCanUseRefineFlaw = true tile = g_map.getTile({x=posx(),y=posy()+1,z=posz()}) if not tile:isWalkable() then flagCanUseRefineFlaw = false end for k= -4,2 do tile = g_map.getTile({x=posx()+k,y=posy()-1,z=posz()}) if not tile:isWalkable() then flagCanUseRefineFlaw = false end end if not flagCanUseRefineFlaw then if (now-timeRefineFlaw)>10000 then say("Vá para uma área onde a linha de trás e da frente do boneco estejam livres.") timeRefineFlaw = now end return end tile = g_map.getTile({x=posx(),y=posy()+1,z=posz()}) if tile:getTopLookThing():getId() == 942 then flawChao = tile:getTopThing() g_game.look(flawChao) else flawBackpack = findItem(942) g_game.move(flawBackpack, {x=posx(),y = posy()+1, z= posz()}, 1) end end) onTextMessage(function(mode, text) if flagRefineFlaw.isOn() then if distMax == 0 then elseif string.find(text:lower(), "you see a flawless ice crystal") and not string.find(text, "+" .. tostring(distMax)) and not string.find(text, "Using") then tile = g_map.getTile({x=posx(),y=posy()+1,z=posz()}) if tile:getTopLookThing():getId() == 942 then flawChao = tile:getTopThing() useWith(942,flawChao) end elseif string.find(text:lower(), "you see a flawless ice crystal") and string.find(text, "+" .. tostring(distMax)) then tile = g_map.getTile({x=posx(),y=posy()+1,z=posz()}) flawChao = tile:getTopThing() g_game.move(flawChao, {x=posx()+distMax-5,y = posy()-1, z= posz()}, 1) elseif not string.find(text:lower(), "you see a flawless ice crystal") and not string.find(text:lower(), "using") and string.find(text:lower(), "flawless ice crystal") then tile = g_map.getTile({x=posx(),y=posy()+1,z=posz()}) g_game.move(tile:getTopLookThing(), {x = 65535, y=SlotBack, z=0}, tile:getTopLookThing():getCount()) elseif string.find(text:lower(), "you see") and not string.find(text:lower(), "flawless ice crystal") then flawBackpack = findItem(942) g_game.move(flawBackpack, {x=posx(),y = posy()+1, z= posz()}, 1) end end end) UI.Separator() UI.Label("Refine do Flaw:") distMin = 1 distMax = 7 function RefinaFlaw(parent) local panelName = "refinaFlaw" if not parent then parent = panel end local ui = g_ui.createWidget("DualScrollPanel", parent) ui:setId(panelName) if not storage[panelName] then storage[panelName] = { min = 1, max = 7, text = 'exura' } end ui.title:setOn(storage[panelName].enabled) ui.title.onClick = function(widget) storage[panelName].enabled = not storage[panelName].enabled widget:setOn(storage[panelName].enabled) end local updateText = function() ui.title:setText("Refine >= +" .. math.floor(storage[panelName].min*7/100) .. " e <= +" .. math.floor(storage[panelName].max*7/100)) end local repeatTime ui.scroll1.onValueChange = function(scroll, value) storage[panelName].min = value updateText() end ui.scroll2.onValueChange = function(scroll, value) storage[panelName].max = value updateText() end ui.text.onTextChange = function(widget, text) storage[panelName].text = "" updateText() end ui.scroll1:setValue(storage[panelName].min) ui.scroll2:setValue(storage[panelName].max) macro(1000, function() if storage[panelName].enabled then distMin = math.floor(storage[panelName].min*7/100) distMax = math.floor(storage[panelName].max*7/100) end end) end RefinaFlaw()
  4. Acho meio chato quando vou na cidade e o bot fica parando pra atacar os gatos. Fiz uma modificação no OTC para o target não atacar os monstros que você definir. Basta substituir o conteúdo do arquivo creature.lua na pasta (caminho da pasta do seu usuário)\AppData\Roaming\OTClientV8\otclienttrpgbv8\bot\vBot_4.8\targetbot pelo código abaixo, e caso queira, modificar a lista de criaturas que não devem ser atacadas. Na lista NeverAtkCreatures = {"Cat","Dog"}, adicione o nome das criaturas que você não quer que sejam atacadas. Na lista NeverAtkCreaturesWithTerm = {"Pet "}, caso o nome tenha o pedaço de texto contido na lista, o monstro não será atacado (Por exemplo, caso "cat" estivesse nessa lista, "Eradicator" também não seria atacado). TargetBot.Creature = {} TargetBot.Creature.configsCache = {} TargetBot.Creature.cached = 0 TargetBot.Creature.resetConfigs = function() TargetBot.targetList:destroyChildren() TargetBot.Creature.resetConfigsCache() end TargetBot.Creature.resetConfigsCache = function() TargetBot.Creature.configsCache = {} TargetBot.Creature.cached = 0 end TargetBot.Creature.addConfig = function(config, focus) if type(config) ~= 'table' or type(config.name) ~= 'string' then return error("Invalid targetbot creature config (missing name)") end TargetBot.Creature.resetConfigsCache() if not config.regex then config.regex = "" for part in string.gmatch(config.name, "[^,]+") do if config.regex:len() > 0 then config.regex = config.regex .. "|" end config.regex = config.regex .. "^" .. part:trim():lower():gsub("%*", ".*"):gsub("%?", ".?") .. "$" end end local widget = UI.createWidget("TargetBotEntry", TargetBot.targetList) widget:setText(config.name) widget.value = config widget.onDoubleClick = function(entry) -- edit on double click schedule(20, function() -- schedule to have correct focus TargetBot.Creature.edit(entry.value, function(newConfig) entry:setText(newConfig.name) entry.value = newConfig TargetBot.Creature.resetConfigsCache() TargetBot.save() end) end) end if focus then widget:focus() TargetBot.targetList:ensureChildVisible(widget) end return widget end TargetBot.Creature.getConfigs = function(creature) if not creature then return {} end local name = creature:getName():trim():lower() -- this function may be slow, so it will be using cache if TargetBot.Creature.configsCache[name] then return TargetBot.Creature.configsCache[name] end local configs = {} function partialMatch(element, tbl) for _, value in ipairs(tbl) do if string.find(element,value) then return true end end return false end NeverAtkCreatures = {"Cat","Dog"} NeverAtkCreaturesWithTerm = {"Pet "} FlagDontAtkPuppiesPartialMatch = partialMatch(creature:getName(),NeverAtkCreaturesWithTerm) FlagDontAtkPuppiesNamed = table.find(NeverAtkCreatures, creature:getName()) FlagDontAtkPuppies = FlagDontAtkPuppiesPartialMatch or FlagDontAtkPuppiesNamed for _, config in ipairs(TargetBot.targetList:getChildren()) do if regexMatch(name, config.value.regex)[1] and not FlagDontAtkPuppies then table.insert(configs, config.value) end end if TargetBot.Creature.cached > 1000 then TargetBot.Creature.resetConfigsCache() -- too big cache size, reset end TargetBot.Creature.configsCache[name] = configs -- add to cache TargetBot.Creature.cached = TargetBot.Creature.cached + 1 return configs end TargetBot.Creature.calculateParams = function(creature, path) local configs = TargetBot.Creature.getConfigs(creature) local priority = 0 local danger = 0 local selectedConfig = nil for _, config in ipairs(configs) do local config_priority = TargetBot.Creature.calculatePriority(creature, config, path) if config_priority > priority then priority = config_priority danger = TargetBot.Creature.calculateDanger(creature, config, path) selectedConfig = config end end return { config = selectedConfig, creature = creature, danger = danger, priority = priority } end TargetBot.Creature.calculateDanger = function(creature, config, path) -- config is based on creature_editor return config.danger end
  5. Show Show replied to Frysto's post in a topic in Sugestões
    Diminuiu a exp pra leveis mais altos? Antes no level 900 eu pegava a mesma exp que nos personagens leveis 700, em torno de 90kk. Agora tô pegando só 20kk no level 900.
  6. Alguém tem esse script funcionando de maneira robusta? E.g.: funciona mesmo que existam vários pets com mesmo nome na tela e sem fail rate (não depende do sistema de look na hora da remoção, já que esse costuma falhar com frequência).
  7. Bom dia. Os loots do boss Foliathar da invasão de hoje às 8:20 em Danae não chegaram no mail. Os outros players que estavam na invasão relataram o mesmo acontecido. Character: Boudica 08:51 You have been awarded by killing Foliathar the loot sent to your inbox: fire axe, mastermind shield, magic plate armor, gold ingot{7}, crystal coin{61}, demonic essence{37}, costume bag. Character: Jhon Snow 08:51 You have been awarded by killing Foliathar the loot sent to your inbox: ultimate health potion{2}, giant sword, {rare} double axe, {legendary} boots of haste, demon shield, {rare} golden legs, great shield, gold ingot{100}, gold ingot{15}, crystal coin{87}, demonic essence{9}, costume bag, giant sapphire. Character: Sung Jinwoo 08:51 You have been awarded by killing Foliathar the loot sent to your inbox: ice rapier, giant sword, {legendary} devil helmet, demonbone, {legendary} demon shield, ring of healing, {rare} bonebreaker, gold ingot{100}, gold ingot{12}, crystal coin{100}, crystal coin{79}, demonic essence{96}.
  8. Show Show replied to Stallion's post in a topic in Eventos*
    Bom dia. Gostaria primeiramente de parabenizar a Staff pelo evento que está sendo bem legal. É possível que seja verificado o drop rate dos tokens? Acredito que as probabilidades dos tokens comuns e raros estejam trocadas. Os tokens raros estão vindo com o dobro da frequência dos tokens comuns (em média). Conversei com outros players e relataram a mesma situação.
  9. Boaaa! Show de bola!
  10. Show Show posted a post in a topic in Bugs
    Pela descrição da magia ela deveria aumentar o shielding em 120% e reduzir todo o dano em 15%, porém ela está apenas dando o efeito negativo de redução de skills de ataque sem dar os efeitos positivos. https://imgur.com/a/FPwkPMV
  11. Show Show posted a post in a topic in Bugs
    Comprei uma Soulcrusher essa semana e notei quando fui testar no trainer que o manaleech só está considerando o dano physical que é quase 0 (a arma tem 6 de atk physical e 46 atk ice). Por exemplo, mesmo que a arma dê um hit de 600, o mana leech é de 0 se o dano for 100% ice. Se o dano for 600 dividido em 50 physical e 550 ice, ele aplica os 3% em cima dos 50 physical e dá um mana leech de 1 de mana (arredonda 1,5 pra baixo).
  12. Os Grynches estão nascendo no esgoto em áreas não acessíveis a players. https://imgur.com/a/U4h15t2
  13. Poderia botar o grynch como a abobora de halloween. Todo mundo que bater ganha a quantidade de tokens proporcionais ao dano causado e mais uns itens como os da abobora. Nesse caso poderia haver 3 invasões por dia, uma de manhã, outra de tarde e outra de noite.
  14. Bom dia, @Faramir. Gostaria de sugerir um ajuste fino pra quantidade de HP e/ou número de Goblins. 8k de life e 1000 Goblins tá um pouco overkill. Demorei, quase 1 hora pra matar a invasão das 4:43, isso porque chegou outro cara. Poderia colocar por exemplo 3k - 4k de life e uns 400 Goblins. Acho que ficaria mais tangível.