From 1e9835372f6df1b1224a620ad648f50c9b4a1dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=9D=E7=91=AA=E8=B2=93?= Date: Thu, 8 Jun 2017 17:13:28 +0800 Subject: [PATCH] =?UTF-8?q?*=20Restructured=20the=20code=20and=20moved=20t?= =?UTF-8?q?he=20report=20creation=20to=20an=20independent=20module.=20=20M?= =?UTF-8?q?oved=20the=20IV=20sorting=20to=20the=20report=20module.=20=20Th?= =?UTF-8?q?e=20main=20module=20is=20now=20only=20doing=20IV=20finding.=20*?= =?UTF-8?q?=20Changed=20the=20reported=20estimated=20CPs=20from=20values?= =?UTF-8?q?=20to=20formulas.=20*=20Moved=20the=20localized=20Pok=C3=A9mon?= =?UTF-8?q?=20names=20from=20the=20DialogStrings=20to=20AddonConfiguration?= =?UTF-8?q?,=20so=20that=20they=20can=20also=20be=20used=20in=20the=20repo?= =?UTF-8?q?rt,=20too.=20*=20Changed=20the=20report=20logic=20to=20report?= =?UTF-8?q?=20the=20estimated=20maximum=20CPs=20of=20the=20last=20evolutio?= =?UTF-8?q?n=20forms,=20instead=20of=20several=20special=20rules.=20*=20Lo?= =?UTF-8?q?calized=20the=20report=20headers.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PokemonGoIV/0Main.vb | 449 +--- PokemonGoIV/1Dialog.vb | 13 + PokemonGoIV/2Report.vb | 379 ++++ PokemonGoIV/{2Data.vb => 3Data.vb} | 2 +- PokemonGoIV/9Load.vb | 2 +- TODO | 2 + oxt/AddonConfiguration.xcu | 1863 +++++++++++++++++ oxt/PokemonGoIV/0Main.xba | 449 +--- oxt/PokemonGoIV/1Dialog.xba | 13 + oxt/PokemonGoIV/2Report.xba | 382 ++++ oxt/PokemonGoIV/{2Data.xba => 3Data.xba} | 4 +- oxt/PokemonGoIV/9Load.xba | 2 +- .../DialogStrings_de_DE.properties | 251 --- .../DialogStrings_en_US.properties | 251 --- .../DialogStrings_zh_TW.properties | 251 --- oxt/PokemonGoIV/DlgMain.xdl | 251 --- oxt/PokemonGoIV/script.xlb | 3 +- 17 files changed, 2743 insertions(+), 1824 deletions(-) create mode 100644 PokemonGoIV/2Report.vb rename PokemonGoIV/{2Data.vb => 3Data.vb} (99%) create mode 100644 oxt/PokemonGoIV/2Report.xba rename oxt/PokemonGoIV/{2Data.xba => 3Data.xba} (99%) diff --git a/PokemonGoIV/0Main.vb b/PokemonGoIV/0Main.vb index b0eedec..11d0ff6 100644 --- a/PokemonGoIV/0Main.vb +++ b/PokemonGoIV/0Main.vb @@ -25,6 +25,7 @@ Type aStats nAttack As Integer nDefense As Integer mEvolved () As String + bIsLastForm As Boolean End Type ' The individual values of a Pokémon. @@ -33,15 +34,10 @@ Type aIV nStamina As Integer nAttack As Integer nDefense As Integer + ' For sorting nTotal As Integer nMaxCP As Integer - maEvolved () As aEvolvedStats -End Type - -' The calculated evolved stats of a Pokémon. -Type aEvolvedStats - nCP As Integer - nMaxCP As Integer + nMaxMaxCP As Integer End Type ' The parameters to find the individual values. @@ -76,49 +72,30 @@ Sub subMain If UBound (maIVs) = -1 Then MsgBox fnGetResString ("ErrorNotFound") Else - subSaveIV (aBaseStats, aQuery, maIVs) + subCreateReport (aBaseStats, aQuery, maIVs) End If End Sub ' fnFindIV: Finds the possible individual values of the Pokémon Function fnFindIV ( _ aBaseStats As aStats, aQuery As aFindIVParam) As Variant - Dim nEvolved As Integer - Dim maEvBaseStats () As New aStats, aTempStats As New aStats - Dim maIV () As New aIV, aTempIV As New aIV + Dim maIV () As New aIV, nN As Integer Dim fLevel As Double, nStamina As Integer Dim nAttack As Integer, nDefense As integer - Dim nI As Integer, nJ As Integer - Dim fStep As Double, nN As Integer, fMaxLevel As Double + Dim nI As Integer, nJ As Integer, fLevelStep As Double If aQuery.sPokemonId = "" Then fnFindIV = maIV Exit Function End If If aQuery.bIsNew Then - fStep = 1 + fLevelStep = 1 Else - fStep = 0.5 + fLevelStep = 0.5 End If subReadStardust - nEvolved = UBound (aBaseStats.mEvolved) - If nEvolved > -1 Then - ReDim Preserve maEvBaseStats (nEvolved) As New aStats - For nI = 0 To nEvolved - aTempStats = fnGetBaseStats (aBaseStats.mEvolved (nI)) - With maEvBaseStats (nI) - .nAttack = aTempStats.nAttack - .nDefense = aTempStats.nDefense - .nStamina = aTempStats.nStamina - End With - Next nI - End If nN = -1 - fMaxLevel = aQuery.nPlayerLevel + 1.5 - If fMaxLevel > 40 Then - fMaxLevel = 40 - End If - For fLevel = 1 To UBound (mStardust) Step fStep + For fLevel = 1 To UBound (mStardust) Step fLevelStep If mStardust (CInt (fLevel - 0.5)) = aQuery.nStardust Then For nStamina = 0 To 15 If fnCalcHP (aBaseStats, fLevel, nStamina) = aQuery.nHP Then @@ -133,30 +110,7 @@ Function fnFindIV ( _ .nAttack = nAttack .nDefense = nDefense .nStamina = nStamina - .nTotal = nAttack _ - + nDefense + nStamina End With - If aQuery.nPlayerLevel <> 0 Then - maIV (nN).nMaxCP = fnCalcCP ( _ - aBaseStats, fMaxLevel, _ - nAttack, nDefense, nStamina) - End If - maIV (nN).maEvolved _ - = fnGetEvolvedArray (nEvolved) - For nI = 0 To nEvolved - maIV (nN).maEvolved (nI).nCP _ - = fnCalcCP ( _ - maEvBaseStats (nI), _ - fLevel, nAttack, _ - nDefense, nStamina) - If aQuery.nPlayerLevel <> 0 Then - maIV (nN).maEvolved (nI).nMaxCP _ - = fnCalcCP ( _ - maEvBaseStats (nI), _ - fMaxLevel, nAttack, _ - nDefense, nStamina) - End If - Next nI End If Next nDefense Next nAttack @@ -164,309 +118,9 @@ Function fnFindIV ( _ Next nStamina End If Next fLevel - ' Sorts the IVs - For nI = 0 To UBound (maIV) - 1 - For nJ = nI + 1 To UBound (maIV) - If fnCompareIV (maIV (nI), maIV (nJ)) > 0 Then - ' This is an array of data. The data are actually - ' allocated in sequences. maIV (nI) is not a - ' reference. They cannot simply be assigned. - subCopyIV (maIV (nI), aTempIV) - subCopyIV (maIV (nJ), maIV (nI)) - subCopyIV (aTempIV, maIV (nJ)) - End If - Next nJ - Next nI fnFindIV = maIV End Function -' fnCompareIV: Compare two IVs for sorting -Function fnCompareIV (aIVa As aIV, aIVb As aIV) As Double - Dim nCPa As Integer, nCPb As Integer, nI As Integer - - nCPa = aIVa.nMaxCP - For nI = 0 To UBound (aIVa.maEvolved) - If nCPa < aIVa.maEvolved (nI).nMaxCP Then - nCPa = aIVa.maEvolved (nI).nMaxCP - End If - Next nI - nCPb = aIVb.nMaxCP - For nI = 0 To UBound (aIVb.maEvolved) - If nCPb < aIVb.maEvolved (nI).nMaxCP Then - nCPb = aIVb.maEvolved (nI).nMaxCP - End If - Next nI - fnCompareIV = nCPb - nCPa - If fnCompareIV <> 0 Then - Exit Function - End If - - nCPa = 0 - For nI = 0 To UBound (aIVa.maEvolved) - If nCPa < aIVa.maEvolved (nI).nCP Then - nCPa = aIVa.maEvolved (nI).nCP - End If - Next nI - nCPb = 0 - For nI = 0 To UBound (aIVb.maEvolved) - If nCPb < aIVb.maEvolved (nI).nCP Then - nCPb = aIVb.maEvolved (nI).nCP - End If - Next nI - fnCompareIV = nCPb - nCPa - If fnCompareIV <> 0 Then - Exit Function - End If - - fnCompareIV = aIVb.nTotal - aIVa.nTotal - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.fLevel - aIVa.fLevel - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.nStamina - aIVa.nStamina - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.nAttack - aIVa.nAttack - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.nDefense - aIVa.nDefense - If fnCompareIV <> 0 Then - Exit Function - End If -End Function - -' subCopyIV: Copies one IV to another -Function subCopyIV (aFrom As aIV, aTo As aIV) As Double - Dim nI As Integer - - With aTo - .nAttack = aFrom.nAttack - .nDefense = aFrom.nDefense - .nStamina = aFrom.nStamina - .nTotal = aFrom.nTotal - .nMaxCP = aFrom.nMaxCP - End With - aTo.maEvolved = fnGetEvolvedArray (UBound (aFrom.maEvolved)) - For nI = 0 To UBound (aFrom.maEvolved) - With aTo.maEvolved (nI) - .nCP = aFrom.maEvolved (nI).nCP - .nMaxCP = aFrom.maEvolved (nI).nMaxCP - End With - Next nI -End Function - -' subSaveIV: Saves the found IV -Sub subSaveIV ( _ - aBaseStats As aStats, aQuery As aFindIVParam, maIVs () As aIV) - Dim oDoc As Object, oSheet As Object - Dim oRange As Object, oColumns As Object, oRows As Object - Dim nI As Integer, nJ As Integer, nFront As Integer - Dim nEvolved As Integer - Dim mData (Ubound (maIVs) + 1) As Variant, mRow () As Variant - Dim mProps () As New com.sun.star.beans.PropertyValue - - oDoc = StarDesktop.loadComponentFromURL ( _ - "private:factory/scalc", "_default", 0, mProps) - oSheet = oDoc.getSheets.getByIndex (0) - nEvolved = UBound (maIVs (0).maEvolved) + 1 - - mRow = Array ( _ - "No", "Pokemon", "CP", "HP", "Stardust", _ - "Lv", "Atk", "Def", "Sta", "IV") - nFront = UBound (mRow) - If aQuery.sPokemonId = "Eevee" Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 6) As Variant - mRow (nFront + 1) = "CP as " _ - & aBaseStats.mEvolved (0) - mRow (nFront + 2) = "Powered-up as " _ - & aBaseStats.mEvolved (0) - mRow (nFront + 3) = "CP as " _ - & aBaseStats.mEvolved (1) - mRow (nFront + 4) = "Powered-up as " _ - & aBaseStats.mEvolved (1) - mRow (nFront + 5) = "CP as " _ - & aBaseStats.mEvolved (2) - mRow (nFront + 6) = "Powered-up as " _ - & aBaseStats.mEvolved (2) - Else - ReDim Preserve mRow (nFront + 3) As Variant - mRow (nFront + 1) = "CP as " _ - & aBaseStats.mEvolved (0) - mRow (nFront + 2) = "CP as " _ - & aBaseStats.mEvolved (1) - mRow (nFront + 3) = "CP as " _ - & aBaseStats.mEvolved (2) - End If - Else - If nEvolved = 0 Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 1) As Variant - mRow (nFront + 1) = "Powered-up" - End If - Else - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + nEvolved + 1) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = "CP as " _ - & aBaseStats.mEvolved (nJ) - Next nJ - mRow (UBound (mRow)) = "Powered-up as " _ - & aBaseStats.mEvolved (nEvolved - 1) - Else - ReDim Preserve mRow (nFront + nEvolved) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = "CP as " _ - & aBaseStats.mEvolved (nJ) - Next nJ - End If - End If - End If - mData (0) = mRow - - For nI = 0 To UBound (maIVs) - mRow = Array ( _ - "", "", "", "", "", _ - maIVs (nI).fLevel, maIVs (nI).nAttack, _ - maIVs (nI).nDefense, maIVs (nI).nStamina, _ - maIVs (nI).nTotal / 45) - If aQuery.sPokemonId = "Eevee" Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 6) As Variant - mRow (nFront + 1) = maIVs (nI).maEvolved (0).nCP - mRow (nFront + 2) = maIVs (nI).maEvolved (0).nMaxCP - mRow (nFront + 3) = maIVs (nI).maEvolved (1).nCP - mRow (nFront + 4) = maIVs (nI).maEvolved (1).nMaxCP - mRow (nFront + 5) = maIVs (nI).maEvolved (2).nCP - mRow (nFront + 6) = maIVs (nI).maEvolved (2).nMaxCP - Else - ReDim Preserve mRow (nFront + 3) As Variant - mRow (nFront + 1) = maIVs (nI).maEvolved (0).nCP - mRow (nFront + 2) = maIVs (nI).maEvolved (1).nCP - mRow (nFront + 3) = maIVs (nI).maEvolved (2).nCP - End If - Else - If nEvolved = 0 Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 1) As Variant - mRow (nFront + 1) = maIVs (nI).nMaxCP - End If - Else - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + nEvolved + 1) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = maIVs (nI).maEvolved (nJ).nCP - Next nJ - mRow (UBound (mRow)) = maIVs (nI).maEvolved (nEvolved - 1).nMaxCP - Else - ReDim Preserve mRow (nFront + nEvolved) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = maIVs (nI).maEvolved (nJ).nCP - Next nJ - End If - End If - End If - mData (nI + 1) = mRow - Next nI - - ' Fills the query information at the first row - mData (1) (0) = aBaseStats.sNo - mData (1) (1) = aQuery.sPokemonName - mData (1) (2) = aQuery.nCP - mData (1) (3) = aQuery.nHP - mData (1) (4) = aQuery.nStardust - - oRange = oSheet.getCellRangeByPosition ( _ - 0, 0, UBound (mData (0)), UBound (mData)) - oRange.setDataArray (mData) - oRange.setPropertyValue ("VertJustify", _ - com.sun.star.table.CellVertJustify.TOP) - - oRange = oSheet.getCellRangeByPosition ( _ - 0, 1, 0, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 1, 1, 1, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 2, 1, 2, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 3, 1, 3, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 4, 1, 4, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 9, 1, 9, UBound (mData)) - oRange.setPropertyValue ("NumberFormat", 10) - - If aQuery.sPokemonId = "Eevee" Then - oRange = oSheet.getCellRangeByPosition ( _ - 10, 0, 15, 0) - Else - If nEvolved = 0 Then - oRange = oSheet.getCellRangeByPosition ( _ - 10, 0, 10, 0) - Else - oRange = oSheet.getCellRangeByPosition ( _ - 10, 0, 10 + nEvolved + 1, 0) - End If - End If - oRange.setPropertyValue ("IsTextWrapped", True) - - oRows = oSheet.getRows - oRows.getByIndex (0).setPropertyValue ("Height", 840) - oColumns = oSheet.getColumns - oColumns.getByIndex (0).setPropertyValue ("Width", 890) - oColumns.getByIndex (1).setPropertyValue ("Width", 2310) - oColumns.getByIndex (2).setPropertyValue ("Width", 890) - oColumns.getByIndex (3).setPropertyValue ("Width", 890) - oColumns.getByIndex (4).setPropertyValue ("Width", 1780) - oColumns.getByIndex (5).setPropertyValue ("Width", 860) - oColumns.getByIndex (6).setPropertyValue ("Width", 860) - oColumns.getByIndex (7).setPropertyValue ("Width", 860) - oColumns.getByIndex (8).setPropertyValue ("Width", 860) - oColumns.getByIndex (9).setPropertyValue ("Width", 1030) - If aQuery.sPokemonId = "Eevee" Then - If aQuery.nPlayerLevel <> 0 Then - For nI = 0 To 5 Step 2 - oColumns.getByIndex (10 + nI).setPropertyValue ( _ - "Width", 2310) - oColumns.getByIndex (10 + nI + 1).setPropertyValue ( _ - "Width", 2810) - Next nI - Else - For nI = 0 To 2 - oColumns.getByIndex (10 + nI).setPropertyValue ( _ - "Width", 2310) - Next nI - End If - Else - If nEvolved = 0 Then - If aQuery.nPlayerLevel <> 0 Then - oColumns.getByIndex (10).setPropertyValue ( _ - "Width", 2200) - End If - Else - For nI = 0 To nEvolved - 1 - oColumns.getByIndex (10 + nI).setPropertyValue ( _ - "Width", 2310) - Next nI - If aQuery.nPlayerLevel <> 0 Then - oColumns.getByIndex ( _ - 10 + nEvolved).setPropertyValue ( _ - "Width", 2810) - End If - End If - End If -End Sub - ' fnFilterAppraisals: Filters the IV by the appraisals. Function fnFilterAppraisals (aQuery As aFindIVParam, _ nAttack As Integer, nDefense As Integer, _ @@ -585,8 +239,8 @@ Function fnGetCPM (fLevel As Double) As Double If CInt (fLevel) = fLevel Then fnGetCPM = mCPM (fLevel) Else - fnGetCPM = ((mCpm (fLevel - 0.5) ^ 2 _ - + mCpm (fLevel + 0.5) ^ 2) / 2) ^ 0.5 + fnGetCPM = ((mCPM (fLevel - 0.5) ^ 2 _ + + mCPM (fLevel + 0.5) ^ 2) / 2) ^ 0.5 End If End Function @@ -595,56 +249,6 @@ Function fnFloor (fNumber As Double) As Integer fnFloor = CInt (fNumber - 0.5) End Function -' fnMapPokemonIdToName: Maps the Pokémon IDs to their localized names. -Function fnMapPokemonIdToName (sId As String) As String - fnMapPokemonIdToName = fnGetResString ("Pokemon" & sId) -End Function - -' subReadBaseStats: Reads the base stats table. -Sub subReadBaseStats - Dim mData As Variant, nI As Integer, nJ As Integer - DIm nEvolved As Integer - - If UBound (maBaseStats) = -1 Then - mData = fnGetBaseStatsData - ReDim Preserve maBaseStats (UBound (mData)) As New aStats - For nI = 0 To UBound (mData) - With maBaseStats (nI) - .sNo = mData (nI) (1) - .sPokemonId = mData (nI) (0) - .nStamina = mData (nI) (2) - .nAttack = mData (nI) (3) - .nDefense = mData (nI) (4) - End With - nEvolved = UBound (mData (nI) (5)) - maBaseStats (nI).mEvolved = fnGetStringArray (nEvolved) - For nJ = 0 To nEvolved - maBaseStats (nI).mEvolved (nJ) = mData (nI) (5) (nJ) - Next nJ - Next nI - End If -End Sub - -' fnGetStringArray: Obtains a blank string array -Function fnGetStringArray (nUBound As Integer) As Variant - Dim mData () As String - - If nUBound >= 0 Then - ReDim Preserve mData (nUBound) As String - End If - fnGetStringArray = mData -End Function - -' fnGetEvolvedArray: Obtains a blank aEvolvedStats array -Function fnGetEvolvedArray (nUBound As Integer) As Variant - Dim mData () As New aEvolvedStats - - If nUBound >= 0 Then - ReDim Preserve mData (nUBound) As New aEvolvedStats - End If - fnGetEvolvedArray = mData -End Function - ' fnReplace: Replaces all occurrances of a term to another. Function fnReplace ( _ sText As String, sFrom As String, sTo As String) As String @@ -660,6 +264,37 @@ Function fnReplace ( _ fnReplace = sResult End Function +' subReadBaseStats: Reads the base stats table. +Sub subReadBaseStats + Dim mData As Variant, nI As Integer, nJ As Integer, nK As Integer + Dim nEvolved As Integer, mEvolved () As Variant + + If UBound (maBaseStats) = -1 Then + mData = fnGetBaseStatsData + ReDim Preserve maBaseStats (UBound (mData)) As New aStats + For nI = 0 To UBound (mData) + With maBaseStats (nI) + .sNo = mData (nI) (1) + .sPokemonId = mData (nI) (0) + .nStamina = mData (nI) (2) + .nAttack = mData (nI) (3) + .nDefense = mData (nI) (4) + End With + nEvolved = UBound (mData (nI) (5)) + 1 + mEvolved = Array () + maBaseStats (nI).bIsLastForm = True + If nEvolved > 0 Then + ReDim mEvolved (nEvolved - 1) As Variant + For nJ = 0 To nEvolved - 1 + mEvolved (nJ) = mData (nI) (5) (nJ) + Next nJ + maBaseStats (nI).mEvolved = mEvolved + maBaseStats (nI).bIsLastForm = False + End If + Next nI + End If +End Sub + ' subReadCPM: Reads the CPM table. Sub subReadCPM If UBound (mCPM) = -1 Then diff --git a/PokemonGoIV/1Dialog.vb b/PokemonGoIV/1Dialog.vb index 475d377..5794346 100644 --- a/PokemonGoIV/1Dialog.vb +++ b/PokemonGoIV/1Dialog.vb @@ -50,6 +50,19 @@ Function fnAskParam As aFindIVParam oDialog.getControl ("cbxBest3").setVisible (False) oDialog.getControl ("lstMax").setVisible (False) + ' Adds the Pokémons by their localized names. + subReadBaseStats + ReDim mPokemons (UBound (maBaseStats)) As String + For nI = 0 To UBound (maBaseStats) + mPokemons (nI) = fnGetResString ( _ + "Pokemon" & maBaseStats (nI).sPokemonId) + Next nI + oList = oDialog.getControl ("lstPokemon") + If oList.getItemCount > 0 Then + getItemCount.removeItems (0, oList.getItemCount) + End If + oList.addItems (mPokemons, 0) + oDialog.getControl ("imgPokemon").getModel.setPropertyValue ( _ "ImageURL", fnGetImageUrl ("Unknown")) oDialog.getControl ("imgTeamLogo").getModel.setPropertyValue ( _ diff --git a/PokemonGoIV/2Report.vb b/PokemonGoIV/2Report.vb new file mode 100644 index 0000000..06360f8 --- /dev/null +++ b/PokemonGoIV/2Report.vb @@ -0,0 +1,379 @@ +' Copyright (c) 2017 imacat. +' +' Licensed under the Apache License, Version 2.0 (the "License"); +' you may not use this file except in compliance with the License. +' You may obtain a copy of the License at +' +' http://www.apache.org/licenses/LICENSE-2.0 +' +' Unless required by applicable law or agreed to in writing, software +' distributed under the License is distributed on an "AS IS" BASIS, +' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +' See the License for the specific language governing permissions and +' limitations under the License. + +' 2Report: The Pokémon GO IV report generator. +' by imacat , 2017-06-07 + +Option Explicit + +' The base stats of a Pokémon. +Type aStats + sNo As String + sPokemonId As String + nStamina As Integer + nAttack As Integer + nDefense As Integer + mEvolved () As String +End Type + +' The individual values of a Pokémon. +Type aIV + fLevel As Double + nStamina As Integer + nAttack As Integer + nDefense As Integer + ' For sorting + nTotal As Integer + nMaxCP As Integer + nMaxMaxCP As Integer +End Type + +' The parameters to find the individual values. +Type aFindIVParam + sPokemonId As String + sPokemonName As String + nCP As Integer + nHP As Integer + nStardust As Integer + nPlayerLevel As Integer + bIsNew As Boolean + nTotal As Integer + sBest As String + nMax As Integer + bIsCancelled As Boolean +End Type + +' subCreateReport: Creates the Pokémon GO IV report. +Sub subCreateReport ( _ + aBaseStats As aStats, aQuery As aFindIVParam, maIVs () As aIV) + Dim oDoc As Object, oSheet As Object + Dim oRange As Object, oColumns As Object, oRows As Object + Dim oCell As Object, sFormula As String + Dim nI As Integer, nJ As Integer, nCol As Integer + Dim nLeadCols As Integer, nTotalCols As Integer + Dim nEvolved As Integer, fMaxLevel As Double + Dim sCPM As String, sMaxCPM As String + Dim sColIVAttack As String, sColIVDefense As String + Dim sColIVStamina As String + Dim sPokemonName As String + Dim mData (Ubound (maIVs) + 1) As Variant, mRow () As Variant + Dim maEvBaseStats () As Variant + Dim mProps () As New com.sun.star.beans.PropertyValue + + oDoc = StarDesktop.loadComponentFromURL ( _ + "private:factory/scalc", "_default", 0, mProps) + oSheet = oDoc.getSheets.getByIndex (0) + + nEvolved = UBound (aBaseStats.mEvolved) + 1 + If nEvolved > 0 Then + ReDim maEvBaseStats (nEvolved - 1) As Variant + For nJ = 0 To nEvolved - 1 + maEvBaseStats (nJ) = fnGetBaseStats (aBaseStats.mEvolved (nJ)) + Next nJ + End If + + If aQuery.nPlayerLevel <> 0 Then + fMaxLevel = aQuery.nPlayerLevel + 1.5 + If fMaxLevel > 40 Then + fMaxLevel = 40 + End If + Else + fMaxLevel = 40 + End If + sMaxCPM = fnGetCPMFormula (fMaxLevel) + + ' Sorts the IVs + subSortIVs (aBaseStats, maEvBaseStats, maIVs, fMaxLevel) + + ' Fills in the report data. + mRow = Array ( _ + fnGetResString ("ReportNo"), _ + fnGetResString ("ReportPokemon"), _ + fnGetResString ("ReportCP"), _ + fnGetResString ("ReportHP"), _ + fnGetResString ("ReportStardust"), _ + fnGetResString ("ReportLevel"), _ + fnGetResString ("ReportAttack"), _ + fnGetResString ("ReportDefense"), _ + fnGetResString ("ReportStamina"), _ + fnGetResString ("ReportIVPercent")) + nLeadCols = UBound (mRow) + 1 + + nTotalCols = nLeadCols + If aBaseStats.bIsLastForm Then + nTotalCols = nTotalCols + 1 + End If + For nJ = 0 To nEvolved - 1 + nTotalCols = nTotalCols + 1 + If maEvBaseStats (nJ).bIsLastForm Then + nTotalCols = nTotalCols + 1 + End If + Next nJ + + ReDim Preserve mRow (nTotalCols - 1) As Variant + nCol = nLeadCols + If aBaseStats.bIsLastForm Then + mRow (nCol) = fnReplace (fnGetResString ("ReportCPPowerUp"), _ + "[Level]", fMaxLevel) + nCol = nCol + 1 + End If + For nJ = 0 To nEvolved - 1 + sPokemonName = fnGetResString ( _ + "Pokemon" & aBaseStats.mEvolved (nJ)) + mRow (nCol) = fnReplace (fnGetResString ("ReportCPEvolve"), _ + "[Pokémon]", sPokemonName) + nCol = nCol + 1 + If maEvBaseStats (nJ).bIsLastForm Then + mRow (nCol) = fnReplace (fnReplace ( _ + fnGetResString ("ReportCPEvolvePowerUp"), _ + "[Pokémon]", sPokemonName), _ + "[Level]", fMaxLevel) + End If + Next nJ + mData (0) = mRow + + For nI = 0 To UBound (maIVs) + mRow = Array ( _ + "", "", "", "", "", _ + maIVs (nI).fLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina, "") + ReDim Preserve mRow (nTotalCols - 1) As Variant + For nJ = nLeadCols To nEvolved - 1 + mRow (nJ) = "" + Next nJ + mData (nI + 1) = mRow + Next nI + + ' Fills the query information at the first row + mData (1) (0) = aBaseStats.sNo + mData (1) (1) = aQuery.sPokemonName + mData (1) (2) = aQuery.nCP + mData (1) (3) = aQuery.nHP + mData (1) (4) = aQuery.nStardust + + oRange = oSheet.getCellRangeByPosition ( _ + 0, 0, UBound (mData (0)), UBound (mData)) + oRange.setDataArray (mData) + oRange.setPropertyValue ("VertJustify", _ + com.sun.star.table.CellVertJustify.TOP) + + ' Fills in the CP calculation. + For nI = 0 To UBound (maIVs) + sCPM = fnGetCPMFormula (maIVs (nI).fLevel) + sColIVAttack = "G" & (nI + 2) + sColIVDefense = "H" & (nI + 2) + sColIVStamina = "I" & (nI + 2) + + oCell = oSheet.getCellByPosition (nLeadCols - 1, nI + 1) + sFormula = "=(" & sColIVAttack & "+" & sColIVDefense _ + & "+" & sColIVStamina & ")/45" + oCell.setFormula (sFormula) + + nCol = nLeadCols + If aBaseStats.bIsLastForm Then + oCell = oSheet.getCellByPosition (nCol, nI + 1) + sFormula = fnGetCPFormula (aBaseStats, _ + sColIVAttack, sColIVDefense, sColIVStamina, sMaxCPM) + oCell.setFormula (sFormula) + nCol = nCol + 1 + End If + For nJ = 0 To nEvolved - 1 + oCell = oSheet.getCellByPosition (nCol, nI + 1) + sFormula = fnGetCPFormula (maEvBaseStats (nJ), _ + sColIVAttack, sColIVDefense, sColIVStamina, sCPM) + oCell.setFormula (sFormula) + nCol = nCol + 1 + If maEvBaseStats (nJ).bIsLastForm Then + oCell = oSheet.getCellByPosition (nCol, nI + 1) + sFormula = fnGetCPFormula (maEvBaseStats (nJ), _ + sColIVAttack, sColIVDefense, sColIVStamina, sMaxCPM) + oCell.setFormula (sFormula) + nCol = nCol + 1 + End If + Next nJ + Next nI + + oRange = oSheet.getCellRangeByPosition ( _ + 0, 1, 0, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 1, 1, 1, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 2, 1, 2, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 3, 1, 3, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 4, 1, 4, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 9, 1, 9, UBound (mData)) + oRange.setPropertyValue ("NumberFormat", 10) + + oRange = oSheet.getCellRangeByPosition ( _ + nLeadCols, 0, nTotalCols - 1, 0) + oRange.setPropertyValue ("IsTextWrapped", True) + + oColumns = oSheet.getColumns + oColumns.getByIndex (0).setPropertyValue ("Width", 890) + oColumns.getByIndex (1).setPropertyValue ("Width", 2310) + oColumns.getByIndex (2).setPropertyValue ("Width", 890) + oColumns.getByIndex (3).setPropertyValue ("Width", 890) + oColumns.getByIndex (4).setPropertyValue ("Width", 1780) + oColumns.getByIndex (5).setPropertyValue ("Width", 860) + oColumns.getByIndex (6).setPropertyValue ("Width", 860) + oColumns.getByIndex (7).setPropertyValue ("Width", 860) + oColumns.getByIndex (8).setPropertyValue ("Width", 860) + oColumns.getByIndex (9).setPropertyValue ("Width", 1030) + For nJ = nLeadCols To nTotalCols - 1 + oColumns.getByIndex (nJ).setPropertyValue ( _ + "Width", 2810) + Next nJ + oRows = oSheet.getRows + oRows.getByIndex (0).setPropertyValue ("OptimalHeight", True) +End Sub + +' subSortIVs: Sorts the IVs +Sub subSortIVs ( _ + aBaseStats As aStats, maEvBaseStats () As aIV, _ + maIVs () As aIV, fMaxLevel As Double) + Dim nI As Integer, nJ As Integer + Dim nCP As Integer + + ' Calculate the sorting keys. + For nI = 0 To UBound (maIVs) - 1 + maIVs (nI).nTotal = maIVs (nI).nAttack + maIVs (nI).nDefense _ + + maIVs (nI).nStamina + maIVs (nI).nMaxCP = fnCalcCP (aBaseStats, _ + maIVs (nI).fLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + maIVs (nI).nMaxMaxCP = fnCalcCP (aBaseStats, _ + fMaxLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + For nJ = 0 To UBound (aBaseStats.mEvolved) + nCP = fnCalcCP (maEvBaseStats (nJ), _ + maIVs (nI).fLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + If maIVs (nI).nMaxCP < nCP Then + maIVs (nI).nMaxCP = nCP + End If + nCP = fnCalcCP (maEvBaseStats (nJ), _ + fMaxLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + If maIVs (nI).nMaxMaxCP < nCP Then + maIVs (nI).nMaxMaxCP = nCP + End If + Next nJ + Next nI + ' Sort the IVs. + For nI = 0 To UBound (maIVs) - 1 + For nJ = nI + 1 To UBound (maIVs) + If fnCompareIV (maIVs (nI), maIVs (nJ)) > 0 Then + ' This is an array of data. The data are actually + ' allocated in sequences. maIVs (nI) is not a + ' reference. They cannot simply be assigned. + subSwapIV (maIVs (nI), maIVs (nJ)) + End If + Next nJ + Next nI +End Sub + +' fnCompareIV: Compare two IVs for sorting +Function fnCompareIV (aIVa As aIV, aIVb As aIV) As Double + Dim nCPa As Integer, nCPb As Integer, nI As Integer + + fnCompareIV = aIVb.nMaxMaxCP - aIVa.nMaxMaxCP + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nMaxCP - aIVa.nMaxCP + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nTotal - aIVa.nTotal + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.fLevel - aIVa.fLevel + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nStamina - aIVa.nStamina + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nAttack - aIVa.nAttack + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nDefense - aIVa.nDefense + If fnCompareIV <> 0 Then + Exit Function + End If +End Function + +' subSwapIV: Swaps two IVs +Function subSwapIV (aIVa As aIV, aIVb As aIV) As Double + Dim aTempIV As New aIV + + With aTempIV + .nAttack = aIVa.nAttack + .nDefense = aIVa.nDefense + .nStamina = aIVa.nStamina + .nTotal = aIVa.nTotal + .nMaxCP = aIVa.nMaxCP + .nMaxMaxCP = aIVa.nMaxMaxCP + End With + With aIVa + .nAttack = aIVb.nAttack + .nDefense = aIVb.nDefense + .nStamina = aIVb.nStamina + .nTotal = aIVb.nTotal + .nMaxCP = aIVb.nMaxCP + .nMaxMaxCP = aIVb.nMaxMaxCP + End With + With aIVb + .nAttack = aTempIV.nAttack + .nDefense = aTempIV.nDefense + .nStamina = aTempIV.nStamina + .nTotal = aTempIV.nTotal + .nMaxCP = aTempIV.nMaxCP + .nMaxMaxCP = aTempIV.nMaxMaxCP + End With +End Function + +' fnGetCPFormula: Obtains the CP formula +Function fnGetCPFormula ( _ + aBaseStats As aStats, sColIVAttack As String, _ + sColIVDefense As String, sColIVStamina As String, _ + sCPM As String) As String + fnGetCPFormula = "=FLOOR(" _ + & "(" & aBaseStats.nAttack & "+" & sColIVAttack & ")" _ + & "*SQRT(" & aBaseStats.nDefense & "+" & sColIVDefense & ")" _ + & "*SQRT(" & aBaseStats.nStamina & "+" & sColIVStamina & ")" _ + & "*POWER(" & sCPM & ";2)/10;1)" +End Function + +' fnGetCPMFormula: Obtains the CPM +Function fnGetCPMFormula (fLevel As Double) As String + If fLevel = CInt (fLevel) Then + fnGetCPMFormula = "" & mCPM (fLevel) + Else + fnGetCPMFormula = "SQRT((" _ + & "POWER(" & mCPM (fLevel - 0.5) & ";2)" _ + & "+POWER(" & mCPM (fLevel + 0.5) & ";2))/2)" + End If +End Function diff --git a/PokemonGoIV/2Data.vb b/PokemonGoIV/3Data.vb similarity index 99% rename from PokemonGoIV/2Data.vb rename to PokemonGoIV/3Data.vb index 9b20ba9..0d6a9cf 100644 --- a/PokemonGoIV/2Data.vb +++ b/PokemonGoIV/3Data.vb @@ -12,7 +12,7 @@ ' See the License for the specific language governing permissions and ' limitations under the License. -' 2Data: The Pokémon GO data for IV calculation +' 3Data: The Pokémon GO data for IV calculation ' by imacat , 2017-03-01 ' Generated with 9Load.subReadDataSheets () diff --git a/PokemonGoIV/9Load.vb b/PokemonGoIV/9Load.vb index 266eacd..2d54e2c 100644 --- a/PokemonGoIV/9Load.vb +++ b/PokemonGoIV/9Load.vb @@ -37,7 +37,7 @@ Sub subReadDataSheets & "' See the License for the specific language governing permissions and" & Chr (10) _ & "' limitations under the License." & Chr (10) _ & Chr (10) _ - & "' 2Data: The Pokémon GO data for IV calculation" & Chr (10) _ + & "' 3Data: The Pokémon GO data for IV calculation" & Chr (10) _ & "' by imacat , " & Format (Date (), "yyyy-mm-dd") & Chr (10) _ & "' Generated with 9Load.subReadDataSheets ()" & Chr (10) _ & Chr (10) _ diff --git a/TODO b/TODO index 7d37c53..976eed6 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,7 @@ PokemonGoIV TODO +* Update the Pokémon database for the complex evolution forms + like Eevee, Slowpoke, etc. * Center the dialog. * Pokémons that are not released in the game yet, so their image icons are missing. diff --git a/oxt/AddonConfiguration.xcu b/oxt/AddonConfiguration.xcu index 7712c4f..bff9b6f 100644 --- a/oxt/AddonConfiguration.xcu +++ b/oxt/AddonConfiguration.xcu @@ -83,6 +83,111 @@ 58 + + + + No. + + + No. + + + + + Pokémon + 寶可夢 + + Pokémon + + + + + CP + CP + + WP + + + + + HP + HP + + KP + + + + + Stardust + 星星沙子 + + Sternenstaub + + + + + Lv + + + Lv + + + + + Atk + + + Atk + + + + + Def + + + Def + + + + + Sta + + + Sta + + + + + IV% + IV% + + IV% + + + + + CP when powered-up to level [Level] + 強化到[Level]級後的CP + + CP when powered-up to level [Level] + + + + + CP when evolved to [Pokémon] + 進化為[Pokémon]後的CP + + CP when evolved to [Pokémon] + + + + + CP when evolved to [Pokémon] and powered-up to level [Level] + 進化為[Pokémon]並強化到[Level]級後的CP + + CP when evolved to [Pokémon] and powered-up to level [Level] + + @@ -338,6 +443,1764 @@ Seine Werte sind okay. + + + + Bulbasaur + 妙蛙種子 + Bisasam + + + + + Ivysaur + 妙蛙草 + Bisaknosp + + + + + Venusaur + 妙蛙花 + Bisaflor + + + + + Charmander + 小火龍 + Glumanda + + + + + Charmeleon + 火恐龍 + Glutexo + + + + + Charizard + 噴火龍 + Glurak + + + + + Squirtle + 傑尼龜 + Schiggy + + + + + Wartortle + 卡咪龜 + Schillok + + + + + Blastoise + 水箭龜 + Turtok + + + + + Caterpie + 綠毛蟲 + Raupy + + + + + Metapod + 鐵甲蛹 + Safcon + + + + + Butterfree + 巴大蝶 + Smettbo + + + + + Weedle + 獨角蟲 + Hornliu + + + + + Kakuna + 鐵殼蛹 + Kokuna + + + + + Beedrill + 大針蜂 + Bibor + + + + + Pidgey + 波波 + Taubsi + + + + + Pidgeotto + 比比鳥 + Tauboga + + + + + Pidgeot + 大比鳥 + Tauboss + + + + + Rattata + 小拉達 + Rattfratz + + + + + Raticate + 拉達 + Rattikarl + + + + + Spearow + 烈雀 + Habitak + + + + + Fearow + 大嘴雀 + Ibitak + + + + + Ekans + 阿柏蛇 + Rettan + + + + + Arbok + 阿柏怪 + Arbok + + + + + Pikachu + 皮卡丘 + Pikachu + + + + + Raichu + 雷丘 + Raichu + + + + + Sandshrew + 穿山鼠 + Sandan + + + + + Sandslash + 穿山王 + Sandamer + + + + + Nidoran♀ + 尼多蘭 + Nidoran♀ + + + + + Nidorina + 尼多娜 + Nidorina + + + + + Nidoqueen + 尼多后 + Nidoqueen + + + + + Nidoran♂ + 尼多朗 + Nidoran♂ + + + + + Nidorino + 尼多利諾 + Nidorino + + + + + Nidoking + 尼多王 + Nidoking + + + + + Clefairy + 皮皮 + Piepi + + + + + Clefable + 皮可西 + Pixi + + + + + Vulpix + 六尾 + Vulpix + + + + + Ninetales + 九尾 + Vulnona + + + + + Jigglypuff + 胖丁 + Pummeluff + + + + + Wigglytuff + 胖可丁 + Knuddeluff + + + + + Zubat + 超音蝠 + Zubat + + + + + Golbat + 大嘴蝠 + Golbat + + + + + Oddish + 走路草 + Myrapla + + + + + Gloom + 臭臭花 + Duflor + + + + + Vileplume + 霸王花 + Giflor + + + + + Paras + 派拉斯 + Paras + + + + + Parasect + 派拉斯特 + Parasek + + + + + Venonat + 毛球 + Bluzuk + + + + + Venomoth + 摩魯蛾 + Omot + + + + + Diglett + 地鼠 + Digda + + + + + Dugtrio + 三地鼠 + Digdri + + + + + Meowth + 喵喵 + Mauzi + + + + + Persian + 貓老大 + Snobilikat + + + + + Psyduck + 可達鴨 + Enton + + + + + Golduck + 哥達鴨 + Entoron + + + + + Mankey + 猴怪 + Menki + + + + + Primeape + 火爆猴 + Rasaff + + + + + Growlithe + 卡蒂狗 + Fukano + + + + + Arcanine + 風速狗 + Arkani + + + + + Poliwag + 蚊香蝌蚪 + Quapsel + + + + + Poliwhirl + 蚊香君 + Quaputzi + + + + + Poliwrath + 蚊香泳士 + Quappo + + + + + Abra + 凱西 + Abra + + + + + Kadabra + 勇基拉 + Kadabra + + + + + Alakazam + 胡地 + Simsala + + + + + Machop + 腕力 + Machollo + + + + + Machoke + 豪力 + Maschock + + + + + Machamp + 怪力 + Machomei + + + + + Bellsprout + 喇叭芽 + Knofensa + + + + + Weepinbell + 口呆花 + Ultrigaria + + + + + Victreebel + 大食花 + Sarzenia + + + + + Tentacool + 瑪瑙水母 + Tentacha + + + + + Tentacruel + 毒刺水母 + Tentoxa + + + + + Geodude + 小拳石 + Kleinstein + + + + + Graveler + 隆隆石 + Georok + + + + + Golem + 隆隆岩 + Geowaz + + + + + Ponyta + 小火馬 + Ponita + + + + + Rapidash + 烈焰馬 + Gallopa + + + + + Slowpoke + 呆呆獸 + Flegmon + + + + + Slowbro + 呆殼獸 + Lahmus + + + + + Magnemite + 小磁怪 + Magnetilo + + + + + Magneton + 三合一磁怪 + Magneton + + + + + Farfetch'd + 大蔥鴨 + Porenta + + + + + Doduo + 嘟嘟 + Dodu + + + + + Dodrio + 嘟嘟利 + Dodri + + + + + Seel + 小海獅 + Jurob + + + + + Dewgong + 白海獅 + Jugong + + + + + Grimer + 臭泥 + Sleima + + + + + Muk + 臭臭泥 + Sleimok + + + + + Shellder + 大舌貝 + Muschas + + + + + Cloyster + 刺甲貝 + Austos + + + + + Gastly + 鬼斯 + Nebulak + + + + + Haunter + 鬼斯通 + Alpollo + + + + + Gengar + 耿鬼 + Gengar + + + + + Onix + 大岩蛇 + Onix + + + + + Drowzee + 催眠貘 + Traumato + + + + + Hypno + 引夢貘人 + Hypno + + + + + Krabby + 大鉗蟹 + Krabby + + + + + Kingler + 巨鉗蟹 + Kingler + + + + + Voltorb + 霹靂電球 + Voltobal + + + + + Electrode + 頑皮雷彈 + Lektrobal + + + + + Exeggcute + 蛋蛋 + Owei + + + + + Exeggutor + 椰蛋樹 + Kokowei + + + + + Cubone + 卡拉卡拉 + Tragosso + + + + + Marowak + 嘎啦嘎啦 + Knogga + + + + + Hitmonlee + 飛腿郎 + Kicklee + + + + + Hitmonchan + 快拳郎 + Nockchan + + + + + Lickitung + 大舌頭 + Schlurp + + + + + Koffing + 瓦斯蛋 + Smogon + + + + + Weezing + 雙彈瓦斯 + Smogmog + + + + + Rhyhorn + 獨角犀牛 + Rihorn + + + + + Rhydon + 鑽角犀獸 + Rizeros + + + + + Chansey + 吉利蛋 + Chaneira + + + + + Tangela + 蔓藤怪 + Tangela + + + + + Kangaskhan + 袋獸 + Kangama + + + + + Horsea + 墨海馬 + Seeper + + + + + Seadra + 海刺龍 + Seemon + + + + + Goldeen + 角金魚 + Goldini + + + + + Seaking + 金魚王 + Golking + + + + + Staryu + 海星星 + Sterndu + + + + + Starmie + 寶石海星 + Starmie + + + + + Mr. Mime + 魔牆人偶 + Pantimos + + + + + Scyther + 飛天螳螂 + Sichlor + + + + + Jynx + 迷唇姐 + Rossana + + + + + Electabuzz + 電擊獸 + Elektek + + + + + Magmar + 鴨嘴火獸 + Magmar + + + + + Pinsir + 凱羅斯 + Pinsir + + + + + Tauros + 肯泰羅 + Tauros + + + + + Magikarp + 鯉魚王 + Karpador + + + + + Gyarados + 暴鯉龍 + Garados + + + + + Lapras + 拉普拉斯 + Lapras + + + + + Ditto + 百變怪 + Ditto + + + + + Eevee + 伊布 + Evoli + + + + + Vaporeon + 水伊布 + Aquana + + + + + Jolteon + 雷伊布 + Blitza + + + + + Flareon + 火伊布 + Flamara + + + + + Porygon + 多邊獸 + Porygon + + + + + Omanyte + 菊石獸 + Amonitas + + + + + Omastar + 多刺菊石獸 + Amoroso + + + + + Kabuto + 化石盔 + Kabuto + + + + + Kabutops + 鐮刀盔 + Kabutops + + + + + Aerodactyl + 化石翼龍 + Aerodactyl + + + + + Snorlax + 卡比獸 + Relaxo + + + + + Articuno + 急凍鳥 + Arktos + + + + + Zapdos + 閃電鳥 + Zapdos + + + + + Moltres + 火焰鳥 + Lavados + + + + + Dratini + 迷你龍 + Dratini + + + + + Dragonair + 哈克龍 + Dragonir + + + + + Dragonite + 快龍 + Dragoran + + + + + Mewtwo + 超夢 + Mewtu + + + + + Mew + 夢幻 + Mew + + + + + Chikorita + 菊草葉 + Endivie + + + + + Bayleef + 月桂葉 + Lorblatt + + + + + Meganium + 大竺葵 + Meganie + + + + + Cyndaquil + 火球鼠 + Feurigel + + + + + Quilava + 火岩鼠 + Igelavar + + + + + Typhlosion + 火爆獸 + Tornupto + + + + + Totodile + 小鋸鱷 + Karnimani + + + + + Croconaw + 藍鱷 + Tyracroc + + + + + Feraligatr + 大力鱷 + Impergator + + + + + Sentret + 尾立 + Wiesor + + + + + Furret + 大尾立 + Wiesenior + + + + + Hoothoot + 咕咕 + Hoothoot + + + + + Noctowl + 貓頭夜鷹 + Noctuh + + + + + Ledyba + 芭瓢蟲 + Ledyba + + + + + Ledian + 安瓢蟲 + Ledian + + + + + Spinarak + 圓絲蛛 + Webarak + + + + + Ariados + 阿利多斯 + Ariados + + + + + Crobat + 叉字蝠 + Iksbat + + + + + Chinchou + 燈籠魚 + Lampi + + + + + Lanturn + 電燈怪 + Lanturn + + + + + Pichu + 皮丘 + Pichu + + + + + Cleffa + 皮寶寶 + Pii + + + + + Igglybuff + 寶寶丁 + Fluffeluff + + + + + Togepi + 波克比 + Togepi + + + + + Togetic + 波克基古 + Togetic + + + + + Natu + 天然雀 + Natu + + + + + Xatu + 天然鳥 + Xatu + + + + + Mareep + 咩利羊 + Voltilamm + + + + + Flaaffy + 茸茸羊 + Waaty + + + + + Ampharos + 電龍 + Ampharos + + + + + Bellossom + 美麗花 + Blubella + + + + + Marill + 瑪力露 + Marill + + + + + Azumarill + 瑪力露麗 + Azumarill + + + + + Sudowoodo + 樹才怪 + Mogelbaum + + + + + Politoed + 蚊香蛙皇 + Quaxo + + + + + Hoppip + 毽子草 + Hoppspross + + + + + Skiploom + 毽子花 + Hubelupf + + + + + Jumpluff + 毽子棉 + Papungha + + + + + Aipom + 長尾怪手 + Griffel + + + + + Sunkern + 向日種子 + Sonnkern + + + + + Sunflora + 向日花怪 + Sonnflora + + + + + Yanma + 蜻蜻蜓 + Yanma + + + + + Wooper + 烏波 + Felino + + + + + Quagsire + 沼王 + Morlord + + + + + Espeon + 太陽伊布 + Psiana + + + + + Umbreon + 月亮伊布 + Nachtara + + + + + Murkrow + 黑暗鴉 + Kramurx + + + + + Slowking + 呆呆王 + Laschoking + + + + + Misdreavus + 夢妖 + Traunfugil + + + + + Unown + 未知圖騰 + Icognito + + + + + Wobbuffet + 果然翁 + Woingenau + + + + + Girafarig + 麒麟奇 + Girafarig + + + + + Pineco + 榛果球 + Tannza + + + + + Forretress + 佛烈托斯 + Forstellka + + + + + Dunsparce + 土龍弟弟 + Dummisel + + + + + Gligar + 天蠍 + Skorgla + + + + + Steelix + 大鋼蛇 + Stahlos + + + + + Snubbull + 布魯 + Snubbull + + + + + Granbull + 布魯皇 + Granbull + + + + + Qwilfish + 千針魚 + Baldorfish + + + + + Scizor + 巨鉗螳螂 + Scherox + + + + + Shuckle + 壺壺 + Pottrott + + + + + Heracross + 赫拉克羅斯 + Skaraborn + + + + + Sneasel + 狃拉 + Sniebel + + + + + Teddiursa + 熊寶寶 + Teddiursa + + + + + Ursaring + 圈圈熊 + Ursaring + + + + + Slugma + 熔岩蟲 + Schneckmag + + + + + Magcargo + 熔岩蝸牛 + Magcargo + + + + + Swinub + 小山豬 + Quiekel + + + + + Piloswine + 長毛豬 + Keifel + + + + + Corsola + 太陽珊瑚 + Corasonn + + + + + Remoraid + 鐵炮魚 + Remoraid + + + + + Octillery + 章魚桶 + Octillery + + + + + Delibird + 信使鳥 + Botogel + + + + + Mantine + 巨翅飛魚 + Mantax + + + + + Skarmory + 盔甲鳥 + Panzaeron + + + + + Houndour + 戴魯比 + Hunduster + + + + + Houndoom + 黑魯加 + Hundemon + + + + + Kingdra + 刺龍王 + Seedraking + + + + + Phanpy + 小小象 + Phanpy + + + + + Donphan + 頓甲 + Donphan + + + + + Porygon2 + 多邊獸Ⅱ + Porygon2 + + + + + Stantler + 驚角鹿 + Damhirplex + + + + + Smeargle + 圖圖犬 + Farbeagle + + + + + Tyrogue + 無畏小子 + Rabauz + + + + + Hitmontop + 戰舞郎 + Kapoera + + + + + Smoochum + 迷唇娃 + Kussilla + + + + + Elekid + 電擊怪 + Elekid + + + + + Magby + 鴨嘴寶寶 + Magby + + + + + Miltank + 大奶罐 + Miltank + + + + + Blissey + 幸福蛋 + Heiteira + + + + + Raikou + 雷公 + Raikou + + + + + Entei + 炎帝 + Entei + + + + + Suicune + 水君 + Suicune + + + + + Larvitar + 幼基拉斯 + Larvitar + + + + + Pupitar + 沙基拉斯 + Pupitar + + + + + Tyranitar + 班基拉斯 + Despotar + + + + + Lugia + 洛奇亞 + Lugia + + + + + Ho-Oh + 鳳王 + Ho-Oh + + + + + Celebi + 時拉比 + Celebi + + diff --git a/oxt/PokemonGoIV/0Main.xba b/oxt/PokemonGoIV/0Main.xba index dd464a0..51f0b13 100644 --- a/oxt/PokemonGoIV/0Main.xba +++ b/oxt/PokemonGoIV/0Main.xba @@ -27,6 +27,7 @@ Type aStats nAttack As Integer nDefense As Integer mEvolved () As String + bIsLastForm As Boolean End Type ' The individual values of a Pokémon. @@ -35,15 +36,10 @@ Type aIV nStamina As Integer nAttack As Integer nDefense As Integer + ' For sorting nTotal As Integer nMaxCP As Integer - maEvolved () As aEvolvedStats -End Type - -' The calculated evolved stats of a Pokémon. -Type aEvolvedStats - nCP As Integer - nMaxCP As Integer + nMaxMaxCP As Integer End Type ' The parameters to find the individual values. @@ -78,49 +74,30 @@ Sub subMain If UBound (maIVs) = -1 Then MsgBox fnGetResString ("ErrorNotFound") Else - subSaveIV (aBaseStats, aQuery, maIVs) + subCreateReport (aBaseStats, aQuery, maIVs) End If End Sub ' fnFindIV: Finds the possible individual values of the Pokémon Function fnFindIV ( _ aBaseStats As aStats, aQuery As aFindIVParam) As Variant - Dim nEvolved As Integer - Dim maEvBaseStats () As New aStats, aTempStats As New aStats - Dim maIV () As New aIV, aTempIV As New aIV + Dim maIV () As New aIV, nN As Integer Dim fLevel As Double, nStamina As Integer Dim nAttack As Integer, nDefense As integer - Dim nI As Integer, nJ As Integer - Dim fStep As Double, nN As Integer, fMaxLevel As Double + Dim nI As Integer, nJ As Integer, fLevelStep As Double If aQuery.sPokemonId = "" Then fnFindIV = maIV Exit Function End If If aQuery.bIsNew Then - fStep = 1 + fLevelStep = 1 Else - fStep = 0.5 + fLevelStep = 0.5 End If subReadStardust - nEvolved = UBound (aBaseStats.mEvolved) - If nEvolved > -1 Then - ReDim Preserve maEvBaseStats (nEvolved) As New aStats - For nI = 0 To nEvolved - aTempStats = fnGetBaseStats (aBaseStats.mEvolved (nI)) - With maEvBaseStats (nI) - .nAttack = aTempStats.nAttack - .nDefense = aTempStats.nDefense - .nStamina = aTempStats.nStamina - End With - Next nI - End If nN = -1 - fMaxLevel = aQuery.nPlayerLevel + 1.5 - If fMaxLevel > 40 Then - fMaxLevel = 40 - End If - For fLevel = 1 To UBound (mStardust) Step fStep + For fLevel = 1 To UBound (mStardust) Step fLevelStep If mStardust (CInt (fLevel - 0.5)) = aQuery.nStardust Then For nStamina = 0 To 15 If fnCalcHP (aBaseStats, fLevel, nStamina) = aQuery.nHP Then @@ -135,30 +112,7 @@ Function fnFindIV ( _ .nAttack = nAttack .nDefense = nDefense .nStamina = nStamina - .nTotal = nAttack _ - + nDefense + nStamina End With - If aQuery.nPlayerLevel <> 0 Then - maIV (nN).nMaxCP = fnCalcCP ( _ - aBaseStats, fMaxLevel, _ - nAttack, nDefense, nStamina) - End If - maIV (nN).maEvolved _ - = fnGetEvolvedArray (nEvolved) - For nI = 0 To nEvolved - maIV (nN).maEvolved (nI).nCP _ - = fnCalcCP ( _ - maEvBaseStats (nI), _ - fLevel, nAttack, _ - nDefense, nStamina) - If aQuery.nPlayerLevel <> 0 Then - maIV (nN).maEvolved (nI).nMaxCP _ - = fnCalcCP ( _ - maEvBaseStats (nI), _ - fMaxLevel, nAttack, _ - nDefense, nStamina) - End If - Next nI End If Next nDefense Next nAttack @@ -166,309 +120,9 @@ Function fnFindIV ( _ Next nStamina End If Next fLevel - ' Sorts the IVs - For nI = 0 To UBound (maIV) - 1 - For nJ = nI + 1 To UBound (maIV) - If fnCompareIV (maIV (nI), maIV (nJ)) > 0 Then - ' This is an array of data. The data are actually - ' allocated in sequences. maIV (nI) is not a - ' reference. They cannot simply be assigned. - subCopyIV (maIV (nI), aTempIV) - subCopyIV (maIV (nJ), maIV (nI)) - subCopyIV (aTempIV, maIV (nJ)) - End If - Next nJ - Next nI fnFindIV = maIV End Function -' fnCompareIV: Compare two IVs for sorting -Function fnCompareIV (aIVa As aIV, aIVb As aIV) As Double - Dim nCPa As Integer, nCPb As Integer, nI As Integer - - nCPa = aIVa.nMaxCP - For nI = 0 To UBound (aIVa.maEvolved) - If nCPa < aIVa.maEvolved (nI).nMaxCP Then - nCPa = aIVa.maEvolved (nI).nMaxCP - End If - Next nI - nCPb = aIVb.nMaxCP - For nI = 0 To UBound (aIVb.maEvolved) - If nCPb < aIVb.maEvolved (nI).nMaxCP Then - nCPb = aIVb.maEvolved (nI).nMaxCP - End If - Next nI - fnCompareIV = nCPb - nCPa - If fnCompareIV <> 0 Then - Exit Function - End If - - nCPa = 0 - For nI = 0 To UBound (aIVa.maEvolved) - If nCPa < aIVa.maEvolved (nI).nCP Then - nCPa = aIVa.maEvolved (nI).nCP - End If - Next nI - nCPb = 0 - For nI = 0 To UBound (aIVb.maEvolved) - If nCPb < aIVb.maEvolved (nI).nCP Then - nCPb = aIVb.maEvolved (nI).nCP - End If - Next nI - fnCompareIV = nCPb - nCPa - If fnCompareIV <> 0 Then - Exit Function - End If - - fnCompareIV = aIVb.nTotal - aIVa.nTotal - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.fLevel - aIVa.fLevel - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.nStamina - aIVa.nStamina - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.nAttack - aIVa.nAttack - If fnCompareIV <> 0 Then - Exit Function - End If - fnCompareIV = aIVb.nDefense - aIVa.nDefense - If fnCompareIV <> 0 Then - Exit Function - End If -End Function - -' subCopyIV: Copies one IV to another -Function subCopyIV (aFrom As aIV, aTo As aIV) As Double - Dim nI As Integer - - With aTo - .nAttack = aFrom.nAttack - .nDefense = aFrom.nDefense - .nStamina = aFrom.nStamina - .nTotal = aFrom.nTotal - .nMaxCP = aFrom.nMaxCP - End With - aTo.maEvolved = fnGetEvolvedArray (UBound (aFrom.maEvolved)) - For nI = 0 To UBound (aFrom.maEvolved) - With aTo.maEvolved (nI) - .nCP = aFrom.maEvolved (nI).nCP - .nMaxCP = aFrom.maEvolved (nI).nMaxCP - End With - Next nI -End Function - -' subSaveIV: Saves the found IV -Sub subSaveIV ( _ - aBaseStats As aStats, aQuery As aFindIVParam, maIVs () As aIV) - Dim oDoc As Object, oSheet As Object - Dim oRange As Object, oColumns As Object, oRows As Object - Dim nI As Integer, nJ As Integer, nFront As Integer - Dim nEvolved As Integer - Dim mData (Ubound (maIVs) + 1) As Variant, mRow () As Variant - Dim mProps () As New com.sun.star.beans.PropertyValue - - oDoc = StarDesktop.loadComponentFromURL ( _ - "private:factory/scalc", "_default", 0, mProps) - oSheet = oDoc.getSheets.getByIndex (0) - nEvolved = UBound (maIVs (0).maEvolved) + 1 - - mRow = Array ( _ - "No", "Pokemon", "CP", "HP", "Stardust", _ - "Lv", "Atk", "Def", "Sta", "IV") - nFront = UBound (mRow) - If aQuery.sPokemonId = "Eevee" Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 6) As Variant - mRow (nFront + 1) = "CP as " _ - & aBaseStats.mEvolved (0) - mRow (nFront + 2) = "Powered-up as " _ - & aBaseStats.mEvolved (0) - mRow (nFront + 3) = "CP as " _ - & aBaseStats.mEvolved (1) - mRow (nFront + 4) = "Powered-up as " _ - & aBaseStats.mEvolved (1) - mRow (nFront + 5) = "CP as " _ - & aBaseStats.mEvolved (2) - mRow (nFront + 6) = "Powered-up as " _ - & aBaseStats.mEvolved (2) - Else - ReDim Preserve mRow (nFront + 3) As Variant - mRow (nFront + 1) = "CP as " _ - & aBaseStats.mEvolved (0) - mRow (nFront + 2) = "CP as " _ - & aBaseStats.mEvolved (1) - mRow (nFront + 3) = "CP as " _ - & aBaseStats.mEvolved (2) - End If - Else - If nEvolved = 0 Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 1) As Variant - mRow (nFront + 1) = "Powered-up" - End If - Else - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + nEvolved + 1) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = "CP as " _ - & aBaseStats.mEvolved (nJ) - Next nJ - mRow (UBound (mRow)) = "Powered-up as " _ - & aBaseStats.mEvolved (nEvolved - 1) - Else - ReDim Preserve mRow (nFront + nEvolved) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = "CP as " _ - & aBaseStats.mEvolved (nJ) - Next nJ - End If - End If - End If - mData (0) = mRow - - For nI = 0 To UBound (maIVs) - mRow = Array ( _ - "", "", "", "", "", _ - maIVs (nI).fLevel, maIVs (nI).nAttack, _ - maIVs (nI).nDefense, maIVs (nI).nStamina, _ - maIVs (nI).nTotal / 45) - If aQuery.sPokemonId = "Eevee" Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 6) As Variant - mRow (nFront + 1) = maIVs (nI).maEvolved (0).nCP - mRow (nFront + 2) = maIVs (nI).maEvolved (0).nMaxCP - mRow (nFront + 3) = maIVs (nI).maEvolved (1).nCP - mRow (nFront + 4) = maIVs (nI).maEvolved (1).nMaxCP - mRow (nFront + 5) = maIVs (nI).maEvolved (2).nCP - mRow (nFront + 6) = maIVs (nI).maEvolved (2).nMaxCP - Else - ReDim Preserve mRow (nFront + 3) As Variant - mRow (nFront + 1) = maIVs (nI).maEvolved (0).nCP - mRow (nFront + 2) = maIVs (nI).maEvolved (1).nCP - mRow (nFront + 3) = maIVs (nI).maEvolved (2).nCP - End If - Else - If nEvolved = 0 Then - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + 1) As Variant - mRow (nFront + 1) = maIVs (nI).nMaxCP - End If - Else - If aQuery.nPlayerLevel <> 0 Then - ReDim Preserve mRow (nFront + nEvolved + 1) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = maIVs (nI).maEvolved (nJ).nCP - Next nJ - mRow (UBound (mRow)) = maIVs (nI).maEvolved (nEvolved - 1).nMaxCP - Else - ReDim Preserve mRow (nFront + nEvolved) As Variant - For nJ = 0 To nEvolved - 1 - mRow (nFront + nJ + 1) = maIVs (nI).maEvolved (nJ).nCP - Next nJ - End If - End If - End If - mData (nI + 1) = mRow - Next nI - - ' Fills the query information at the first row - mData (1) (0) = aBaseStats.sNo - mData (1) (1) = aQuery.sPokemonName - mData (1) (2) = aQuery.nCP - mData (1) (3) = aQuery.nHP - mData (1) (4) = aQuery.nStardust - - oRange = oSheet.getCellRangeByPosition ( _ - 0, 0, UBound (mData (0)), UBound (mData)) - oRange.setDataArray (mData) - oRange.setPropertyValue ("VertJustify", _ - com.sun.star.table.CellVertJustify.TOP) - - oRange = oSheet.getCellRangeByPosition ( _ - 0, 1, 0, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 1, 1, 1, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 2, 1, 2, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 3, 1, 3, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 4, 1, 4, UBound (mData)) - oRange.merge (True) - oRange = oSheet.getCellRangeByPosition ( _ - 9, 1, 9, UBound (mData)) - oRange.setPropertyValue ("NumberFormat", 10) - - If aQuery.sPokemonId = "Eevee" Then - oRange = oSheet.getCellRangeByPosition ( _ - 10, 0, 15, 0) - Else - If nEvolved = 0 Then - oRange = oSheet.getCellRangeByPosition ( _ - 10, 0, 10, 0) - Else - oRange = oSheet.getCellRangeByPosition ( _ - 10, 0, 10 + nEvolved + 1, 0) - End If - End If - oRange.setPropertyValue ("IsTextWrapped", True) - - oRows = oSheet.getRows - oRows.getByIndex (0).setPropertyValue ("Height", 840) - oColumns = oSheet.getColumns - oColumns.getByIndex (0).setPropertyValue ("Width", 890) - oColumns.getByIndex (1).setPropertyValue ("Width", 2310) - oColumns.getByIndex (2).setPropertyValue ("Width", 890) - oColumns.getByIndex (3).setPropertyValue ("Width", 890) - oColumns.getByIndex (4).setPropertyValue ("Width", 1780) - oColumns.getByIndex (5).setPropertyValue ("Width", 860) - oColumns.getByIndex (6).setPropertyValue ("Width", 860) - oColumns.getByIndex (7).setPropertyValue ("Width", 860) - oColumns.getByIndex (8).setPropertyValue ("Width", 860) - oColumns.getByIndex (9).setPropertyValue ("Width", 1030) - If aQuery.sPokemonId = "Eevee" Then - If aQuery.nPlayerLevel <> 0 Then - For nI = 0 To 5 Step 2 - oColumns.getByIndex (10 + nI).setPropertyValue ( _ - "Width", 2310) - oColumns.getByIndex (10 + nI + 1).setPropertyValue ( _ - "Width", 2810) - Next nI - Else - For nI = 0 To 2 - oColumns.getByIndex (10 + nI).setPropertyValue ( _ - "Width", 2310) - Next nI - End If - Else - If nEvolved = 0 Then - If aQuery.nPlayerLevel <> 0 Then - oColumns.getByIndex (10).setPropertyValue ( _ - "Width", 2200) - End If - Else - For nI = 0 To nEvolved - 1 - oColumns.getByIndex (10 + nI).setPropertyValue ( _ - "Width", 2310) - Next nI - If aQuery.nPlayerLevel <> 0 Then - oColumns.getByIndex ( _ - 10 + nEvolved).setPropertyValue ( _ - "Width", 2810) - End If - End If - End If -End Sub - ' fnFilterAppraisals: Filters the IV by the appraisals. Function fnFilterAppraisals (aQuery As aFindIVParam, _ nAttack As Integer, nDefense As Integer, _ @@ -587,8 +241,8 @@ Function fnGetCPM (fLevel As Double) As Double If CInt (fLevel) = fLevel Then fnGetCPM = mCPM (fLevel) Else - fnGetCPM = ((mCpm (fLevel - 0.5) ^ 2 _ - + mCpm (fLevel + 0.5) ^ 2) / 2) ^ 0.5 + fnGetCPM = ((mCPM (fLevel - 0.5) ^ 2 _ + + mCPM (fLevel + 0.5) ^ 2) / 2) ^ 0.5 End If End Function @@ -597,56 +251,6 @@ Function fnFloor (fNumber As Double) As Integer fnFloor = CInt (fNumber - 0.5) End Function -' fnMapPokemonIdToName: Maps the Pokémon IDs to their localized names. -Function fnMapPokemonIdToName (sId As String) As String - fnMapPokemonIdToName = fnGetResString ("Pokemon" & sId) -End Function - -' subReadBaseStats: Reads the base stats table. -Sub subReadBaseStats - Dim mData As Variant, nI As Integer, nJ As Integer - DIm nEvolved As Integer - - If UBound (maBaseStats) = -1 Then - mData = fnGetBaseStatsData - ReDim Preserve maBaseStats (UBound (mData)) As New aStats - For nI = 0 To UBound (mData) - With maBaseStats (nI) - .sNo = mData (nI) (1) - .sPokemonId = mData (nI) (0) - .nStamina = mData (nI) (2) - .nAttack = mData (nI) (3) - .nDefense = mData (nI) (4) - End With - nEvolved = UBound (mData (nI) (5)) - maBaseStats (nI).mEvolved = fnGetStringArray (nEvolved) - For nJ = 0 To nEvolved - maBaseStats (nI).mEvolved (nJ) = mData (nI) (5) (nJ) - Next nJ - Next nI - End If -End Sub - -' fnGetStringArray: Obtains a blank string array -Function fnGetStringArray (nUBound As Integer) As Variant - Dim mData () As String - - If nUBound >= 0 Then - ReDim Preserve mData (nUBound) As String - End If - fnGetStringArray = mData -End Function - -' fnGetEvolvedArray: Obtains a blank aEvolvedStats array -Function fnGetEvolvedArray (nUBound As Integer) As Variant - Dim mData () As New aEvolvedStats - - If nUBound >= 0 Then - ReDim Preserve mData (nUBound) As New aEvolvedStats - End If - fnGetEvolvedArray = mData -End Function - ' fnReplace: Replaces all occurrances of a term to another. Function fnReplace ( _ sText As String, sFrom As String, sTo As String) As String @@ -662,6 +266,37 @@ Function fnReplace ( _ fnReplace = sResult End Function +' subReadBaseStats: Reads the base stats table. +Sub subReadBaseStats + Dim mData As Variant, nI As Integer, nJ As Integer, nK As Integer + Dim nEvolved As Integer, mEvolved () As Variant + + If UBound (maBaseStats) = -1 Then + mData = fnGetBaseStatsData + ReDim Preserve maBaseStats (UBound (mData)) As New aStats + For nI = 0 To UBound (mData) + With maBaseStats (nI) + .sNo = mData (nI) (1) + .sPokemonId = mData (nI) (0) + .nStamina = mData (nI) (2) + .nAttack = mData (nI) (3) + .nDefense = mData (nI) (4) + End With + nEvolved = UBound (mData (nI) (5)) + 1 + mEvolved = Array () + maBaseStats (nI).bIsLastForm = True + If nEvolved > 0 Then + ReDim mEvolved (nEvolved - 1) As Variant + For nJ = 0 To nEvolved - 1 + mEvolved (nJ) = mData (nI) (5) (nJ) + Next nJ + maBaseStats (nI).mEvolved = mEvolved + maBaseStats (nI).bIsLastForm = False + End If + Next nI + End If +End Sub + ' subReadCPM: Reads the CPM table. Sub subReadCPM If UBound (mCPM) = -1 Then diff --git a/oxt/PokemonGoIV/1Dialog.xba b/oxt/PokemonGoIV/1Dialog.xba index 31a433d..63988b8 100644 --- a/oxt/PokemonGoIV/1Dialog.xba +++ b/oxt/PokemonGoIV/1Dialog.xba @@ -52,6 +52,19 @@ Function fnAskParam As aFindIVParam oDialog.getControl ("cbxBest3").setVisible (False) oDialog.getControl ("lstMax").setVisible (False) + ' Adds the Pokémons by their localized names. + subReadBaseStats + ReDim mPokemons (UBound (maBaseStats)) As String + For nI = 0 To UBound (maBaseStats) + mPokemons (nI) = fnGetResString ( _ + "Pokemon" & maBaseStats (nI).sPokemonId) + Next nI + oList = oDialog.getControl ("lstPokemon") + If oList.getItemCount > 0 Then + getItemCount.removeItems (0, oList.getItemCount) + End If + oList.addItems (mPokemons, 0) + oDialog.getControl ("imgPokemon").getModel.setPropertyValue ( _ "ImageURL", fnGetImageUrl ("Unknown")) oDialog.getControl ("imgTeamLogo").getModel.setPropertyValue ( _ diff --git a/oxt/PokemonGoIV/2Report.xba b/oxt/PokemonGoIV/2Report.xba new file mode 100644 index 0000000..c858242 --- /dev/null +++ b/oxt/PokemonGoIV/2Report.xba @@ -0,0 +1,382 @@ + + +' Copyright (c) 2017 imacat. +' +' Licensed under the Apache License, Version 2.0 (the "License"); +' you may not use this file except in compliance with the License. +' You may obtain a copy of the License at +' +' http://www.apache.org/licenses/LICENSE-2.0 +' +' Unless required by applicable law or agreed to in writing, software +' distributed under the License is distributed on an "AS IS" BASIS, +' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +' See the License for the specific language governing permissions and +' limitations under the License. + +' 2Report: The Pokémon GO IV report generator. +' by imacat <imacat@mail.imacat.idv.tw>, 2017-06-07 + +Option Explicit + +' The base stats of a Pokémon. +Type aStats + sNo As String + sPokemonId As String + nStamina As Integer + nAttack As Integer + nDefense As Integer + mEvolved () As String +End Type + +' The individual values of a Pokémon. +Type aIV + fLevel As Double + nStamina As Integer + nAttack As Integer + nDefense As Integer + ' For sorting + nTotal As Integer + nMaxCP As Integer + nMaxMaxCP As Integer +End Type + +' The parameters to find the individual values. +Type aFindIVParam + sPokemonId As String + sPokemonName As String + nCP As Integer + nHP As Integer + nStardust As Integer + nPlayerLevel As Integer + bIsNew As Boolean + nTotal As Integer + sBest As String + nMax As Integer + bIsCancelled As Boolean +End Type + +' subCreateReport: Creates the Pokémon GO IV report. +Sub subCreateReport ( _ + aBaseStats As aStats, aQuery As aFindIVParam, maIVs () As aIV) + Dim oDoc As Object, oSheet As Object + Dim oRange As Object, oColumns As Object, oRows As Object + Dim oCell As Object, sFormula As String + Dim nI As Integer, nJ As Integer, nCol As Integer + Dim nLeadCols As Integer, nTotalCols As Integer + Dim nEvolved As Integer, fMaxLevel As Double + Dim sCPM As String, sMaxCPM As String + Dim sColIVAttack As String, sColIVDefense As String + Dim sColIVStamina As String + Dim sPokemonName As String + Dim mData (Ubound (maIVs) + 1) As Variant, mRow () As Variant + Dim maEvBaseStats () As Variant + Dim mProps () As New com.sun.star.beans.PropertyValue + + oDoc = StarDesktop.loadComponentFromURL ( _ + "private:factory/scalc", "_default", 0, mProps) + oSheet = oDoc.getSheets.getByIndex (0) + + nEvolved = UBound (aBaseStats.mEvolved) + 1 + If nEvolved > 0 Then + ReDim maEvBaseStats (nEvolved - 1) As Variant + For nJ = 0 To nEvolved - 1 + maEvBaseStats (nJ) = fnGetBaseStats (aBaseStats.mEvolved (nJ)) + Next nJ + End If + + If aQuery.nPlayerLevel <> 0 Then + fMaxLevel = aQuery.nPlayerLevel + 1.5 + If fMaxLevel > 40 Then + fMaxLevel = 40 + End If + Else + fMaxLevel = 40 + End If + sMaxCPM = fnGetCPMFormula (fMaxLevel) + + ' Sorts the IVs + subSortIVs (aBaseStats, maEvBaseStats, maIVs, fMaxLevel) + + ' Fills in the report data. + mRow = Array ( _ + fnGetResString ("ReportNo"), _ + fnGetResString ("ReportPokemon"), _ + fnGetResString ("ReportCP"), _ + fnGetResString ("ReportHP"), _ + fnGetResString ("ReportStardust"), _ + fnGetResString ("ReportLevel"), _ + fnGetResString ("ReportAttack"), _ + fnGetResString ("ReportDefense"), _ + fnGetResString ("ReportStamina"), _ + fnGetResString ("ReportIVPercent")) + nLeadCols = UBound (mRow) + 1 + + nTotalCols = nLeadCols + If aBaseStats.bIsLastForm Then + nTotalCols = nTotalCols + 1 + End If + For nJ = 0 To nEvolved - 1 + nTotalCols = nTotalCols + 1 + If maEvBaseStats (nJ).bIsLastForm Then + nTotalCols = nTotalCols + 1 + End If + Next nJ + + ReDim Preserve mRow (nTotalCols - 1) As Variant + nCol = nLeadCols + If aBaseStats.bIsLastForm Then + mRow (nCol) = fnReplace (fnGetResString ("ReportCPPowerUp"), _ + "[Level]", fMaxLevel) + nCol = nCol + 1 + End If + For nJ = 0 To nEvolved - 1 + sPokemonName = fnGetResString ( _ + "Pokemon" & aBaseStats.mEvolved (nJ)) + mRow (nCol) = fnReplace (fnGetResString ("ReportCPEvolve"), _ + "[Pokémon]", sPokemonName) + nCol = nCol + 1 + If maEvBaseStats (nJ).bIsLastForm Then + mRow (nCol) = fnReplace (fnReplace ( _ + fnGetResString ("ReportCPEvolvePowerUp"), _ + "[Pokémon]", sPokemonName), _ + "[Level]", fMaxLevel) + End If + Next nJ + mData (0) = mRow + + For nI = 0 To UBound (maIVs) + mRow = Array ( _ + "", "", "", "", "", _ + maIVs (nI).fLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina, "") + ReDim Preserve mRow (nTotalCols - 1) As Variant + For nJ = nLeadCols To nEvolved - 1 + mRow (nJ) = "" + Next nJ + mData (nI + 1) = mRow + Next nI + + ' Fills the query information at the first row + mData (1) (0) = aBaseStats.sNo + mData (1) (1) = aQuery.sPokemonName + mData (1) (2) = aQuery.nCP + mData (1) (3) = aQuery.nHP + mData (1) (4) = aQuery.nStardust + + oRange = oSheet.getCellRangeByPosition ( _ + 0, 0, UBound (mData (0)), UBound (mData)) + oRange.setDataArray (mData) + oRange.setPropertyValue ("VertJustify", _ + com.sun.star.table.CellVertJustify.TOP) + + ' Fills in the CP calculation. + For nI = 0 To UBound (maIVs) + sCPM = fnGetCPMFormula (maIVs (nI).fLevel) + sColIVAttack = "G" & (nI + 2) + sColIVDefense = "H" & (nI + 2) + sColIVStamina = "I" & (nI + 2) + + oCell = oSheet.getCellByPosition (nLeadCols - 1, nI + 1) + sFormula = "=(" & sColIVAttack & "+" & sColIVDefense _ + & "+" & sColIVStamina & ")/45" + oCell.setFormula (sFormula) + + nCol = nLeadCols + If aBaseStats.bIsLastForm Then + oCell = oSheet.getCellByPosition (nCol, nI + 1) + sFormula = fnGetCPFormula (aBaseStats, _ + sColIVAttack, sColIVDefense, sColIVStamina, sMaxCPM) + oCell.setFormula (sFormula) + nCol = nCol + 1 + End If + For nJ = 0 To nEvolved - 1 + oCell = oSheet.getCellByPosition (nCol, nI + 1) + sFormula = fnGetCPFormula (maEvBaseStats (nJ), _ + sColIVAttack, sColIVDefense, sColIVStamina, sCPM) + oCell.setFormula (sFormula) + nCol = nCol + 1 + If maEvBaseStats (nJ).bIsLastForm Then + oCell = oSheet.getCellByPosition (nCol, nI + 1) + sFormula = fnGetCPFormula (maEvBaseStats (nJ), _ + sColIVAttack, sColIVDefense, sColIVStamina, sMaxCPM) + oCell.setFormula (sFormula) + nCol = nCol + 1 + End If + Next nJ + Next nI + + oRange = oSheet.getCellRangeByPosition ( _ + 0, 1, 0, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 1, 1, 1, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 2, 1, 2, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 3, 1, 3, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 4, 1, 4, UBound (mData)) + oRange.merge (True) + oRange = oSheet.getCellRangeByPosition ( _ + 9, 1, 9, UBound (mData)) + oRange.setPropertyValue ("NumberFormat", 10) + + oRange = oSheet.getCellRangeByPosition ( _ + nLeadCols, 0, nTotalCols - 1, 0) + oRange.setPropertyValue ("IsTextWrapped", True) + + oColumns = oSheet.getColumns + oColumns.getByIndex (0).setPropertyValue ("Width", 890) + oColumns.getByIndex (1).setPropertyValue ("Width", 2310) + oColumns.getByIndex (2).setPropertyValue ("Width", 890) + oColumns.getByIndex (3).setPropertyValue ("Width", 890) + oColumns.getByIndex (4).setPropertyValue ("Width", 1780) + oColumns.getByIndex (5).setPropertyValue ("Width", 860) + oColumns.getByIndex (6).setPropertyValue ("Width", 860) + oColumns.getByIndex (7).setPropertyValue ("Width", 860) + oColumns.getByIndex (8).setPropertyValue ("Width", 860) + oColumns.getByIndex (9).setPropertyValue ("Width", 1030) + For nJ = nLeadCols To nTotalCols - 1 + oColumns.getByIndex (nJ).setPropertyValue ( _ + "Width", 2810) + Next nJ + oRows = oSheet.getRows + oRows.getByIndex (0).setPropertyValue ("OptimalHeight", True) +End Sub + +' subSortIVs: Sorts the IVs +Sub subSortIVs ( _ + aBaseStats As aStats, maEvBaseStats () As aIV, _ + maIVs () As aIV, fMaxLevel As Double) + Dim nI As Integer, nJ As Integer + Dim nCP As Integer + + ' Calculate the sorting keys. + For nI = 0 To UBound (maIVs) - 1 + maIVs (nI).nTotal = maIVs (nI).nAttack + maIVs (nI).nDefense _ + + maIVs (nI).nStamina + maIVs (nI).nMaxCP = fnCalcCP (aBaseStats, _ + maIVs (nI).fLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + maIVs (nI).nMaxMaxCP = fnCalcCP (aBaseStats, _ + fMaxLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + For nJ = 0 To UBound (aBaseStats.mEvolved) + nCP = fnCalcCP (maEvBaseStats (nJ), _ + maIVs (nI).fLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + If maIVs (nI).nMaxCP < nCP Then + maIVs (nI).nMaxCP = nCP + End If + nCP = fnCalcCP (maEvBaseStats (nJ), _ + fMaxLevel, maIVs (nI).nAttack, _ + maIVs (nI).nDefense, maIVs (nI).nStamina) + If maIVs (nI).nMaxMaxCP < nCP Then + maIVs (nI).nMaxMaxCP = nCP + End If + Next nJ + Next nI + ' Sort the IVs. + For nI = 0 To UBound (maIVs) - 1 + For nJ = nI + 1 To UBound (maIVs) + If fnCompareIV (maIVs (nI), maIVs (nJ)) > 0 Then + ' This is an array of data. The data are actually + ' allocated in sequences. maIVs (nI) is not a + ' reference. They cannot simply be assigned. + subSwapIV (maIVs (nI), maIVs (nJ)) + End If + Next nJ + Next nI +End Sub + +' fnCompareIV: Compare two IVs for sorting +Function fnCompareIV (aIVa As aIV, aIVb As aIV) As Double + Dim nCPa As Integer, nCPb As Integer, nI As Integer + + fnCompareIV = aIVb.nMaxMaxCP - aIVa.nMaxMaxCP + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nMaxCP - aIVa.nMaxCP + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nTotal - aIVa.nTotal + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.fLevel - aIVa.fLevel + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nStamina - aIVa.nStamina + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nAttack - aIVa.nAttack + If fnCompareIV <> 0 Then + Exit Function + End If + fnCompareIV = aIVb.nDefense - aIVa.nDefense + If fnCompareIV <> 0 Then + Exit Function + End If +End Function + +' subSwapIV: Swaps two IVs +Function subSwapIV (aIVa As aIV, aIVb As aIV) As Double + Dim aTempIV As New aIV + + With aTempIV + .nAttack = aIVa.nAttack + .nDefense = aIVa.nDefense + .nStamina = aIVa.nStamina + .nTotal = aIVa.nTotal + .nMaxCP = aIVa.nMaxCP + .nMaxMaxCP = aIVa.nMaxMaxCP + End With + With aIVa + .nAttack = aIVb.nAttack + .nDefense = aIVb.nDefense + .nStamina = aIVb.nStamina + .nTotal = aIVb.nTotal + .nMaxCP = aIVb.nMaxCP + .nMaxMaxCP = aIVb.nMaxMaxCP + End With + With aIVb + .nAttack = aTempIV.nAttack + .nDefense = aTempIV.nDefense + .nStamina = aTempIV.nStamina + .nTotal = aTempIV.nTotal + .nMaxCP = aTempIV.nMaxCP + .nMaxMaxCP = aTempIV.nMaxMaxCP + End With +End Function + +' fnGetCPFormula: Obtains the CP formula +Function fnGetCPFormula ( _ + aBaseStats As aStats, sColIVAttack As String, _ + sColIVDefense As String, sColIVStamina As String, _ + sCPM As String) As String + fnGetCPFormula = "=FLOOR(" _ + & "(" & aBaseStats.nAttack & "+" & sColIVAttack & ")" _ + & "*SQRT(" & aBaseStats.nDefense & "+" & sColIVDefense & ")" _ + & "*SQRT(" & aBaseStats.nStamina & "+" & sColIVStamina & ")" _ + & "*POWER(" & sCPM & ";2)/10;1)" +End Function + +' fnGetCPMFormula: Obtains the CPM +Function fnGetCPMFormula (fLevel As Double) As String + If fLevel = CInt (fLevel) Then + fnGetCPMFormula = "" & mCPM (fLevel) + Else + fnGetCPMFormula = "SQRT((" _ + & "POWER(" & mCPM (fLevel - 0.5) & ";2)" _ + & "+POWER(" & mCPM (fLevel + 0.5) & ";2))/2)" + End If +End Function + \ No newline at end of file diff --git a/oxt/PokemonGoIV/2Data.xba b/oxt/PokemonGoIV/3Data.xba similarity index 99% rename from oxt/PokemonGoIV/2Data.xba rename to oxt/PokemonGoIV/3Data.xba index b7210b2..33bf0d7 100644 --- a/oxt/PokemonGoIV/2Data.xba +++ b/oxt/PokemonGoIV/3Data.xba @@ -1,6 +1,6 @@ -' Copyright (c) 2016-2017 imacat. +' Copyright (c) 2016-2017 imacat. ' ' Licensed under the Apache License, Version 2.0 (the "License"); ' you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ ' See the License for the specific language governing permissions and ' limitations under the License. -' 2Data: The Pokémon GO data for IV calculation +' 3Data: The Pokémon GO data for IV calculation ' by imacat <imacat@mail.imacat.idv.tw>, 2017-03-01 ' Generated with 9Load.subReadDataSheets () diff --git a/oxt/PokemonGoIV/9Load.xba b/oxt/PokemonGoIV/9Load.xba index 7f6a2b3..f805f80 100644 --- a/oxt/PokemonGoIV/9Load.xba +++ b/oxt/PokemonGoIV/9Load.xba @@ -39,7 +39,7 @@ Sub subReadDataSheets & "' See the License for the specific language governing permissions and" & Chr (10) _ & "' limitations under the License." & Chr (10) _ & Chr (10) _ - & "' 2Data: The Pokémon GO data for IV calculation" & Chr (10) _ + & "' 3Data: The Pokémon GO data for IV calculation" & Chr (10) _ & "' by imacat <imacat@mail.imacat.idv.tw>, " & Format (Date (), "yyyy-mm-dd") & Chr (10) _ & "' Generated with 9Load.subReadDataSheets ()" & Chr (10) _ & Chr (10) _ diff --git a/oxt/PokemonGoIV/DialogStrings_de_DE.properties b/oxt/PokemonGoIV/DialogStrings_de_DE.properties index 903c1b9..524e9f4 100644 --- a/oxt/PokemonGoIV/DialogStrings_de_DE.properties +++ b/oxt/PokemonGoIV/DialogStrings_de_DE.properties @@ -10,254 +10,3 @@ 9.DlgMain.rdoTeamValor.Label=Team W~agemut 10.DlgMain.rdoTeamMystic.Label=Team W~eisheit 11.DlgMain.rdoTeamInstinct.Label=Team ~Intuition -1001.lstPokemon.StringItemList=Bisasam -1002.lstPokemon.StringItemList=Bisaknosp -1003.lstPokemon.StringItemList=Bisaflor -1004.lstPokemon.StringItemList=Glumanda -1005.lstPokemon.StringItemList=Glutexo -1006.lstPokemon.StringItemList=Glurak -1007.lstPokemon.StringItemList=Schiggy -1008.lstPokemon.StringItemList=Schillok -1009.lstPokemon.StringItemList=Turtok -1010.lstPokemon.StringItemList=Raupy -1011.lstPokemon.StringItemList=Safcon -1012.lstPokemon.StringItemList=Smettbo -1013.lstPokemon.StringItemList=Hornliu -1014.lstPokemon.StringItemList=Kokuna -1015.lstPokemon.StringItemList=Bibor -1016.lstPokemon.StringItemList=Taubsi -1017.lstPokemon.StringItemList=Tauboga -1018.lstPokemon.StringItemList=Tauboss -1019.lstPokemon.StringItemList=Rattfratz -1020.lstPokemon.StringItemList=Rattikarl -1021.lstPokemon.StringItemList=Habitak -1022.lstPokemon.StringItemList=Ibitak -1023.lstPokemon.StringItemList=Rettan -1024.lstPokemon.StringItemList=Arbok -1025.lstPokemon.StringItemList=Pikachu -1026.lstPokemon.StringItemList=Raichu -1027.lstPokemon.StringItemList=Sandan -1028.lstPokemon.StringItemList=Sandamer -1029.lstPokemon.StringItemList=Nidoran\u2640 -1030.lstPokemon.StringItemList=Nidorina -1031.lstPokemon.StringItemList=Nidoqueen -1032.lstPokemon.StringItemList=Nidoran\u2642 -1033.lstPokemon.StringItemList=Nidorino -1034.lstPokemon.StringItemList=Nidoking -1035.lstPokemon.StringItemList=Piepi -1036.lstPokemon.StringItemList=Pixi -1037.lstPokemon.StringItemList=Vulpix -1038.lstPokemon.StringItemList=Vulnona -1039.lstPokemon.StringItemList=Pummeluff -1040.lstPokemon.StringItemList=Knuddeluff -1041.lstPokemon.StringItemList=Zubat -1042.lstPokemon.StringItemList=Golbat -1043.lstPokemon.StringItemList=Myrapla -1044.lstPokemon.StringItemList=Duflor -1045.lstPokemon.StringItemList=Giflor -1046.lstPokemon.StringItemList=Paras -1047.lstPokemon.StringItemList=Parasek -1048.lstPokemon.StringItemList=Bluzuk -1049.lstPokemon.StringItemList=Omot -1050.lstPokemon.StringItemList=Digda -1051.lstPokemon.StringItemList=Digdri -1052.lstPokemon.StringItemList=Mauzi -1053.lstPokemon.StringItemList=Snobilikat -1054.lstPokemon.StringItemList=Enton -1055.lstPokemon.StringItemList=Entoron -1056.lstPokemon.StringItemList=Menki -1057.lstPokemon.StringItemList=Rasaff -1058.lstPokemon.StringItemList=Fukano -1059.lstPokemon.StringItemList=Arkani -1060.lstPokemon.StringItemList=Quapsel -1061.lstPokemon.StringItemList=Quaputzi -1062.lstPokemon.StringItemList=Quappo -1063.lstPokemon.StringItemList=Abra -1064.lstPokemon.StringItemList=Kadabra -1065.lstPokemon.StringItemList=Simsala -1066.lstPokemon.StringItemList=Machollo -1067.lstPokemon.StringItemList=Maschock -1068.lstPokemon.StringItemList=Machomei -1069.lstPokemon.StringItemList=Knofensa -1070.lstPokemon.StringItemList=Ultrigaria -1071.lstPokemon.StringItemList=Sarzenia -1072.lstPokemon.StringItemList=Tentacha -1073.lstPokemon.StringItemList=Tentoxa -1074.lstPokemon.StringItemList=Kleinstein -1075.lstPokemon.StringItemList=Georok -1076.lstPokemon.StringItemList=Geowaz -1077.lstPokemon.StringItemList=Ponita -1078.lstPokemon.StringItemList=Gallopa -1079.lstPokemon.StringItemList=Flegmon -1080.lstPokemon.StringItemList=Lahmus -1081.lstPokemon.StringItemList=Magnetilo -1082.lstPokemon.StringItemList=Magneton -1083.lstPokemon.StringItemList=Porenta -1084.lstPokemon.StringItemList=Dodu -1085.lstPokemon.StringItemList=Dodri -1086.lstPokemon.StringItemList=Jurob -1087.lstPokemon.StringItemList=Jugong -1088.lstPokemon.StringItemList=Sleima -1089.lstPokemon.StringItemList=Sleimok -1090.lstPokemon.StringItemList=Muschas -1091.lstPokemon.StringItemList=Austos -1092.lstPokemon.StringItemList=Nebulak -1093.lstPokemon.StringItemList=Alpollo -1094.lstPokemon.StringItemList=Gengar -1095.lstPokemon.StringItemList=Onix -1096.lstPokemon.StringItemList=Traumato -1097.lstPokemon.StringItemList=Hypno -1098.lstPokemon.StringItemList=Krabby -1099.lstPokemon.StringItemList=Kingler -1100.lstPokemon.StringItemList=Voltobal -1101.lstPokemon.StringItemList=Lektrobal -1102.lstPokemon.StringItemList=Owei -1103.lstPokemon.StringItemList=Kokowei -1104.lstPokemon.StringItemList=Tragosso -1105.lstPokemon.StringItemList=Knogga -1106.lstPokemon.StringItemList=Kicklee -1107.lstPokemon.StringItemList=Nockchan -1108.lstPokemon.StringItemList=Schlurp -1109.lstPokemon.StringItemList=Smogon -1110.lstPokemon.StringItemList=Smogmog -1111.lstPokemon.StringItemList=Rihorn -1112.lstPokemon.StringItemList=Rizeros -1113.lstPokemon.StringItemList=Chaneira -1114.lstPokemon.StringItemList=Tangela -1115.lstPokemon.StringItemList=Kangama -1116.lstPokemon.StringItemList=Seeper -1117.lstPokemon.StringItemList=Seemon -1118.lstPokemon.StringItemList=Goldini -1119.lstPokemon.StringItemList=Golking -1120.lstPokemon.StringItemList=Sterndu -1121.lstPokemon.StringItemList=Starmie -1122.lstPokemon.StringItemList=Pantimos -1123.lstPokemon.StringItemList=Sichlor -1124.lstPokemon.StringItemList=Rossana -1125.lstPokemon.StringItemList=Elektek -1126.lstPokemon.StringItemList=Magmar -1127.lstPokemon.StringItemList=Pinsir -1128.lstPokemon.StringItemList=Tauros -1129.lstPokemon.StringItemList=Karpador -1130.lstPokemon.StringItemList=Garados -1131.lstPokemon.StringItemList=Lapras -1132.lstPokemon.StringItemList=Ditto -1133.lstPokemon.StringItemList=Evoli -1134.lstPokemon.StringItemList=Aquana -1135.lstPokemon.StringItemList=Blitza -1136.lstPokemon.StringItemList=Flamara -1137.lstPokemon.StringItemList=Porygon -1138.lstPokemon.StringItemList=Amonitas -1139.lstPokemon.StringItemList=Amoroso -1140.lstPokemon.StringItemList=Kabuto -1141.lstPokemon.StringItemList=Kabutops -1142.lstPokemon.StringItemList=Aerodactyl -1143.lstPokemon.StringItemList=Relaxo -1144.lstPokemon.StringItemList=Arktos -1145.lstPokemon.StringItemList=Zapdos -1146.lstPokemon.StringItemList=Lavados -1147.lstPokemon.StringItemList=Dratini -1148.lstPokemon.StringItemList=Dragonir -1149.lstPokemon.StringItemList=Dragoran -1150.lstPokemon.StringItemList=Mewtu -1151.lstPokemon.StringItemList=Mew -1152.lstPokemon.StringItemList=Endivie -1153.lstPokemon.StringItemList=Lorblatt -1154.lstPokemon.StringItemList=Meganie -1155.lstPokemon.StringItemList=Feurigel -1156.lstPokemon.StringItemList=Igelavar -1157.lstPokemon.StringItemList=Tornupto -1158.lstPokemon.StringItemList=Karnimani -1159.lstPokemon.StringItemList=Tyracroc -1160.lstPokemon.StringItemList=Impergator -1161.lstPokemon.StringItemList=Wiesor -1162.lstPokemon.StringItemList=Wiesenior -1163.lstPokemon.StringItemList=Hoothoot -1164.lstPokemon.StringItemList=Noctuh -1165.lstPokemon.StringItemList=Ledyba -1166.lstPokemon.StringItemList=Ledian -1167.lstPokemon.StringItemList=Webarak -1168.lstPokemon.StringItemList=Ariados -1169.lstPokemon.StringItemList=Iksbat -1170.lstPokemon.StringItemList=Lampi -1171.lstPokemon.StringItemList=Lanturn -1172.lstPokemon.StringItemList=Pichu -1173.lstPokemon.StringItemList=Pii -1174.lstPokemon.StringItemList=Fluffeluff -1175.lstPokemon.StringItemList=Togepi -1176.lstPokemon.StringItemList=Togetic -1177.lstPokemon.StringItemList=Natu -1178.lstPokemon.StringItemList=Xatu -1179.lstPokemon.StringItemList=Voltilamm -1180.lstPokemon.StringItemList=Waaty -1181.lstPokemon.StringItemList=Ampharos -1182.lstPokemon.StringItemList=Blubella -1183.lstPokemon.StringItemList=Marill -1184.lstPokemon.StringItemList=Azumarill -1185.lstPokemon.StringItemList=Mogelbaum -1186.lstPokemon.StringItemList=Quaxo -1187.lstPokemon.StringItemList=Hoppspross -1188.lstPokemon.StringItemList=Hubelupf -1189.lstPokemon.StringItemList=Papungha -1190.lstPokemon.StringItemList=Griffel -1191.lstPokemon.StringItemList=Sonnkern -1192.lstPokemon.StringItemList=Sonnflora -1193.lstPokemon.StringItemList=Yanma -1194.lstPokemon.StringItemList=Felino -1195.lstPokemon.StringItemList=Morlord -1196.lstPokemon.StringItemList=Psiana -1197.lstPokemon.StringItemList=Nachtara -1198.lstPokemon.StringItemList=Kramurx -1199.lstPokemon.StringItemList=Laschoking -1200.lstPokemon.StringItemList=Traunfugil -1201.lstPokemon.StringItemList=Icognito -1202.lstPokemon.StringItemList=Woingenau -1203.lstPokemon.StringItemList=Girafarig -1204.lstPokemon.StringItemList=Tannza -1205.lstPokemon.StringItemList=Forstellka -1206.lstPokemon.StringItemList=Dummisel -1207.lstPokemon.StringItemList=Skorgla -1208.lstPokemon.StringItemList=Stahlos -1209.lstPokemon.StringItemList=Snubbull -1210.lstPokemon.StringItemList=Granbull -1211.lstPokemon.StringItemList=Baldorfish -1212.lstPokemon.StringItemList=Scherox -1213.lstPokemon.StringItemList=Pottrott -1214.lstPokemon.StringItemList=Skaraborn -1215.lstPokemon.StringItemList=Sniebel -1216.lstPokemon.StringItemList=Teddiursa -1217.lstPokemon.StringItemList=Ursaring -1218.lstPokemon.StringItemList=Schneckmag -1219.lstPokemon.StringItemList=Magcargo -1220.lstPokemon.StringItemList=Quiekel -1221.lstPokemon.StringItemList=Keifel -1222.lstPokemon.StringItemList=Corasonn -1223.lstPokemon.StringItemList=Remoraid -1224.lstPokemon.StringItemList=Octillery -1225.lstPokemon.StringItemList=Botogel -1226.lstPokemon.StringItemList=Mantax -1227.lstPokemon.StringItemList=Panzaeron -1228.lstPokemon.StringItemList=Hunduster -1229.lstPokemon.StringItemList=Hundemon -1230.lstPokemon.StringItemList=Seedraking -1231.lstPokemon.StringItemList=Phanpy -1232.lstPokemon.StringItemList=Donphan -1233.lstPokemon.StringItemList=Porygon2 -1234.lstPokemon.StringItemList=Damhirplex -1235.lstPokemon.StringItemList=Farbeagle -1236.lstPokemon.StringItemList=Rabauz -1237.lstPokemon.StringItemList=Kapoera -1238.lstPokemon.StringItemList=Kussilla -1239.lstPokemon.StringItemList=Elekid -1240.lstPokemon.StringItemList=Magby -1241.lstPokemon.StringItemList=Miltank -1242.lstPokemon.StringItemList=Heiteira -1243.lstPokemon.StringItemList=Raikou -1244.lstPokemon.StringItemList=Entei -1245.lstPokemon.StringItemList=Suicune -1246.lstPokemon.StringItemList=Larvitar -1247.lstPokemon.StringItemList=Pupitar -1248.lstPokemon.StringItemList=Despotar -1249.lstPokemon.StringItemList=Lugia -1250.lstPokemon.StringItemList=Ho-Oh -1251.lstPokemon.StringItemList=Celebi diff --git a/oxt/PokemonGoIV/DialogStrings_en_US.properties b/oxt/PokemonGoIV/DialogStrings_en_US.properties index d0fbe19..9358ebb 100644 --- a/oxt/PokemonGoIV/DialogStrings_en_US.properties +++ b/oxt/PokemonGoIV/DialogStrings_en_US.properties @@ -10,254 +10,3 @@ 9.DlgMain.rdoTeamValor.Label=Team ~Valor 10.DlgMain.rdoTeamMystic.Label=Team ~Mystic 11.DlgMain.rdoTeamInstinct.Label=Team ~Instinct -1001.lstPokemon.StringItemList=Bulbasaur -1002.lstPokemon.StringItemList=Ivysaur -1003.lstPokemon.StringItemList=Venusaur -1004.lstPokemon.StringItemList=Charmander -1005.lstPokemon.StringItemList=Charmeleon -1006.lstPokemon.StringItemList=Charizard -1007.lstPokemon.StringItemList=Squirtle -1008.lstPokemon.StringItemList=Wartortle -1009.lstPokemon.StringItemList=Blastoise -1010.lstPokemon.StringItemList=Caterpie -1011.lstPokemon.StringItemList=Metapod -1012.lstPokemon.StringItemList=Butterfree -1013.lstPokemon.StringItemList=Weedle -1014.lstPokemon.StringItemList=Kakuna -1015.lstPokemon.StringItemList=Beedrill -1016.lstPokemon.StringItemList=Pidgey -1017.lstPokemon.StringItemList=Pidgeotto -1018.lstPokemon.StringItemList=Pidgeot -1019.lstPokemon.StringItemList=Rattata -1020.lstPokemon.StringItemList=Raticate -1021.lstPokemon.StringItemList=Spearow -1022.lstPokemon.StringItemList=Fearow -1023.lstPokemon.StringItemList=Ekans -1024.lstPokemon.StringItemList=Arbok -1025.lstPokemon.StringItemList=Pikachu -1026.lstPokemon.StringItemList=Raichu -1027.lstPokemon.StringItemList=Sandshrew -1028.lstPokemon.StringItemList=Sandslash -1029.lstPokemon.StringItemList=Nidoran\u2640 -1030.lstPokemon.StringItemList=Nidorina -1031.lstPokemon.StringItemList=Nidoqueen -1032.lstPokemon.StringItemList=Nidoran\u2642 -1033.lstPokemon.StringItemList=Nidorino -1034.lstPokemon.StringItemList=Nidoking -1035.lstPokemon.StringItemList=Clefairy -1036.lstPokemon.StringItemList=Clefable -1037.lstPokemon.StringItemList=Vulpix -1038.lstPokemon.StringItemList=Ninetales -1039.lstPokemon.StringItemList=Jigglypuff -1040.lstPokemon.StringItemList=Wigglytuff -1041.lstPokemon.StringItemList=Zubat -1042.lstPokemon.StringItemList=Golbat -1043.lstPokemon.StringItemList=Oddish -1044.lstPokemon.StringItemList=Gloom -1045.lstPokemon.StringItemList=Vileplume -1046.lstPokemon.StringItemList=Paras -1047.lstPokemon.StringItemList=Parasect -1048.lstPokemon.StringItemList=Venonat -1049.lstPokemon.StringItemList=Venomoth -1050.lstPokemon.StringItemList=Diglett -1051.lstPokemon.StringItemList=Dugtrio -1052.lstPokemon.StringItemList=Meowth -1053.lstPokemon.StringItemList=Persian -1054.lstPokemon.StringItemList=Psyduck -1055.lstPokemon.StringItemList=Golduck -1056.lstPokemon.StringItemList=Mankey -1057.lstPokemon.StringItemList=Primeape -1058.lstPokemon.StringItemList=Growlithe -1059.lstPokemon.StringItemList=Arcanine -1060.lstPokemon.StringItemList=Poliwag -1061.lstPokemon.StringItemList=Poliwhirl -1062.lstPokemon.StringItemList=Poliwrath -1063.lstPokemon.StringItemList=Abra -1064.lstPokemon.StringItemList=Kadabra -1065.lstPokemon.StringItemList=Alakazam -1066.lstPokemon.StringItemList=Machop -1067.lstPokemon.StringItemList=Machoke -1068.lstPokemon.StringItemList=Machamp -1069.lstPokemon.StringItemList=Bellsprout -1070.lstPokemon.StringItemList=Weepinbell -1071.lstPokemon.StringItemList=Victreebel -1072.lstPokemon.StringItemList=Tentacool -1073.lstPokemon.StringItemList=Tentacruel -1074.lstPokemon.StringItemList=Geodude -1075.lstPokemon.StringItemList=Graveler -1076.lstPokemon.StringItemList=Golem -1077.lstPokemon.StringItemList=Ponyta -1078.lstPokemon.StringItemList=Rapidash -1079.lstPokemon.StringItemList=Slowpoke -1080.lstPokemon.StringItemList=Slowbro -1081.lstPokemon.StringItemList=Magnemite -1082.lstPokemon.StringItemList=Magneton -1083.lstPokemon.StringItemList=Farfetch'd -1084.lstPokemon.StringItemList=Doduo -1085.lstPokemon.StringItemList=Dodrio -1086.lstPokemon.StringItemList=Seel -1087.lstPokemon.StringItemList=Dewgong -1088.lstPokemon.StringItemList=Grimer -1089.lstPokemon.StringItemList=Muk -1090.lstPokemon.StringItemList=Shellder -1091.lstPokemon.StringItemList=Cloyster -1092.lstPokemon.StringItemList=Gastly -1093.lstPokemon.StringItemList=Haunter -1094.lstPokemon.StringItemList=Gengar -1095.lstPokemon.StringItemList=Onix -1096.lstPokemon.StringItemList=Drowzee -1097.lstPokemon.StringItemList=Hypno -1098.lstPokemon.StringItemList=Krabby -1099.lstPokemon.StringItemList=Kingler -1100.lstPokemon.StringItemList=Voltorb -1101.lstPokemon.StringItemList=Electrode -1102.lstPokemon.StringItemList=Exeggcute -1103.lstPokemon.StringItemList=Exeggutor -1104.lstPokemon.StringItemList=Cubone -1105.lstPokemon.StringItemList=Marowak -1106.lstPokemon.StringItemList=Hitmonlee -1107.lstPokemon.StringItemList=Hitmonchan -1108.lstPokemon.StringItemList=Lickitung -1109.lstPokemon.StringItemList=Koffing -1110.lstPokemon.StringItemList=Weezing -1111.lstPokemon.StringItemList=Rhyhorn -1112.lstPokemon.StringItemList=Rhydon -1113.lstPokemon.StringItemList=Chansey -1114.lstPokemon.StringItemList=Tangela -1115.lstPokemon.StringItemList=Kangaskhan -1116.lstPokemon.StringItemList=Horsea -1117.lstPokemon.StringItemList=Seadra -1118.lstPokemon.StringItemList=Goldeen -1119.lstPokemon.StringItemList=Seaking -1120.lstPokemon.StringItemList=Staryu -1121.lstPokemon.StringItemList=Starmie -1122.lstPokemon.StringItemList=Mr. Mime -1123.lstPokemon.StringItemList=Scyther -1124.lstPokemon.StringItemList=Jynx -1125.lstPokemon.StringItemList=Electabuzz -1126.lstPokemon.StringItemList=Magmar -1127.lstPokemon.StringItemList=Pinsir -1128.lstPokemon.StringItemList=Tauros -1129.lstPokemon.StringItemList=Magikarp -1130.lstPokemon.StringItemList=Gyarados -1131.lstPokemon.StringItemList=Lapras -1132.lstPokemon.StringItemList=Ditto -1133.lstPokemon.StringItemList=Eevee -1134.lstPokemon.StringItemList=Vaporeon -1135.lstPokemon.StringItemList=Jolteon -1136.lstPokemon.StringItemList=Flareon -1137.lstPokemon.StringItemList=Porygon -1138.lstPokemon.StringItemList=Omanyte -1139.lstPokemon.StringItemList=Omastar -1140.lstPokemon.StringItemList=Kabuto -1141.lstPokemon.StringItemList=Kabutops -1142.lstPokemon.StringItemList=Aerodactyl -1143.lstPokemon.StringItemList=Snorlax -1144.lstPokemon.StringItemList=Articuno -1145.lstPokemon.StringItemList=Zapdos -1146.lstPokemon.StringItemList=Moltres -1147.lstPokemon.StringItemList=Dratini -1148.lstPokemon.StringItemList=Dragonair -1149.lstPokemon.StringItemList=Dragonite -1150.lstPokemon.StringItemList=Mewtwo -1151.lstPokemon.StringItemList=Mew -1152.lstPokemon.StringItemList=Chikorita -1153.lstPokemon.StringItemList=Bayleef -1154.lstPokemon.StringItemList=Meganium -1155.lstPokemon.StringItemList=Cyndaquil -1156.lstPokemon.StringItemList=Quilava -1157.lstPokemon.StringItemList=Typhlosion -1158.lstPokemon.StringItemList=Totodile -1159.lstPokemon.StringItemList=Croconaw -1160.lstPokemon.StringItemList=Feraligatr -1161.lstPokemon.StringItemList=Sentret -1162.lstPokemon.StringItemList=Furret -1163.lstPokemon.StringItemList=Hoothoot -1164.lstPokemon.StringItemList=Noctowl -1165.lstPokemon.StringItemList=Ledyba -1166.lstPokemon.StringItemList=Ledian -1167.lstPokemon.StringItemList=Spinarak -1168.lstPokemon.StringItemList=Ariados -1169.lstPokemon.StringItemList=Crobat -1170.lstPokemon.StringItemList=Chinchou -1171.lstPokemon.StringItemList=Lanturn -1172.lstPokemon.StringItemList=Pichu -1173.lstPokemon.StringItemList=Cleffa -1174.lstPokemon.StringItemList=Igglybuff -1175.lstPokemon.StringItemList=Togepi -1176.lstPokemon.StringItemList=Togetic -1177.lstPokemon.StringItemList=Natu -1178.lstPokemon.StringItemList=Xatu -1179.lstPokemon.StringItemList=Mareep -1180.lstPokemon.StringItemList=Flaaffy -1181.lstPokemon.StringItemList=Ampharos -1182.lstPokemon.StringItemList=Bellossom -1183.lstPokemon.StringItemList=Marill -1184.lstPokemon.StringItemList=Azumarill -1185.lstPokemon.StringItemList=Sudowoodo -1186.lstPokemon.StringItemList=Politoed -1187.lstPokemon.StringItemList=Hoppip -1188.lstPokemon.StringItemList=Skiploom -1189.lstPokemon.StringItemList=Jumpluff -1190.lstPokemon.StringItemList=Aipom -1191.lstPokemon.StringItemList=Sunkern -1192.lstPokemon.StringItemList=Sunflora -1193.lstPokemon.StringItemList=Yanma -1194.lstPokemon.StringItemList=Wooper -1195.lstPokemon.StringItemList=Quagsire -1196.lstPokemon.StringItemList=Espeon -1197.lstPokemon.StringItemList=Umbreon -1198.lstPokemon.StringItemList=Murkrow -1199.lstPokemon.StringItemList=Slowking -1200.lstPokemon.StringItemList=Misdreavus -1201.lstPokemon.StringItemList=Unown -1202.lstPokemon.StringItemList=Wobbuffet -1203.lstPokemon.StringItemList=Girafarig -1204.lstPokemon.StringItemList=Pineco -1205.lstPokemon.StringItemList=Forretress -1206.lstPokemon.StringItemList=Dunsparce -1207.lstPokemon.StringItemList=Gligar -1208.lstPokemon.StringItemList=Steelix -1209.lstPokemon.StringItemList=Snubbull -1210.lstPokemon.StringItemList=Granbull -1211.lstPokemon.StringItemList=Qwilfish -1212.lstPokemon.StringItemList=Scizor -1213.lstPokemon.StringItemList=Shuckle -1214.lstPokemon.StringItemList=Heracross -1215.lstPokemon.StringItemList=Sneasel -1216.lstPokemon.StringItemList=Teddiursa -1217.lstPokemon.StringItemList=Ursaring -1218.lstPokemon.StringItemList=Slugma -1219.lstPokemon.StringItemList=Magcargo -1220.lstPokemon.StringItemList=Swinub -1221.lstPokemon.StringItemList=Piloswine -1222.lstPokemon.StringItemList=Corsola -1223.lstPokemon.StringItemList=Remoraid -1224.lstPokemon.StringItemList=Octillery -1225.lstPokemon.StringItemList=Delibird -1226.lstPokemon.StringItemList=Mantine -1227.lstPokemon.StringItemList=Skarmory -1228.lstPokemon.StringItemList=Houndour -1229.lstPokemon.StringItemList=Houndoom -1230.lstPokemon.StringItemList=Kingdra -1231.lstPokemon.StringItemList=Phanpy -1232.lstPokemon.StringItemList=Donphan -1233.lstPokemon.StringItemList=Porygon2 -1234.lstPokemon.StringItemList=Stantler -1235.lstPokemon.StringItemList=Smeargle -1236.lstPokemon.StringItemList=Tyrogue -1237.lstPokemon.StringItemList=Hitmontop -1238.lstPokemon.StringItemList=Smoochum -1239.lstPokemon.StringItemList=Elekid -1240.lstPokemon.StringItemList=Magby -1241.lstPokemon.StringItemList=Miltank -1242.lstPokemon.StringItemList=Blissey -1243.lstPokemon.StringItemList=Raikou -1244.lstPokemon.StringItemList=Entei -1245.lstPokemon.StringItemList=Suicune -1246.lstPokemon.StringItemList=Larvitar -1247.lstPokemon.StringItemList=Pupitar -1248.lstPokemon.StringItemList=Tyranitar -1249.lstPokemon.StringItemList=Lugia -1250.lstPokemon.StringItemList=Ho-Oh -1251.lstPokemon.StringItemList=Celebi diff --git a/oxt/PokemonGoIV/DialogStrings_zh_TW.properties b/oxt/PokemonGoIV/DialogStrings_zh_TW.properties index ab04223..54ae942 100644 --- a/oxt/PokemonGoIV/DialogStrings_zh_TW.properties +++ b/oxt/PokemonGoIV/DialogStrings_zh_TW.properties @@ -10,254 +10,3 @@ 9.DlgMain.rdoTeamValor.Label=\u6b66\u52c7\u968a(~V) 10.DlgMain.rdoTeamMystic.Label=\u53e1\u667a\u968a(~M) 11.DlgMain.rdoTeamInstinct.Label=\u9748\u7280\u968a(~I) -1001.lstPokemon.StringItemList=\u5999\u86d9\u7a2e\u5b50 -1002.lstPokemon.StringItemList=\u5999\u86d9\u8349 -1003.lstPokemon.StringItemList=\u5999\u86d9\u82b1 -1004.lstPokemon.StringItemList=\u5c0f\u706b\u9f8d -1005.lstPokemon.StringItemList=\u706b\u6050\u9f8d -1006.lstPokemon.StringItemList=\u5674\u706b\u9f8d -1007.lstPokemon.StringItemList=\u5091\u5c3c\u9f9c -1008.lstPokemon.StringItemList=\u5361\u54aa\u9f9c -1009.lstPokemon.StringItemList=\u6c34\u7bad\u9f9c -1010.lstPokemon.StringItemList=\u7da0\u6bdb\u87f2 -1011.lstPokemon.StringItemList=\u9435\u7532\u86f9 -1012.lstPokemon.StringItemList=\u5df4\u5927\u8776 -1013.lstPokemon.StringItemList=\u7368\u89d2\u87f2 -1014.lstPokemon.StringItemList=\u9435\u6bbc\u86f9 -1015.lstPokemon.StringItemList=\u5927\u91dd\u8702 -1016.lstPokemon.StringItemList=\u6ce2\u6ce2 -1017.lstPokemon.StringItemList=\u6bd4\u6bd4\u9ce5 -1018.lstPokemon.StringItemList=\u5927\u6bd4\u9ce5 -1019.lstPokemon.StringItemList=\u5c0f\u62c9\u9054 -1020.lstPokemon.StringItemList=\u62c9\u9054 -1021.lstPokemon.StringItemList=\u70c8\u96c0 -1022.lstPokemon.StringItemList=\u5927\u5634\u96c0 -1023.lstPokemon.StringItemList=\u963f\u67cf\u86c7 -1024.lstPokemon.StringItemList=\u963f\u67cf\u602a -1025.lstPokemon.StringItemList=\u76ae\u5361\u4e18 -1026.lstPokemon.StringItemList=\u96f7\u4e18 -1027.lstPokemon.StringItemList=\u7a7f\u5c71\u9f20 -1028.lstPokemon.StringItemList=\u7a7f\u5c71\u738b -1029.lstPokemon.StringItemList=\u5c3c\u591a\u862d -1030.lstPokemon.StringItemList=\u5c3c\u591a\u5a1c -1031.lstPokemon.StringItemList=\u5c3c\u591a\u540e -1032.lstPokemon.StringItemList=\u5c3c\u591a\u6717 -1033.lstPokemon.StringItemList=\u5c3c\u591a\u5229\u8afe -1034.lstPokemon.StringItemList=\u5c3c\u591a\u738b -1035.lstPokemon.StringItemList=\u76ae\u76ae -1036.lstPokemon.StringItemList=\u76ae\u53ef\u897f -1037.lstPokemon.StringItemList=\u516d\u5c3e -1038.lstPokemon.StringItemList=\u4e5d\u5c3e -1039.lstPokemon.StringItemList=\u80d6\u4e01 -1040.lstPokemon.StringItemList=\u80d6\u53ef\u4e01 -1041.lstPokemon.StringItemList=\u8d85\u97f3\u8760 -1042.lstPokemon.StringItemList=\u5927\u5634\u8760 -1043.lstPokemon.StringItemList=\u8d70\u8def\u8349 -1044.lstPokemon.StringItemList=\u81ed\u81ed\u82b1 -1045.lstPokemon.StringItemList=\u9738\u738b\u82b1 -1046.lstPokemon.StringItemList=\u6d3e\u62c9\u65af -1047.lstPokemon.StringItemList=\u6d3e\u62c9\u65af\u7279 -1048.lstPokemon.StringItemList=\u6bdb\u7403 -1049.lstPokemon.StringItemList=\u6469\u9b6f\u86fe -1050.lstPokemon.StringItemList=\u5730\u9f20 -1051.lstPokemon.StringItemList=\u4e09\u5730\u9f20 -1052.lstPokemon.StringItemList=\u55b5\u55b5 -1053.lstPokemon.StringItemList=\u8c93\u8001\u5927 -1054.lstPokemon.StringItemList=\u53ef\u9054\u9d28 -1055.lstPokemon.StringItemList=\u54e5\u9054\u9d28 -1056.lstPokemon.StringItemList=\u7334\u602a -1057.lstPokemon.StringItemList=\u706b\u7206\u7334 -1058.lstPokemon.StringItemList=\u5361\u8482\u72d7 -1059.lstPokemon.StringItemList=\u98a8\u901f\u72d7 -1060.lstPokemon.StringItemList=\u868a\u9999\u874c\u86aa -1061.lstPokemon.StringItemList=\u868a\u9999\u541b -1062.lstPokemon.StringItemList=\u868a\u9999\u6cf3\u58eb -1063.lstPokemon.StringItemList=\u51f1\u897f -1064.lstPokemon.StringItemList=\u52c7\u57fa\u62c9 -1065.lstPokemon.StringItemList=\u80e1\u5730 -1066.lstPokemon.StringItemList=\u8155\u529b -1067.lstPokemon.StringItemList=\u8c6a\u529b -1068.lstPokemon.StringItemList=\u602a\u529b -1069.lstPokemon.StringItemList=\u5587\u53ed\u82bd -1070.lstPokemon.StringItemList=\u53e3\u5446\u82b1 -1071.lstPokemon.StringItemList=\u5927\u98df\u82b1 -1072.lstPokemon.StringItemList=\u746a\u7459\u6c34\u6bcd -1073.lstPokemon.StringItemList=\u6bd2\u523a\u6c34\u6bcd -1074.lstPokemon.StringItemList=\u5c0f\u62f3\u77f3 -1075.lstPokemon.StringItemList=\u9686\u9686\u77f3 -1076.lstPokemon.StringItemList=\u9686\u9686\u5ca9 -1077.lstPokemon.StringItemList=\u5c0f\u706b\u99ac -1078.lstPokemon.StringItemList=\u70c8\u7130\u99ac -1079.lstPokemon.StringItemList=\u5446\u5446\u7378 -1080.lstPokemon.StringItemList=\u5446\u6bbc\u7378 -1081.lstPokemon.StringItemList=\u5c0f\u78c1\u602a -1082.lstPokemon.StringItemList=\u4e09\u5408\u4e00\u78c1\u602a -1083.lstPokemon.StringItemList=\u5927\u8525\u9d28 -1084.lstPokemon.StringItemList=\u561f\u561f -1085.lstPokemon.StringItemList=\u561f\u561f\u5229 -1086.lstPokemon.StringItemList=\u5c0f\u6d77\u7345 -1087.lstPokemon.StringItemList=\u767d\u6d77\u7345 -1088.lstPokemon.StringItemList=\u81ed\u6ce5 -1089.lstPokemon.StringItemList=\u81ed\u81ed\u6ce5 -1090.lstPokemon.StringItemList=\u5927\u820c\u8c9d -1091.lstPokemon.StringItemList=\u523a\u7532\u8c9d -1092.lstPokemon.StringItemList=\u9b3c\u65af -1093.lstPokemon.StringItemList=\u9b3c\u65af\u901a -1094.lstPokemon.StringItemList=\u803f\u9b3c -1095.lstPokemon.StringItemList=\u5927\u5ca9\u86c7 -1096.lstPokemon.StringItemList=\u50ac\u7720\u8c98 -1097.lstPokemon.StringItemList=\u5f15\u5922\u8c98\u4eba -1098.lstPokemon.StringItemList=\u5927\u9257\u87f9 -1099.lstPokemon.StringItemList=\u5de8\u9257\u87f9 -1100.lstPokemon.StringItemList=\u9739\u9742\u96fb\u7403 -1101.lstPokemon.StringItemList=\u9811\u76ae\u96f7\u5f48 -1102.lstPokemon.StringItemList=\u86cb\u86cb -1103.lstPokemon.StringItemList=\u6930\u86cb\u6a39 -1104.lstPokemon.StringItemList=\u5361\u62c9\u5361\u62c9 -1105.lstPokemon.StringItemList=\u560e\u5566\u560e\u5566 -1106.lstPokemon.StringItemList=\u98db\u817f\u90ce -1107.lstPokemon.StringItemList=\u5feb\u62f3\u90ce -1108.lstPokemon.StringItemList=\u5927\u820c\u982d -1109.lstPokemon.StringItemList=\u74e6\u65af\u86cb -1110.lstPokemon.StringItemList=\u96d9\u5f48\u74e6\u65af -1111.lstPokemon.StringItemList=\u7368\u89d2\u7280\u725b -1112.lstPokemon.StringItemList=\u947d\u89d2\u7280\u7378 -1113.lstPokemon.StringItemList=\u5409\u5229\u86cb -1114.lstPokemon.StringItemList=\u8513\u85e4\u602a -1115.lstPokemon.StringItemList=\u888b\u7378 -1116.lstPokemon.StringItemList=\u58a8\u6d77\u99ac -1117.lstPokemon.StringItemList=\u6d77\u523a\u9f8d -1118.lstPokemon.StringItemList=\u89d2\u91d1\u9b5a -1119.lstPokemon.StringItemList=\u91d1\u9b5a\u738b -1120.lstPokemon.StringItemList=\u6d77\u661f\u661f -1121.lstPokemon.StringItemList=\u5bf6\u77f3\u6d77\u661f -1122.lstPokemon.StringItemList=\u9b54\u7246\u4eba\u5076 -1123.lstPokemon.StringItemList=\u98db\u5929\u87b3\u8782 -1124.lstPokemon.StringItemList=\u8ff7\u5507\u59d0 -1125.lstPokemon.StringItemList=\u96fb\u64ca\u7378 -1126.lstPokemon.StringItemList=\u9d28\u5634\u706b\u7378 -1127.lstPokemon.StringItemList=\u51f1\u7f85\u65af -1128.lstPokemon.StringItemList=\u80af\u6cf0\u7f85 -1129.lstPokemon.StringItemList=\u9bc9\u9b5a\u738b -1130.lstPokemon.StringItemList=\u66b4\u9bc9\u9f8d -1131.lstPokemon.StringItemList=\u62c9\u666e\u62c9\u65af -1132.lstPokemon.StringItemList=\u767e\u8b8a\u602a -1133.lstPokemon.StringItemList=\u4f0a\u5e03 -1134.lstPokemon.StringItemList=\u6c34\u4f0a\u5e03 -1135.lstPokemon.StringItemList=\u96f7\u4f0a\u5e03 -1136.lstPokemon.StringItemList=\u706b\u4f0a\u5e03 -1137.lstPokemon.StringItemList=\u591a\u908a\u7378 -1138.lstPokemon.StringItemList=\u83ca\u77f3\u7378 -1139.lstPokemon.StringItemList=\u591a\u523a\u83ca\u77f3\u7378 -1140.lstPokemon.StringItemList=\u5316\u77f3\u76d4 -1141.lstPokemon.StringItemList=\u942e\u5200\u76d4 -1142.lstPokemon.StringItemList=\u5316\u77f3\u7ffc\u9f8d -1143.lstPokemon.StringItemList=\u5361\u6bd4\u7378 -1144.lstPokemon.StringItemList=\u6025\u51cd\u9ce5 -1145.lstPokemon.StringItemList=\u9583\u96fb\u9ce5 -1146.lstPokemon.StringItemList=\u706b\u7130\u9ce5 -1147.lstPokemon.StringItemList=\u8ff7\u4f60\u9f8d -1148.lstPokemon.StringItemList=\u54c8\u514b\u9f8d -1149.lstPokemon.StringItemList=\u5feb\u9f8d -1150.lstPokemon.StringItemList=\u8d85\u5922 -1151.lstPokemon.StringItemList=\u5922\u5e7b -1152.lstPokemon.StringItemList=\u83ca\u8349\u8449 -1153.lstPokemon.StringItemList=\u6708\u6842\u8449 -1154.lstPokemon.StringItemList=\u5927\u7afa\u8475 -1155.lstPokemon.StringItemList=\u706b\u7403\u9f20 -1156.lstPokemon.StringItemList=\u706b\u5ca9\u9f20 -1157.lstPokemon.StringItemList=\u706b\u7206\u7378 -1158.lstPokemon.StringItemList=\u5c0f\u92f8\u9c77 -1159.lstPokemon.StringItemList=\u85cd\u9c77 -1160.lstPokemon.StringItemList=\u5927\u529b\u9c77 -1161.lstPokemon.StringItemList=\u5c3e\u7acb -1162.lstPokemon.StringItemList=\u5927\u5c3e\u7acb -1163.lstPokemon.StringItemList=\u5495\u5495 -1164.lstPokemon.StringItemList=\u8c93\u982d\u591c\u9df9 -1165.lstPokemon.StringItemList=\u82ad\u74e2\u87f2 -1166.lstPokemon.StringItemList=\u5b89\u74e2\u87f2 -1167.lstPokemon.StringItemList=\u5713\u7d72\u86db -1168.lstPokemon.StringItemList=\u963f\u5229\u591a\u65af -1169.lstPokemon.StringItemList=\u53c9\u5b57\u8760 -1170.lstPokemon.StringItemList=\u71c8\u7c60\u9b5a -1171.lstPokemon.StringItemList=\u96fb\u71c8\u602a -1172.lstPokemon.StringItemList=\u76ae\u4e18 -1173.lstPokemon.StringItemList=\u76ae\u5bf6\u5bf6 -1174.lstPokemon.StringItemList=\u5bf6\u5bf6\u4e01 -1175.lstPokemon.StringItemList=\u6ce2\u514b\u6bd4 -1176.lstPokemon.StringItemList=\u6ce2\u514b\u57fa\u53e4 -1177.lstPokemon.StringItemList=\u5929\u7136\u96c0 -1178.lstPokemon.StringItemList=\u5929\u7136\u9ce5 -1179.lstPokemon.StringItemList=\u54a9\u5229\u7f8a -1180.lstPokemon.StringItemList=\u8338\u8338\u7f8a -1181.lstPokemon.StringItemList=\u96fb\u9f8d -1182.lstPokemon.StringItemList=\u7f8e\u9e97\u82b1 -1183.lstPokemon.StringItemList=\u746a\u529b\u9732 -1184.lstPokemon.StringItemList=\u746a\u529b\u9732\u9e97 -1185.lstPokemon.StringItemList=\u6a39\u624d\u602a -1186.lstPokemon.StringItemList=\u868a\u9999\u86d9\u7687 -1187.lstPokemon.StringItemList=\u6bfd\u5b50\u8349 -1188.lstPokemon.StringItemList=\u6bfd\u5b50\u82b1 -1189.lstPokemon.StringItemList=\u6bfd\u5b50\u68c9 -1190.lstPokemon.StringItemList=\u9577\u5c3e\u602a\u624b -1191.lstPokemon.StringItemList=\u5411\u65e5\u7a2e\u5b50 -1192.lstPokemon.StringItemList=\u5411\u65e5\u82b1\u602a -1193.lstPokemon.StringItemList=\u873b\u873b\u8713 -1194.lstPokemon.StringItemList=\u70cf\u6ce2 -1195.lstPokemon.StringItemList=\u6cbc\u738b -1196.lstPokemon.StringItemList=\u592a\u967d\u4f0a\u5e03 -1197.lstPokemon.StringItemList=\u6708\u4eae\u4f0a\u5e03 -1198.lstPokemon.StringItemList=\u9ed1\u6697\u9d09 -1199.lstPokemon.StringItemList=\u5446\u5446\u738b -1200.lstPokemon.StringItemList=\u5922\u5996 -1201.lstPokemon.StringItemList=\u672a\u77e5\u5716\u9a30 -1202.lstPokemon.StringItemList=\u679c\u7136\u7fc1 -1203.lstPokemon.StringItemList=\u9e92\u9e9f\u5947 -1204.lstPokemon.StringItemList=\u699b\u679c\u7403 -1205.lstPokemon.StringItemList=\u4f5b\u70c8\u6258\u65af -1206.lstPokemon.StringItemList=\u571f\u9f8d\u5f1f\u5f1f -1207.lstPokemon.StringItemList=\u5929\u880d -1208.lstPokemon.StringItemList=\u5927\u92fc\u86c7 -1209.lstPokemon.StringItemList=\u5e03\u9b6f -1210.lstPokemon.StringItemList=\u5e03\u9b6f\u7687 -1211.lstPokemon.StringItemList=\u5343\u91dd\u9b5a -1212.lstPokemon.StringItemList=\u5de8\u9257\u87b3\u8782 -1213.lstPokemon.StringItemList=\u58fa\u58fa -1214.lstPokemon.StringItemList=\u8d6b\u62c9\u514b\u7f85\u65af -1215.lstPokemon.StringItemList=\u72c3\u62c9 -1216.lstPokemon.StringItemList=\u718a\u5bf6\u5bf6 -1217.lstPokemon.StringItemList=\u5708\u5708\u718a -1218.lstPokemon.StringItemList=\u7194\u5ca9\u87f2 -1219.lstPokemon.StringItemList=\u7194\u5ca9\u8778\u725b -1220.lstPokemon.StringItemList=\u5c0f\u5c71\u8c6c -1221.lstPokemon.StringItemList=\u9577\u6bdb\u8c6c -1222.lstPokemon.StringItemList=\u592a\u967d\u73ca\u745a -1223.lstPokemon.StringItemList=\u9435\u70ae\u9b5a -1224.lstPokemon.StringItemList=\u7ae0\u9b5a\u6876 -1225.lstPokemon.StringItemList=\u4fe1\u4f7f\u9ce5 -1226.lstPokemon.StringItemList=\u5de8\u7fc5\u98db\u9b5a -1227.lstPokemon.StringItemList=\u76d4\u7532\u9ce5 -1228.lstPokemon.StringItemList=\u6234\u9b6f\u6bd4 -1229.lstPokemon.StringItemList=\u9ed1\u9b6f\u52a0 -1230.lstPokemon.StringItemList=\u523a\u9f8d\u738b -1231.lstPokemon.StringItemList=\u5c0f\u5c0f\u8c61 -1232.lstPokemon.StringItemList=\u9813\u7532 -1233.lstPokemon.StringItemList=\u591a\u908a\u7378\u2161 -1234.lstPokemon.StringItemList=\u9a5a\u89d2\u9e7f -1235.lstPokemon.StringItemList=\u5716\u5716\u72ac -1236.lstPokemon.StringItemList=\u7121\u754f\u5c0f\u5b50 -1237.lstPokemon.StringItemList=\u6230\u821e\u90ce -1238.lstPokemon.StringItemList=\u8ff7\u5507\u5a03 -1239.lstPokemon.StringItemList=\u96fb\u64ca\u602a -1240.lstPokemon.StringItemList=\u9d28\u5634\u5bf6\u5bf6 -1241.lstPokemon.StringItemList=\u5927\u5976\u7f50 -1242.lstPokemon.StringItemList=\u5e78\u798f\u86cb -1243.lstPokemon.StringItemList=\u96f7\u516c -1244.lstPokemon.StringItemList=\u708e\u5e1d -1245.lstPokemon.StringItemList=\u6c34\u541b -1246.lstPokemon.StringItemList=\u5e7c\u57fa\u62c9\u65af -1247.lstPokemon.StringItemList=\u6c99\u57fa\u62c9\u65af -1248.lstPokemon.StringItemList=\u73ed\u57fa\u62c9\u65af -1249.lstPokemon.StringItemList=\u6d1b\u5947\u4e9e -1250.lstPokemon.StringItemList=\u9cf3\u738b -1251.lstPokemon.StringItemList=\u6642\u62c9\u6bd4 diff --git a/oxt/PokemonGoIV/DlgMain.xdl b/oxt/PokemonGoIV/DlgMain.xdl index 38f0418..78d14d1 100644 --- a/oxt/PokemonGoIV/DlgMain.xdl +++ b/oxt/PokemonGoIV/DlgMain.xdl @@ -11,257 +11,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/oxt/PokemonGoIV/script.xlb b/oxt/PokemonGoIV/script.xlb index 48dde95..81f4928 100644 --- a/oxt/PokemonGoIV/script.xlb +++ b/oxt/PokemonGoIV/script.xlb @@ -2,9 +2,10 @@ - + + \ No newline at end of file