já tentei fazer isso, mas ao que parece a I.A ainda não chegou nesse nivel e cada vez que mais tento pior fica XD, o jogo é o Mixmaster Online, um jogo 2D de 2003
O jogo tem 1 personagem, mais 3 monstros que te acompanham, como demonstra na imagem a baixo,
[Hidden Content]
tambem temos os atalhos para as pots e skills, como demonstra na imagem a baixo
[Hidden Content]
então para curar no jogo, preciso primeiro de selecionar quem quero curar, selecionando com o mouse ou usando os atalhos tecla 1 para personagem, 2 3 e 4 para os monstros, depois de selecionado é usar as pots que estão do F4 ao F10, esse é o processo de cura no jogo.
o que eu procuro no script, é que primeiro procure quem tem menos vida, depois selecione quem tem menos vida, e por fim faça uma sequencia de f4 a f10 sem parar até a vida estar cheia, ou até encontrar alguem com menos vida
acho que no aspeto de selecionar quem quer ser curado, os atalhos 1, 2, 3 e 4 podem ser muito uteis evitando cliques do mouse
a vida é representada pelo semi circulo a vermelho, tambem tem diferentes tons de vermelho, consoante a vida vai descendo
;===========================================================================
; Executa o script como administrador se não estiver com privilégios elevados
;===========================================================================
if not A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%"
ExitApp
}
#NoEnv
SendMode Input
SetBatchLines, -1
; Define para capturar pixels apenas dentro da janela do jogo
CoordMode, Pixel, Client
global healingEnabled := false ; Cura desligada por padrão
;===========================================================================
; Tecla F12 para ativar/desativar a cura
;===========================================================================
F12::
healingEnabled := !healingEnabled ; Alterna entre ativado/desativado
if (healingEnabled)
{
TrayTip, AutoHeal, Healing Activated!, 1
SetTimer, MonitorHealth, 500 ; Inicia o monitoramento da vida
}
else
{
TrayTip, AutoHeal, Healing Stopped!, 1
SetTimer, MonitorHealth, Off ; Para a cura
}
Return
;===========================================================================
; MONITORA A VIDA DOS PERSONAGENS
;===========================================================================
MonitorHealth:
{
; Para se o script estiver desativado
if (!healingEnabled)
Return
; Verifica se a janela correta está ativa
if !WinActive("ahk_class DracoMM ahk_exe MixMaster.exe")
Return
; Obtém os valores de vida dos personagens
charHealth := GetHealth("character")
monster1Health := GetHealth("monster1")
monster2Health := GetHealth("monster2")
monster3Health := GetHealth("monster3")
; Descobre quem tem menos vida
lowestHealth := charHealth
lowestTarget := "1" ; "1" corresponde ao personagem
if (monster1Health < lowestHealth)
lowestHealth := monster1Health, lowestTarget := "2"
if (monster2Health < lowestHealth)
lowestHealth := monster2Health, lowestTarget := "3"
if (monster3Health < lowestHealth)
lowestHealth := monster3Health, lowestTarget := "4"
; Se o menor HP for abaixo de 98%, começa a cura
if (lowestHealth < 98)
{
Send, %lowestTarget% ; Seleciona o personagem/monstro
Sleep, 50
HealUntilFull(lowestTarget) ; Inicia a cura
}
}
Return
;===========================================================================
; FUNÇÃO DE CURA - USA F4 A F10 ATÉ A VIDA ESTAR CHEIA
;===========================================================================
HealUntilFull(target)
{
Loop
{
; Se a cura for desligada, sai do loop
if (!healingEnabled)
break
; Se a janela do jogo não estiver ativa, sai do loop
if !WinActive("ahk_class DracoMM ahk_exe MixMaster.exe")
break
; Recalcula a vida dos personagens
charHealth := GetHealth("character")
monster1Health := GetHealth("monster1")
monster2Health := GetHealth("monster2")
monster3Health := GetHealth("monster3")
; Determina quem agora tem menos vida
currentLowestHealth := charHealth
currentLowestTarget := "1"
if (monster1Health < currentLowestHealth)
currentLowestHealth := monster1Health, currentLowestTarget := "2"
if (monster2Health < currentLowestHealth)
currentLowestHealth := monster2Health, currentLowestTarget := "3"
if (monster3Health < currentLowestHealth)
currentLowestHealth := monster3Health, currentLowestTarget := "4"
; Se outra pessoa precisar de cura, sai do loop
if (currentLowestTarget != target)
break
; Obtém a vida atual do alvo selecionado
currentHealth := (target = "1") ? charHealth : (target = "2") ? monster1Health
: (target = "3") ? monster2Health : monster3Health
; Para de curar se a vida estiver acima de 98%
if (currentHealth >= 98)
break
; Envia a sequência de cura F4 a F10
Send, {F4}
Sleep, 200
Send, {F5}
Sleep, 200
Send, {F6}
Sleep, 200
Send, {F7}
Sleep, 200
Send, {F8}
Sleep, 200
Send, {F9}
Sleep, 200
Send, {F10}
Sleep, 300
}
}
;===========================================================================
; FUNÇÃO PARA CAPTURAR A VIDA COM BASE NA BARRA
;===========================================================================
GetHealth(type)
{
; Define coordenadas das barras de vida
if (type = "character")
x1 := 726, y1 := 16, x2 := 769, y2 := 72
else if (type = "monster1")
x1 := 798, y1 := 17, x2 := 834, y2 := 71
else if (type = "monster2")
x1 := 865, y1 := 17, x2 := 901, y2 := 71
else if (type = "monster3")
x1 := 930, y1 := 18, x2 := 963, y2 := 71
totalPixels := 0
healthPixels := 0
step := 2 ; Reduz carga de processamento pegando pixels alternados
Loop, % (x2 - x1 + 1)
{
px := x1 + A_Index - 1
Loop, % (y2 - y1 + 1)
{
py := y1 + A_Index - 1
if (Mod(px, step) != 0 || Mod(py, step) != 0)
continue
totalPixels++
PixelGetColor, pixelColor, px, py, RGB
if (IsHealthColor(pixelColor))
healthPixels++
}
}
if (totalPixels = 0)
return 100
healthPercent := (healthPixels / totalPixels) * 100
return healthPercent
}
;===========================================================================
; FUNÇÃO PARA DETECTAR COR DA VIDA (TONS DE VERMELHO)
;===========================================================================
IsHealthColor(pixelColor)
{
R := (pixelColor >> 16) & 0xFF
G := (pixelColor >> 8) & 0xFF
B := pixelColor & 0xFF
; Se estiver dentro da variação do vermelho da barra de HP, retorna verdadeiro
if (R >= 0x84 && R <= 0xD6 && B >= 0x39 && B <= 0x5A && G <= 15)
return true
else
return false
}
fiz esse codigo no chatgpt, mas sem sucesso, não apresenta erros quando executo, mas tambem não cura nem seleciona quem deve curar