Out Of My Memory

雨垂れ石を穿つ

【Elona oomSEST】収穫ループによる願いの杖無限取得までの道(4) ~収穫ループ実施~

草案のため、適宜修正いたします。
※マクロをガンガン使用するため、抵抗がある方はブラウザバック推奨です。
 収穫ループによる願いの杖無限取得までの道(0) ~導入~
 収穫ループによる願いの杖無限取得までの道(1) ~道のり整理~
 収穫ループによる願いの杖無限取得までの道(2) ~MMMによる下落ポーション大量生成~
 収穫ループによる願いの杖無限取得までの道(3) ~下落転生による暗記スキル2000~ 
収穫ループによる願いの杖無限取得までの道(4) ~収穫ループ実施~ ※いまここ

収穫ループの基本動作

  • 収穫の魔法を唱え続ける。
  • もし魔法が使えなくなれば、魔導書を1回だけ読む
  • もし魔導書がなければ、願いの杖で魔導書を願う
  • あとは腹が減れば食べるし、マナがなくなれば休憩する。

※魔法を1度も使えない状態から一度だけ魔導書を読んだ時が一番使用回数が増加します、この使用回数の増加量は暗記スキルに依存します。

収穫ループ用マクロのための準備

  • Elona Extenderの導入

 elonaのログ拡張を有効にするために使用します。

DL先URL:https://www.elona-extender.com/k-tool/elona-extender/ 「Elona Extender開発室」様

※導入方法についてはツール内の「EEx_Readme_jp.txt」を参照してください

 

導入が完了したら「EExConfig.exe」を起動し、「ログ拡張を有効にする」にチェックを入れ設定をクリック。

以下の画面が表示されると思うので、追加をクリックし、画像のキーワード一覧にあるワードと同じものをすべて登録してください。

f:id:pzdl-HIRAKU:20191003210503p:plain

設定が終わったらOKを押して「EExConfig.exe」を終了し、「EExBoot.exe」をダブルクリックしてください。「elona」とともに「抽出ログ」が起動するはずです。

  • ショートカットキーの設定

魔術師の収穫を唱える[1]
収穫の魔法書を読む[2]
願いの杖を振る[3]
スウォーム[4]
食事(ふかふかパン)[7]
※ショートカットキー[11][12][13][17]には何も割り当てないでください。マクロが正しく動かない場合があります。
 [11]などはshift+[1]のことです。

あとは、シェルターの中に入り、マクロを起動するだけです。
マクロについては<マクロ全文>にて記載

マクロの動作

多少端折っていますが。。。

基本的には[1]を押し続け収穫の魔法を唱え続けます。
「マナが足りないが~」を検知したら、いいえを選択後、shift+rで休息を1度だけ行います。(変更可能)
「その魔法はもう使えない」を検知したら、[2]を押して魔導書を読みます。
「そのアイテムは存在しない」を検知したら、[3]を押して願いの杖を振り、収穫の魔導書を願います。
「お腹がすいてきた」「さて何を食べようか」「空腹になった」を検知したら[7]を押して食事をします。
「中断した」を検知したら[4]でスウォームを1度だけ行い、[7]で食事をします。

マクロ全文

//----------*----------*----------* ここから *----------*----------*----------//
// 定数定義
Const HarvestKey = VK_1 // 魔術師の収穫を唱える[1]
Const ReadKey = VK_2 // 収穫の魔法書を読む[2]
Const WishKey = VK_3 // 願いの杖を振る[3]

// デリートログ
DEF_DLL SendMessageA(hWnd, LONG, LONG, DWORD):user32.DLL

// Elonaのウィンドウ、Elonaログ抽出のウィンドウIDを取得
PUBLIC ElonaID = GETID("Elona ver 1.22")
PUBLIC LogWinID = GETID("抽出ログ")

// Elonaのウィンドウの座標を基準点とする
MOUSEORG(ElonaID,1)

// ウィンドウをアクティブ化
CTRLWIN(ElonaID, ACTIVATE)

// ウィンドウがアクティブ状態でなければ終了
if !(STATUS(ElonaID, ST_ACTIVE)) THEN EXITEXIT

// Escキーで強制終了設定
SetHotKey(VK_ESC, 0, "ForceStop")

// 連打関数管理フラグ
PUBLIC HarvestFlag = FALSE

// 連打関数を待機状態へ
THREAD Renda()

// 連打開始
HarvestFlag = TRUE

 

// メイン処理開始
ClearLog() // ログをクリア
WHILE TRUE // ループをスタート
// "その魔法はもう使えない。" を検知したら収穫の魔法書を読む[2]
IFB SearchSTR("その魔法はもう使えない。")
HarvestFlag = FALSE
SLEEP(1.0)
PutKey(ReadKey)
SLEEP(1.0)
// "そのアイテムは存在しない。" を検知したら願いの杖を振る[3]
IFB SearchSTR("そのアイテムは存在しない。")
PutKey(WishKey)
SLEEP(1.0)
SENDSTR(ElonaID,"収穫の魔法書<#CR>")
ClearLog()
HarvestFlag = TRUE
ENDIF
ClearLog()
HarvestFlag = TRUE
ENDIF

