忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

FLネタは有るには有るのですが、しばらく自粛するのでちょっとたまにはツールの開発サイドの話でも。

基本的にはド素人なのでかなり行きあたりばったりな感じで作ってます。
簡単なベースを「動けばいいや」みたいな感じで作ってるので、後から追加機能を肉付けするときに困ったりすることも多々あります。

というわけでシュクレクールさんとしては久しぶりにツールの開発をしました。
といっても過去のyui規模のものではなく(あれはホント大掛かりでしたね・・・。2PC前提でホームネットワーク組んで2PC目のファイルを開いたりしてましたからね・・・)、基幹が2日程度で、後のデバッグなどの調整に1週間っていう感じのものです。

エクセルのマクロを使うことでかなり面倒な部分も省略させてもらってます。

本記事はソースから抜粋してるので宣言とかを省略してます。
ソース全文はバトスケのVBAをみれば一目瞭然なのでそっちをみてください。


というわけでバトスケの開発コンセプトから見てみましょう


・バハ4層用に作ってます
・予め攻撃パターンを書き込んでおく必要があります
・1秒毎に1行下にスクロールします
・ウィンドウが非アクティブでも指し示す行が分かるように囲いをします
・フェーズ移行は手動(ボタン直押しorホットキー)
・時間表示を行う(動作中であることが目視で分かるように)

基本的にはこんな感じです。

まずいちばんの基幹となる1秒毎にスクロールするという部分の作成から始めました。

開始ボタンを押すと走ります。

まず実時間の取得と初期化?のような処理から始めます。

当初、時間補正を考えてなかったので、1/1000秒の取得を考えていたので実は無駄なプログラムとなってます。
Dim dblTimer As Double
dblTimer = CDbl(Timer)
これで0時からの経過秒数が1/1000秒単位で返ってきます。
(ジャスト午前11時なら39600.0000)
で、結果として少数以下要らなかったので
settime = Fix(dblTimer)
として丸めてます。
最初から少数以下を取得しないようにすればよかった話ですね。
こういうところが私の行きあたりばったり感です。

あと浮動小数とか扱わない限り、VBAは宣言なしで使えるので楽ですね。
大きいの組むときは逆に弊害になりそうですけど。

とにかくコレで実時間を取得したことに成ります。
PR
battlescheduleの正式版がリリースできそうです。
なんか勢い余っていろいろ機能つけてしまいましたね。
β版ではただボタン押してスクロールするだけでしたが、
ホットキー機能
SE機能
と追加してしまいました。

VBA自体まともにやったの ははじめてでしたが、VBはjscriptの絡みの時にいろいろやってたのですんなり入れたというか、関数名に日本語が使えてちょっと笑ってしまいました。

さてさて、ほとんどひとりごとの今回の記事です。

プログラムを書いていく上でいろいろ決めたことがあるのですがその理由とかを少し。

・作った動機
詠唱が始まってから反応させるようなモノはあるわけですが、もっと「次は何」っていう予告が欲しいなぁと思ったのが主要因です。それ以上でもそれ以下でもないかなぁ

・一度挫折した
というよりはできればVisualStudioで作りたかったです。が既存のフォームでは良い物が出来そうになかったことがあります。最近はSilverLightとかもあるので色々やりようはあるみたいなのですが、そこまで手をつけてるヒマがない。土台だけでも平気で1ヶ月位掛かりそうですしね。
ということでエクセルで作り始めたんですが、「これ使える・・・?」と自問自答して、ベースだけ作ってしばらく放っておきました。

・補正機能の実装
1秒ウェイトで動かしてるので最初はPCスペックを言い訳にして補正機能はいらないんじゃないかなーと思っていました。しかし処理遅延分が重なっていけばやがて10秒以上の遅延へと発展していきます。また、突発的なビジーで遅れることもあるため、補正なしだとスペックがそこそこでもうまく動かないといったこともあり、実時間での補正機能を追加しました。
手順としては
実時間を記録して、例えば10ループ後に実時間を記録して、その差分が10秒からズレていたらそのズレの分だけ補正しましょうってことをやってます。補正処理後はまた実時間記録してって・・・。
こういうの作るの苦手というか姑息な感じがして嫌いです。

・ホットキー機能
エクセル上のボタンの手押しが非常に使い勝手が悪いです。
まずエクセルをアクティブにするのに1クリックしてそこからボタンをおすので1クリックで最低でも2アクション掛かります。また、処理中だとボタンが反応しなかったりで、連打するはめになります。

するとどうでしょう

龍神の加護が来て一生懸命ボタン押してると・・・

そう!!
ノーバフでバハムートクロウを受けるハメになるのです!!

・・・・。

というわけでFF14やりながらでも動かせるようにホットキーを実装しました。

便利です。
押しボタンみたいに反応しないってこともないのでチョー便利です。

・SE機能
これは要るか要らないかの問答含めてどう作ろうか悩みました。

そして「とりあえずプログラムが面白そうだから書いてみよう」という結論に。

そうただの知的好奇心で作りました。

言うほどおもしろくなかったですが。

当初は予め登録しておいた音を、キーワード反応にして鳴らそうかなーと思っていたのですが、音分けはやっぱり欲しいしってことで、「じゃぁもう鳴らしたい音のアドレスを直に書いてもらってそれを拾えばいいじゃん」ってことになりました。

ただ、そうすると記述がだるいので、パスはダイアログ使って通せるように設計しました。

しかし、APIでは多重再生やボリュームの調節が出来ないようでここだけちょっと不満が残ってます。
DirectSound使えばよいそうなのですが、記述がそこそこ複雑っぽいので検討中。
長くなるとそれだけ処理遅延が発生しやすくなりますし。
そもそも多用する機能でもないのでいいんじゃねってことで。
バトルスケジュール公開です。

