-
[Script] Refinar Gemas
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)
-
[Modificação] Não Atacar Gatos, Cachorros, Pets, etc
Sim. Fiz com esse propósito. https://www.youtube.com/watch?v=AJfZ7xX7drM
-
[Macro] Refinar Flawless Ice Crystal
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()
-
[Modificação] Não Atacar Gatos, Cachorros, Pets, etc
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
-
Melhoria Tarefa diária
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.
-
[Macro] Remover Pet com Vida Baixa
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).
-
[BUG] NPC Rosa Magalhaes Cobrando Preço Errado
- [BUG] loot do boss Foliathar não chegou no mail
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}.- Carnaval Monstruoso
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.- Calendário de eventos do Mês de Fevereiro de 2025
Boaaa! Show de bola!- BUG Magia Utamo tempo
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- Possível bug em arma soul.
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).- BUG Invasão de Grynch em Rathleton bugada.
Os Grynches estão nascendo no esgoto em áreas não acessíveis a players. https://imgur.com/a/U4h15t2- Ajuste das invasões de Goblins
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.- Ajuste das invasões de Goblins
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. - [BUG] loot do boss Foliathar não chegou no mail