忍者ブログ
×

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

水曜日はユイデバッグの日
どうもシュクレールです。

クロシェーット!!
昨日忘れてた。

というわけで昨日の話の続きっていう感じ。

function event::onChannetText(prefix,channel,text){
   setInterval(test,30000)
   setinterval(test,50000)
}

function test(){
   log("testpointA");
}

イベントトリガはONLoadでもonchanneltextでもどっちでもいいんすけど。

で、タイマーが1つしかなくてあとからのが上書きされるなら
5秒ごとにコンソールにログが吐き出されます。
最初のが有効なら3秒
タイマーが2つあってどっちもゆうこうになるなら
3,5,6,9,10,12,15・・・ってかんじになる。

2つあったばあい、そうなると、intervalで呼び出した崎の関数内にsetintervalを書きこむと多重かかって恐ろしいことに・・・。

でもってlogファイルについててきな。

まず書きこみ動作から

とりあえずグローバル変数の宣言。

var timelog = 'ファイルへの絶対パス';

function tracer(){

var tracerday = new Date();
var tracermin = tracerday.getMinutes();

var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
var objOutFile = objFileSys.OpenTextFile(timelog, 2);
objOutFile.WriteLine(tracermin);

objOutFile.Close();
objFileSys = null;
objOutFile = null;
}

でもって、ユイの通常タスクの最後に
tracer()関数に飛ばせばOK

で、ログ抜けを監視するスクリプト

起動時に02秒を取得するスクリプトがあるんですがー
setTimeout(sysmes,next-now)
※つまりメインタスクの起動を02秒に行うってこと
ここでついでに、
setTimeout(kansi,next-now+13000)
って宣言しとけば、15秒の時に監視機能が働くはずです。
で、時間補正を行ったらあとは定時通りに回るだけ!!

function kansi(){
   setinterval(maintask,60000)
}

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");
   }
}

ってかんじかなぁー
readlineはどうせ分の数字が1つはいってるだけだから全部読む必要はないだろうなといういめーじ。
これで動かんなら素直にwhile使うわ。

で、肝心要のlogファイルは
Limechatのfileフォルダに
time.log
とかいうテキストファイル(UTF-8)をおいとけばいいのだよ

まぁ、初期化の時にファイルチェック掛ける必要があるけどね・・・。

ふぅ。
PR
きのうの誤字がすごかった
どうもシュクレールです。

えーっとcnannelのnが1つ多くてそもそもおかしいってのがありましたので。