// "マナが足りないが"を検知したら休む
IFB SearchSTR("マナが足りないが")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(1.0)
ClearLog() // ログ消去
PutKey(VK_SHIFT) // キャンセル
FOR KAISU = 1 TO 1     //  休息回数を増やしたければここを変更する 1 TO 10とすれば10回休憩する。
Rest()
NEXT
ClearLog() // ログ消去
HarvestFlag = TRUE // 魔術師の収穫再開
ENDIF

// "はらへり"を検知したらたべる
IFB SearchSTR("空腹になった")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(0.1)
PutKey(VK_SHIFT) // キャンセル
PutKey(VK_7) // キャンセル
SLEEP(1.0)
ClearLog() // ログ消去
HarvestFlag = TRUE // 魔術師の収穫再開
ENDIF

// "はらへり"を検知したらたべる
IFB SearchSTR("腹がすいてきた")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(0.1)
PutKey(VK_SHIFT) // キャンセル
PutKey(VK_7) // キャンセル
SLEEP(1.0)
ClearLog() // ログ消去
HarvestFlag = TRUE // 魔術師の収穫再開
ENDIF

// "はらへり"を検知したらたべる
IFB SearchSTR("さて何を食べようか")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(0.1)
PutKey(VK_SHIFT) // キャンセル
PutKey(VK_7) // キャンセル
SLEEP(1.0)
ClearLog() // ログ消去
HarvestFlag = TRUE // 魔術師の収穫再開
ENDIF

// "中断した"を検知したらスウォーム+食べる
IFB SearchSTR("中断した")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(1.0)
ClearLog() // ログ消去
PutKey(VK_SHIFT) // キャンセル
SLEEP(1.0)
PutKey(VK_7)
SLEEP(1.0)
PutKey(VK_4) //[4]スウォーム
ClearLog() // ログ消去
HarvestFlag = TRUE // 魔術師の収穫再開
ENDIF

// いずれでもない時は並列処理を続行(魔術師の収穫を詠唱する[1])
Sleep(0.01)
WEND
// メイン処理終了

 

//*** 収穫連打 ***//
PROCEDURE Renda()
WHILE TRUE
WHILE HarvestFlag
KBD(HarvestKey,DOWN,20)
WEND
Sleep(0.08)
WEND
FEND

//*** ログの消去 ***//
PROCEDURE ClearLog()
GETALLWIN(LogWinID) // ログ抽出ウィンドウの子ウィンドウIDを取得
handle = idtohnd(ALL_WIN_ID[0]) // IDをハンドルに変換
SendMessageA(handle, $000C, 0, "") // WM_SETTEXT
SendMessageA(handle, $000F, 0, 0) // WM_PAINT
FEND

//*** ログの検索 ***//
FUNCTION GetLog()
RESULT = GETSTR(LogWinID,-1)
FEND

FUNCTION SearchSTR(Str,Count = 0)
RESULT = POS(Str,GetLog(),Count)
FEND

//*** キー入力処理 ***//
PROCEDURE PutKey(KeyCode)
KBD(KeyCode,DOWN)
KBD(KeyCode,UP,50)
FEND

//*** 終了処理処理 ***//
PROCEDURE ForceStop()
EXITEXIT
FEND

//*** 休憩処理 ***//
PROCEDURE Rest()
KBD(VK_SHIFT,DOWN) // 休憩
KBD(VK_R,CLICK)
KBD(VK_SHIFT,UP)
SLEEP(1.0)
// "はらへり"を検知したらたべる
IFB SearchSTR("空腹になった")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(0.1)
PutKey(VK_SHIFT) // キャンセル
PutKey(VK_7) // キャンセル
SLEEP(1.0)
ClearLog() // ログ消去
ENDIF

// "はらへり"を検知したらたべる
IFB SearchSTR("腹がすいてきた")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(0.1)
PutKey(VK_SHIFT) // キャンセル
PutKey(VK_7) // キャンセル
SLEEP(1.0)
ClearLog() // ログ消去
ENDIF

// "はらへり"を検知したらたべる
IFB SearchSTR("さて何を食べようか")
HarvestFlag = FALSE // 魔術師の収穫一時停止
SLEEP(0.1)
PutKey(VK_SHIFT) // キャンセル
PutKey(VK_7) // キャンセル
SLEEP(1.0)
ClearLog() // ログ消去
ENDIF

    IFB SearchSTR("中断した")
        HarvestFlag = FALSE                        // 魔術師の収穫一時停止
        SLEEP(1.0)
        ClearLog()                            // ログ消去
        PutKey(VK_SHIFT)                           // キャンセル
        SLEEP(1.0)
        PutKey(VK_4)                          //[4]スウォーム
        SLEEP(1.0)
        PutKey(VK_7)
        SLEEP(1.0)
        ClearLog()                            // ログ消去
    ENDIF

FEND
//----------*----------*----------* ここまで *----------*----------*----------//