忍者ブログ
×

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

とんでもねぇバグがいたもんだ
どうもシュクレールです。

アウトプットの機能としては現在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日から受注開始だとおもったので忘れないように。
コミケで諦めた分です。
まぁ、これがあるから諦めたんですけどね。
PR
COMMENT
name
title
text
color   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
mail
URL
pass
secret
TRACKBACK
TrackbackURL:
PREV ←  HOME  → NEXT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
新生FF14
TERA紋章しみゅ
ROサポートツール
タイムライン
RSSボットが記事更新をつぶやくのがほとんどっス…
ROキャラクター紹介


TERAキャラ紹介

シュクレール(バサ)



syuzo(エレ)



サケマス(アチャ)


その他サブ

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

Vermillion(サラLv56)

パズドラ

157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
04 2024/05 06
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) 2024 のーびす監察日記 All Rights Reserved.
Photo by 戦場に猫 Template Design by kaie
忍者ブログ [PR]