├── img ├── Sample.png ├── Settings.png ├── Dependency.png └── AllianceSample.png ├── Resources └── jobimg │ ├── ACN.png │ ├── ALC.png │ ├── ARC.png │ ├── ARM.png │ ├── BLM.png │ ├── BOT.png │ ├── BRD.png │ ├── BSM.png │ ├── Bard.png │ ├── CNJ.png │ ├── CPT.png │ ├── CUL.png │ ├── DRG.png │ ├── FSH.png │ ├── GLD.png │ ├── GSM.png │ ├── LNC.png │ ├── LTW.png │ ├── MIN.png │ ├── MNK.png │ ├── MRD.png │ ├── Monk.png │ ├── Ninja.png │ ├── PGL.png │ ├── PLD.png │ ├── Rogue.png │ ├── SCH.png │ ├── SMN.png │ ├── THM.png │ ├── WAR.png │ ├── WHM.png │ ├── WVR.png │ ├── Archer.png │ ├── Dragoon.png │ ├── Lancer.png │ ├── Paladin.png │ ├── Scholar.png │ ├── Warrior.png │ ├── noimage.png │ ├── Arcanist.png │ ├── Archer_off.png │ ├── Bard_off.png │ ├── BlackMage.png │ ├── Conjurer.png │ ├── DarkKnight.png │ ├── Gladiator.png │ ├── Lancer_off.png │ ├── Machinist.png │ ├── Marauder.png │ ├── Monk_off.png │ ├── Ninja_off.png │ ├── Pugilist.png │ ├── Rogue_off.png │ ├── Summoner.png │ ├── WhiteMage.png │ ├── Arcanist_off.png │ ├── Astrologian.png │ ├── Conjurer_off.png │ ├── Dragoon_off.png │ ├── Marauder_off.png │ ├── Paladin_off.png │ ├── Pugilist_off.png │ ├── Scholar_off.png │ ├── Summoner_off.png │ ├── Thaumaturge.png │ ├── Warrior_off.png │ ├── Astrologian_off.png │ ├── BlackMage_off.png │ ├── DarkKnight_off.png │ ├── Gladiator_off.png │ ├── Machinist_off.png │ ├── Thaumaturge_off.png │ └── WhiteMage_off.png ├── src ├── ACT.TPMonitor │ ├── Resources │ │ ├── pirulen rg.ttf │ │ └── army's_paeon.png │ ├── lib │ │ ├── DotNetZip │ │ │ ├── Ionic.Zip.dll │ │ │ └── License.txt │ │ └── Json.NET │ │ │ ├── Newtonsoft.Json.dll │ │ │ └── License.txt │ ├── Widget.cs │ ├── packages.config │ ├── PartyMember.cs │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Enums.cs │ ├── TPViewer.Designer.cs │ ├── GitHub.cs │ ├── AllianceStyleViewer.Designer.cs │ ├── AllianceStyleViewer.cs │ ├── ACT.TPMonitor.csproj │ ├── TPViewer.resx │ ├── FFXIVPluginHelper.cs │ ├── TPViewer.cs │ ├── AutoUpdater.cs │ ├── Util.cs │ └── TPMonitorController.cs ├── Packages.dgml └── ACT.TPMonitor.sln ├── version_info.xml ├── LICENSE ├── .gitignore └── README.md /img/Sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/img/Sample.png -------------------------------------------------------------------------------- /img/Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/img/Settings.png -------------------------------------------------------------------------------- /img/Dependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/img/Dependency.png -------------------------------------------------------------------------------- /img/AllianceSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/img/AllianceSample.png -------------------------------------------------------------------------------- /Resources/jobimg/ACN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/ACN.png -------------------------------------------------------------------------------- /Resources/jobimg/ALC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/ALC.png -------------------------------------------------------------------------------- /Resources/jobimg/ARC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/ARC.png -------------------------------------------------------------------------------- /Resources/jobimg/ARM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/ARM.png -------------------------------------------------------------------------------- /Resources/jobimg/BLM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/BLM.png -------------------------------------------------------------------------------- /Resources/jobimg/BOT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/BOT.png -------------------------------------------------------------------------------- /Resources/jobimg/BRD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/BRD.png -------------------------------------------------------------------------------- /Resources/jobimg/BSM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/BSM.png -------------------------------------------------------------------------------- /Resources/jobimg/Bard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Bard.png -------------------------------------------------------------------------------- /Resources/jobimg/CNJ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/CNJ.png -------------------------------------------------------------------------------- /Resources/jobimg/CPT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/CPT.png -------------------------------------------------------------------------------- /Resources/jobimg/CUL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/CUL.png -------------------------------------------------------------------------------- /Resources/jobimg/DRG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/DRG.png -------------------------------------------------------------------------------- /Resources/jobimg/FSH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/FSH.png -------------------------------------------------------------------------------- /Resources/jobimg/GLD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/GLD.png -------------------------------------------------------------------------------- /Resources/jobimg/GSM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/GSM.png -------------------------------------------------------------------------------- /Resources/jobimg/LNC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/LNC.png -------------------------------------------------------------------------------- /Resources/jobimg/LTW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/LTW.png -------------------------------------------------------------------------------- /Resources/jobimg/MIN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/MIN.png -------------------------------------------------------------------------------- /Resources/jobimg/MNK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/MNK.png -------------------------------------------------------------------------------- /Resources/jobimg/MRD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/MRD.png -------------------------------------------------------------------------------- /Resources/jobimg/Monk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Monk.png -------------------------------------------------------------------------------- /Resources/jobimg/Ninja.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Ninja.png -------------------------------------------------------------------------------- /Resources/jobimg/PGL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/PGL.png -------------------------------------------------------------------------------- /Resources/jobimg/PLD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/PLD.png -------------------------------------------------------------------------------- /Resources/jobimg/Rogue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Rogue.png -------------------------------------------------------------------------------- /Resources/jobimg/SCH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/SCH.png -------------------------------------------------------------------------------- /Resources/jobimg/SMN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/SMN.png -------------------------------------------------------------------------------- /Resources/jobimg/THM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/THM.png -------------------------------------------------------------------------------- /Resources/jobimg/WAR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/WAR.png -------------------------------------------------------------------------------- /Resources/jobimg/WHM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/WHM.png -------------------------------------------------------------------------------- /Resources/jobimg/WVR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/WVR.png -------------------------------------------------------------------------------- /Resources/jobimg/Archer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Archer.png -------------------------------------------------------------------------------- /Resources/jobimg/Dragoon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Dragoon.png -------------------------------------------------------------------------------- /Resources/jobimg/Lancer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Lancer.png -------------------------------------------------------------------------------- /Resources/jobimg/Paladin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Paladin.png -------------------------------------------------------------------------------- /Resources/jobimg/Scholar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Scholar.png -------------------------------------------------------------------------------- /Resources/jobimg/Warrior.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Warrior.png -------------------------------------------------------------------------------- /Resources/jobimg/noimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/noimage.png -------------------------------------------------------------------------------- /Resources/jobimg/Arcanist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Arcanist.png -------------------------------------------------------------------------------- /Resources/jobimg/Archer_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Archer_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Bard_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Bard_off.png -------------------------------------------------------------------------------- /Resources/jobimg/BlackMage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/BlackMage.png -------------------------------------------------------------------------------- /Resources/jobimg/Conjurer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Conjurer.png -------------------------------------------------------------------------------- /Resources/jobimg/DarkKnight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/DarkKnight.png -------------------------------------------------------------------------------- /Resources/jobimg/Gladiator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Gladiator.png -------------------------------------------------------------------------------- /Resources/jobimg/Lancer_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Lancer_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Machinist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Machinist.png -------------------------------------------------------------------------------- /Resources/jobimg/Marauder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Marauder.png -------------------------------------------------------------------------------- /Resources/jobimg/Monk_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Monk_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Ninja_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Ninja_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Pugilist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Pugilist.png -------------------------------------------------------------------------------- /Resources/jobimg/Rogue_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Rogue_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Summoner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Summoner.png -------------------------------------------------------------------------------- /Resources/jobimg/WhiteMage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/WhiteMage.png -------------------------------------------------------------------------------- /Resources/jobimg/Arcanist_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Arcanist_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Astrologian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Astrologian.png -------------------------------------------------------------------------------- /Resources/jobimg/Conjurer_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Conjurer_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Dragoon_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Dragoon_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Marauder_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Marauder_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Paladin_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Paladin_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Pugilist_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Pugilist_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Scholar_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Scholar_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Summoner_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Summoner_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Thaumaturge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Thaumaturge.png -------------------------------------------------------------------------------- /Resources/jobimg/Warrior_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Warrior_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Astrologian_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Astrologian_off.png -------------------------------------------------------------------------------- /Resources/jobimg/BlackMage_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/BlackMage_off.png -------------------------------------------------------------------------------- /Resources/jobimg/DarkKnight_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/DarkKnight_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Gladiator_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Gladiator_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Machinist_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Machinist_off.png -------------------------------------------------------------------------------- /Resources/jobimg/Thaumaturge_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/Thaumaturge_off.png -------------------------------------------------------------------------------- /Resources/jobimg/WhiteMage_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/Resources/jobimg/WhiteMage_off.png -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Resources/pirulen rg.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/src/ACT.TPMonitor/Resources/pirulen rg.ttf -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Resources/army's_paeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/src/ACT.TPMonitor/Resources/army's_paeon.png -------------------------------------------------------------------------------- /src/ACT.TPMonitor/lib/DotNetZip/Ionic.Zip.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/src/ACT.TPMonitor/lib/DotNetZip/Ionic.Zip.dll -------------------------------------------------------------------------------- /src/ACT.TPMonitor/lib/Json.NET/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GB19xx/ACT.TPMonitor/HEAD/src/ACT.TPMonitor/lib/Json.NET/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Widget.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | 3 | namespace ACT.TPMonitor 4 | { 5 | public class Widget 6 | { 7 | public Rectangle Rect { get; set; } 8 | public float Scale { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /version_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1.5.1.0 4 | 5 | 6 | - 更新チェックから、自動ダウンロードおよび適用に改善 7 | - Improve to apply after an automatic download. 8 | 9 | 10 | https://github.com/GB19xx/ACT.TPMonitor/releases 11 | 12 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/PartyMember.cs: -------------------------------------------------------------------------------- 1 | namespace ACT.TPMonitor 2 | { 3 | public class PartyMember 4 | { 5 | public JOB Job { get; set; } 6 | public string Name { get; set; } 7 | public int TP { get; set; } 8 | 9 | public PartyMember() 10 | { 11 | this.Job = JOB.Unknown; 12 | this.Name = ""; 13 | this.TP = 0; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Packages.dgml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/lib/Json.NET/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2007 James Newton-King 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 6 | // アセンブリに関連付けられている情報を変更するには、 7 | // これらの属性値を変更してください。 8 | [assembly: AssemblyTitle("ACT.TPMonitor")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ACT.TPMonitor")] 13 | [assembly: AssemblyCopyright("Copyright © GB 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから 18 | // 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 19 | // その型の ComVisible 属性を true に設定してください。 20 | [assembly: ComVisible(false)] 21 | 22 | // 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です 23 | [assembly: Guid("68bb2915-2ad5-41bc-b913-9e3fb6c907e9")] 24 | 25 | // アセンブリのバージョン情報は、以下の 4 つの値で構成されています: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 33 | // 既定値にすることができます: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.5.1.5")] 36 | [assembly: AssemblyFileVersion("1.5.1.5")] 37 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Enums.cs: -------------------------------------------------------------------------------- 1 | namespace ACT.TPMonitor 2 | { 3 | public enum Language : int 4 | { 5 | Japanese = 0, 6 | English, 7 | German, 8 | French 9 | } 10 | 11 | public enum TYPE : byte 12 | { 13 | Player = 0x01, 14 | Mob = 0x02, 15 | NPC = 0x03, 16 | Aetheryte = 0x05, 17 | Gathering = 0x06, 18 | Minion = 0x09 19 | } 20 | 21 | public enum JOB : byte 22 | { 23 | Unknown = 0x0, 24 | GLD = 0x1, 25 | PGL = 0x2, 26 | MRD = 0x3, 27 | LNC = 0x4, 28 | ARC = 0x5, 29 | CNJ = 0x6, 30 | THM = 0x7, 31 | CPT = 0x8, 32 | BSM = 0x9, 33 | ARM = 0xA, 34 | GSM = 0xB, 35 | LTW = 0xC, 36 | WVR = 0xD, 37 | ALC = 0xE, 38 | CUL = 0xF, 39 | MIN = 0x10, 40 | BOT = 0x11, 41 | FSH = 0x12, 42 | PLD = 0x13, 43 | MNK = 0x14, 44 | WAR = 0x15, 45 | DRG = 0x16, 46 | BRD = 0x17, 47 | WHM = 0x18, 48 | BLM = 0x19, 49 | ACN = 0x1A, 50 | SMN = 0x1B, 51 | SCH = 0x1C, 52 | ROG = 0x1D, 53 | NIN = 0x1E, 54 | MCH = 0x1F, 55 | DRK = 0x20, 56 | AST = 0x21 57 | } 58 | 59 | public enum Style 60 | { 61 | Normal, 62 | Alliance 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014, GB19xx 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of the {organization} nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /src/ACT.TPMonitor.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ACT.TPMonitor", "ACT.TPMonitor\ACT.TPMonitor.csproj", "{C05597C0-4033-476B-AE43-1D5559BBC86E}" 5 | EndProject 6 | Global 7 | GlobalSection(TestCaseManagementSettings) = postSolution 8 | CategoryFile = ACT.TPMonitor.vsmdi 9 | EndGlobalSection 10 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 11 | Debug|Any CPU = Debug|Any CPU 12 | Debug|Mixed Platforms = Debug|Mixed Platforms 13 | Debug|x86 = Debug|x86 14 | Release|Any CPU = Release|Any CPU 15 | Release|Mixed Platforms = Release|Mixed Platforms 16 | Release|x86 = Release|x86 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 20 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Debug|Any CPU.Build.0 = Debug|Any CPU 21 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU 22 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU 23 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Debug|x86.ActiveCfg = Debug|Any CPU 24 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU 27 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Release|Mixed Platforms.Build.0 = Release|Any CPU 28 | {C05597C0-4033-476B-AE43-1D5559BBC86E}.Release|x86.ActiveCfg = Release|Any CPU 29 | EndGlobalSection 30 | GlobalSection(SolutionProperties) = preSolution 31 | HideSolutionNode = FALSE 32 | EndGlobalSection 33 | EndGlobal 34 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/TPViewer.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ACT.TPMonitor 2 | { 3 | partial class TPViewer 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.SuspendLayout(); 32 | // 33 | // TPViewer 34 | // 35 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 36 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 37 | this.ClientSize = new System.Drawing.Size(284, 262); 38 | this.Location = new System.Drawing.Point(100, 200); 39 | this.Name = "TPViewer"; 40 | this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; 41 | this.Text = "TPViewer"; 42 | this.TransparencyKey = System.Drawing.Color.Magenta; 43 | this.ResumeLayout(false); 44 | 45 | } 46 | 47 | #endregion 48 | 49 | 50 | 51 | } 52 | } -------------------------------------------------------------------------------- /src/ACT.TPMonitor/lib/DotNetZip/License.txt: -------------------------------------------------------------------------------- 1 | Microsoft Public License (Ms-PL) 2 | 3 | This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 4 | 5 | 1. Definitions 6 | 7 | The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. 8 | 9 | A "contribution" is the original software, or any additions or changes to the software. 10 | 11 | A "contributor" is any person that distributes its contribution under this license. 12 | 13 | "Licensed patents" are a contributor's patent claims that read directly on its contribution. 14 | 15 | 2. Grant of Rights 16 | 17 | (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. 18 | 19 | (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 20 | 21 | 3. Conditions and Limitations 22 | 23 | (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. 24 | 25 | (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. 26 | 27 | (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. 28 | 29 | (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. 30 | 31 | (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | [Dd]ebug/ 11 | [Dd]ebugPublic/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | bld/ 16 | [Bb]in/ 17 | [Oo]bj/ 18 | 19 | # MSTest test Results 20 | [Tt]est[Rr]esult*/ 21 | [Bb]uild[Ll]og.* 22 | 23 | #NUNIT 24 | *.VisualState.xml 25 | TestResult.xml 26 | 27 | # Build Results of an ATL Project 28 | [Dd]ebugPS/ 29 | [Rr]eleasePS/ 30 | dlldata.c 31 | 32 | *_i.c 33 | *_p.c 34 | *_i.h 35 | *.ilk 36 | *.meta 37 | *.obj 38 | *.pch 39 | *.pdb 40 | *.pgc 41 | *.pgd 42 | *.rsp 43 | *.sbr 44 | *.tlb 45 | *.tli 46 | *.tlh 47 | *.tmp 48 | *.tmp_proj 49 | *.log 50 | *.vspscc 51 | *.vssscc 52 | .builds 53 | *.pidb 54 | *.svclog 55 | *.scc 56 | 57 | # Chutzpah Test files 58 | _Chutzpah* 59 | 60 | # Visual C++ cache files 61 | ipch/ 62 | *.aps 63 | *.ncb 64 | *.opensdf 65 | *.sdf 66 | *.cachefile 67 | 68 | # Visual Studio profiler 69 | *.psess 70 | *.vsp 71 | *.vspx 72 | 73 | # TFS 2012 Local Workspace 74 | $tf/ 75 | 76 | # Guidance Automation Toolkit 77 | *.gpState 78 | 79 | # ReSharper is a .NET coding add-in 80 | _ReSharper*/ 81 | *.[Rr]e[Ss]harper 82 | *.DotSettings.user 83 | 84 | # JustCode is a .NET coding addin-in 85 | .JustCode 86 | 87 | # TeamCity is a build add-in 88 | _TeamCity* 89 | 90 | # DotCover is a Code Coverage Tool 91 | *.dotCover 92 | 93 | # NCrunch 94 | *.ncrunch* 95 | _NCrunch_* 96 | .*crunch*.local.xml 97 | 98 | # MightyMoose 99 | *.mm.* 100 | AutoTest.Net/ 101 | 102 | # Web workbench (sass) 103 | .sass-cache/ 104 | 105 | # Installshield output folder 106 | [Ee]xpress/ 107 | 108 | # DocProject is a documentation generator add-in 109 | DocProject/buildhelp/ 110 | DocProject/Help/*.HxT 111 | DocProject/Help/*.HxC 112 | DocProject/Help/*.hhc 113 | DocProject/Help/*.hhk 114 | DocProject/Help/*.hhp 115 | DocProject/Help/Html2 116 | DocProject/Help/html 117 | 118 | # Click-Once directory 119 | publish/ 120 | 121 | # Publish Web Output 122 | *.[Pp]ublish.xml 123 | *.azurePubxml 124 | 125 | # NuGet Packages Directory 126 | packages/ 127 | ## TODO: If the tool you use requires repositories.config uncomment the next line 128 | #!packages/repositories.config 129 | 130 | # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets 131 | # This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented) 132 | !packages/build/ 133 | 134 | # Windows Azure Build Output 135 | csx/ 136 | *.build.csdef 137 | 138 | # Windows Store app package directory 139 | AppPackages/ 140 | 141 | # Others 142 | sql/ 143 | *.Cache 144 | ClientBin/ 145 | [Ss]tyle[Cc]op.* 146 | ~$* 147 | *~ 148 | *.dbmdl 149 | *.dbproj.schemaview 150 | *.pfx 151 | *.publishsettings 152 | node_modules/ 153 | 154 | # RIA/Silverlight projects 155 | Generated_Code/ 156 | 157 | # Backup & report files from converting an old project file to a newer 158 | # Visual Studio version. Backup files are not needed, because we have git ;-) 159 | _UpgradeReport_Files/ 160 | Backup*/ 161 | UpgradeLog*.XML 162 | UpgradeLog*.htm 163 | 164 | # SQL Server files 165 | *.mdf 166 | *.ldf 167 | 168 | # Business Intelligence projects 169 | *.rdl.data 170 | *.bim.layout 171 | *.bim_*.settings 172 | 173 | # Microsoft Fakes 174 | FakesAssemblies/ 175 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // このコードはツールによって生成されました。 4 | // ランタイム バージョン:4.0.30319.17929 5 | // 6 | // このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 7 | // コードが再生成されるときに損失したりします。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace ACT.TPMonitor.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 17 | /// 18 | // このクラスは StronglyTypedResourceBuilder クラスが ResGen 19 | // または Visual Studio のようなツールを使用して自動生成されました。 20 | // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に 21 | // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// このクラスで使用されているキャッシュされた ResourceManager インスタンスを返します。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ACT.TPMonitor.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 厳密に型指定されたこのリソース クラスを使用して、すべての検索リソースに対し、 51 | /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。 65 | /// 66 | internal static System.Drawing.Bitmap army_s_paeon { 67 | get { 68 | object obj = ResourceManager.GetObject("army_s_paeon", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// 型 System.Byte[] のローカライズされたリソースを検索します。 75 | /// 76 | internal static byte[] pirulen_rg { 77 | get { 78 | object obj = ResourceManager.GetObject("pirulen_rg", resourceCulture); 79 | return ((byte[])(obj)); 80 | } 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/GitHub.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace ACT.TPMonitor 4 | { 5 | class GitHub 6 | { 7 | public class Release 8 | { 9 | public string url { get; set; } 10 | public string assets_url { get; set; } 11 | public string upload_url { get; set; } 12 | public string html_url { get; set; } 13 | public int id { get; set; } 14 | public string tag_name { get; set; } 15 | public string target_commitish { get; set; } 16 | public string name { get; set; } 17 | public bool draft { get; set; } 18 | public Author author { get; set; } 19 | public bool prerelease { get; set; } 20 | public string created_at { get; set; } 21 | public string published_at { get; set; } 22 | public List assets { get; set; } 23 | public string tarball_url { get; set; } 24 | public string zipball_url { get; set; } 25 | public string body { get; set; } 26 | } 27 | 28 | public class Author 29 | { 30 | public string login { get; set; } 31 | public int id { get; set; } 32 | public string avatar_url { get; set; } 33 | public string gravatar_id { get; set; } 34 | public string url { get; set; } 35 | public string html_url { get; set; } 36 | public string followers_url { get; set; } 37 | public string following_url { get; set; } 38 | public string gists_url { get; set; } 39 | public string starred_url { get; set; } 40 | public string subscriptions_url { get; set; } 41 | public string organizations_url { get; set; } 42 | public string repos_url { get; set; } 43 | public string events_url { get; set; } 44 | public string received_events_url { get; set; } 45 | public string type { get; set; } 46 | public bool site_admin { get; set; } 47 | } 48 | 49 | public class Uploader 50 | { 51 | public string login { get; set; } 52 | public int id { get; set; } 53 | public string avatar_url { get; set; } 54 | public string gravatar_id { get; set; } 55 | public string url { get; set; } 56 | public string html_url { get; set; } 57 | public string followers_url { get; set; } 58 | public string following_url { get; set; } 59 | public string gists_url { get; set; } 60 | public string starred_url { get; set; } 61 | public string subscriptions_url { get; set; } 62 | public string organizations_url { get; set; } 63 | public string repos_url { get; set; } 64 | public string events_url { get; set; } 65 | public string received_events_url { get; set; } 66 | public string type { get; set; } 67 | public bool site_admin { get; set; } 68 | } 69 | 70 | public class Asset 71 | { 72 | public string url { get; set; } 73 | public int id { get; set; } 74 | public string name { get; set; } 75 | public object label { get; set; } 76 | public Uploader uploader { get; set; } 77 | public string content_type { get; set; } 78 | public string state { get; set; } 79 | public int size { get; set; } 80 | public int download_count { get; set; } 81 | public string created_at { get; set; } 82 | public string updated_at { get; set; } 83 | public string browser_download_url { get; set; } 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/AllianceStyleViewer.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ACT.TPMonitor 2 | { 3 | partial class AllianceStyleViewer 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AllianceStyleViewer)); 33 | this.imageListJob = new System.Windows.Forms.ImageList(this.components); 34 | this.SuspendLayout(); 35 | // 36 | // imageListJob 37 | // 38 | this.imageListJob.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListJob.ImageStream"))); 39 | this.imageListJob.TransparentColor = System.Drawing.Color.Transparent; 40 | this.imageListJob.Images.SetKeyName(0, "noimage.png"); 41 | this.imageListJob.Images.SetKeyName(1, "Gladiator.png"); 42 | this.imageListJob.Images.SetKeyName(2, "Pugilist.png"); 43 | this.imageListJob.Images.SetKeyName(3, "Marauder.png"); 44 | this.imageListJob.Images.SetKeyName(4, "Lancer.png"); 45 | this.imageListJob.Images.SetKeyName(5, "Archer.png"); 46 | this.imageListJob.Images.SetKeyName(6, "Conjurer.png"); 47 | this.imageListJob.Images.SetKeyName(7, "Thaumaturge.png"); 48 | this.imageListJob.Images.SetKeyName(8, "Carpenter.png"); 49 | this.imageListJob.Images.SetKeyName(9, "Blacksmith.png"); 50 | this.imageListJob.Images.SetKeyName(10, "Armorer.png"); 51 | this.imageListJob.Images.SetKeyName(11, "Goldsmith.png"); 52 | this.imageListJob.Images.SetKeyName(12, "Leatherworker.png"); 53 | this.imageListJob.Images.SetKeyName(13, "Weaver.png"); 54 | this.imageListJob.Images.SetKeyName(14, "Alchemist.png"); 55 | this.imageListJob.Images.SetKeyName(15, "Culinarian.png"); 56 | this.imageListJob.Images.SetKeyName(16, "Miner.png"); 57 | this.imageListJob.Images.SetKeyName(17, "Botanist.png"); 58 | this.imageListJob.Images.SetKeyName(18, "Fisher.png"); 59 | this.imageListJob.Images.SetKeyName(19, "Paladin.png"); 60 | this.imageListJob.Images.SetKeyName(20, "Monk.png"); 61 | this.imageListJob.Images.SetKeyName(21, "Warrior.png"); 62 | this.imageListJob.Images.SetKeyName(22, "Dragoon.png"); 63 | this.imageListJob.Images.SetKeyName(23, "Bard.png"); 64 | this.imageListJob.Images.SetKeyName(24, "WhiteMage.png"); 65 | this.imageListJob.Images.SetKeyName(25, "BlackMage.png"); 66 | this.imageListJob.Images.SetKeyName(26, "Arcanist.png"); 67 | this.imageListJob.Images.SetKeyName(27, "Summoner.png"); 68 | this.imageListJob.Images.SetKeyName(28, "Scholar.png"); 69 | this.imageListJob.Images.SetKeyName(29, "Rogue.png"); 70 | this.imageListJob.Images.SetKeyName(30, "Ninja.png"); 71 | // 72 | // AllianceStyleViewer 73 | // 74 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 75 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 76 | this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); 77 | this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; 78 | this.ClientSize = new System.Drawing.Size(320, 72); 79 | this.DoubleBuffered = true; 80 | this.Name = "AllianceStyleViewer"; 81 | this.Text = "AllianceForm"; 82 | this.ResumeLayout(false); 83 | 84 | } 85 | 86 | #endregion 87 | 88 | private System.Windows.Forms.ImageList imageListJob; 89 | } 90 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ACT.TPMonitor 2 | ============= 3 | 4 | TPMonitor for FFXIV on ACT 5 | 6 | Sample 7 | 8 | Latest Version 9 | ---------------- 10 | [ACT.TPMonitor.zip](https://github.com/GB19xx/ACT.TPMonitor/releases/latest) 11 | 12 | How to install 13 | ---------------- 14 | 1. [ACT](http://advancedcombattracker.com/download.php)より、本体とPluginをダウンロード 15 | 2. ACT、FFXIVプラグイン導入 16 | 3. [ACT.TPMonitor_xxxx.zip](https://github.com/GB19xx/ACT.TPMonitor/releases/download/1.5.0.1/ACT.TPMonitor_1.5.0.1.zip)をダウンロードし、展開 17 | 4. Advanced Combat Tracker.exeと同じフォルダに「FFXIV_ACT_Plugin.dll」と「ACT.TPMonitor.dll」を配置 18 | 5. Plugin -> Plugin Listingタブから、上記4.「ACT.TPMonitor.dll」を選択 19 | 6. Add/Enable Pluginクリック 20 | 7. TPMonitorタブ選択 21 | 8. キャラクターフォルダー設定 22 | 【キャラクターフォルダーの特定方法】 23 | 8-1. ログイン後、HUDを保存する 24 | 8-2. ADDON.DATの更新日時が近いとそのフォルダ 25 | 26 | Settings 27 | 28 | How to uninstall 29 | ---------------- 30 | 1. Plugin -> Plugin Listingタブから、[x] 31 | 2. 配置したACT.TPMonitor.dllを削除 32 | 3. 設定ファイルの削除 33 | %AppData%\Roaming\Advanced Combat Tracker\Config\ACT.TPMonitor.config.xml 34 | 35 | Usage 36 | ------ 37 | ###Commands 38 | /e TP _Command_ 39 | 40 | 41 | 42 | 43 | 44 | 45 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 74 | 75 |
CommandDescription
2 - 8:<2> - <8> 46 | パーティメンバーの名前を取得します
47 | パーティメンバーが変わるたび実行する必要があります
48 | ※ログ設定のイニシャルに注意。
49 |
50 | また、指定なしにすることで任意のTPを非表示にできます
51 | ex) 3人目、4人目を非表示
52 |  /e TP 2:<2>
53 |  /e TP 3:
54 |  /e TP 4:
55 |  /e TP 5:<5>
56 |  /e TP 6:<6>
57 |  /e TP 7:<7>
58 |  /e TP 8:<8>
59 |  /e TP /Show 60 |
/ShowTPMonitorの表示・再表示
/HideTPMonitorの非表示
/Adjust自動的に表示位置を調整します
70 | ・HUD変更
71 | ・ゲーム画面を移動(ウィンドウモードの場合)
72 | ※なんか位置がおかしいな?と思ったら実行
73 |
76 | 77 | 下記をマクロにすると便利 78 | 79 | /e TP 2:<2> 80 | /e TP 3:<3> 81 | /e TP 4:<4> 82 | /e TP 5:<5> 83 | /e TP 6:<6> 84 | /e TP 7:<7> 85 | /e TP 8:<8> 86 | /e TP /Show 87 | 88 | チャットログの名前をフルネーム以外でプレイしている場合、上記マクロの前後にテキストコマンドを追記することで取得できます 89 | /chatlog name 0 (先頭に追記) 90 | /chatlog name 1~3 (最後に追記) 91 | 92 | 0:フルネーム 93 | 1:姓のみイニシャル 94 | 2:名のみイニシャル 95 | 3:姓名ともにイニシャル 96 | 97 | Option 98 | ------ 99 | + パーティ解散を契機に非表示 100 | + ID終了時に非表示 101 | + 自分のTPも表示(Fixed Mode時のみ有効) 102 | + ゲーム画面が非アクティブ時は非表示 103 | 104 | Display Job 105 | ------ 106 | + 特定ジョブのTPを非表示にできます 107 | + 記載のないジョブは表示されます 108 | 109 | Settings 110 | ------ 111 | ###Party List 112 | + Offset 113 | Offsetにて微調整可能 114 | + Fixed mode 115 | マルチディスプレイの方はこちらを使用してください 116 | 117 | ###Alliance 118 | + X, Y 指定して表示 119 | AllianceSample 120 | 121 | ###Scale 122 | + UIのScaleより優先されます 123 | 124 | ###Color Setting 125 | + StartTP 126 | + EndTP 127 | + Color(ReadOnly) 128 | + Edit Color(Show Dialog) 129 | 130 | Examples: 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 |
StartTPEndTPColor
0400Red
400800Aqua
8001000White
145 | 146 | Remarks 147 | ----------- 148 | + Win7(64bit)のみ動作確認 149 | + マルチディスプレイ未検証 150 | + サブキャラクター未検証 151 | + チャットの種別がないので、他人のコマンドにも反応します 152 | 153 | Licenses 154 | ------- 155 | 三条項BSDライセンス (3-clause BSD license) 156 | 157 | 記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。 158 | Copyright (C) 2010 - 2014 SQUARE ENIX CO., LTD. All Rights Reserved. 159 | 160 | ・[DotNetZip](https://github.com/haf/DotNetZip.Semverd/blob/master/LICENSE) (Ms-PL) 161 | ・[Json.Net](https://json.codeplex.com/license) (MIT License) 162 | ・UpdateChecker.cs by grindingcoil ([Originally under 3-clause BSD license](https://github.com/grindingcoil/act_timeline/blob/master/LICENSE.txt)) 163 | 164 | Special thanks 165 | ---------------- 166 | + [RainbowMage氏](https://github.com/RainbowMage) 167 | FFXIVPluginの動的ロード、マルチモニタの修正いただきました! 168 | 169 | + [madogiwa氏](https://github.com/madogiwa) 170 | UIスケール対応いただきました! 171 | 172 | + [grindingcoil氏](https://github.com/grindingcoil) 173 | 更新チェックのソース流用いたしました! 174 | 175 | + [pirulen](http://typodermicfonts.com/pirulen/) 176 | Free Font! GREATE JOB! 177 | 178 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/AllianceStyleViewer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Data; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace ACT.TPMonitor 8 | { 9 | public partial class AllianceStyleViewer : Form 10 | { 11 | private TPMonitorController _controller; 12 | 13 | public AllianceStyleViewer(TPMonitorController controller) 14 | { 15 | InitializeComponent(); 16 | 17 | this.Icon = Icon.FromHandle(Properties.Resources.army_s_paeon.GetHicon()); 18 | 19 | _controller = controller; 20 | this.ControlBox = false; 21 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // hidden border 22 | this.TransparencyKey = Color.Magenta; 23 | SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true); 24 | 25 | controller.CurrentTPUpdate += CurrentTPUpdate; 26 | } 27 | 28 | protected override CreateParams CreateParams 29 | { 30 | get 31 | { 32 | CreateParams cp = base.CreateParams; 33 | // Set the form click-through 34 | cp.ExStyle |= 0x80000 /* WS_EX_LAYERED */ | 0x20 /* WS_EX_TRANSPARENT */; 35 | return cp; 36 | } 37 | } 38 | 39 | public void Adjust() 40 | { 41 | this.Location = new Point((int)_controller.AllianceX, (int)_controller.AllianceY); 42 | float scale = _controller.IsUserScale ? _controller.UserScale:1.0f; 43 | this.Size = new Size((int)(320 * scale), (int)(72 * scale)); 44 | } 45 | 46 | public void CurrentTPUpdate(object sender, EventArgs e) 47 | { 48 | this.Refresh(); 49 | } 50 | 51 | protected override void OnPaint(PaintEventArgs e) 52 | { 53 | if (this.Visible) 54 | { 55 | if (_controller.DisappearsInActive && !Util.IsActive(FFXIVPluginHelper.GetFFXIVProcess.MainWindowHandle)) 56 | { 57 | // Disappears 58 | } 59 | else 60 | { 61 | Graphics g = e.Graphics; 62 | 63 | for (int i = 0; i < _controller.PartyMemberInfo.Count; i++) 64 | { 65 | DrawImg(g, i, _controller.IsUserScale ? _controller.UserScale : _controller.PartyListUI.Scale); 66 | 67 | if (!string.IsNullOrEmpty(_controller.PartyMemberInfo[i].Name) && 68 | _controller.HideJob.IndexOf((JOB)_controller.PartyMemberInfo[i].Job) == -1) 69 | { 70 | // TP 71 | DrawBar(g, i, _controller.PartyMemberInfo[i].CurrentTP, _controller.IsUserScale ? _controller.UserScale : _controller.PartyListUI.Scale); 72 | } 73 | else 74 | { 75 | // TP 76 | DrawBar(g, i, 0, _controller.IsUserScale ? _controller.UserScale : _controller.PartyListUI.Scale); 77 | } 78 | } 79 | } 80 | } 81 | } 82 | 83 | private void DrawImg(Graphics g, int idx, float scale) 84 | { 85 | Rectangle rect = new Rectangle((int)(((78 * (idx % 4)) + 8) * scale), (int)(((32 * (idx / 4)) + 7) * scale), (int)(24 * scale), (int)(24 * scale)); 86 | 87 | JOB job = JOB.Unknown; 88 | Enum.TryParse(_controller.PartyMemberInfo[idx].Job.ToString(), out job); 89 | if (job != JOB.Unknown) 90 | { 91 | g.DrawImage(imageListJob.Images[(int)job], (float)rect.X, (float)rect.Y, (float)rect.Width, (float)rect.Height); 92 | } 93 | } 94 | 95 | private void DrawBar(Graphics g, int idx, int value, float scale) 96 | { 97 | Rectangle rect = new Rectangle((int)(((78 * (idx % 4)) + 37) * scale), (int)(((32 * (idx / 4)) + 11) * scale), (int)(40 * scale), (int)(18 * scale)); 98 | //Brushオブジェクトの作成 99 | SolidBrush b = new SolidBrush(Color.FromArgb(0x8, 0x2c, 0x52)); 100 | g.FillRectangle(b, rect); 101 | 102 | // TP-Value 103 | Brush valueBrush = GetColor(value); 104 | g.FillRectangle(valueBrush, rect.X, rect.Y, value * rect.Width / 1000, rect.Height); 105 | } 106 | 107 | private Brush GetColor(int value) 108 | { 109 | var brush = Brushes.White; 110 | foreach (DataRow r in _controller.dtColor.Rows) 111 | { 112 | if (int.Parse(r[0].ToString()) <= value && value <= int.Parse(r[1].ToString())) 113 | { 114 | string[] rgb = r[2].ToString().Split(','); 115 | if (rgb.Length == 3) 116 | { 117 | brush = new SolidBrush(Color.FromArgb(255, int.Parse(rgb[0]), int.Parse(rgb[1]), int.Parse(rgb[2]))); 118 | } 119 | else 120 | { 121 | brush = new SolidBrush(Color.FromName(r[2].ToString())); 122 | } 123 | break; 124 | } 125 | } 126 | return brush; 127 | } 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/ACT.TPMonitor.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | AnyCPU 6 | 8.0.30703 7 | 2.0 8 | {C05597C0-4033-476B-AE43-1D5559BBC86E} 9 | Library 10 | Properties 11 | ACT.TPMonitor 12 | ACT.TPMonitor 13 | v4.0 14 | 512 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | pdbonly 27 | true 28 | bin\Release\ 29 | TRACE 30 | prompt 31 | 4 32 | 33 | 34 | Program 35 | D:\Advanced Combat Tracker\Advanced Combat Tracker.exe 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | D:\Advanced Combat Tracker\Advanced Combat Tracker.exe 48 | False 49 | 50 | 51 | ..\packages\DotNetZip.1.9.3\lib\net20\Ionic.Zip.dll 52 | 53 | 54 | ..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | UserControl 67 | 68 | 69 | Form 70 | 71 | 72 | AllianceStyleViewer.cs 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | True 81 | True 82 | Resources.resx 83 | 84 | 85 | 86 | Form 87 | 88 | 89 | TPViewer.cs 90 | 91 | 92 | Code 93 | 94 | 95 | 96 | 97 | 98 | ACTTabpageControl.cs 99 | 100 | 101 | AllianceStyleViewer.cs 102 | 103 | 104 | ResXFileCodeGenerator 105 | Resources.Designer.cs 106 | 107 | 108 | TPViewer.cs 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 136 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/TPViewer.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/FFXIVPluginHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Reflection; 5 | using System.Text.RegularExpressions; 6 | using Advanced_Combat_Tracker; 7 | 8 | namespace ACT.TPMonitor 9 | { 10 | public static class FFXIVPluginHelper 11 | { 12 | private static Regex regVersion = new Regex(@"FileVersion: (?\d+\.\d+\.\d+\.\d+)\n", RegexOptions.Compiled | RegexOptions.IgnoreCase); 13 | private static ActPluginData _plugin = null; 14 | 15 | public static object Instance 16 | { 17 | get 18 | { 19 | if (_plugin == null && ActGlobals.oFormActMain.Visible) 20 | { 21 | foreach (ActPluginData plugin in ActGlobals.oFormActMain.ActPlugins) 22 | { 23 | if (plugin.pluginFile.Name == "FFXIV_ACT_Plugin.dll" && plugin.lblPluginStatus.Text == "FFXIV Plugin Started.") 24 | { 25 | _plugin = plugin; 26 | break; 27 | } 28 | } 29 | } 30 | return _plugin; 31 | } 32 | } 33 | 34 | public static Version GetVersion 35 | { 36 | get 37 | { 38 | if (_plugin != null) 39 | { 40 | return new Version(regVersion.Match(_plugin.pluginVersion).Groups["version"].ToString()); 41 | } 42 | return null; 43 | } 44 | } 45 | 46 | public static Process GetFFXIVProcess 47 | { 48 | get { 49 | try 50 | { 51 | FieldInfo fi = _plugin.pluginObj.GetType().GetField("_Memory", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance); 52 | var memory = fi.GetValue(_plugin.pluginObj); 53 | if (memory == null) return null; 54 | 55 | fi = memory.GetType().GetField("_config", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance); 56 | var config = fi.GetValue(memory); 57 | if (config == null) return null; 58 | 59 | fi = config.GetType().GetField("Process", BindingFlags.GetField | BindingFlags.Public | BindingFlags.Instance); 60 | var process = fi.GetValue(config); 61 | if (process == null) return null; 62 | 63 | return (Process)process; 64 | } 65 | catch 66 | { 67 | return null; 68 | } 69 | } 70 | } 71 | 72 | private static object GetScanCombatants() 73 | { 74 | FieldInfo fi = _plugin.pluginObj.GetType().GetField("_Memory", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance); 75 | var memory = fi.GetValue(_plugin.pluginObj); 76 | if (memory == null) return null; 77 | 78 | fi = memory.GetType().GetField("_config", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance); 79 | var config = fi.GetValue(memory); 80 | if (config == null) return null; 81 | 82 | fi = config.GetType().GetField("ScanCombatants", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance); 83 | var scanCombatants = fi.GetValue(config); 84 | if (scanCombatants == null) return null; 85 | 86 | return scanCombatants; 87 | } 88 | 89 | public static Combatant GetPlayerData() 90 | { 91 | Combatant player = new Combatant(); 92 | try 93 | { 94 | var scanCombatants = GetScanCombatants(); 95 | if (scanCombatants == null) return null; 96 | 97 | var item = scanCombatants.GetType().InvokeMember("GetPlayerData", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, scanCombatants, null); 98 | FieldInfo fi = item.GetType().GetField("JobID", BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetField); 99 | player.Job = (int)fi.GetValue(item); 100 | } 101 | catch { } 102 | return player; 103 | } 104 | 105 | public static List GetCombatantList() 106 | { 107 | List result = new List(); 108 | try 109 | { 110 | var scanCombatants = GetScanCombatants(); 111 | if (scanCombatants == null) return null; 112 | 113 | var item = scanCombatants.GetType().InvokeMember("GetCombatantList", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, scanCombatants, null); 114 | FieldInfo fi = item.GetType().GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField); 115 | 116 | Type[] nestedType = item.GetType().GetNestedTypes(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); 117 | object tmp = fi.GetValue(item); 118 | if (tmp.GetType().IsArray) 119 | { 120 | foreach (object temp in (Array)tmp) 121 | { 122 | if (temp == null) break; 123 | 124 | Combatant combatant = new Combatant(); 125 | 126 | fi = temp.GetType().GetField("Job", BindingFlags.Public | BindingFlags.Instance); 127 | combatant.Job = (int)fi.GetValue(temp); 128 | fi = temp.GetType().GetField("Name", BindingFlags.Public | BindingFlags.Instance); 129 | combatant.Name = (string)fi.GetValue(temp); 130 | fi = temp.GetType().GetField("CurrentTP", BindingFlags.Public | BindingFlags.Instance); 131 | combatant.CurrentTP = (int)fi.GetValue(temp); 132 | 133 | result.Add(combatant); 134 | } 135 | } 136 | } 137 | catch { } 138 | return result; 139 | } 140 | } 141 | 142 | public class Combatant 143 | { 144 | public uint ID; 145 | public uint OwnerID; 146 | public int Order; 147 | public byte type; 148 | public int Job; 149 | public int Level; 150 | public string Name; 151 | public int CurrentHP; 152 | public int MaxHP; 153 | public int CurrentMP; 154 | public int MaxMP; 155 | public int CurrentTP; 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\army's_paeon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\pirulen rg.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 126 | 127 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/TPViewer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Data; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace ACT.TPMonitor 8 | { 9 | public partial class TPViewer : Form 10 | { 11 | private TPMonitorController _controller; 12 | private Widget widget; 13 | 14 | public TPViewer(TPMonitorController controller) 15 | { 16 | InitializeComponent(); 17 | 18 | this.Icon = Icon.FromHandle(Properties.Resources.army_s_paeon.GetHicon()); 19 | 20 | _controller = controller; 21 | this.ControlBox = false; 22 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // hidden border 23 | this.TransparencyKey = this.BackColor = Color.Navy; // the color key to transparent, choose a color that you don't use 24 | SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true); 25 | 26 | controller.CurrentTPUpdate += CurrentTPUpdate; 27 | } 28 | 29 | protected override CreateParams CreateParams 30 | { 31 | get 32 | { 33 | CreateParams cp = base.CreateParams; 34 | // Set the form click-through 35 | cp.ExStyle |= 0x80000 /* WS_EX_LAYERED */ | 0x20 /* WS_EX_TRANSPARENT */; 36 | return cp; 37 | } 38 | } 39 | 40 | public void Adjust() 41 | { 42 | Adjust(_controller.PartyListUI); 43 | } 44 | 45 | public void Adjust(Widget widget) 46 | { 47 | this.widget = widget; 48 | Point pos = widget.Rect.Location; 49 | if (_controller.IsFixedMode) 50 | { 51 | pos = new Point((int)_controller.FixedX, (int)_controller.FixedY); 52 | } 53 | else 54 | { 55 | pos.Offset((int)_controller.OffsetX, (int)_controller.OffsetY); 56 | } 57 | this.Location = pos; 58 | this.Size = widget.Rect.Size; 59 | } 60 | 61 | public void CurrentTPUpdate(object sender, EventArgs e) 62 | { 63 | this.Refresh(); 64 | } 65 | 66 | protected override void OnPaint(PaintEventArgs e) 67 | { 68 | if (this.Visible) 69 | { 70 | if (_controller.DisappearsInActive && !Util.IsActive(FFXIVPluginHelper.GetFFXIVProcess.MainWindowHandle)) 71 | { 72 | // Disappears 73 | } 74 | else 75 | { 76 | if (_controller.IsUserScale) 77 | { 78 | this.SetBounds(this.Location.X, this.Location.Y, (int)(this.widget.Rect.Size.Width * _controller.UserScale), (int)(this.widget.Rect.Height * _controller.UserScale)); 79 | } 80 | 81 | Graphics g = e.Graphics; 82 | g.Clear(this.BackColor); 83 | 84 | int s = _controller.IsFixedMode && _controller.ShowMyTP ? 0 : 1; 85 | for (int i = s; i < _controller.PartyMemberInfo.Count; i++) 86 | { 87 | if (!string.IsNullOrEmpty(_controller.PartyMemberInfo[i].Name) && 88 | _controller.HideJob.IndexOf((JOB)_controller.PartyMemberInfo[i].Job) == -1) 89 | { 90 | DrawBar(g, i, _controller.PartyMemberInfo[i].CurrentTP, _controller.IsUserScale ? _controller.UserScale : _controller.PartyListUI.Scale); 91 | DrawValue(g, i, _controller.PartyMemberInfo[i].CurrentTP, _controller.IsUserScale ? _controller.UserScale : _controller.PartyListUI.Scale); 92 | } 93 | } 94 | } 95 | } 96 | } 97 | 98 | private void DrawBar(Graphics g, int idx, int value, float scale) 99 | { 100 | Rectangle rect = new Rectangle((int)(258 * scale), (int)(((40 * idx) + 60) * scale), (int)(87 * scale), (int)(6 * scale)); 101 | //Brushオブジェクトの作成 102 | SolidBrush b = new SolidBrush(Color.FromArgb(0x8, 0x2c, 0x52)); 103 | g.FillRectangle(b, rect.X, rect.Y, rect.Width, rect.Height); 104 | 105 | //Penの作成 106 | int width = 1; 107 | Pen framePen = new Pen(Color.FromArgb(0x7b, 0xcf, 0xf7), width); 108 | 109 | //LineJoinをRoundに変更して四角を描く(角が丸められる) 110 | framePen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel; 111 | g.DrawRectangle(framePen, rect.X, rect.Y, rect.Width, rect.Height); 112 | 113 | // TP-Value 114 | Brush valueBrush = GetColor(value); 115 | g.FillRectangle(valueBrush, rect.X + width, rect.Y + width, (value * rect.Width / 1000) - width, rect.Height - width); 116 | } 117 | 118 | private Brush GetColor(int value) 119 | { 120 | var brush = Brushes.White; 121 | foreach (DataRow r in _controller.dtColor.Rows) 122 | { 123 | if (int.Parse(r[0].ToString()) <= value && value <= int.Parse(r[1].ToString())) 124 | { 125 | string[] rgb = r[2].ToString().Split(','); 126 | if (rgb.Length == 3) 127 | { 128 | brush = new SolidBrush(Color.FromArgb(255, int.Parse(rgb[0]), int.Parse(rgb[1]), int.Parse(rgb[2]))); 129 | } 130 | else 131 | { 132 | brush = new SolidBrush(Color.FromName(r[2].ToString())); 133 | } 134 | break; 135 | } 136 | } 137 | return brush; 138 | } 139 | 140 | private void DrawValue(Graphics g, int idx, int value, float scale) 141 | { 142 | // レイアウト枠 143 | Rectangle rect = new Rectangle((int)(247 * scale), (int)(((40 * idx) + 60 + 8) * scale), (int)(100 * scale), (int)(8 * scale)); 144 | rect.Inflate(0, 0); // ちょっと小さい枠内にレイアウト 145 | 146 | // 文字列位置の設定 147 | StringFormat sf = new StringFormat(); 148 | sf.LineAlignment = StringAlignment.Center; 149 | sf.Alignment = StringAlignment.Far; 150 | 151 | // アンチエイリアス 152 | g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; 153 | g.SmoothingMode = SmoothingMode.HighQuality; 154 | Font f = _controller.TPFont; 155 | 156 | // パスを作成 157 | GraphicsPath path = new GraphicsPath(); 158 | path.AddString(value.ToString(), f.FontFamily, (int)f.Style, f.Height * scale, rect, sf); // 文字列のパスを追加 159 | 160 | // フチを描く 161 | Pen p = new Pen(Color.FromArgb(0x46, 0x86, 0xa9), 1.0f * scale); 162 | //p.Color = Color.White; 163 | p.LineJoin = LineJoin.Round; 164 | g.DrawPath(p, path); 165 | 166 | // 塗りつぶす 167 | g.FillPath(Brushes.White, path); 168 | // 後始末 169 | g.SmoothingMode = SmoothingMode.Default; 170 | p.Dispose(); 171 | path.Dispose(); 172 | } 173 | } 174 | } 175 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/AutoUpdater.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Net; 5 | using System.Windows.Forms; 6 | using System.Text.RegularExpressions; 7 | using Advanced_Combat_Tracker; 8 | using Newtonsoft.Json; 9 | using Ionic.Zip; 10 | 11 | namespace ACT.TPMonitor 12 | { 13 | class AutoUpdater 14 | { 15 | private static Regex regVersion = new Regex(@"FileVersion: (?\d+\.\d+\.\d+\.\d+)\n", RegexOptions.Compiled | RegexOptions.IgnoreCase); 16 | private static bool isGitHubAPI; 17 | private static MemoryStream requestData; 18 | private static byte[] bufferData; 19 | 20 | public static string Owner { get; set; } 21 | public static string RepositoryName { get; set; } 22 | public static ActPluginData PluginDate { get; set; } 23 | public static Version CurrentVersion 24 | { 25 | get 26 | { 27 | return new Version(regVersion.Match(PluginDate.pluginVersion).Groups["version"].ToString()); 28 | } 29 | } 30 | public static bool IsCoverdPreRelease { private get; set; } 31 | 32 | public static void Start() 33 | { 34 | string githubAPI = string.Format("https://api.github.com/repos/{0}/{1}/releases", Owner, RepositoryName); 35 | isGitHubAPI = true; 36 | Start(githubAPI); 37 | } 38 | 39 | public static void Start(string url) 40 | { 41 | HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(url); 42 | webreq.UserAgent = Owner; 43 | 44 | IAsyncResult r = (IAsyncResult)webreq.BeginGetResponse(new AsyncCallback(ResponseCallback), webreq); 45 | } 46 | 47 | private static void ResponseCallback(IAsyncResult ar) 48 | { 49 | HttpWebRequest webreq = (HttpWebRequest)ar.AsyncState; 50 | 51 | HttpWebResponse webres = (HttpWebResponse)webreq.EndGetResponse(ar); 52 | 53 | Stream st = webres.GetResponseStream(); 54 | 55 | requestData = new System.IO.MemoryStream(); 56 | bufferData = new byte[1024]; 57 | 58 | IAsyncResult r = (IAsyncResult)st.BeginRead(bufferData, 0, bufferData.Length, new AsyncCallback(ReadCallback), st); 59 | } 60 | 61 | private static void ReadCallback(IAsyncResult ar) 62 | { 63 | Stream st = (Stream)ar.AsyncState; 64 | 65 | int readSize = st.EndRead(ar); 66 | 67 | if (readSize > 0) 68 | { 69 | requestData.Write(bufferData, 0, readSize); 70 | 71 | //Console.WriteLine("{0} Bytes", requestData.Length); 72 | 73 | IAsyncResult r = (IAsyncResult)st.BeginRead(bufferData, 0, bufferData.Length, new AsyncCallback(ReadCallback), st); 74 | } 75 | else 76 | { 77 | byte[] sourceData = requestData.ToArray(); 78 | st.Close(); 79 | requestData.Close(); 80 | 81 | if (isGitHubAPI) 82 | { 83 | //GitHub API responsed. 84 | string sourceHtml = System.Text.Encoding.UTF8.GetString(sourceData); 85 | 86 | List releases = JsonConvert.DeserializeObject>(sourceHtml); 87 | GitHub.Release newVersion = CheckNewAvailable(releases); 88 | 89 | if (newVersion != null) 90 | { 91 | var title = "New version available!"; 92 | var instruction = String.Format("A new version of {0} is available.", RepositoryName); 93 | var detail = string.Join("\n", (" -" + newVersion.body.TrimEnd(' ', '\r', '\n')).Replace("\r\n", "\n -")); 94 | var msg = string.Format("\n\n{0} {1}{2} is now available.\nYou have version {3}.\nApply it now?\n\n:{4}\n{5}", 95 | RepositoryName, 96 | newVersion.tag_name, 97 | IsCoverdPreRelease && newVersion.prerelease ? "[PreRelease]" : "", 98 | CurrentVersion, 99 | newVersion.name, 100 | detail 101 | ); 102 | var result = MessageBox.Show(instruction + msg, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question); 103 | if (result == DialogResult.Yes) 104 | { 105 | GetZipFile(newVersion.assets[0].browser_download_url); 106 | } 107 | } 108 | else 109 | { 110 | if (IsCoverdPreRelease) 111 | { 112 | var titile = "Update Check"; 113 | var msg = string.Format("You have version {0} is the latest.", CurrentVersion); 114 | MessageBox.Show(msg, titile, MessageBoxButtons.OK, MessageBoxIcon.Information); 115 | } 116 | } 117 | } 118 | else 119 | { 120 | //zip file download completed. 121 | Apply(sourceData); 122 | } 123 | } 124 | } 125 | 126 | private static GitHub.Release CheckNewAvailable(List releses) 127 | { 128 | GitHub.Release result = null; 129 | 130 | DateTime localFileUpdateTime = PluginDate.pluginFile.LastWriteTime; 131 | #if DEBUG 132 | localFileUpdateTime = DateTime.Parse("2014/11/10 1:10:08"); 133 | localFileUpdateTime = localFileUpdateTime.AddDays(-10); 134 | #endif 135 | localFileUpdateTime = localFileUpdateTime.AddMinutes(30); 136 | foreach (GitHub.Release r in releses) 137 | { 138 | if (r.draft) continue; 139 | if (r.assets.Count == 0) continue; 140 | if (!(r.assets[0].content_type.Equals("application/x-zip-compressed") && r.assets[0].state.Equals("uploaded"))) continue; 141 | if (r.prerelease && !IsCoverdPreRelease) continue; 142 | 143 | DateTime updatedTime = DateTime.Parse(r.assets[0].updated_at); 144 | if (updatedTime.CompareTo(localFileUpdateTime) == 1) 145 | { 146 | if (!r.prerelease) 147 | { 148 | result = r; 149 | break; 150 | } 151 | else if (result == null) 152 | { 153 | result = r; 154 | } 155 | } 156 | else 157 | { 158 | break; 159 | } 160 | } 161 | return result; 162 | } 163 | 164 | private static void GetZipFile(string downloadURL) 165 | { 166 | isGitHubAPI = false; 167 | Start(downloadURL); 168 | } 169 | 170 | private static void Apply(byte[] sourceData) 171 | { 172 | using (MemoryStream ms = new MemoryStream(sourceData)) 173 | { 174 | using (ZipFile zip = ZipFile.Read(ms)) 175 | { 176 | zip.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; 177 | 178 | string path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 179 | string zipPath = path; 180 | if (PluginDate != null) 181 | { 182 | path = PluginDate.pluginFile.DirectoryName; 183 | } 184 | 185 | zip.ExtractAll(path); 186 | 187 | ThreadInvokes.CheckboxSetChecked(ActGlobals.oFormActMain, PluginDate.cbEnabled, false); 188 | Application.DoEvents(); 189 | 190 | foreach (ZipEntry entry in zip) 191 | { 192 | string src = Path.Combine(path, entry.FileName); 193 | string dest = Path.Combine(path, Path.GetFileName(entry.FileName)); 194 | if (File.Exists(dest)) 195 | { 196 | File.Delete(dest + "_old"); 197 | File.Move(dest, dest + "_old"); 198 | File.Copy(src, dest, true); 199 | } 200 | zipPath = Path.GetDirectoryName(src); 201 | } 202 | Directory.Delete(zipPath, true); 203 | 204 | ThreadInvokes.CheckboxSetChecked(ActGlobals.oFormActMain, PluginDate.cbEnabled, true); 205 | PluginDate.pluginFile.Refresh(); 206 | } 207 | } 208 | } 209 | } 210 | } 211 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/Util.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.IO; 4 | using System.Runtime.InteropServices; 5 | using System.Windows.Forms; 6 | 7 | namespace ACT.TPMonitor 8 | { 9 | class Util 10 | { 11 | [StructLayout(LayoutKind.Sequential)] 12 | private struct RECT 13 | { 14 | public int left; 15 | public int top; 16 | public int right; 17 | public int bottom; 18 | } 19 | 20 | [DllImport("user32.dll")] 21 | private static extern bool GetClientRect(IntPtr hWnd, ref RECT lpRect); 22 | 23 | [DllImport("user32.dll")] 24 | private static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); 25 | 26 | [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] 27 | public static extern IntPtr GetForegroundWindow(); 28 | 29 | public static IntPtr FFXIVProcessId { private get; set; } 30 | public static Language GameLanguage { get; private set; } 31 | 32 | private static Rectangle _screenRect; 33 | private static string _cfgFile = Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.Personal), @"My Games\FINAL FANTASY XIV - A Realm Reborn\FFXIV.cfg"); 34 | public static Widget _partyListUI; 35 | private static DateTime _lastWriteTime = DateTime.MinValue; 36 | 37 | public static void InitializedAtLogin() 38 | { 39 | using (StreamReader sr = new StreamReader(_cfgFile, System.Text.Encoding.GetEncoding("shift_jis"))) 40 | { 41 | string line; 42 | while ((line = sr.ReadLine()) != null) 43 | { 44 | if (line.Equals("")) 45 | { 46 | // read skip 47 | line = sr.ReadLine(); //GuidVersion 48 | line = sr.ReadLine(); //ConfigVersion 49 | line = sr.ReadLine(); //Language 50 | 51 | GameLanguage = (Language)int.Parse(line.Split('\t')[1].ToString()); 52 | } 53 | else if (line.Equals("")) 54 | { 55 | // read skip 56 | sr.ReadLine(); //UPnP 57 | sr.ReadLine(); //Port 58 | sr.ReadLine(); //LastLogin0 59 | sr.ReadLine(); //LastLogin1 60 | } 61 | } 62 | } 63 | _lastWriteTime = DateTime.MinValue; 64 | } 65 | 66 | private static Rectangle GetWindowSize(string path) 67 | { 68 | Rectangle screenRect = new Rectangle(new Point(0, 0), new Size(0, 0)); 69 | 70 | using (StreamReader sr = new StreamReader(_cfgFile, System.Text.Encoding.GetEncoding("shift_jis"))) 71 | { 72 | string line; 73 | while ((line = sr.ReadLine()) != null) 74 | { 75 | if (line.Equals("")) 76 | { 77 | // read skip 78 | sr.ReadLine(); //MainAdapter 79 | 80 | // Location, ScreenSize 81 | int left = (int)uint.Parse(sr.ReadLine().Split('\t')[1].ToString()); //ScreenLeft 82 | int top = (int)uint.Parse(sr.ReadLine().Split('\t')[1].ToString()); //ScreenTop 83 | int width = int.Parse(sr.ReadLine().Split('\t')[1].ToString()); //ScreenWidth 84 | int height = int.Parse(sr.ReadLine().Split('\t')[1].ToString()); //ScreenHeight 85 | 86 | //ScreenMode (0:Window, 1:FullScreen, 2:Virtual) 87 | int mode = int.Parse(sr.ReadLine().Split('\t')[1].ToString()); 88 | 89 | switch (mode) 90 | { 91 | case 0: 92 | // Window 93 | if (FFXIVProcessId != IntPtr.Zero) 94 | { 95 | RECT windowRect = new RECT(); 96 | GetWindowRect(FFXIVProcessId, ref windowRect); 97 | 98 | RECT clientRect = new RECT(); 99 | GetClientRect(FFXIVProcessId, ref clientRect); 100 | 101 | left = windowRect.left + SystemInformation.FrameBorderSize.Width; 102 | top = windowRect.bottom - clientRect.bottom - SystemInformation.FrameBorderSize.Height; 103 | width = clientRect.right; 104 | height = clientRect.bottom; 105 | } 106 | break; 107 | case 1: 108 | // FullScreen 109 | left = 0; 110 | top = 0; 111 | width = int.Parse(sr.ReadLine().Split('\t')[1].ToString()); //FullScreenWidth 112 | height = int.Parse(sr.ReadLine().Split('\t')[1].ToString()); //FullScreenHeight 113 | break; 114 | case 2: 115 | // Virtual 116 | left = 0; 117 | top = 0; 118 | width = Screen.PrimaryScreen.Bounds.Width; 119 | height = Screen.PrimaryScreen.Bounds.Height; 120 | break; 121 | default: 122 | break; 123 | } 124 | 125 | screenRect = new Rectangle(new Point(left, top), new Size(width, height)); 126 | break; 127 | } 128 | } 129 | } 130 | return screenRect; 131 | } 132 | 133 | public static Widget GetPartyListLocation(string path) 134 | { 135 | return GetPartyListLocation(path, 0f); 136 | } 137 | 138 | public static Widget GetPartyListLocation(string path, float scale) 139 | { 140 | string textFile = Path.Combine(path, @"ADDON.DAT"); 141 | if (_lastWriteTime != File.GetLastWriteTime(textFile)) 142 | { 143 | _screenRect = GetWindowSize(path); 144 | Widget widget = new Widget(); 145 | widget.Rect = new Rectangle(new Point(0, 0), new Size(380, 408)); 146 | widget.Scale = 1.0f; 147 | 148 | _partyListUI = widget; 149 | _lastWriteTime = File.GetLastWriteTime(textFile); 150 | return _partyListUI; 151 | 152 | using (System.IO.StreamReader sr = new System.IO.StreamReader(textFile, System.Text.Encoding.GetEncoding("shift_jis"))) 153 | { 154 | string s = sr.ReadToEnd(); 155 | string[] textLine = s.Split('\n'); 156 | for (int i = 0; i < textLine.Length; i++) 157 | { 158 | if (textLine[i].Equals("n:_PartyList_a")) 159 | { 160 | float widthPercent = GetFloat(textLine[i + 2].Substring(2)); 161 | float heightPercent = GetFloat(textLine[i + 3].Substring(2)); 162 | int width = int.Parse(textLine[i + 4].Substring(2)); 163 | int height = int.Parse(textLine[i + 5].Substring(2)); 164 | float widgetScale = scale == 0f ? GetFloat(textLine[i + 7].Substring(2)) : scale; 165 | 166 | width = (int)(width * widgetScale); 167 | height = (int)(height * widgetScale); 168 | 169 | int x; 170 | if (widthPercent < 30) 171 | { 172 | x = (int)((_screenRect.Width * widthPercent / 100)); 173 | } 174 | else if (widthPercent < 70) 175 | { 176 | x = (int)((_screenRect.Width * (widthPercent / 100)) - (width / 2)); 177 | } 178 | else 179 | { 180 | x = (int)((_screenRect.Width * (widthPercent / 100)) - width); 181 | } 182 | x += _screenRect.Left; 183 | 184 | int y; 185 | if (heightPercent < 30) 186 | { 187 | y = (int)((_screenRect.Height * heightPercent / 100)); 188 | } 189 | else if (heightPercent < 80) 190 | { 191 | y = (int)((_screenRect.Height * (heightPercent / 100)) - (height / 2)); 192 | } 193 | else 194 | { 195 | y = (int)((_screenRect.Height * (heightPercent / 100)) - height); 196 | } 197 | y += _screenRect.Top; 198 | 199 | 200 | widget.Rect = new Rectangle(new Point(x, y), new Size(width, height)); 201 | widget.Scale = widgetScale; 202 | break; 203 | } 204 | } 205 | } 206 | _partyListUI = widget; 207 | _lastWriteTime = File.GetLastWriteTime(textFile); 208 | } 209 | return _partyListUI; 210 | } 211 | 212 | private static float GetFloat(string v) 213 | { 214 | if (v.IndexOf(".") > 0) 215 | return float.Parse(v, System.Globalization.CultureInfo.InvariantCulture); 216 | else 217 | { 218 | System.Globalization.CultureInfo cultureFr = new System.Globalization.CultureInfo("fr-fr"); 219 | return float.Parse(v, cultureFr); 220 | } 221 | } 222 | 223 | public static bool IsActive(IntPtr hWnd) 224 | { 225 | return hWnd == GetForegroundWindow(); 226 | } 227 | } 228 | } 229 | -------------------------------------------------------------------------------- /src/ACT.TPMonitor/TPMonitorController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Data; 4 | using System.Diagnostics; 5 | using System.Drawing; 6 | using System.Text; 7 | using Advanced_Combat_Tracker; 8 | using System.Text.RegularExpressions; 9 | using System.Threading; 10 | using System.Windows.Forms; 11 | 12 | namespace ACT.TPMonitor 13 | { 14 | public class TPMonitorController : IDisposable 15 | { 16 | public readonly Version SUPPORTED_VERSION = new Version("1.2.2.0"); 17 | 18 | public ActPluginData actPlugin { get; private set; } 19 | public bool IsUnSupportedVerion { get; private set; } 20 | public string CharFolder { get; set; } 21 | 22 | public bool IsACTVisible { get; set; } 23 | public bool IsFFXIVPluginStarted { get; set; } 24 | public bool IsFFXIVProcessStarted { get; set; } 25 | public bool IsLoggedIn { get; set; } 26 | public Point ViewLocation { get; set; } 27 | 28 | public Font TPFont { get; set; } 29 | public Widget PartyListUI { get; set; } 30 | 31 | public bool HideWhenDissolve { get; set; } 32 | public bool HideWhenEnded { get; set; } 33 | public bool ShowMyTP { get; set; } 34 | public bool DisappearsInActive { get; set; } 35 | 36 | public bool IsFixedMode { get; set; } 37 | public decimal OffsetX { get; set; } 38 | public decimal OffsetY { get; set; } 39 | public decimal FixedX { get; set; } 40 | public decimal FixedY { get; set; } 41 | public bool IsAllianceStyle { get; set; } 42 | public decimal AllianceX { get; set; } 43 | public decimal AllianceY { get; set; } 44 | public bool IsUserScale { get; set; } 45 | public float UserScale { get; set; } 46 | 47 | public SynchronizedCollection PartyMemberInfo { get; private set; } 48 | public SynchronizedCollection HideJob { get; set; } 49 | public DataTable dtColor { get; set; } 50 | 51 | private Regex regexCmd = new Regex(@"(?