1
Использование / Re: Might & Magic Heroes VI
« on: March 18, 2015, 05:22:08 PM »
Переделал, под colormode, прозрычный фон конечно убивает, еле поборол
Добавлена тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
SCREENSHOTEX(x1, y1, x2, y2, ["pref"], [format])
Сохраняет графический буфер анализа на диск. Скриншот экрана помещается в директорию текущено скрипта в каталог screens и ему присваивается имя вида pref0000.bmp. При этом номер 0000 будет наращиваться по мере необходимостиЭто нормально что у тебя 1 GETSCREEN на скрипт? То есть в ходе выполнения скрипте на экране нет изменений, и новых снимков не нужно?GETSCREEN нужен:
//GETSCREEN
//LOGCLEAR
//COLORMODE(5, 50,50, 1900, 1050)
/////////////////////////////////////////////////////////////
// Левый герой Правый герой
//a: (1) (2) (3) (4) (8) (9) (10) (11)
// (5) (6) (7) (12) (13) (14)
//
// $DLR[$a] Массив занятых(>0) / пустых(=0) ячеек
// $DX[$a]:$DY[$a] координаты ячеек
// $PIC[$a] скриншоты ячеек
// Скрины: [пустой ячейки 0.bmp] [замка zam.bmp]
// getscreen
/////////////////////////////////////////////////////////////
$addX=10 //IF_PICTURE_IN Пустые ячейки
$addY=10
$addX1=15 //IF_PICTURE_IN Отряды
$addY1=15
$Luck=25
$DELAY=75 //Задержка в move
$ACT=0 //temp
$delim=0
$mid=960 //Центр экрана, между левыми и правыми ячейками
//////////////////////////////////////////
//ОК-на пропуске хода
GETSCREEN(1793,942, 1854, 995)
COLORMODE(5, 1794,943, 1853, 994)
if (PXL(1800,950)=2039583)
LCLICK(963,186)
GOTO(end)
end_if
//////////////////////////////////////////
//Координаты и тп////////////////////////////////////////////
//Заполнение массива координат ячеек - замок=zam.bmp иначе между героями
// SCREENSHOTEX(1795,944, 1852, 993)
IF_PICTURE_IN (1793, 942, 1854, 995, "123.bmp", -1, 50)
$Zam=1
//Если замок (ячейки верх/низ верх(1)..(7) низ(8)..(14))
$DX[1]=712 //$DX[1]:$DY[1] левая верхняя ячейка (1)
$DY[1]=915
$a=2
FOR($a, $a < 15)
$DX[$a]=$DX[$a-1]+99
$DY[$a]=$DY[$a-1]
if ($a=8)
$DX[8]=$DX[1] //левая нижняя ячейка (8)
$DY[8]=1022
end_if
END_CYC
ELSE
$Zam=0
//Если в героях (ячейки лево/право и верх/низ)
$DX[1]=612 //$DX[1]:$DY[1] верх первая ячейка левого героя (1)
$DY[1]=211
$a=2
FOR($a, $a < 15)
$DX[$a]=$DX[$a-1]+97
$DY[$a]=$DY[$a-1]
if ($a=5) //низ первая ячейка левого героя (5)
$DX[5]=$DX[1]+50
$DY[5]=$DY[1]+104
end_if
if ($a=8) //верх первая ячейка правого героя (8)
$DX[8]=$DX[1]+409
$DY[8]=$DY[1]
end_if
if ($a=12) //низ первая ячейка правого героя (12)
$DX[12]=$DX[1]+459
$DY[12]=$DY[5]
end_if
END_CYC
END_IF
//Названия скринов ячеек (имена из сlickermann) [в конце должны удалятся батником]
$PIC[1]="screens\shot0000.bmp"
$PIC[2]="screens\shot0001.bmp"
$PIC[3]="screens\shot0002.bmp"
$PIC[4]="screens\shot0003.bmp"
$PIC[5]="screens\shot0004.bmp"
$PIC[6]="screens\shot0005.bmp"
$PIC[7]="screens\shot0006.bmp"
$PIC[8]="screens\shot0007.bmp"
$PIC[9]="screens\shot0008.bmp"
$PIC[10]="screens\shot0009.bmp"
$PIC[11]="screens\shot0010.bmp"
$PIC[12]="screens\shot0011.bmp"
$PIC[13]="screens\shot0012.bmp"
$PIC[14]="screens\shot0013.bmp"
// $PIC[15]="screens\shot0014.bmp"
// $PIC[16]="screens\shot0015.bmp"
/////////////////////////////////////////////////////////////
SUB (DELETE)
TFCLEAR("screens\shot0000.bmp", 1)
TFCLEAR("screens\shot0001.bmp", 1)
TFCLEAR("screens\shot0002.bmp", 1)
TFCLEAR("screens\shot0003.bmp", 1)
TFCLEAR("screens\shot0004.bmp", 1)
TFCLEAR("screens\shot0005.bmp", 1)
TFCLEAR("screens\shot0006.bmp", 1)
TFCLEAR("screens\shot0007.bmp", 1)
TFCLEAR("screens\shot0008.bmp", 1)
TFCLEAR("screens\shot0009.bmp", 1)
TFCLEAR("screens\shot0010.bmp", 1)
TFCLEAR("screens\shot0011.bmp", 1)
TFCLEAR("screens\shot0012.bmp", 1)
TFCLEAR("screens\shot0013.bmp", 1)
//TFCLEAR("screens\*.bmp", 1)
//TFCLEAR("screens\shot0015.bmp", 1)
END_SUB
DELETE()
/////////////////////////////////////////////////////////////
SUB (SCR, $a, $bx1, $by1, $ex2, $ey2)
SCREENSHOTEX($DX[$a]+$bx1,$DY[$a]+$by1,$DX[$a]+$ex2,$DY[$a]+$ey2)
END_SUB
/////////////////////////////////////////////////////////////
SUB (GSCR, $a, $cm)
GETSCREEN($DX[$a]-52,$DY[$a]-52,$DX[$a]+52,$DY[$a]+52)
COLORMODE($cm, $DX[$a]-51,$DY[$a]-51,$DX[$a]+51,$DY[$a]+51)
//$PPXL=PXL($DX[$a],$DY[$a])
//LOGWRITE ($a, " PXL: ",$PPXL)
END_SUB
////////////////////////////////////////////
// определение занятых/пустых ячеек (заполняет DLR[$a]) пустая_ячейка=0.bmp
SUB (INIT, $a1, $a2, $m) //от ячейки ($a1) до ($a1)
FOR($a1, $a1 < $a2+1)
GSCR ($a1, $m)
SCR ($a1,-14,-14,14,14)
IF_PICTURE_IN ($DX[$a1]-17,$DY[$a1]-17,$DX[$a1]+17,$DY[$a1]+17, "empty.bmp", -1, 65)
$DLR[$a1]=0 //пусто
ELSE
$DLR[$a1]=4 //занято
END_IF
END_CYC
END_SUB
/////////////////////////////////////////////////////////////
// передещение отряда из ячейки ($a1) в ($a2) (изменяет $ACT, $DLR[$a])
SUB (MOVE, $a1, $a2)
//LCLICK($DX[$a1],$DY[$a1])
//WAITMS(10)
LDOWN($DX[$a1],$DY[$a1]) //откуда
$DLR[$a1]=0
LCLICK($DX[$a2],$DY[$a2]) //куда
$DLR[$a2]=3
WAITMS($DELAY)
$ACT=1 //если хоть раз передали, то SUB (MOVEFORCE) ненужна
END_SUB
/////////////////////////////////////////////////////////////
// выбор направления перемещения (определяет $SideLR, $SideS)
SUB (SIDE)
$a1=0
$a2=0
$a=1
//считаем кол-во отрядов слева и справа
FOR($a, $a < 15)
IF ($DLR[$a]>0)
if ($a<8)
INC($a1) //+лево
else
INC($a2) //+право
end_if
END_IF
END_CYC
//Выбор стороны для передачи отрядов
IF ($a2>$a1)
$SideLR=8 //Л->П
$SideS=7 //коофициент
ELSE
$SideLR=15 //П->Л
$SideS=-7//коофициент
END_IF
END_SUB
/////////////////////////////////////////////////////////////
// перемещение всех занятых ячеек
SUB (MOVEFORCE) //(выполняется, если другим функциям нечего делать)
$tSideLR=$SideLR+$SideS //Вычисление верхней границы
$tSideS=-$SideS //сохранение расстановки отряда
$d=$tSideLR-7 //Вычисление нижней границы
FOR($d, $d < $tSideLR) //Среди ячеек передающей стороны
if ($DLR[$d]>0) //для каждой занятой ячейки
$dd=$d+$tSideS //куда передать
MOVE($d, $dd) //передаем
end_if
END_CYC
END_SUB
/////////////////////////////////////////////////////////////
// передача разных отрядов (те такого же отряда с другой стороны нет)
SUB (MOVEADD)
$i1=$SideLR-7 //Вычисление нижней границы
$i3=$i1+$SideS //Вычисление верхней границы
FOR($i1, $i1 < $SideLR) //Среди ячеек передающей стороны
IF ($DLR[$i1]>0) //для каждой занятой ячейки
$i4=$i1+$SideS //сохранение расстановки отряда
IF ($DLR[$i4]>0) //если позиция в принимающей стороне занята
$i2=$i3
//Ищем любую свободную ячейку в принимающей стороне
FOR($i2, $i2 < $SideLR+$SideS)
if ($DLR[$i2]<1) //если свободна
MOVE($i1,$i2) //передаем в свободную ячейку
$i2=404 //выход из цикла принимающей
end_if
END_CYC
ELSE //если позиция в принимающей стороне свободна
MOVE($i1,$i4) //передаем с сохранением расстановки отряда
END_IF
END_IF
END_CYC
END_SUB
/////////////////////////////////////////////////////////////
// передача одинаковых отрядов (те с другой стороны есть такой же отряд )
SUB (DUBL)
$i1=$SideLR-7 //Вычисление нижней границы
$i3=$i1+$SideS //Вычисление верхней границы
FOR($i1, $i1 < $SideLR) //Среди ячеек передающей стороны
IF ($DLR[$i1]>0) //для каждой занятой ячейки
$i2=$i3
//Ищем данный отряд по $PIC[$i1] в принимающей стороне
FOR($i2, $i2 < $SideLR+$SideS)
IF_PICTURE_IN ($DX[$i2]-$addX1, $DY[$i2]-$addY1, $DX[$i2]+$addX1, $DY[$i2]+$addY1, $PIC[$i1], -1, $Luck)
MOVE($i1,$i2) //если скрины ячеек с обоих сторон совпали, передаем в туже ячейку
$i2=404 //выход из цикла принимающей
END_IF
END_CYC
END_IF
END_CYC
END_SUB
/////////////////////////////////////////////////////////////
//Делим
SUB (DELIM)
$XX=$_xmouse //Считываем указатель
$YY=$_ymouse
$a=15
$b=0
WHILE(iskeydown(#MOUSE2)=1)
WAITMS(300)
LCLICK ($XX,$YY)
//WAIT MS(100)
WHEELDOWN (99)
//LCLICK($XX,$YY)
$b=1
END_CYC
if ($b=1)
GOTO(end)
end_if
END_SUB
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
DELIM()
$pmv=0
$sm=47
//Если с пробелом
IF ( iskeydown(#space)=1 )
$XX=$_xmouse //Считываем указатель
$YY=$_ymouse
INIT(1,14,5)
$a=1
for ($a, $a<15) //Среди всех ячеек
if ($DX[$a]>$XX-$sm) //Если Х_ячейки > Текущего Положения Мыши -25
IF ($DX[$a]<$XX+$sm) //И если Х_ячейки < тпм+25
if ($DY[$a]>$YY-$sm)
if ($DY[$a]<$YY+$sm)
IF ( $XX<$mid ) //определение стороны для обнуления ячеек, кроме текущей
$i=1
for($i,$i<8) //Лево
$DLR[$i]=0 //все 0
if ($i=$a)
$DLR[$i]=1 //текущая 1
end_if
end_cyc
$SideLR=8
$SideS=7
$pmv=1 //вернуть курсор на место
goto(mv)
ELSE
$i=8
for($i,$i<15) //Право
$DLR[$i]=0 //все 0
if ($i=$a)
$DLR[$i]=1 //текущая 1
end_if
end_cyc
$SideLR=15
$SideS=-7
$pmv=1 //вернуть курсор на место
goto(mv)
END_IF
end_if
end_if
END_IF
end_if
end_cyc
GOTO(end)
END_IF
/////////////////////////////////////////////////////////////
INIT(1,14,5) //Проверяем все ячейки
SIDE() //Находим направление перемещения
mv:
DUBL() //перемещаем одинаковые
MOVEADD() //перемещаем разные
IF ($ACT<1) //если перемещать нечего
MOVEFORCE() //перемещаем все подряд
END_IF
if ($pmv=1)
//LUP($XX,$YY)
goto(end)
end_if
skip:
WAITMS($DELAY)
IF ($Zam<1) //перемещение указателя на кнопку выхода
LUP(1260,815) //если между героями
ELSE
LUP(1830,974) //если в замке
END_IF
//execute (del.cmd) //del.cmd= del screens\*.bmp
end:
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////