※このUWSCスクリプトは、多忙でヒマがない人向けです。勝利を保証するものではありません。
※PCアプリで解像度 960x640 専用です。
(17/08/16)
・牌カラーを変更していても動作するように対応
・更に精度の向上
(17/08/15)
・九種九牌倒牌、天和・人和・地和の判定精度の向上
(17/08/12 )
・Ver4.5の画面の仕様変更に対応
・第一ツモの時、暗カン可能時、代走ボタンが出てこないのでカンするようにした。
・天和・人和・地和で自動和了できるようにした。
・九種九牌時に倒牌できるようにした。
・天和・人和・地和ですぐにドボンで終了した場合に、止まってしまうのを修正
・九種九牌倒牌、天和・人和・地和の和了り時とその時の役、ボーダー到達時の戦績画面などを
画面キャプチャーするようにした。
・SKIPボタンのウエイト微調整
・獲得回数が2回目になったら自動終了
----------------
毎月のFREE対戦8試合+50.0以上で200G消化を2回やるのが
面倒臭いと感じて暇がない人のために、東風 自動CPU代走 スクリプトを作ってみた。
CPU代走についての説明は、こちら
CPU代走.uws (識別用画像ファイルのダウンロードは→こちら(zip書庫形式)
↓
------------------------ここから----------------------------
//毎月FREE対戦 8試合+50.0以上で200Gx2回=400Gの消化が
//かなり面倒臭く感じてヒマがない方達の為に作った・・・
//
// <<<< CPU代走(FREE対戦 東風)自動Script >>>>
//
//●九種九牌倒牌・天和・人和・地和対応(自動キャプチャあり)
//●ボーダー到達時、スコア自動キャプチャ(獲得数2回目で自動終了)
//●暗槓可能時、自動カンした後に代走(代走ボタンが出てこない為)
//※PCアプリ用 画面解像度 960x640 専用
//※※反応が遅いPC環境によっては
//wait関数[sleep()]を間に入れる必要あり
//また認識する色幅[IMG_MSK_BGR]も入れる必要あり
//画像格納フォルダ指定
fol1 ="C:\MJ_IMG\"
//拡張子を指定
bmp =".BMP"
//画像に変数を定義
TONPUB =fol1+"tonpu" +bmp
DAIHAIB =fol1+"daihai" +bmp
AGA1B =fol1+"aga1" +bmp
AGA2B =fol1+"aga2" +bmp
AGA3B =fol1+"aga3" +bmp
AGA4B =fol1+"aga4" +bmp
AGA5B =fol1+"aga5" +bmp
KYU1B =fol1+"9s9h1" +bmp
KYU2B =fol1+"9s9h2" +bmp
KYU3B =fol1+"9s9h3" +bmp
KYU4B =fol1+"9s9h4" +bmp
KYU5B =fol1+"9s9h5" +bmp
SKIPB =fol1+"skipg" +bmp
CANCELB =fol1+"canon" +bmp
OKMJB =fol1+"okmj" +bmp
SYURB =fol1+"syuryo" +bmp
KAKU22 =fol1+"b22" +bmp
KANNNB =fol1+"kanon" +bmp
CANHB =fol1+"canhai" +bmp
ZEROB =fol1+"zero" +bmp
TOTAB =fol1+"totatu" +bmp
DAIKB =fol1+"daikai" +bmp
CHUDB =fol1+"chudan" +bmp
// 見つけるウインドウのタイトルを指定する(一部でOK)
mjid = GETID("セガNET麻雀MJ","UnityWndClass")
ifb mjid<0
MSGBOX("エラー、対象ウインドウが見つかりません")
exitexit
endif
//メイン画面を取り込む
CTRLWIN( mjid, ACTIVATE )
MOUSEORG( mjid , MORG_CLIENT, MORG_FORE )
FOR DDDDD = 1 TO 9999999
FOR MJMFREE1 = 1 TO 9999999
//東風開始ボタンが出るまで繰り返す
repeat
CTRLWIN( mjid, ACTIVATE )
FreeT = CHKIMG(TONPUB,,ST_X+620,ST_Y+250,ST_X+680,ST_Y+275,1,IMG_MSK_BGR4)
until FreeT
// 東風ボタン、クリック
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,100)
// 卓上画面が出るまで繰り返す
repeat
CTRLWIN( mjid, ACTIVATE )
migiueT = CHKIMG(CANHB,,ST_X+897,ST_Y+452,ST_X+951,ST_Y+452,1,IMG_MSK_BGR2)
until migiueT
// アシスト座標(20,275)
sleep(1)
// 代走ボタン(灰色)が出てない場合アシストボタンをクリック
repeat
CTRLWIN( mjid, ACTIVATE )
HaiT = CHKIMG(DAIHAIB,,ST_X+90,ST_Y+300,ST_X+100,ST_Y+310,1,IMG_MSK_BGR3)
//代走灰色ボタンが出ていたらrepeatから脱出
IF HaiT Then Break
//アシストボタンを押す
BTN(LEFT,CLICK,20,275,100)
Until HaiT
//代走灰色ボタンの座標を別変数に格納
GGX = G_IMG_X
GGY = G_IMG_Y
sleep(1)
//###代走灰色ボタンが無くなるまで繰り返す
repeat
CTRLWIN( mjid, ACTIVATE )
DaisoU = !CHKIMG(DAIHAIB,,ST_X+90,ST_Y+300,ST_X+100,ST_Y+310,1,IMG_MSK_BGR3)
//%%アガリボタン(天和、地和、人和)が出たらアガリをクリック
AGA1C = CHKIMG(AGA1B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA2C = CHKIMG(AGA2B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA3C = CHKIMG(AGA3B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA4C = CHKIMG(AGA4B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA5C = CHKIMG(AGA5B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGAPP = AGA1C or AGA2C or AGA3C or AGA4C or AGA5C
IF AGAPP Then
SLEEP(0.5)
// 日時取得してキャプチャ保存
GETTIME()
year = G_TIME_YY
month ="0"+G_TIME_MM
day ="0"+G_TIME_DD
hour ="0"+G_TIME_HH
mn ="0"+G_TIME_NN
sec ="0"+G_TIME_SS
TimeA=COPY(year,LENGTH(year)-1)+COPY(month, LENGTH(month)-1)+COPY(day, LENGTH(day)-1)+COPY(hour, LENGTH(hour)-1)+COPY(mn, LENGTH(mn)-1)+COPY(sec, LENGTH(sec)-1)
savefile1 = fol1+"了"+TimeA +bmp
CTRLWIN( mjid, ACTIVATE )
saveimg(savefile1 , mjid ,,,,,TRUE)
SLEEP(0.5)
CTRLWIN( mjid , ACTIVATE )
//ボタンをクリック
BTN(LEFT,CLICK,456,427,100)
//スキップボタンが出るまで繰り返す
repeat
sleep(1)
CTRLWIN( mjid , ACTIVATE )
SkipT = CHKIMG(SKIPB,,ST_X+800,ST_Y+575,ST_X+820,ST_Y+590,1,IMG_MSK_BGR4)
until SkipT
//スキップ座標位置を別変数に格納する
S1X=G_IMG_X+10
S1Y=G_IMG_Y+10
sleep(1)
//スキップボタンがなくなるまで画像認識
repeat
CTRLWIN( mjid , ACTIVATE )
USkipT = !CHKIMG(SKIPB,,ST_X+800,ST_Y+575,ST_X+820,ST_Y+590,1,IMG_MSK_BGR4)
ZEROT = CHKIMG(ZEROB,,ST_X+745,ST_Y+565,ST_X+760,ST_Y+573,1,IMG_MSK_BGR4)
//役が出たら、キャプチャ保存
IF ZEROT Then
//日時などを取得してキャプチャ保存
GETTIME()
year = G_TIME_YY
month ="0"+G_TIME_MM
day ="0"+G_TIME_DD
hour ="0"+G_TIME_HH
mn ="0"+G_TIME_NN
sec ="0"+G_TIME_SS
TimeA=COPY(year,LENGTH(year)-1)+COPY(month, LENGTH(month)-1)+COPY(day, LENGTH(day)-1)+COPY(hour, LENGTH(hour)-1)+COPY(mn, LENGTH(mn)-1)+COPY(sec, LENGTH(sec)-1)
savefile1 = fol1+"役"+TimeA +bmp
saveimg(savefile1 , mjid ,,,,,TRUE)
SLEEP(0.2)
CTRLWIN( mjid, ACTIVATE )
//スキップボタンをクリック
BTN(LEFT,CLICK,S1X,S1Y,50)
SLEEP(0.5)
EndIf
CTRLWIN( mjid, ACTIVATE )
//すぐにドボンで終了して対戦メニューに戻ってしまったらループ抜ける
EndT = CHKIMG(SYURB,,ST_X+265,ST_Y+340,ST_X+275,ST_Y+355,1,IMG_MSK_BGR2)
IF EndT Then
MMV(G_IMG_X,G_IMG_Y)
//スキップボタンが出るまで繰り返す
repeat
sleep(1)
CTRLWIN( mjid , ACTIVATE )
SkipT = CHKIMG(SKIPB,,ST_X+800,ST_Y+575,ST_X+820,ST_Y+590,1,IMG_MSK_BGR4)
until SkipT
//スキップ座標位置を別変数に格納する
S1X=G_IMG_X+5
S1Y=G_IMG_Y+5
sleep(1)
//スキップボタンがなくなるまでスキップボタンをクリック
Repeat
CTRLWIN( mjid , ACTIVATE )
//ボーダー到達時に画面キャプチャ
TOTAT = CHKIMG(TOTAB,,ST_X+677,ST_Y+450,ST_X+685,ST_Y+460,1,IMG_MSK_BGR4)
IF TOTAT Then
GETTIME()
year = G_TIME_YY
month ="0"+G_TIME_MM
day ="0"+G_TIME_DD
hour ="0"+G_TIME_HH
mn ="0"+G_TIME_NN
sec ="0"+G_TIME_SS
TimeA=COPY(year,LENGTH(year)-1)+COPY(month, LENGTH(month)-1)+COPY(day, LENGTH(day)-1)+COPY(hour, LENGTH(hour)-1)+COPY(mn, LENGTH(mn)-1)+COPY(sec, LENGTH(sec)-1)
savefile1 = fol1+"達"+TimeA +bmp
saveimg(savefile1 , mjid ,,,,,TRUE)
Sleep(0.2)
EndIf
//獲得条件が2/2だったら終了する
KAKUM = CHKIMG(KAKU22,,ST_X+645,ST_Y+465,ST_X+705,ST_Y+500,1,IMG_MSK_BGR4)
IF KAKUM Then exitexit
//スキップボタンをクリック
SLEEP(0.2)
CTRLWIN( mjid , ACTIVATE )
BTN(LEFT,CLICK,S1X,S1Y,5)
SLEEP(1.5)
CTRLWIN( mjid, ACTIVATE )
USkipT = !CHKIMG(SKIPB,,ST_X+800,ST_Y+575,ST_X+820,ST_Y+590,1,IMG_MSK_BGR4)
Until USkipT
break 2
EndIf
SLEEP(1)
Until USkipT
// 卓上画面が出るまで繰り返す
repeat
CTRLWIN( mjid, ACTIVATE )
migiueT = CHKIMG(CANHB,,ST_X+897,ST_Y+452,ST_X+951,ST_Y+452,1,IMG_MSK_BGR2)
until migiueT
EndIf
sleep(0.01)
//%%
//\\●●九種九牌ボタンが出たらクリック●●
//※倒牌しない場合は、TTA=0 に書き換える
TTA=1
KYU1C = CHKIMG(KYU1B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU2C = CHKIMG(KYU2B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU3C = CHKIMG(KYU3B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU4C = CHKIMG(KYU4B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU5C = CHKIMG(KYU5B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYUPP = KYU1C or KYU2C or KYU3C or KYU4C or KYU5C
IF KYUPP and TTA Then
SLEEP(0.5)
// 日時取得してキャプチャ保存
GETTIME()
year = G_TIME_YY
month ="0"+G_TIME_MM
day ="0"+G_TIME_DD
hour ="0"+G_TIME_HH
mn ="0"+G_TIME_NN
sec ="0"+G_TIME_SS
TimeA=COPY(year,LENGTH(year)-1)+COPY(month, LENGTH(month)-1)+COPY(day, LENGTH(day)-1)+COPY(hour, LENGTH(hour)-1)+COPY(mn, LENGTH(mn)-1)+COPY(sec, LENGTH(sec)-1)
savefile1 = fol1+"倒"+TimeA +bmp
CTRLWIN( mjid, ACTIVATE )
saveimg(savefile1 , mjid ,,,,,TRUE)
SLEEP(0.5)
CTRLWIN( mjid , ACTIVATE )
BTN(LEFT,CLICK,441,418,100)
SLEEP(0.5)
//卓上画面が消えるまで繰り返す
repeat
CTRLWIN( mjid, ACTIVATE )
migiueT = !CHKIMG(CANHB,,ST_X+897,ST_Y+452,ST_X+951,ST_Y+452,1,IMG_MSK_BGR2)
SLEEP(1)
until migiueT
SLEEP(1)
// 卓上画面が出るまで繰り返す
repeat
CTRLWIN( mjid, ACTIVATE )
migiueT = CHKIMG(CANHB,,ST_X+897,ST_Y+452,ST_X+951,ST_Y+452,1,IMG_MSK_BGR2)
until migiueT
EndIf
//\\---------------------------
CTRLWIN( mjid , ACTIVATE )
//キャンセルボタンあり、アガリボタンなしの場合にクリック
AGA1C = CHKIMG(AGA1B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA2C = CHKIMG(AGA2B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA3C = CHKIMG(AGA3B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA4C = CHKIMG(AGA4B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA5C = CHKIMG(AGA5B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
UAGAPP = !(AGA1C or AGA2C or AGA3C or AGA4C or AGA5C )
Cancel = CHKIMG(CANCELB,,ST_X+897,ST_Y+451,ST_X+951,ST_Y+451,1,IMG_MSK_BGR4)
IF Cancel and UAGAPP Then
//キャンセルボタンを押す
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,100)
EndIf
sleep(0.01)
//----------
// 第一ツモ時、カンボタンのみで代走が押せない時にカンをする
AGA1C = CHKIMG(AGA1B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA2C = CHKIMG(AGA2B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA3C = CHKIMG(AGA3B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA4C = CHKIMG(AGA4B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
AGA5C = CHKIMG(AGA5B,,ST_X+456,ST_Y+427,ST_X+508,ST_Y+427,1,IMG_MSK_BGR4)
UAGAPP = !(AGA1C or AGA2C or AGA3C or AGA4C or AGA5C )
KYU1C = CHKIMG(KYU1B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU2C = CHKIMG(KYU2B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU3C = CHKIMG(KYU3B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU4C = CHKIMG(KYU4B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
KYU5C = CHKIMG(KYU5B,,ST_X+441,ST_Y+418,ST_X+517,ST_Y+418,1,IMG_MSK_BGR4)
UKYUPP = !(KYU1C or KYU2C or KYU3C or KYU4C or KYU5C )
CANHT = CHKIMG(CANHB,,ST_X+897,ST_Y+452,ST_X+951,ST_Y+452,1,IMG_MSK_BGR2)
KANNNT = CHKIMG(KANNNB,,ST_X+786,ST_Y+452,ST_X+819,ST_Y+452,1,IMG_MSK_BGR4)
IF KANNNT and CANHT and UAGAPP and UKYUPP Then
//カンボタンを押す
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,100)
EndIf
until DaisoU
//##
//代走(灰色)が青色に変わったので代走青ボタンをクリック
CTRLWIN( mjid, ACTIVATE )
BTN(LEFT,CLICK,GGX,GGY,100)
// OKボタンが出るまで繰り返す
repeat
CTRLWIN( mjid, ACTIVATE )
okT = CHKIMG(OKMJB,-1,ST_X+320,ST_Y+482,ST_X+330,ST_Y+490,1)
until okT
// OKボタンを押す
BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,100)
//// 動作テスト用script。CPU戦のメニュー画面にて使用''''''''''''''
//sleep(0.1)
////代走解除ボタンが出るまで繰り返す
//repeat
//dk = CHKIMG(DAIKB,-1,ST_X+480,ST_Y+347,ST_X+500,ST_Y+365,1,IMG_MSK_BGR2)
//until dk
//CTRLWIN( mjid , ACTIVATE )
////代走解除ボタンをクリック
//BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,100)
////中断ボタン画像が出るまで繰り返す
//repeat
//cd = CHKIMG(CHUDB,,ST_X+15,ST_Y+125,ST_X+30,ST_Y+135,1,IMG_MSK_BGR4)
//until cd
////中断ボタンをクリック
//CTRLWIN( mjid , ACTIVATE )
//BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,100)
////終了OKボタン画像が出るまで繰り返す
//repeat
//okok = CHKIMG(OKMJB,-1,ST_X+318,ST_Y+338,ST_X+340,ST_Y+345,1,IMG_MSK_BGR2)
//until okok
////OKボタンをクリック
//CTRLWIN( mjid , ACTIVATE )
//BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,100)
//// FOR NEXT ループから一旦抜ける
//break
//// ''''''''''''''''''''''''''''''''''''''''''''''''
// 試合が終わるのが出るまで繰り返す
repeat
sleep(2.5)
EndT = CHKIMG(SYURB,,ST_X+265,ST_Y+340,ST_X+275,ST_Y+355,1,IMG_MSK_BGR2)
until EndT
MMV(G_IMG_X,G_IMG_Y)
//スキップボタンが出るまで繰り返す
repeat
sleep(1)
CTRLWIN( mjid , ACTIVATE )
SkipT = CHKIMG(SKIPB,,ST_X+800,ST_Y+575,ST_X+820,ST_Y+590,1,IMG_MSK_BGR4)
until SkipT
//スキップ座標位置を別変数に格納する
S1X=G_IMG_X+5
S1Y=G_IMG_Y+5
sleep(1)
//スキップボタンがなくなるまでスキップボタンをクリック
Repeat
CTRLWIN( mjid , ACTIVATE )
//ボーダー到達時に画面キャプチャ
TOTAT = CHKIMG(TOTAB,,ST_X+677,ST_Y+450,ST_X+685,ST_Y+460,1,IMG_MSK_BGR4)
IF TOTAT Then
GETTIME()
year = G_TIME_YY
month ="0"+G_TIME_MM
day ="0"+G_TIME_DD
hour ="0"+G_TIME_HH
mn ="0"+G_TIME_NN
sec ="0"+G_TIME_SS
TimeA=COPY(year,LENGTH(year)-1)+COPY(month, LENGTH(month)-1)+COPY(day, LENGTH(day)-1)+COPY(hour, LENGTH(hour)-1)+COPY(mn, LENGTH(mn)-1)+COPY(sec, LENGTH(sec)-1)
savefile1 = fol1+"達"+TimeA +bmp
saveimg(savefile1 , mjid ,,,,,TRUE)
Sleep(0.1)
EndIf
//獲得条件が2/2だったら終了する
KAKUM = CHKIMG(KAKU22,,ST_X+645,ST_Y+465,ST_X+705,ST_Y+500,1,IMG_MSK_BGR4)
IF KAKUM Then exitexit
SLEEP(0.1)
CTRLWIN( mjid , ACTIVATE )
BTN(LEFT,CLICK,S1X,S1Y,3)
SLEEP(1.5)
CTRLWIN( mjid , ACTIVATE )
USkipT = !CHKIMG(SKIPB,,ST_X+800,ST_Y+575,ST_X+820,ST_Y+590,1,IMG_MSK_BGR4)
Until USkipT
NEXT
NEXT
------------------------ここまで----------------------------
識別用画像ファイルをダウンロードした後
画像格納フォルダに解凍 (例: C:\MJ_IMG\ )
CPU代走.uws を作成して、UWSCで実行させる。
実行する時には、FREE対戦メニュー画面で待機しておく
(CPU対戦メニュー画面待機でも注釈をいじればテスト用に一応使えます)