アクティブな敵に対処しようとすると複数ヶ所の修正が必要になったので面倒でしばらく放置。

 具体的には
HPやMP回復中(食べ物や飲み物使用時)に攻撃を受ける

敵情報に攻撃中のアクティブ敵が表示

回復中断して反撃

 「回復中敵情報を監視して表示されたら反撃」を組み込んだまでは良かったのだが、それに伴って複数のプログラムの修正が必要になった。

1)敵を討伐した後、ESCで敵の表示を切る
2)NPCに反復クエスト報告した後、ESCで敵の表示を切る
3)表示を切る→次の敵選択の間、敵のHPが0になったことを確認する関数を呼び出さない

 特に(3)が曲者で、関数を呼び出すと新しい敵にカーソルを合わせてしまうので今までのプログラムの関数を修正することにしました。

>>エンチャ売りもBOTじゃなくて普通のマクロで大分楽に動かせるよ

エンチャ売りマクロ作ってみたいな
 この講座で紹介するマクロは、純粋に技術を試す目的がメインであり、それ以外の目的(サーバーに負荷をかけ続ける行為掲示板に金銭を対価にマクロを売りつける行為等)は一切関知しません。

 また、当講座で制作したマクロは個人作業の手助けとしての目的にのみ使いましょう。マクロを動かしている間目視でチェックするようにし、大規模オンラインゲームの規約のほとんどに挙げられる『他プレイヤの迷惑行為(横やり、狩場占拠)』に十分気をつけてください。






目次
 はじめに
第一章
 UWSCのダウンロードとインストール方法
 UWSCの基本操作
 はじめての編集
 ループを作る
 はじめての編集 おさらい
第二章
 敵のHPを調べる - 画像を使う
 MOUSEORGとクライアント座標
 PEEKCOLORを使ってみよう
 組み込み - 敵の討伐確認
 敵選択 - メインループにて

第三章
 自分のHP/MPを調べる
 最適な回復アイテム使用タイミング
 表示してみよう - fukidasi
第四章
 マップ上の座標クリック
 障害物チェック
 ハッピータイム
 自分バフ
 アクティブMobの対処
第五章
 おまけ - 個人テリトリー操作
リンク集
 UWSC
 2ちゃんねる
 その他参考サイト
 2章のおさらいです。

//**初期設定*********************************************//
//攻撃キー
public ATTACK1 = VK_1

//HP回復のタイミング
public hpkaifuku = 7

//MP回復のタイミング
public mpkaifuku = 10

//**プログラム開始***************************************//
//敵のHPのX座標とY座標
public hpx = 190//←パーティーメンバーのHPと誤認識を防止
public hpy = 0

//ウインドウをアクティブ化
public id = GETID("DIVINA Ver. ")
ACW(id, STATUS(id, ST_X), STATUS(id, ST_Y))

//メインループ
count = 1
while 1
//敵選択ループ
while 1
//TABキーを押す
KBD2(VK_TAB)

//0.3秒待つ
sleep(0.3)

//まだ倒していないターゲットが表示されたら抜ける
if hpcheck() = 2 then break
wend

//攻撃ループ
while 1
//攻撃キーを押す
KBD2(ATTACK1)

//敵のHPが0か確認(1秒ごと)
sleep(1)
if hpcheck() = 0 then break
sleep(1)
if hpcheck() = 0 then break
sleep(1)
if hpcheck() = 0 then break
sleep(1)
if hpcheck() = 0 then break
wend

ifb count MOD hpkaifuku = 0 then
//HP回復アイテムを使う
KBD2(VK_6)
sleep(15)
endif

ifb count MOD mpkaifuku = 0 then
//MP回復アイテムを使う
KBD2(VK_7)
sleep(15)
endif

//カウント増加
count = count + 1
wend

//敵のHPチェック
FUNCTION hpcheck()
sw = STATUS(id, ST_WIDTH)
sh = STATUS(id, ST_HEIGHT)

//敵のHPバー認識
ifb CHKIMG("HP.bmp", 1, hpx, hpy, sw, sh) then
hpx = G_IMG_X
hpy = G_IMG_Y
else
//↓プレイヤーがHPバーを動かした時に対応
//座標の初期化
hpx = 190
hpy = 0
//少し待ってTABキー押し直す、関数の再帰呼び出し
sleep(0.3)
KBD2(VK_TAB)
RESULT = hpcheck()
EXIT
endif

//HP最大値、最小値チェック
c = PEEKCOLOR(hpx + 1, hpy + 4)//←指定座標の色を拾う
cr = c and $FF//←R(赤)成分を抽出
ifb cr <= 205 then
RESULT = 1
c = PEEKCOLOR(hpx + 95, hpy + 4)
cr = c and $FF
if cr <= 205 then RESULT = 2
else
RESULT = 0
endif
FEND

//ボタンを押して話す
PROCEDURE KBD2(vk)
KBD(vk,DOWN)
sleep(0.067)
KBD(vk,UP)
FEND


 メインループで敵を選択する部分も「敵選択ループ」としてループさせるよう改良しました。これは画面内に敵が沸いていない時に無意味に攻撃ボタンを押すのを防止するためです。敵を倒す→新しい敵を探す流れを続けていくと敵が居なくなる時もありえるためです。

 これで敵を探して倒すという単純なループを確実に行えるようマクロが組上がりました。
 次の章ではさらに自分のHPやMPを読み取って最適なタイミングでHPやMP回復が行えるようマクロを拡張していきます。