'CYTOLOGY2 ピグ自動きたよ お部屋とお外 20130226
'---------------------------------------------------------------
'Copyright(C) 2013 ao-system エーオーシステム
'licensed under the LGPL
'ライセンスはLGPLに準じたものになります。詳しくは下記サイトを参照下さい。
'https://ao-system.net/cytology2/
'LGPLに準じ、この著作権表示は消去できません。
'---------------------------------------------------------------
'
'任意位置の「きたよ帳」「グッピグ帳」「ピグとも一覧」を順に処理
'
'使い方:
'ピグで、きたよ帳、グッピグ帳、ピグとも一覧を全部またはいくつかを重ならない様に配置します。
'実行ボタンで開始します。
'
'注意事項:
'実行後はきたよ帳、グッピグ帳、ピグとも一覧は動かさない様にします。
'左上の、ベルは位置は見えるようにしておきます。
'左下の、チャット入力欄は見えるようにしておきます。
'右下の、お外・お部屋1,2,3,4の切り替えは見えるようにしておきます。
'
'備考:
'設定によりベル時に喋らせることが出来ます。
'一度訪問した部屋へは2回訪問しません。この記録は設定からリセットできます。
'
'---------------------------------------------------------------
Imports System.Drawing
Imports System.Windows.Forms
Public Class AddIn
Private Const APPNAME As String = "自動きたよ"
Private Const TALK As String = "きたよです"
Private Const bellPointX = 45
Private Const bellPointY = 163
Private std As Std
Private stdf As StdFunc
Private chw As ClientHwnd
Private ddItemCheckTalk As CheckBox
Private ddLabelNow As ToolStripLabel
Private ddItemProcessReset As ToolStripButton
Private bd As bookData
Private bellClickCount As Integer = 0
Public Sub New()
std = New Std
stdf = New StdFunc
chw = New ClientHwnd
bd = New bookData
End Sub
Public Sub AddIn_Load()
ddButtonInitial01()
ddButtonInitial02()
RemoveHandler ddItemProcessReset.Click, AddressOf ProcessReset
AddHandler ddItemProcessReset.Click, AddressOf ProcessReset
End Sub
Public Sub AddIn_Start()
Dim markKitayo As Integer(,) = New Integer(,) { _
{&HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8} _
, {&H181818, &HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8} _
, {&H181818, &H181818, &H6890, &HA7E8, &HA7E8, &HA7E8, &HA7E8, &HA7E8} _
, {&H181818, &H181818, &H8DC3, &H6890, &H6890, &H6890, &H0, &H0} _
, {&H181818, &H181818, &H8DC3, &H181818, &H0, &H8DC3, &H0, &H0} _
}
Dim markGuppigg As Integer(,) = New Integer(,) { _
{&H32CCFF, &H32CCFF, &H32CCFF, &H32CCFF, &H32CCFF, &H32CCFF, &H32CCFF, &H676666} _
, {&H32CCFF, &H32CCFF, &H32CCFF, &H32CCFF, &H323232, &H32CCFF, &H323232, &H676666} _
, {&H32CCFF, &H32CCFF, &H323232, &H32CCFF, &H32CCFF, &H32CCFF, &H32CCFF, &H676666} _
, {&H32CCFF, &H323232, &H323232, &H323232, &H32CCFF, &H32CCFF, &H32CCFF, &H676666} _
, {&H32CCFF, &H323232, &H32CCFF, &H323232, &H32CCFF, &H32CCFF, &H32CCFF, &H676666} _
}
Dim markPiggtomo As Integer(,) = New Integer(,) { _
{&HB4DEFF, &HB4DEFF, &HB4DEFF, &HB4DEFF, &HB4DEFF, &HB4DEFF, &HB4DEFF, &HB4DEFF} _
, {&HB4DEFF, &HAAD1F0, &H95B6D2, &HB4DEFF, &HB4DEFF, &H819DB3, &H7690A4, &HB4DEFF} _
, {&HB4DEFF, &HAAD1F0, &H95B6D2, &HADCFF9, &HB0D6FC, &HABCCF8, &HB4DEFF, &H7892A7} _
, {&HA8CFEE, &HB4DEFF, &HB4DEFF, &HA8C4F5, &HA4BCF2, &HADD0FA, &H8CABC4, &H212325} _
, {&HB0D0F, &H4E616F, &H919AC0, &H9EB1DA, &H90ABC9, &H4E5F6E, &H3B4854, &H181818} _
}
Dim markGoHome As Integer(,) = New Integer(,) { _
{&HCC, &HCC, &HCC, &HCC, &HCC, &HCC, &HCC, &HCC} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF} _
, {&HCC9933, &HCC9933, &HCC9933, &HFFFFFF, &HCC9933, &HCC9933, &HCC9933, &HFFFFFF} _
, {&HCC9933, &HCC9933, &HCC9933, &HFFFFFF, &HCC9933, &HCC9933, &HCC9933, &HFFFFFF} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF} _
, {&HCC9933, &HCC9933, &HCC9933, &HFFFFFF, &HCC9933, &HCC9933, &HCC9933, &HFFFFFF} _
, {&HCC9933, &HCC9933, &HCC9933, &HFFFFFF, &HCC9933, &HCC9933, &HCC9933, &HFFFFFF} _
}
chw.HwndBrowser(0, 0)
setFocus()
Dim markLocation As Point
If std.StopFlag = False Then
ddLabelNow.Text = "きたよ帳を探しています"
markLocation = chw.ImageSearchClient(markKitayo)
If markLocation.X <> -1 Then
ddLabelNow.Text = "きたよ帳が見つかりました"
bd.refX = markLocation.X + 204
bd.refY = markLocation.Y + 16
bd.scrollBarX = 25
bd.scrollBarY = 292
bd.nameOffset = 0
kitayo()
End If
End If
If std.StopFlag = False Then
ddLabelNow.Text = "グッピグ帳を探しています"
markLocation = chw.ImageSearchClient(markGuppigg)
If markLocation.X <> -1 Then
ddLabelNow.Text = "グッピグ帳が見つかりました"
bd.refX = markLocation.X + 197
bd.refY = markLocation.Y + 25
bd.scrollBarX = 25
bd.scrollBarY = 292
bd.nameOffset = 0
kitayo()
End If
End If
If std.StopFlag = False Then
ddLabelNow.Text = "ピグとも一覧を探しています"
markLocation = chw.ImageSearchClient(markPiggtomo)
If markLocation.X <> -1 Then
ddLabelNow.Text = "ピグとも一覧が見つかりました"
bd.refX = markLocation.X + 202
bd.refY = markLocation.Y + 42
bd.scrollBarX = 24
bd.scrollBarY = 286
bd.nameOffset = -20
kitayo()
End If
End If
If std.StopFlag = False Then
ddLabelNow.Text = "自分の部屋へを探しています"
markLocation = chw.ImageSearchClient(markGoHome)
If markLocation.X <> -1 Then
ddLabelNow.Text = "自分の部屋へが見つかりました"
chw.mLClickClient(markLocation.X, markLocation.Y) '自分の部屋への位置で
End If
End If
loadWait()
ddLabelNow.Text = "終了しました: " & bellClickCount.ToString & " ベル"
stdf.WaitMilliSec(3000)
Dim fnt As System.Drawing.Font = New Font("Arial", 60, FontStyle.Bold)
Dim pnt As System.Drawing.Point = New Point(CInt(chw.RightClient / 2) - 200, CInt(chw.BottomClient / 2) - 30)
chw.DrawStringClient("Bells Hit:" & bellClickCount.ToString, fnt, Brushes.Blue, pnt)
std.ExitAddIn()
End Sub
Private Sub setFocus()
chw.mLClick(chw.Left + 56, chw.Bottom - 56)
End Sub
Public Sub kitayo()
Do While True
oshiraseExit()
For y As Integer = bd.refY - bd.nameOffset To bd.refY + 297 Step 1 '走査
kitayo2(bd.refX, y)
If std.StopFlag = True Then Exit Do '停止ボタンで終了
Next
oshiraseExit()
stdf.WaitMilliSec(500) '0.5秒待つ
If chw.GetColorClient(bd.refX + bd.scrollBarX, bd.refY + bd.scrollBarY) = &H999999 Then '全て終了だったら
Exit Do
End If
chw.mLClickClient(bd.refX + bd.scrollBarX, bd.refY + bd.scrollBarY + 9) '下スクロールボタン位置で
stdf.WaitMilliSec(500) '0.5秒待つ
Loop
End Sub
Private Sub kitayo2(ByVal x As Integer, ByVal y As Integer)
If chw.GetColorClient(x, y - 1) = &H656565 AndAlso chw.GetColorClient(x, y) = &HCC Then '赤屋根を見付けたら
If checkName(x, y) = True Then
ddLabelNow.Text = "スキップ"
Exit Sub
End If
ddLabelNow.Text = "部屋を訪問中"
chw.mLClickClient(x, y) '屋根の位置で
loadWait()
alertExit()
bellClick()
Dim soto As Integer = chw.GetColorClient(chw.RightClient - 171, chw.BottomClient - 107)
'Dim uchi As Integer = chw.GetColorClient(chw.RightClient - 150, chw.BottomClient - 107)
If soto = &HFFF642 Then
chw.mLClickClient(chw.RightClient - 150, chw.BottomClient - 107)
loadWait()
alertExit()
bellClick()
ElseIf soto = &HB2A800 Then
chw.mLClickClient(chw.RightClient - 171, chw.BottomClient - 107)
loadWait()
alertExit()
bellClick()
Else
'庭が造られていないから何もしない
End If
End If
End Sub
Private Sub ProcessReset(ByVal sender As Object, ByVal e As System.EventArgs)
checkName(-1, -1)
End Sub
Private Function checkName(ByVal x As Integer, ByVal y As Integer) As Boolean
Const imgSize As Integer = 120 * 9 - 1
Static Dim nameAry(imgSize, 100) As Integer
Static Dim pointer As Integer = -1
'特別な処理:記憶した名前をクリア
If x = -1 AndAlso y = -1 Then
ReDim nameAry(imgSize, 100)
pointer = -1
Return True
End If
chw.FillRectangleClient(Brushes.Red, 2, 0, chw.RightClient, 23)
'現在の名前を取得
Dim currentName(imgSize) As Integer
Dim c1 As Integer = 0
For h As Integer = 0 To 8 Step 1
For w As Integer = 0 To 119 Step 1
Dim col = chw.GetColorClient(x - 195 + w, y + h + bd.nameOffset)
currentName(c1) = col
c1 += 1
Dim pe As System.Drawing.Pen = New Pen(Color.FromArgb(col Or &HFF000000))
chw.DrawLineClient(pe, 7 + w, 7 + h, 7 + w + 1, 7 + h)
pe.Dispose()
Next
Next
'名前を順に比較
For i As Integer = 0 To pointer Step 1
For c1 = 0 To imgSize Step 1
If nameAry(c1, i) <> currentName(c1) Then
Exit For
End If
Next
If c1 > imgSize Then
Return True '同じ名前発見
End If
Next
'同じ名前が無い場合
If nameAry.GetLength(1) >= pointer Then
ReDim Preserve nameAry(imgSize, pointer + 100)
End If
pointer += 1
For c1 = 0 To imgSize Step 1
nameAry(c1, pointer) = currentName(c1)
Next
Return False
End Function
Private Function loadWait() As Boolean
stdf.WaitMilliSec(1000) '1秒待つ
Dim count As Integer
For count = 0 To 20 Step 1 'ロード中は待つ(タイムアウト20sec)
If chw.GetColorClient(chw.LeftClient, chw.TopClient) = &HFFFFFF Then
ddLabelNow.Text = "部屋を訪問しました"
Return True
End If
stdf.WaitMilliSec(1000) '1秒待つ
If std.StopFlag Then Exit For '停止ボタンで終了
Next
ddLabelNow.Text = "タイムアウトしました"
std.StopFlag = True
Return False
End Function
Private Function alertExit() As Boolean
Dim markTojiruWindow As Integer(,) = New Integer(,) { _
{&H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF, &H9D7DFF} _
, {&H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF, &H6532FF} _
}
stdf.WaitMilliSec(1000)
Dim p As Point = chw.ImageSearchClient(markTojiruWindow)
If p.X <> -1 Then
chw.mLClickClient(p)
stdf.WaitMilliSec(500)
Return True
End If
Return False
End Function
Private Function oshiraseExit() As Boolean
Dim markOshirase As Integer(,) = New Integer(,) { _
{&HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF} _
, {&HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298} _
, {&HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298} _
, {&HFE3499, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3499} _
, {&HFE51A7, &HFE399B, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE3298, &HFE399B, &HFE51A7} _
, {&HFE59AB, &HFE56A9, &HFE43A0, &HFE3499, &HFE3298, &HFE3298, &HFE3499, &HFE43A0, &HFE56A9, &HFE59AB} _
, {&HB5437B, &HFE59AB, &HFE59AB, &HFE59AB, &HFE59AB, &HFE59AB, &HFE59AB, &HFE59AB, &HFE59AB, &HB5447C} _
, {&H30303, &H5F2140, &HB5437B, &HFE59AB, &HFE59AB, &HFE59AB, &HFE59AB, &HB5447C, &H6E304F, &H181818} _
, {&H0, &H0, &H0, &H0, &H0, &H181818, &H181818, &H181818, &H181818, &H181818} _
, {&H0, &H0, &H0, &H0, &H181818, &H181818, &H181818, &H181818, &H181818, &H181818} _
, {&H0, &H0, &H0, &H171717, &H171717, &H171717, &H171717, &H171717, &H171717, &H171717} _
, {&H3F3F3F, &H5F5F5F, &H8A8A8A, &H8A8A8A, &H898989, &H898989, &H4F4F4F, &H404040, &H161616, &H0} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HBFBFBF} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HD9D9D9} _
, {&HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HFFFFFF, &HE5E5E5, &H3F3F3F} _
}
stdf.WaitMilliSec(300)
Dim p As Point = chw.ImageSearchClient(markOshirase)
If p.X <> -1 Then
chw.mLClickClient(p.X + 27, p.Y)
stdf.WaitMilliSec(500)
Return True
End If
Return False
End Function
Private Sub bellClick()
Dim bellColor As Integer = chw.GetColorClient(chw.LeftClient + bellPointX, chw.TopClient + bellPointY)
If bellColor = &H19D3AF OrElse bellColor = &H999FF Then 'ベルボタンが緑または橙だったら
ddLabelNow.Text = "ベルを鳴らします"
chw.mLClickClient(chw.LeftClient + bellPointX, chw.TopClient + bellPointY) 'ベルの位置で
stdf.WaitMilliSec(1500) '1.5秒待つ
If ddItemCheckTalk.Checked Then
chw.PostText(TALK & " " & System.DateTime.Now.ToString())
chw.PostKey(std.VK_RETURN)
chw.PostKey(std.VK_F2)
stdf.WaitMilliSec(1500) '1.5秒待つ
End If
bellClickCount += 1
End If
stdf.WaitMilliSec(500) '0.5秒待つ
End Sub
Private Sub ddButtonInitial01()
Dim ddButton As ToolStripDropDownButton = New ToolStripDropDownButton("設定")
Dim dd As ToolStripDropDownMenu = New ToolStripDropDownMenu()
ddButton.DropDown = dd
Dim ddItemSeparator As ToolStripSeparator
ddItemSeparator = New ToolStripSeparator()
ddItemSeparator.AutoSize = True
dd.Items.Add(ddItemSeparator)
ddItemCheckTalk = New CheckBox
ddItemCheckTalk.Text = "訪問時にしゃべる"
ddItemCheckTalk.BackColor = Color.Transparent
Dim cHost As ToolStripControlHost = New ToolStripControlHost(ddItemCheckTalk)
dd.Items.Add(cHost)
ddItemProcessReset = New ToolStripButton("訪問先名の記録リセット")
dd.Items.Add(ddItemProcessReset)
'Dim ddItemLabelBlank As ToolStripLabel = New ToolStripLabel(" ")
'dd.Items.Add(ddItemLabelBlank)
Dim ddItemSeparator2 As ToolStripSeparator
ddItemSeparator2 = New ToolStripSeparator()
ddItemSeparator2.AutoSize = True
dd.Items.Add(ddItemSeparator2)
std.AddInMenuAddOnce(ddButton)
End Sub
Private Sub ddButtonInitial02()
ddLabelNow = New ToolStripLabel("きたよ帳,グッピグ帳,ピグとも一覧を開いて実行します")
std.AddInMenuAddOnce(ddLabelNow)
End Sub
End Class
Public Class bookData
Private e_refX As Integer
Private e_refY As Integer
Private e_scrollBarX As Integer
Private e_scrollBarY As Integer
Private e_nameOffset As Integer
Public Property refX() As Integer
Get
Return e_refX
End Get
Set(value As Integer)
e_refX = value
End Set
End Property
Public Property refY() As Integer
Get
Return e_refY
End Get
Set(value As Integer)
e_refY = value
End Set
End Property
Public Property scrollBarX() As Integer
Get
Return e_scrollBarX
End Get
Set(value As Integer)
e_scrollBarX = value
End Set
End Property
Public Property scrollBarY() As Integer
Get
Return e_scrollBarY
End Get
Set(value As Integer)
e_scrollBarY = value
End Set
End Property
Public Property nameOffset() As Integer
Get
Return e_nameOffset
End Get
Set(value As Integer)
e_nameOffset = value
End Set
End Property
End Class
このページのQRコード
便利ウェブサイト
便利 Steam アプリ
便利 Android アプリ