デフォは侵攻編4層のタイムスケジュールが入ってます。勝手にいじればいいと思います。
使い方などの詳細はhowtoシートに。

要エクセルです。
(2000以降ならおそらく動くかと)

ざっくりとした解説。
予め入力した敵の攻撃パターンにあわせて
エクセルが1秒単位で1行スクロールするだけのマクロです。
FF14がアクティブでもホットキーを設定すればホットキー動作ができます。
SEを鳴らすことも出来ます(wavのみ)

※イメージです。


マクロのセキュリティ設定等のエクセルに関する操作を含め
全面的にサポートなどは行いません。
エクセルのバージョンによってはボタン配置・形状が崩れることもあるかもしれませんが非サポートです(自分で直してください)。

ダウンロード





スカラバホールがユイ開発の邪魔をする
どうもシュクレールです。

バグは永久に不滅です。

監視機能がまたまた悪さをしました。

本スクリプトとは別にエンドフラグチェックをしているのですが、
これが1分毎の固定値で行なっています。

メインスクリプトがエンドフラグ(処理終了時刻)をtime.logファイルに書き込んで、それを監視機能が読み込んで現在時刻との差分を求めて、処理が正常に終わっていたのかをみているのですが・・・。

メインスクリプトのランニング間隔は基本1分ですので、これは問題ないのですがー。
日曜日以外は1時間に1回(時刻補正のいみで)
日曜日でも18:00~23:59以外は1時間に1回
としているので、この時間に入ると、
1分ごとに動作していると勘違いしている監視機能が
「あれ?エンドフラグがおかしいぞ?スクリプトとまってね?」

とエラーをはいてくれちゃうのです。

ので、監視機能をこの時間帯は止めておくようにするか、
もしくはタイムアウトの恐れがないメインスクリプトの一番最初に
settimeoutで監視機能のトリガだけ引いとくとかすれば回避できるのかな。

理念的にはメインに組み込まず別動作にしておきたいんすけどね・・・。

まぁ、ホールに行きたくて作業をやらん恐れがあるってのが一番の敵やな。

あと今日アーティファクト装備の実装日ですが、
未実装Wikiと比べると性能落とされてるのね!!
ぜんぜんバグなくなってないじゃーん!!
どうもシュクレールです。

Gv前にユイをきどうしたら、
動作監視機能の所でバグ発生。

動作監視機能のフラグ更新時に書き込みができません。
ってことで、なんじゃろー。水曜日にはおきなかったのにー。

バグが起きた時も、何もステート変えてないときにいきなり発生。
わけがわからん。

でもまぁ、書き込みができないってことは、プログラムが悪いわけではなく、使用中とかそういう状態で開けないとか、ファイルが存在しないだろうなと推測。

ファイルチェックは初回時にやってるのでありえないとして・・・

ってことで、1/18のスクリプト見直ししてみる。

function maintask(){
var file = OpenFile(timelog);
var s = file.readLine();

var day = new Date();
var min = day.getMinutes();

if(min != s){
send(channel,"データ抜けしてそうだぬ?"):
}else{
//log("OK");
}
}

もう見事にファイル開きっぱなしでした\(^o^)/
そりゃ書き込みできんわ。

開いたら閉じましょうってことで、

file.close();

を最後に付け加えておしまいでした。

が、

毎回起きなかったバグなので、
なんでだろーと動作的に疑問をもってみたりもする。

水曜時点では動いてたし、Gv前もエラー発生したのが起動から10分後くらいだった。

まぁ、よくわからんですなぁ・・・

あと一番最後の書き込みが10:01分に発生するんですが、
settimeout→処理
としたお陰で弊害が。

setttimeoutの中で、01分にモニタ機能を勝手に落とすようにしてるのですが、
それが先にきいちゃって、最後の書き込みが行われなかった・・・。

まぁ、イージーミスですな。
ってことで、02分にして修正。

do~whileといい、
このへんの処理の順番逆にするといろいろとバグでやすいなぁと痛感。

ってことで、色々と週末アウトライン



土曜日
クロシェットのHPで予約完了。
118から120までタタチョでレベル上げ。慣れてくれば30分で600匹は全然いける。BB織りまぜて影肩ライドの発動率アップさせてみる。

日曜日
ET
居間に2万円のやすいテレビかってきた。あと電子レンジが壊れたのでそれも買い換えた。
GV
ニーズヘッグ前に寝る。ニーズヘッグに行く前は何故か眠くなる呪いがかかっているらしい・・・。
なんかもう一回飛ばして水曜日にしようかなとか思い始めてる・・・。

きょういくとして
月曜日夜→木曜日夜→日曜日夜→水曜日夜→・・・
まぁ、また今週も木曜日夜ってだけの話しですね。

HOME  → NEXT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
新生FF14
TERA紋章しみゅ
ROサポートツール
タイムライン
RSSボットが記事更新をつぶやくのがほとんどっス…
ROキャラクター紹介


TERAキャラ紹介

シュクレール(バサ)



syuzo(エレ)



サケマス(アチャ)


その他サブ

ウリエルキゥィス(スレLv54)

Vermillion(サラLv56)

パズドラ

157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
09 2018/10 11
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
ツリーカテゴリ
ブログ内検索
最新コメント
[04/30 のな]
[03/22 NEIN]
[03/22 NEIN]
[10/31 イロイ]
[05/02 NONAME]
Copyright (C) 2018 のーびす監察日記 All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]