diff --git a/Browser/FormBrowser.cs b/Browser/FormBrowser.cs index 2fd198f33..b91617c58 100644 --- a/Browser/FormBrowser.cs +++ b/Browser/FormBrowser.cs @@ -397,20 +397,12 @@ private void SaveScreenShot( string path, System.Drawing.Imaging.ImageFormat for } try { - - var document = wb.Document.DomDocument as HTMLDocument; - if ( document == null ) { - throw new InvalidOperationException( "Document が取得できませんでした。" ); - } - - IViewObject viewobj = null; //int width = 0, height = 0; + if ( wb.Document.Url.AbsolutePath.Contains( ".swf?" ) ) { - if ( document.url.Contains( ".swf?" ) ) { - - viewobj = document.getElementsByTagName( "embed" ).item( 0, 0 ) as IViewObject; + viewobj = wb.Document.GetElementsByTagName( "embed" )[0].DomElement as IViewObject; if ( viewobj == null ) { throw new InvalidOperationException( "embed 要素の取得に失敗しました。" ); } diff --git a/ElectronicObserver/Assets.zip b/ElectronicObserver/Assets.zip index 12094ddc6..10dcad82d 100644 Binary files a/ElectronicObserver/Assets.zip and b/ElectronicObserver/Assets.zip differ diff --git a/ElectronicObserver/Assets/Equipment/FlyingBoat.png b/ElectronicObserver/Assets/Equipment/FlyingBoat.png new file mode 100644 index 000000000..fec67ad31 Binary files /dev/null and b/ElectronicObserver/Assets/Equipment/FlyingBoat.png differ diff --git a/ElectronicObserver/Data/Battle/BattleManager.cs b/ElectronicObserver/Data/Battle/BattleManager.cs index 9be518aa2..0df357469 100644 --- a/ElectronicObserver/Data/Battle/BattleManager.cs +++ b/ElectronicObserver/Data/Battle/BattleManager.cs @@ -50,7 +50,7 @@ public enum BattleModes { /// 戦闘種別 /// public BattleModes BattleMode { get; private set; } - + public override void LoadFromResponse( string apiname, dynamic data ) { @@ -209,7 +209,7 @@ private void BattleFinished() { if ( dropID == -1 && ( KCDatabase.Instance.Admiral.MaxShipCount - KCDatabase.Instance.Ships.Count <= 0 || - KCDatabase.Instance.Admiral.MaxEquipmentCount - KCDatabase.Instance.Equipments.Count <= 3 ) ) { + KCDatabase.Instance.Admiral.MaxEquipmentCount - KCDatabase.Instance.Equipments.Count <= 0 ) ) { dropID = -2; } diff --git a/ElectronicObserver/Data/CompassData.cs b/ElectronicObserver/Data/CompassData.cs index 7ce3edebb..9cacccf78 100644 --- a/ElectronicObserver/Data/CompassData.cs +++ b/ElectronicObserver/Data/CompassData.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -193,6 +194,18 @@ public bool WhirlpoolRadarFlag { } } + /// + /// 能動分岐の選択肢 + /// + public ReadOnlyCollection RouteChoices { + get { + if ( RawData.api_select_route() ) { + return Array.AsReadOnly( (int[])RawData.api_select_route.api_select_cells ); + } else { + return null; + } + } + } } diff --git a/ElectronicObserver/Data/FleetManager.cs b/ElectronicObserver/Data/FleetManager.cs index 0dae61987..e0ef7a53a 100644 --- a/ElectronicObserver/Data/FleetManager.cs +++ b/ElectronicObserver/Data/FleetManager.cs @@ -89,12 +89,13 @@ public override void LoadFromRequest( string apiname, Dictionary } break; - case "api_req_map/start": - if ( CombinedFlag != 0 ) { - Fleets[2].IsInSortie = true; - } - Fleets[int.Parse( data["api_deck_id"] )].IsInSortie = true; - goto default; + case "api_req_map/start": { + int fleetID = int.Parse( data["api_deck_id"] ); + if ( CombinedFlag != 0 && fleetID == 1 ) { + Fleets[2].IsInSortie = true; + } + Fleets[fleetID].IsInSortie = true; + } goto default; default: foreach ( int i in Fleets.Keys ) diff --git a/ElectronicObserver/Other/Information/apilist.txt b/ElectronicObserver/Other/Information/apilist.txt index b55f3e79f..c915722ca 100644 --- a/ElectronicObserver/Other/Information/apilist.txt +++ b/ElectronicObserver/Other/Information/apilist.txt @@ -116,6 +116,7 @@ api_start2 :艦娘・装備固有データその他 14=高射装置 15=対地装備 16=水上艦要員 + 17=大型飛行艇 [1]:図鑑表示 1=Primary Armament @@ -147,6 +148,7 @@ api_start2 :艦娘・装備固有データその他 30=Damage Control 31=Engine Upgrades 32=Depth Charge + 33=Flying Boat 1=主砲 2=副砲 @@ -177,6 +179,7 @@ api_start2 :艦娘・装備固有データその他 30=応急修理要員 31=機関部強化 32=爆雷 + 33=大型飛行艇 [2]:カテゴリ (api_mst_slotitem_equiptype を参照) @@ -220,6 +223,7 @@ api_start2 :艦娘・装備固有データその他 38=大口径主砲(II) 39=水上艦要員 40=大型ソナー + 41=大型飛行艇 [3]:アイコンID 1=小口径主砲 @@ -254,6 +258,7 @@ api_start2 :艦娘・装備固有データその他 30=高射装置 31=対地装備 32=水上艦要員 + 33=大型飛行艇 api_taik :耐久(0) api_souk :装甲 diff --git a/ElectronicObserver/Other/Information/kcmemo.md b/ElectronicObserver/Other/Information/kcmemo.md index 0f9617674..1384b6744 100644 --- a/ElectronicObserver/Other/Information/kcmemo.md +++ b/ElectronicObserver/Other/Information/kcmemo.md @@ -112,9 +112,11 @@ R' = G' = B' = ( R + G + B ) / 3 - 応急修理女神 : HP = HPMax ( +燃料・弾薬全回復 ) #### 保有数による出撃時の制限 -- 艦船がドロップしない条件 -艦船空き == 0 or 装備空き <= 2 -- イベント海域出撃不可条件 +なお、「装備空き」は補正後の値(艦これクライアントの表示値)に従う。 + +* 艦船がドロップしない条件 +艦船空き == 0 or 装備空き <= 3 +* イベント海域出撃不可条件 艦船空き < 5 or 装備空き < 20 #### 攻撃種別 @@ -328,11 +330,18 @@ C敗北判定の 敵損害率 >= 50 は試験実装。 * E-4 : 1925 (旗艦HP350; 最低6回撃破) * E-5 : 3000 (旗艦HP500; 最低6回撃破) +#### '15 春イベントの海域ゲージHP +全て甲作戦のもの。 + +* E-1 : 440 (旗艦HP88; 最低5回撃破) +* E-2 : 1620 (旗艦HP270; 最低6回撃破) + #### 海域HPゲージ わずかでもダメージを与えないと正常な値にならない。 (ex. 初期は300/300でも、30ダメージ与えると2370/2400になる、など) と思ったが、最大HPが1000以上だと正しく取得できる? -'15冬イベ以前は初期値300、'15冬イベは9999 +'15冬イベ以前は初期値300、'15冬イベ以降は9999 +'15春イベでは難易度を選択した時点で決定される? #### 猫った時のAPIレスポンス 練習巡洋艦旗艦で開発すると落ちる不具合を利用したもの。(2015/02/08) @@ -341,14 +350,18 @@ C敗北判定の 敵損害率 >= 50 は試験実装。 * `api_result_msg` : "申し訳ありませんがブラウザを再起動し再ログインしてください。" #### 特殊な装備判定 -Bismarck dreiに対する魚雷装備・試製51cm連装砲の装備判定は、改装UIシステムの中で*例外的に決め打ち*されている。 +Bismarck dreiに対する魚雷装備・試製51cm連装砲といったものの装備判定は、改装UIシステムの中で*例外的に決め打ち*されている。 具体的には、 -* Bismarck drei : 魚雷 -* 大和(改), 武蔵(改), 長門改, 陸奥改 : 大口径主砲(II) +|対象艦|装備可能|装備不可能| +|:--|:--|:--| +|Bismarck drei|魚雷|| +|大和(改), 武蔵(改), 長門改, 陸奥改|大口径主砲(II)|| +|秋津洲|大型飛行艇|特殊潜航艇・上陸用舟艇・対地装備| +|秋津洲改|大型飛行艇・ソナー・航空要員|特殊潜航艇・上陸用舟艇| -が装備可能になるようになっている。 -(艦船IDが装備可能リストに含まれていた場合は*マスターデータの内容にかかわらず*装備可能にする、というコードになっている) +となっている。 +(艦船IDが特殊装備リストに含まれていた場合は*マスターデータの内容にかかわらず*装備可能・不可能にする、というコードになっている) つまりある意味では不正な装備ともいえる(?) ~~そのために新艦種を追加するのも面倒なのは分かるが、ちょっとこれはひどい気がする~~ @@ -425,20 +438,22 @@ Bismarck dreiに対する魚雷装備・試製51cm連装砲の装備判定は、 オンメンテ前のテーブルで確保してある「なし」領域を埋めるように実装される。 そのため、メンテ前の情報を保持した蔵が新規実装艦を持つ艦隊と演習しても落ちることはない。 -但しその際、当然ながらパラメータ及び処理は「なし」のデータに基づくため、以下のような現象が発生する。 +但しその際、当然ながら(表示上の)パラメータ及び処理は「なし」のデータに基づくため、以下のような現象が発生する。 * 艦種は駆逐艦、艦名は「なし」 * グラフィック自体は新規艦のものが表示される * 演習開始時のカットインでグラフィックが左上に大きくずれる * 速力が0のため(もちろん表示上のみだが)陸上基地扱い。当然バナーも「混乱」「損壊」といった表示になる +当然ではあるが、戦闘自体はサーバ側の演算によるので全く問題はない(潜水艦が駆逐艦扱いになって砲撃する、などといったことはない)。 + 具体的な「なし」のパラメータについては以下のとおりである。ほぼ0で埋められている。 |パラメータ|値| |:--|:--| |図鑑番号|0| -|艦名|なし| -|読み|なし| +|艦名|"なし"| +|読み|"なし"| |艦種|駆逐艦| |改装|不可| |耐久|0(戦闘時に与えられる)| @@ -458,3 +473,4 @@ Bismarck dreiに対する魚雷装備・試製51cm連装砲の装備判定は、 また、新規実装ボイスを持つ艦は、母港については再読み込みしなくても新しいボイスが再生される。 但し時報・放置ボイスまで適用されるかは未確認。データ上は未実装扱いのはずなので再生されない? + diff --git a/ElectronicObserver/Resource/ResourceManager.cs b/ElectronicObserver/Resource/ResourceManager.cs index 3ac446682..ca37d8c6c 100644 --- a/ElectronicObserver/Resource/ResourceManager.cs +++ b/ElectronicObserver/Resource/ResourceManager.cs @@ -152,6 +152,7 @@ public enum EquipmentContent { AADirector, RocketArtillery, PicketCrew, + FlyingBoat, Locked, Unknown, } @@ -332,6 +333,7 @@ private void LoadFromArchive( string path ) { LoadImageFromArchive( Equipments, archive, mstpath + @"Equipment/AADirector.png", "Equipment_AADirector" ); LoadImageFromArchive( Equipments, archive, mstpath + @"Equipment/RocketArtillery.png", "Equipment_RocketArtillery" ); LoadImageFromArchive( Equipments, archive, mstpath + @"Equipment/PicketCrew.png", "Equipment_PicketCrew" ); + LoadImageFromArchive( Equipments, archive, mstpath + @"Equipment/FlyingBoat.png", "Equipment_FlyingBoat" ); LoadImageFromArchive( Equipments, archive, mstpath + @"Equipment/Locked.png", "Equipment_Locked" ); LoadImageFromArchive( Equipments, archive, mstpath + @"Equipment/Unknown.png", "Equipment_Unknown" ); diff --git a/ElectronicObserver/Utility/Data/Calculator.cs b/ElectronicObserver/Utility/Data/Calculator.cs index e385fc269..50e70dc51 100644 --- a/ElectronicObserver/Utility/Data/Calculator.cs +++ b/ElectronicObserver/Utility/Data/Calculator.cs @@ -573,6 +573,39 @@ public static int GetAACutinKind( int shipID, int[] slot ) { return 0; } + + /// + /// 装備が艦載機であるかを取得します。 + /// + /// 装備ID。 + /// 偵察機(非攻撃機)を含めるか。 + public static bool IsAircraft( int equipmentID, bool containsRecon ) { + + var eq = KCDatabase.Instance.MasterEquipments[equipmentID]; + + if ( eq == null ) return false; + + switch ( eq.CategoryType ) { + case 6: //艦上戦闘機 + case 7: //艦上爆撃機 + case 8: //艦上攻撃機 + case 11: //水上爆撃機 + case 25: //オートジャイロ + case 26: //対潜哨戒機 + return true; + + case 9: //艦上偵察機 + case 10: //水上偵察機 + case 41: //大型飛行艇 + return containsRecon; + + default: + return false; + } + + } + + } diff --git a/ElectronicObserver/Utility/SoftwareInformation.cs b/ElectronicObserver/Utility/SoftwareInformation.cs index 2c1257202..94d4fa1ff 100644 --- a/ElectronicObserver/Utility/SoftwareInformation.cs +++ b/ElectronicObserver/Utility/SoftwareInformation.cs @@ -35,7 +35,7 @@ public static string SoftwareNameEnglish { /// public static string VersionJapanese { get { - return SoftwareNameJapanese + "一二型改"; + return SoftwareNameJapanese + "一二型改二"; } } @@ -44,7 +44,7 @@ public static string VersionJapanese { /// public static string VersionEnglish { get { - return "1.2.1"; + return "1.2.2"; } } @@ -54,7 +54,7 @@ public static string VersionEnglish { /// public static DateTime UpdateTime { get { - return DateTimeHelper.CSVStringToTime( "2015/04/27 22:00:00" ); + return DateTimeHelper.CSVStringToTime( "2015/04/29 20:00:00" ); } } diff --git a/ElectronicObserver/Window/Control/ShipStatusEquipment.cs b/ElectronicObserver/Window/Control/ShipStatusEquipment.cs index 415c94802..bb646ee87 100644 --- a/ElectronicObserver/Window/Control/ShipStatusEquipment.cs +++ b/ElectronicObserver/Window/Control/ShipStatusEquipment.cs @@ -10,6 +10,7 @@ using ElectronicObserver.Data; using System.Drawing.Design; using ElectronicObserver.Resource; +using ElectronicObserver.Utility.Data; namespace ElectronicObserver.Window.Control { @@ -354,31 +355,21 @@ private void ShipStatusEquipment_Paint( object sender, PaintEventArgs e ) { if ( slot.EquipmentID != -1 ) { - switch ( slot.Equipment.CategoryType ) { - case 6: //艦戦 - case 7: //艦爆 - case 8: //艦攻 - case 9: //艦偵 - case 10: //水偵 - case 11: //水爆 - case 25: //オートジャイロ - case 26: //対潜哨戒機 - - if ( slot.AircraftMax == 0 ) { - aircraftColor = AircraftColorDisabled; - } else if ( slot.AircraftCurrent == 0 ) { - aircraftColor = AircraftColorLost; - } else if ( slot.AircraftCurrent < slot.AircraftMax ) { - aircraftColor = AircraftColorDamaged; - } else { - aircraftColor = AircraftColorFull; - } - break; + if ( Calculator.IsAircraft( slot.EquipmentID, true ) ) { + + if ( slot.AircraftMax == 0 ) { + aircraftColor = AircraftColorDisabled; + } else if ( slot.AircraftCurrent == 0 ) { + aircraftColor = AircraftColorLost; + } else if ( slot.AircraftCurrent < slot.AircraftMax ) { + aircraftColor = AircraftColorDamaged; + } else { + aircraftColor = AircraftColorFull; + } - default: - if ( slot.AircraftMax == 0 ) - drawAircraftSlot = false; - break; + } else { + if ( slot.AircraftMax == 0 ) + drawAircraftSlot = false; } } else if ( slot.AircraftMax == 0 ) { diff --git a/ElectronicObserver/Window/FormCompass.cs b/ElectronicObserver/Window/FormCompass.cs index e490884c1..c2062794f 100644 --- a/ElectronicObserver/Window/FormCompass.cs +++ b/ElectronicObserver/Window/FormCompass.cs @@ -466,7 +466,21 @@ private void Updated( string apiname, dynamic data ) { break; case 6: //気のせいだった - TextEventDetail.Text = ""; + switch ( compass.EventKind ) { + + case 0: //気のせいだった + default: + TextEventDetail.Text = ""; + break; + case 1: //敵影を見ず + eventkind = "敵影を見ず"; + TextEventDetail.Text = ""; + break; + case 2: //能動分岐 + eventkind = "能動分岐"; + TextEventDetail.Text = string.Join( "/", compass.RouteChoices ); + break; + } break; case 7: //航空戦(連合艦隊) @@ -480,7 +494,6 @@ private void Updated( string apiname, dynamic data ) { default: - eventkind += "不明"; TextEventDetail.Text = ""; break; diff --git a/ElectronicObserver/Window/FormHeadquarters.cs b/ElectronicObserver/Window/FormHeadquarters.cs index 5412b034e..8eb46b120 100644 --- a/ElectronicObserver/Window/FormHeadquarters.cs +++ b/ElectronicObserver/Window/FormHeadquarters.cs @@ -169,7 +169,7 @@ void Updated( string apiname, dynamic data ) { ShipCount.BackColor = Color.Transparent; EquipmentCount.Text = string.Format( "{0}/{1}", db.Equipments.Count, db.Admiral.MaxEquipmentCount ); - if ( db.Equipments.Count > db.Admiral.MaxEquipmentCount - 20 ) + if ( db.Equipments.Count > db.Admiral.MaxEquipmentCount + 3 - 20 ) EquipmentCount.BackColor = Color.LightCoral; else EquipmentCount.BackColor = Color.Transparent; diff --git a/README.md b/README.md index 147129ac9..10bdde9ff 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ *このリンクの更新は遅れる可能性があります。最新版は[こちら](http://electronicobserver.blog.fc2.com/)で確認してください。* -[ver. 1.2.1 (2015/04/27)](http://bit.ly/1EcLMzu) +[ver. 1.2.2 (2015/04/29)](http://bit.ly/1Fx5xUQ) 更新内容・履歴は[こちら](https://github.com/andanteyk/ElectronicObserver/wiki/ChangeLog)で確認できます。