function event::onChannetText(prefix,channel,text){
   if(channel.match(/^#roomA$/)){
      send(roomB,prefix.nick+" "+text);
   }
   if(channel.match(/^#roomB$/)){
      send(roomA,prefix.nick+" "+text);
   }
}

やまびこすくりぷと。

たぶんこれで動きますね。

でもって本題

同盟狩りの裏でスクリプトを弄ってました。
まずは機能の宿題事項であったタイムアウト動作時のsetinterval()について次のようなスクリプトを組みました。

function event::onLoad(){
   setInterval(overflow,10000)
}

function overflow(){
   log("testpointA");
   for(var i=1;i>0;i++){
      
   }
}

これをついでなのでやまびこに追記することに。
*PCの動作がタイムアウトまでの5秒止まりますのでご注意を(Limechat)

内容的には10秒ごとにoverflow関数を呼び出して、無限ループで5秒でLimechatのランニング限界なのでタイムアウトさせます。
でさらに5秒後に再度呼ばれるので無限にこの無駄なスクリプトが走ります。

あれ、flowってこっちのでいいんだっけ?
ま、いいか。
プログラム的には文字列があってればおk。

スクリプトコンソールには

testpointA
・・・タムアウト
testpointA
・・・タイムアウト
testpointA
・・・タイムアウト

ってのがずっと続きます。

・・・・
・・・
・・


ってことで、意図したとおりに動いてくれましたね。

タイムアウトしてもsetintervalは生きたままなので、再度関数がコールされるようです。

ちなみにこの処理中にやまびこスクリプトの方も動かして見ましたが、チャント動きました。

ってことで、ユイに還元しようって感じです。

現状は

functionA()
処理
settimeout(functionA,60000)

ッテ感じで最後にsettimeoutを使っていたのですが、
今度からはsetintervalでいいんじゃないかなとかおもった。
あ、60000は実際は丸めてから変数で入れてますよ。

けど、あれ?
単に置き換えると、関数内部でその関数をセットすると、合わせ鏡のように何重にもよぶことになるのか・・・?あるいはタイマーがあって上書きされるのか??

ってことで、コール間隔の違うやつでおなじ関数を呼んでみれば、先なのかあとなのか、もしくは2つのタイマーでよばれるのかどっちが優先度高いのかがわかりますね。

まぁ、何重にもコールするようなら、
処理の前にsettimeout宣言しとけば、処理でタイムアウトしても問題ないかなとは思ったり。

宿題事項

でもって、やっぱデータ落ちの時の警告が必要かなーとも思ってます。

setintervalで監視用の関数1個つくろうかなとか。

作業用エクセルに書きこむときに前回書き込み時間を見て、+1分以上だったら「データ抜けしてるんじゃない?」と警告するといいような気もする。

でも、今はログファイルの「更新日時」をつかって書き込んでいるので、古いsavechatlogの時刻を書き込んじゃったりするとめんどくせーので回避処理をつくってあげる必要性が発生する。

もしくは、メイン処理の一番最後に、処理が終わったらという意味で最終書き込み時間を作業用エクセルのどっかの1セルつかって書いてあげてもいいなとか思う。

けど、エクセル立ち上がってなかったらどうすんのさ!って問題と
書き込み処理以外の(非GV時間)ときはタイムアウトしないとおもってんの?(恐らくしませんが)
っていういみで、やっぱ「すべての」処理ルートの最後に入れるべきかなと思うと、それはもう手は2つしか考えられません

・logファイルを1つつくってそこに書きこむようにする。
・監視用chに処理最後にキーワード(現在時刻から"分")を発言して、別functionでそのキーワードを解析する

前者は、
PID制御と同じっすね。やり方は後者のと同じっす。ただ作業領域がlogファイルかchかってことだけ。

後者は、
ユイが02秒時にうごくので(分切り替わりの境界線である00はこわいのでマージン儲けてる)、まぁ10秒とか15秒のときに、chの発言から抽出して、「同じ"分"」でなかったらデータ抜けがあるんでないの?ってことで。

あれ、でもlimechat的に発言時のイベントはトリガーにできても、あとから発言を探るってできたんだっけ・・・?
limechatのログファイル見に行くのは非効率だな。設定してあげないといけないし。ファイル名の形式がカスタムできるから探すのたるいし。
かといって発言をトリガにすると、そもそもタイムアウトしたときに動いて欲しいんだから本末転倒と言うか。

ってーともうlogファイルしかねーっすねー。
'`,、('∀`) '`,、

あれこれやりたいことが次々湧いてくるのはいいことだ。
スパゲッティ化は、趣味プログラムなので(゚ε゚)キニシナイ!!

あ、あとログアウトきのうがほしいなー。
完全にしゅみだけどー。
自分以外の人間がログアウトコマンドしても
「わたしをログアウトさせれるのはマスターだけですぅ><」
ってかえす。

あほくさwwwww

wwwwwwwwww

勘違いしたSの人間が出てきそうだ。

まぁ、Limechatはマクロ停止がスクリプトで書けるので、
つくりますがね!!
30分で600匹まわすのか・・・。
どうもシュクレールです。

クロシェーット!!
忘れてないよ!




閑話休題
やまびこのスクリプトっているかな?
IRCの上限が100人ってことらしので、
2つのチャンネルに分けて、お互いにやまびこで返せば、情報共有できるかなと。

function event::onChannnetText(prefix,channnel,text){
if(channnel.name == roomA){
send(roomB,text);
if(channnel.name == roomB){
send(roomA,text);
}

たぶんこれだけ。
まぁ、チャンネル名が違うとかあればエラー起こす可能性もあるけどね。
動かないなら.nameを.matchでチャンネル名のマッチング取るようにすれば良い。

これを両方に入っている人が有効にすれば、発言がやまびこのように返るはず。

さて、ちょっと昨日はスクリプトがうまく動かんでした。
なんか途中でタイムアウトしていたようです。
エラーログがそれだけだったので、おそらく、とても重かったので処理がROに持ってかれて、タイムアウト時間制限内に処理が終われなかったのかなと。

エラーが出た時のファイルを使って再現試みましたが、出なかったですし。

とはいえ、なにか監視機能が欲しいなぁと思った次第。
完全に別スクリプトにして、監視用のチャンネルをつくって、ユイに1分ごとに発言させて、
発言が2分間なかったら動作停止状態と判断させるとか?
んーでもメインPCで片方のスクリプトがタイムアウトしたらもう片方のスクリプトも止まるのかなぁとか思ったり。
それなら2PC目にIRC入って貰う必要があるなぁとか。でもそれだとIPの関係で入れたっけとも思ったり。それなら第三者にお願いしないとなぁとか。
そもそも、savechatを2PC目にやらせているなら、処理も含めて2PC目にやらせればいいやんとも思ったり。そうすればPC動作に左右されにくい。
でもそうすると作業用エクセルがみにくくなるかなーとか。
そういったスクリプトを2PCに分割するのもなぁとか。
エクセル見たいときにsavechatとの切り替えを2PCめでやるのもたるいなぁとか。

まぁ、なんかいろいろ思ったりするのですわ。

とりあえず・・・
・故意にtimeoutするプログラムつくって、setinterval()で回してみる。
・2PC目でIRC入れるか確認する。
これが可能であれば、2PC目での監視ができそう。
メインプログラムではsetintervalではまわさないかなー?
他のコマンドが無効になったままかもしれないので、これが回避できているかを確認する必要がある。

閑話休題ここまで



で、まぁ週末はRKでタタチョさんの攻略を行なっていました。
追加購入したのが
カホc 6.5M
ハンティングスピア 2M
オーク戦士c 1.5M
ソル盾 2M

というわけで12M

なんか1確するにはもっとマグマリンとかDセットとかタイガーフェイスとかドラコとかハンティングキャップとかが必要みたいです。
まぁ、軽く50Mくらいですな・・・。
そこまで出す気も無いので。

でもって、最初はお試しでいって見ました。
ベースで火付与してまったりお金稼ぎ気分で。
装備は買い揃えず、適当にいってみました。
WPを発動させて―。

そしたらおおよそ250匹/30min

アイテムは1h換算で700kくらい。

消費は
イス・ウルズ 6
アイス500
ハエ50
が主たるもの。

ルーンで80kくらい?
成功率と成功個数もあるからなんとも言えんけど。だいたいそんくらい?
アイス50kとして、消費が130k
まぁ、黒字なんですがー。
経験値が8M+報酬の期待値が12.5Mで時給換算しても40M/h
教範使っても60M/h

うーん・・・雑魚すぎる。

ってことで、アイテム全無視でいってみることに。

したら、450匹/30min

まだ足りないってことで、MBがなにげにディレイがウザイので、
装備を買い揃えてMBなしのIB2発を目指す。
BB入れるよりはIB2発のほうがおそらく安定するとも思ったので。

でもってアイテム全無視で
550匹/30min

おしい。

ってことで、ハエの搭載量を上げて、もっと索敵時間を縮めることに。

600匹/28min

まぁ、なんかぎりぎりっぽい感じで達成。

消費は
ウルズ・イス6
アイス480×2
ハエ150×2
(15分で一度補給に戻る)

総消費が30分で180kくらい?

まぁ、よゆうで赤字ですね。

罠がりの2倍位の消費っすか・・・。

でもって経験値が
600匹なので24M+報酬30M
108M/hで教範で1.5倍

まぁ、こんなもんか?
報酬の分がでかいので1確にしても大きくは上がらないと思うなー。追加で報酬1回分回せるのが増えて+54Mくらい?
それに50Mだす?
ライド+影肩でSPもたせてる部分もあるので、
SP剤も必要になってくるだろうし、
消費は増えそう。
あるいはアイテム拾う時間を1確で確保とか?
20分サイクルでベース戻って付与更新するのか?とか
黒字だとしても、50M回収するのに結構時間かかるなーとか。

同盟かりで大きく稼ぐので、教範で150Mもでればいいんでないの?って感じ。
むしろ狩りしないほうがいいんでないすk

カゲキニタノシイ
どうもシュクレールです。

クロシェーット!!
忘れないように毎日叫びたいと思います。

アムドライバーラグナの元ネタであるゲットライドアムドライバーがニコニコで配信されているという情報を友人から聞きました。

現在12話ってもう結構前やん!!

何はともあれ懐かしい気持ちになりながらすこし見ました。

ラグナのあの口調のウザさが逆に懐かしい反面、
荒んだ今なら突っ込まざるをえない。

子供の頃なら素直に楽しく見てたんでしょうがね。
っていっても当時大学生でしたがな。

あとCMもニコニコで上がっていたので、当時のあのアホCMを改めて見て、
やっぱ作者は天才だと思った次第です。

きょうはノンカテなのでなんか雑句把覧にかいていきますよー。




TERAの鯖統合のはなしがメールできていました。
噂にはなっていましたが。
最初しかやらなかったんですが、
ブログとかみてるとエリーンの装備がすてきすぎてまたやりたくなってくる。
RO以降で浮気したゲームって全部コミュニティに属すること避けてたから、けっこうすぐROに復帰もしてたけど、TERAはコミュニティ属さないとやってらんないよなーとはおもう。




エースコンバット3Dの発売日が昨日だということを知った。
ACのtwitterで体験版配信っていってたからまだ1ヶ月くらい先かなと思ってたらはやすぎじゃないですかー!




ガンガンのうみねこの本が「あれーこれかったっけかなー」とおもって早一年。表紙もにてるしなー。
いい加減に通販で残りの本集めたら1万くらいになってた。
でも買うんだ。




戯れ言シリーズの零崎双識の人間試験がとてもよかった。
つか戯言シリーズは殺し名と呪い名で広げるこのやり方はとてもいいと思う。




今日は軽めに。

最近ユイ関連で長文多かったからな・・・。
とんでもねぇバグがいたもんだ
どうもシュクレールです。

アウトプットの機能としては現在3つの機能があります。

1.注目ギルトおよび自ギルドの落城監視(1分サイクル)
2.注目ギルドの現在の取得砦のリストアップ(コマンド)
3.不落砦のリストアップ(コマンド)New!!

前回のバグ修正でnull抜けしたときにカウンタを1つ戻すっていうのをやったのですが、
まずこれが悪さをした。

簡略しますが以下のようなテーブルの時に

timeV1V2
8:03:00  
8:02:00 A


最新取得ギルドと時刻を得る関数を回したときに、
V1についてはギルド=null、時刻=8:02:00がはいるのですが
V2についてギルド=A、時刻=8:03:00がはいってしまっているのです。

ようは、全部に対して時刻カウンタを1つ戻してしまっていたんスね。

これについては、null抜けした時だけカウンタを1つ戻すという処理で解決

無事に解決。

で、問題は機能2と3の方

双方とも「書き込み済み」のエクセルに対して読みだす処理を行います。

まっさらな何もデータのないエクセルに対して読み込みを掛けたときには回避行動が取れるようにプログラムしています。
具体的には、時刻セルを覗いてnullの場合には「これデータ無いよ」って返します。

が、

以下のような状況が起こりうるのです

timeV1V2
19:58:00  
   


例えばGV前の19時58分とかにモニタ機能をONにしてデータ収拾に備えます。
2PC目も立てて、savechatログがALT+番号に登録されているのを実際にセーブしてみて確認してみます。

で、まっさらなエクセルに対してモニタ機能の命令にしたがって、その最新のsavechatログファイルを読み込んで書きこもうとします。
しかし、当然ながら砦の情報は含まれていないログファイルなので、V1~N5までのすべての砦にはnullが書きこまれ、時刻19:58:00が時刻セルに書きこまれます。

すると読み込み処理の中で次のようなことが起こります。

時刻セルにはデータが書き込まれているので「何かしらデータは入っているな」と判断し、処理をそのまま進めます。

そのなかで当然null抜けするのですが、この時のカウンタの戻り値を間違って2にしていたので1行目のtimeという文字列をいれてしまっていたので、処理でやっぱり躓いたってのがありました。

まぁ、バグ処理がうまく行ってなかったってのもあるんですけどね。

これ以降はカウンタ戻しても時刻が入っているので正常に処理が行われるので、本当にこの時刻が1つはいっている状態でnull抜けすると陥るという局所的なバグでした。

あと細かいバグを処理

・機能2、3のときにエクセルチェック行なっているんですが、そこでエクセルが立ち上がっていないときにエラー処理を行なっているんですが、それでも不落砦と注目ギルドの処理に入ってしまうってのがあったので、フラグ立てて、エラー処理が実行されたときは処理に入らないようにしました。

・機能2、3のときにデータがないときもエラーを出すようにしているんですが、結局処理に入ってしまうので、同じようにフラグを立てて処理に入らないようにしました。




というわけで新しく実装した「不落砦のリストアップ」機能についてすこし。

いつだかの記事で結構処理がメンドクサイって書きましたが、思ったよりは楽に出来ました。
(バグ取りと被ったのでなんか一瞬迷路に入り込みましたが・・・)

機能1~3はすべて通常処理関数をつくってそれを用いています。
その関数で以下のような情報が返ってきます。

outputarray[30]:全砦の現在の城主(null抜けした際はNO_INFOが返ってくる)
timearray[30]:現在の城主が落城させた時刻(24h表記)
disptime[30]:現在の城主が落城させた時刻と現在の時刻の差(分表記)
flagnavi[30]:最新ログで自ギルドが落城させたらフラグが立つ
checktarget[30]:最新ログで注目ギルドが落城させたらフラグが立つ

機能1については、flagnaviとchecktargetのフラグを見て、配列の番号が0ならV1、1ならV2と言った風に読み替えてsendでチャンネルに送信しています。

機能2についてはoutputarrayと注目ギルドをifで比較して、trueなら、同じく配列の番号から読み替えてsendでチャンネルに送信しています。あわせてdisptimeもくっつけることによって、何分前にその砦を取得したのかも表示させています。

機能3については
8時2分から何分経過しているのかをまず取得します。
それとdisptimeを比較して、disptimeが大きい場合に、不落と判断します。
(SEが開始から2分で落ちないという信頼のもとの機能)
この機能を使うために以下の制限を設けました。
outputarrayにNO_INFOがあった場合は開始時の一斉ログが取得出来なかったと判断しこの機能は使えませんと警告。
また、8時2分からの経過値がマイナス(つまり8時2分より前でこの機能をコールした場合)のときに同じくこの機能はまだ使えませんと警告。
おそらくこれで行数を削減できたと思われます。

バグ取りに追われて、20時頃からこの機能をつくり始めたのに、終わったのが23時。
ニーズヘッグに行かなきゃと思いながらも眠すぎて仮眠してそのまま。
いやまぁ仮眠で済むとは思ってなかったのですけどね。

今夜ニーズヘッグに行って、週末はGv後の24時頃に行くハメになるかなぁ・・・。

あ、私的メモ
クロシェットの通販が20日から受注開始だとおもったので忘れないように。
コミケで諦めた分です。
まぁ、これがあるから諦めたんですけどね。
PREV ←  HOME  → NEXT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
新生FF14
TERA紋章しみゅ
ROサポートツール
タイムライン
RSSボットが記事更新をつぶやくのがほとんどっス…
ROキャラクター紹介


TERAキャラ紹介

シュクレール(バサ)



syuzo(エレ)



サケマス(アチャ)


その他サブ

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

Vermillion(サラLv56)

パズドラ

157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
10 2024/11 12
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
ツリーカテゴリ
ブログ内検索
最新コメント
[04/30 のな]
[03/22 NEIN]
[03/22 NEIN]
[10/31 イロイ]
[05/02 NONAME]
Copyright (C) 2024 のーびす監察日記 All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]