Changed to an OpenOffice extension project.
This commit is contained in:
37
oxt/Addons.xcu
Normal file
37
oxt/Addons.xcu
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<oor:component-data
|
||||
xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="Addons"
|
||||
oor:package="org.openoffice.Office">
|
||||
<node oor:name="AddonUI">
|
||||
<node oor:name="OfficeToolBar">
|
||||
<node oor:name="PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="Title">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
<value xml:lang="zh-TW">寶可夢 Go IV 計算機</value>
|
||||
</prop>
|
||||
<node oor:name="ToolBarItems">
|
||||
<node oor:name="m001" oor:op="replace">
|
||||
<prop oor:name="Context" oor:type="xs:string">
|
||||
<value></value>
|
||||
</prop>
|
||||
<prop oor:name="URL" oor:type="xs:string">
|
||||
<value>vnd.sun.star.script:PokemonGoIV.0Main.subMain?language=Basic&location=application</value>
|
||||
</prop>
|
||||
<prop oor:name="ImageIdentifier" oor:type="xs:string">
|
||||
<value>%origin%/icons/image1</value>
|
||||
</prop>
|
||||
<prop oor:name="Title" oor:type="xs:string">
|
||||
<value>Calculates Pokémon IV</value>
|
||||
<value xml:lang="zh-TW">計算寶可夢 IV</value>
|
||||
</prop>
|
||||
<prop oor:name="Target" oor:type="xs:string">
|
||||
<value>_self</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
7
oxt/META-INF/manifest.xml
Normal file
7
oxt/META-INF/manifest.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<manifest:manifest>
|
||||
<manifest:file-entry manifest:full-path="PokemonGoIV/" manifest:media-type="application/vnd.sun.star.basic-library"/>
|
||||
<manifest:file-entry manifest:full-path="pkg-desc/pkg-description.txt" manifest:media-type="application/vnd.sun.star.package-bundle-description"/>
|
||||
<manifest:file-entry manifest:full-path="pkg-desc/pkg-description.zh-TW.txt" manifest:media-type="application/vnd.sun.star.package-bundle-description;locale=zh-TW"/>
|
||||
<manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
|
||||
</manifest:manifest>
|
15
oxt/Office/UI/BaseWindowState.xcu
Normal file
15
oxt/Office/UI/BaseWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="BaseWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
15
oxt/Office/UI/BasicIDEWindowState.xcu
Normal file
15
oxt/Office/UI/BasicIDEWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="BasicIDEWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
15
oxt/Office/UI/CalcWindowState.xcu
Normal file
15
oxt/Office/UI/CalcWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="CalcWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
15
oxt/Office/UI/DrawWindowState.xcu
Normal file
15
oxt/Office/UI/DrawWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="DrawWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
15
oxt/Office/UI/ImpressWindowState.xcu
Normal file
15
oxt/Office/UI/ImpressWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="ImpressWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
15
oxt/Office/UI/MathWindowState.xcu
Normal file
15
oxt/Office/UI/MathWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="MathWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
15
oxt/Office/UI/StartModuleWindowState.xcu
Normal file
15
oxt/Office/UI/StartModuleWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="StartModuleWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
15
oxt/Office/UI/WriterWindowState.xcu
Normal file
15
oxt/Office/UI/WriterWindowState.xcu
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
oor:name="WriterWindowState"
|
||||
oor:package="org.openoffice.Office.UI">
|
||||
<node oor:name="UIElements">
|
||||
<node oor:name="States">
|
||||
<node oor:name="private:resource/toolbar/addon_PokemonGoIV.OfficeToolBar" oor:op="replace">
|
||||
<prop oor:name="UIName" oor:type="xs:string">
|
||||
<value>Pokémon Go IV Calculator</value>
|
||||
</prop>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</oor:component-data>
|
394
oxt/PokemonGoIV/0Main.vb
Normal file
394
oxt/PokemonGoIV/0Main.vb
Normal file
@ -0,0 +1,394 @@
|
||||
' 0Main: The main module for the Pokémon Go IV calculator
|
||||
' by imacat <imacat@mail.imacat.idv.tw>, 2016-11-27
|
||||
|
||||
Option Explicit
|
||||
|
||||
' The stats of a Pokémon.
|
||||
Type aStats
|
||||
sNo As String
|
||||
sPokemon As String
|
||||
fLevel As Double
|
||||
nStamina As Integer
|
||||
nAttack As Integer
|
||||
nDefense As Integer
|
||||
nTotal As Integer
|
||||
sEvolveInto As String
|
||||
nEvolvedCP As Integer
|
||||
nMaxCP As Integer
|
||||
End Type
|
||||
|
||||
' The amount of star dust to power-up.
|
||||
Type aStarDust
|
||||
fLevel As Double
|
||||
nStarDust As Integer
|
||||
End Type
|
||||
|
||||
' The parameters to find the individual values.
|
||||
Type aFindIVParam
|
||||
sPokemon As String
|
||||
nCP As Integer
|
||||
nHP As Integer
|
||||
nStarDust As Integer
|
||||
nPlayerLevel As Integer
|
||||
bIsNew As Boolean
|
||||
nAppraisal1 As Integer
|
||||
sBest As String
|
||||
nAppraisal2 As Integer
|
||||
End Type
|
||||
|
||||
Private maBaseStats () As New aStats
|
||||
Private mCPM () As Double, mStarDust () As Integer
|
||||
|
||||
' subMain: The main program
|
||||
Sub subMain
|
||||
BasicLibraries.loadLibrary "XrayTool"
|
||||
Dim maIVs As Variant, nI As Integer, sOutput As String
|
||||
Dim aQuery As New aFindIVParam, aBaseStats As New aStats
|
||||
|
||||
aQuery = fnAskParam
|
||||
maIVs = fnFindIV (aQuery)
|
||||
sOutput = ""
|
||||
For nI = 0 To UBound (maIVs)
|
||||
sOutput = sOutput _
|
||||
& " Lv=" & maIVs (nI).fLevel _
|
||||
& " Atk=" & maIVs (nI).nAttack _
|
||||
& " Def=" & maIVs (nI).nDefense _
|
||||
& " Sta=" & maIVs (nI).nStamina _
|
||||
& " IV=" & fnFloor (maIVs (nI).nTotal * 100 / 45) & "%"
|
||||
If aQuery.sPokemon <> maIVs (nI).sEvolveInto Then
|
||||
aBaseStats = fnGetBaseStats (maIVs (nI).sEvolveInto)
|
||||
sOutput = sOutput & " Ev=" & maIVs (nI).sEvolveInto _
|
||||
& " " & maIVs (nI).nEvolvedCP
|
||||
End If
|
||||
If aQuery.nPlayerLevel <> 0 Then
|
||||
sOutput = sOutput & " XCP=" & maIVs (nI).nMaxCP
|
||||
End If
|
||||
sOutput = sOutput & Chr (10)
|
||||
Next nI
|
||||
If sOutput = "" Then
|
||||
MsgBox "Found no matching IV."
|
||||
Else
|
||||
subSaveIV (aQuery, maIVs)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' fnFindIV: Finds the possible individual values of the Pokémon
|
||||
Function fnFindIV (aQuery As aFindIVParam) As Variant
|
||||
Dim aBaseStats As New aStats, maIV () As New aStats
|
||||
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, nCount As Integer
|
||||
Dim aEvBaseStats As new aStats, aTempIV As New aStats
|
||||
|
||||
If aQuery.sPokemon = "" Then
|
||||
fnFindIV = maIV
|
||||
Exit Function
|
||||
End If
|
||||
If aQuery.bIsNew Then
|
||||
fStep = 1
|
||||
Else
|
||||
fStep = 0.5
|
||||
End If
|
||||
aBaseStats = fnGetBaseStats (aQuery.sPokemon)
|
||||
aEvBaseStats = fnGetBaseStats (aBaseStats.sEvolveInto)
|
||||
subReadStarDust
|
||||
nCount = -1
|
||||
For fLevel = 1 To UBound (mStarDust) Step fStep
|
||||
If mStarDust (CInt (fLevel - 0.5)) = aQuery.nStarDust Then
|
||||
'For nI = 0 To UBound (maStarDust) Step nStep
|
||||
' fLevel = maStarDust (nI).fLevel
|
||||
' If maStarDust (nI).nStarDust = aQuery.nStarDust Then
|
||||
For nStamina = 0 To 15
|
||||
If fnCalcHP (aBaseStats, fLevel, nStamina) = aQuery.nHP Then
|
||||
For nAttack = 0 To 15
|
||||
For nDefense = 0 To 15
|
||||
If fnCalcCP (aBaseStats, fLevel, nAttack, nDefense, nStamina) = aQuery.nCP _
|
||||
And Not (fnFilterAppraisals (aQuery, nAttack, nDefense, nStamina)) Then
|
||||
nCount = nCount + 1
|
||||
ReDim Preserve maIV (nCount) As New aStats
|
||||
With maIV (nCount)
|
||||
.sNo = aBaseStats.sNo
|
||||
.sPokemon = aQuery.sPokemon
|
||||
.fLevel = fLevel
|
||||
.nAttack = nAttack
|
||||
.nDefense = nDefense
|
||||
.nStamina = nStamina
|
||||
.nTotal = nAttack + nDefense + nStamina
|
||||
.sEvolveInto = aBaseStats.sEvolveInto
|
||||
.nEvolvedCP = fnCalcCP (aEvBaseStats, fLevel, nAttack, nDefense, nStamina)
|
||||
End With
|
||||
If aQuery.nPlayerLevel <> 0 Then
|
||||
maIV (nCount).nMaxCP = fnCalcCP (aEvBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
|
||||
Else
|
||||
maIV (nCount).nMaxCP = -1
|
||||
End If
|
||||
End If
|
||||
Next nDefense
|
||||
Next nAttack
|
||||
End If
|
||||
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
|
||||
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 aStats, aIVb As aStats) As Double
|
||||
fnCompareIV = aIVb.nMaxCP - aIVa.nMaxCP
|
||||
If fnCompareIV <> 0 Then
|
||||
Exit Function
|
||||
End If
|
||||
fnCompareIV = aIVb.nEvolvedCP - aIVa.nEvolvedCP
|
||||
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 aStats, aTo As aStats) As Double
|
||||
With aTo
|
||||
.sNo = aFrom.sNo
|
||||
.sPokemon = aFrom.sPokemon
|
||||
.fLevel = aFrom.fLevel
|
||||
.nAttack = aFrom.nAttack
|
||||
.nDefense = aFrom.nDefense
|
||||
.nStamina = aFrom.nStamina
|
||||
.nTotal = aFrom.nTotal
|
||||
.sEvolveInto = aFrom.sEvolveInto
|
||||
.nEvolvedCP = aFrom.nEvolvedCP
|
||||
.nMaxCP = aFrom.nMaxCP
|
||||
End With
|
||||
End Function
|
||||
|
||||
' subSaveIV: Saves the found IV
|
||||
Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
|
||||
Dim oDoc As Object, oSheet As Object, oRange As Object
|
||||
Dim nI As Integer, oColumns As Object
|
||||
Dim mData (Ubound (maIVs) + 1) 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)
|
||||
mData (0) = Array ( _
|
||||
"No", "Pokemon", "CP", "HP", _
|
||||
"Lv", "Atk", "Def", "Sta", "IV", _
|
||||
"Evolve Into", "Evolved CP", "Max CP")
|
||||
mData (1) = Array ( _
|
||||
maIVs (0).sNo, aQuery.sPokemon, aQuery.nCP, aQuery.nHP, _
|
||||
maIVs (0).fLevel, maIVs (0).nAttack, maIVs (0).nDefense, _
|
||||
maIVs (0).nStamina, maIVs (0).nTotal / 45, _
|
||||
maIVs (0).sEvolveInto, maIVs (0).nEvolvedCP, _
|
||||
maIVs (0).nMaxCP)
|
||||
For nI = 1 To UBound (maIVs)
|
||||
mData (nI + 1) = Array ( _
|
||||
"", "", "", "", _
|
||||
maIVs (nI).fLevel, maIVs (nI).nAttack, maIVs (nI).nDefense, _
|
||||
maIVs (nI).nStamina, maIVs (nI).nTotal / 45, _
|
||||
maIVs (nI).sEvolveInto, maIVs (nI).nEvolvedCP, _
|
||||
maIVs (nI).nMaxCP)
|
||||
Next nI
|
||||
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 ( _
|
||||
8, 1, 8, UBound (mData))
|
||||
oRange.setPropertyValue ("NumberFormat", 10)
|
||||
|
||||
oColumns = oSheet.getColumns
|
||||
For nI = 0 To UBound (mData (0))
|
||||
oColumns.getByIndex (nI).setPropertyValue ( _
|
||||
"OptimalWidth", True)
|
||||
Next nI
|
||||
End Sub
|
||||
|
||||
' fnFilterAppraisals: Filters the IV by the appraisals.
|
||||
Function fnFilterAppraisals (aQuery As aFindIVParam, nAttack As Integer, nDefense As Integer, nStamina As Integer) As Boolean
|
||||
Dim nTotal As Integer, nMax As Integer, sBest As String
|
||||
|
||||
' The first appraisal.
|
||||
nTotal = nAttack + nDefense + nStamina
|
||||
If aQuery.nAppraisal1 = 1 And Not (nTotal >= 37) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
If aQuery.nAppraisal1 = 2 And Not (nTotal >= 30 And nTotal <= 36) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
If aQuery.nAppraisal1 = 3 And Not (nTotal >= 23 And nTotal <= 29) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
If aQuery.nAppraisal1 = 4 And Not (nTotal <= 22) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
' The best stats.
|
||||
nMax = nAttack
|
||||
If nDefense > nMax Then
|
||||
nMax = nDefense
|
||||
End If
|
||||
If nStamina > nMax Then
|
||||
nMax = nStamina
|
||||
End If
|
||||
If aQuery.sBest <> "" Then
|
||||
sBest = ""
|
||||
If nAttack = nMax Then
|
||||
sBest = sBest & "Atk "
|
||||
End If
|
||||
If nDefense = nMax Then
|
||||
sBest = sBest & "Def "
|
||||
End If
|
||||
If nStamina = nMax Then
|
||||
sBest = sBest & "Sta "
|
||||
End If
|
||||
If aQuery.sBest <> sBest Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
' The second appraisal.
|
||||
If aQuery.nAppraisal2 = 1 And Not (nMax = 15) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
If aQuery.nAppraisal2 = 2 And Not (nMax = 13 Or nMax = 14) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
If aQuery.nAppraisal2 = 3 And Not (nMax >= 8 And nMax <= 12) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
If aQuery.nAppraisal2 = 4 And Not (nMax <= 7) Then
|
||||
fnFilterAppraisals = True
|
||||
Exit Function
|
||||
End If
|
||||
fnFilterAppraisals = False
|
||||
End Function
|
||||
|
||||
' fnCalcCP: Calculates the combat power of the Pokémon
|
||||
Function fnCalcCP (aBaseStats As aStats, fLevel As Double, nAttack As Integer, nDefense As Integer, nStamina As Integer) As Integer
|
||||
fnCalcCP = fnFloor ((aBaseStats.nAttack + nAttack) _
|
||||
* ((aBaseStats.nDefense + nDefense) ^ 0.5) _
|
||||
* ((aBaseStats.nStamina + nStamina) ^ 0.5) _
|
||||
* (fnGetCPM (fLevel) ^ 2) / 10)
|
||||
End Function
|
||||
|
||||
' fnCalcHP: Calculates the hit points of the Pokémon
|
||||
Function fnCalcHP (aBaseStats As aStats, fLevel As Double, nStamina As Integer) As Integer
|
||||
fnCalcHP = fnFloor ((aBaseStats.nStamina + nStamina) _
|
||||
* fnGetCPM (fLevel))
|
||||
End Function
|
||||
|
||||
' fnGetBaseStats: Returns the base stats of the Pokémon.
|
||||
Function fnGetBaseStats (sPokemon As String) As aStats
|
||||
Dim nI As Integer
|
||||
|
||||
subReadBaseStats
|
||||
For nI = 0 To UBound (maBaseStats)
|
||||
If maBaseStats (nI).sPokemon = sPokemon Then
|
||||
fnGetBaseStats = maBaseStats (nI)
|
||||
Exit Function
|
||||
End If
|
||||
Next nI
|
||||
End Function
|
||||
|
||||
' fnGetCPM: Returns the combat power multiplier.
|
||||
Function fnGetCPM (fLevel As Double) As Double
|
||||
Dim nI As Integer
|
||||
|
||||
subReadCPM
|
||||
If CInt (fLevel) = fLevel Then
|
||||
fnGetCPM = mCPM (fLevel)
|
||||
Else
|
||||
fnGetCPM = ((mCpm (fLevel - 0.5) ^ 2 _
|
||||
+ mCpm (fLevel + 0.5) ^ 2) / 2) ^ 0.5
|
||||
End If
|
||||
End Function
|
||||
|
||||
' fnFloor: Returns the floor of the number
|
||||
Function fnFloor (fNumber As Double) As Integer
|
||||
fnFloor = CInt (fNumber - 0.5)
|
||||
End Function
|
||||
|
||||
' subReadBaseStats: Reads the base stats table.
|
||||
Sub subReadBaseStats
|
||||
Dim mData As Variant, nI 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)
|
||||
.sPokemon = mData (nI) (0)
|
||||
.nStamina = mData (nI) (2)
|
||||
.nAttack = mData (nI) (3)
|
||||
.nDefense = mData (nI) (4)
|
||||
.sEvolveInto = mData (nI) (5)
|
||||
End With
|
||||
Next nI
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' subReadCPM: Reads the CPM table.
|
||||
Sub subReadCPM
|
||||
If UBound (mCPM) = -1 Then
|
||||
mCPM = fnGetCPMData
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' subReadStarDust: Reads the star dust table.
|
||||
Sub subReadStarDust
|
||||
If UBound (mStarDust) = -1 Then
|
||||
mStarDust = fnGetStarDustData
|
||||
End If
|
||||
End Sub
|
320
oxt/PokemonGoIV/1Dialog.vb
Normal file
320
oxt/PokemonGoIV/1Dialog.vb
Normal file
@ -0,0 +1,320 @@
|
||||
' 1Dialog: The UI of the Pokémon IV calculator
|
||||
' by imacat <imacat@mail.imacat.idv.tw>, 2016-11-27
|
||||
|
||||
Option Explicit
|
||||
|
||||
' The parameters to find the individual values.
|
||||
Type aFindIVParam
|
||||
sPokemon As String
|
||||
nCP As Integer
|
||||
nHP As Integer
|
||||
nStarDust As Integer
|
||||
nPlayerLevel As Integer
|
||||
bIsNew As Boolean
|
||||
nAppraisal1 As Integer
|
||||
sBest As String
|
||||
nAppraisal2 As Integer
|
||||
End Type
|
||||
|
||||
' fnAskParam: Asks the users for the parameters for the Pokémon.
|
||||
Function fnAskParam As aFindIVParam
|
||||
Dim oDialog As Object, oDialogModel As Object
|
||||
Dim oTextModel As Object, oListModel As Object
|
||||
Dim oNumericModel As Object, oCheckBoxModel As Object
|
||||
Dim oGroupModel As Object, oButtonModel As Object
|
||||
Dim mListItems () As String, sTemp As String
|
||||
Dim nI As Integer, nCount As Integer
|
||||
Dim aQuery As New aFindIVParam
|
||||
|
||||
' Creates a dialog
|
||||
oDialogModel = CreateUnoService ( _
|
||||
"com.sun.star.awt.UnoControlDialogModel")
|
||||
oDialogModel.setPropertyValue ("PositionX", 100)
|
||||
oDialogModel.setPropertyValue ("PositionY", 100)
|
||||
oDialogModel.setPropertyValue ("Height", 140)
|
||||
oDialogModel.setPropertyValue ("Width", 220)
|
||||
oDialogModel.setPropertyValue ("Title", "Pokémon Parameters")
|
||||
|
||||
' Adds a text label for the Pokémon list.
|
||||
oTextModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlFixedTextModel")
|
||||
oTextModel.setPropertyValue ("PositionX", 5)
|
||||
oTextModel.setPropertyValue ("PositionY", 5)
|
||||
oTextModel.setPropertyValue ("Height", 12)
|
||||
oTextModel.setPropertyValue ("Width", 30)
|
||||
oTextModel.setPropertyValue ("Label", "~Pokémon:")
|
||||
oDialogModel.insertByName ("txtPokemon", oTextModel)
|
||||
|
||||
' Adds the Pokémon list.
|
||||
subReadBaseStats
|
||||
ReDim mListItems (UBound (maBaseStats)) As String
|
||||
For nI = 0 To UBound (maBaseStats)
|
||||
mListItems (nI) = maBaseStats (nI).sPokemon
|
||||
Next nI
|
||||
oListModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlListBoxModel")
|
||||
oListModel.setPropertyValue ("PositionX", 35)
|
||||
oListModel.setPropertyValue ("PositionY", 4)
|
||||
oListModel.setPropertyValue ("Height", 12)
|
||||
oListModel.setPropertyValue ("Width", 50)
|
||||
oListModel.setPropertyValue ("TabIndex", 0)
|
||||
oListModel.setPropertyValue ("Dropdown", True)
|
||||
oListModel.setPropertyValue ("StringItemList", mListItems)
|
||||
oDialogModel.insertByName ("lstPokemon", oListModel)
|
||||
|
||||
' Adds a text label for the CP field.
|
||||
oTextModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlFixedTextModel")
|
||||
oTextModel.setPropertyValue ("PositionX", 5)
|
||||
oTextModel.setPropertyValue ("PositionY", 20)
|
||||
oTextModel.setPropertyValue ("Height", 12)
|
||||
oTextModel.setPropertyValue ("Width", 15)
|
||||
oTextModel.setPropertyValue ("Label", "~CP:")
|
||||
oDialogModel.insertByName ("txtCP", oTextModel)
|
||||
|
||||
' Adds the CP field.
|
||||
oNumericModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlNumericFieldModel")
|
||||
oNumericModel.setPropertyValue ("PositionX", 20)
|
||||
oNumericModel.setPropertyValue ("PositionY", 19)
|
||||
oNumericModel.setPropertyValue ("Height", 12)
|
||||
oNumericModel.setPropertyValue ("Width", 20)
|
||||
oNumericModel.setPropertyValue ("DecimalAccuracy", 0)
|
||||
oDialogModel.insertByName ("numCP", oNumericModel)
|
||||
|
||||
' Adds a text label for the HP field.
|
||||
oTextModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlFixedTextModel")
|
||||
oTextModel.setPropertyValue ("PositionX", 50)
|
||||
oTextModel.setPropertyValue ("PositionY", 20)
|
||||
oTextModel.setPropertyValue ("Height", 12)
|
||||
oTextModel.setPropertyValue ("Width", 15)
|
||||
oTextModel.setPropertyValue ("Label", "~HP:")
|
||||
oDialogModel.insertByName ("txtHP", oTextModel)
|
||||
|
||||
' Adds the HP field.
|
||||
oNumericModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlNumericFieldModel")
|
||||
oNumericModel.setPropertyValue ("PositionX", 65)
|
||||
oNumericModel.setPropertyValue ("PositionY", 19)
|
||||
oNumericModel.setPropertyValue ("Height", 12)
|
||||
oNumericModel.setPropertyValue ("Width", 15)
|
||||
oNumericModel.setPropertyValue ("DecimalAccuracy", 0)
|
||||
oDialogModel.insertByName ("numHP", oNumericModel)
|
||||
|
||||
' Adds a text label for the star dust field.
|
||||
oTextModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlFixedTextModel")
|
||||
oTextModel.setPropertyValue ("PositionX", 90)
|
||||
oTextModel.setPropertyValue ("PositionY", 20)
|
||||
oTextModel.setPropertyValue ("Height", 12)
|
||||
oTextModel.setPropertyValue ("Width", 30)
|
||||
oTextModel.setPropertyValue ("Label", "~Star dust:")
|
||||
oDialogModel.insertByName ("txtStarDust", oTextModel)
|
||||
|
||||
' Adds the star dust field.
|
||||
subReadStarDust
|
||||
sTemp = " "
|
||||
ReDim mListItems () As String
|
||||
nCount = -1
|
||||
For nI = 1 To UBound (mStarDust)
|
||||
If InStr (sTemp, " " & CStr (mStarDust (nI)) & " ") = 0 Then
|
||||
nCount = nCount + 1
|
||||
ReDim Preserve mListItems (nCount) As String
|
||||
mListItems (nCount) = CStr (mStarDust (nI))
|
||||
sTemp = sTemp & CStr (mStarDust (nI)) & " "
|
||||
End If
|
||||
Next nI
|
||||
oListModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlListBoxModel")
|
||||
oListModel.setPropertyValue ("PositionX", 120)
|
||||
oListModel.setPropertyValue ("PositionY", 19)
|
||||
oListModel.setPropertyValue ("Height", 12)
|
||||
oListModel.setPropertyValue ("Width", 30)
|
||||
oListModel.setPropertyValue ("Dropdown", True)
|
||||
oListModel.setPropertyValue ("StringItemList", mListItems)
|
||||
oDialogModel.insertByName ("lstStarDust", oListModel)
|
||||
|
||||
' Adds a text label for the player level field.
|
||||
oTextModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlFixedTextModel")
|
||||
oTextModel.setPropertyValue ("PositionX", 160)
|
||||
oTextModel.setPropertyValue ("PositionY", 20)
|
||||
oTextModel.setPropertyValue ("Height", 12)
|
||||
oTextModel.setPropertyValue ("Width", 35)
|
||||
oTextModel.setPropertyValue ("Label", "Player ~level:")
|
||||
oDialogModel.insertByName ("txtPlayerLevel", oTextModel)
|
||||
|
||||
' Adds the player level field.
|
||||
ReDim mListItems (39) As String
|
||||
For nI = 0 To UBound (mListItems)
|
||||
mListItems (nI) = CStr (nI + 1)
|
||||
Next nI
|
||||
oListModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlListBoxModel")
|
||||
oListModel.setPropertyValue ("PositionX", 195)
|
||||
oListModel.setPropertyValue ("PositionY", 19)
|
||||
oListModel.setPropertyValue ("Height", 12)
|
||||
oListModel.setPropertyValue ("Width", 20)
|
||||
oListModel.setPropertyValue ("Dropdown", True)
|
||||
oListModel.setPropertyValue ("StringItemList", mListItems)
|
||||
oDialogModel.insertByName ("lstPlayerLevel", oListModel)
|
||||
|
||||
' Adds the whether powered-up check box.
|
||||
oCheckBoxModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlCheckBoxModel")
|
||||
oCheckBoxModel.setPropertyValue ("PositionX", 5)
|
||||
oCheckBoxModel.setPropertyValue ("PositionY", 35)
|
||||
oCheckBoxModel.setPropertyValue ("Height", 12)
|
||||
oCheckBoxModel.setPropertyValue ("Width", 210)
|
||||
oCheckBoxModel.setPropertyValue ("Label", _
|
||||
"This Pokémon is ~newly-caught and was not powered-up yet.")
|
||||
oCheckBoxModel.setPropertyValue ("State", 1)
|
||||
oDialogModel.insertByName ("cbxIsNew", oCheckBoxModel)
|
||||
|
||||
' Adds a group for the appraisals
|
||||
oGroupModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlGroupBoxModel")
|
||||
oGroupModel.setPropertyValue ("PositionX", 5)
|
||||
oGroupModel.setPropertyValue ("PositionY", 50)
|
||||
oGroupModel.setPropertyValue ("Height", 65)
|
||||
oGroupModel.setPropertyValue ("Width", 210)
|
||||
oGroupModel.setPropertyValue ("Label", "Apprasals")
|
||||
oDialogModel.insertByName ("grpApprasals", oGroupModel)
|
||||
|
||||
' Adds the first appraisal list.
|
||||
mListItems = Array ( _
|
||||
"Amazed me/wonder/best", _
|
||||
"Strong/caught my attention", _
|
||||
"Decent/above average", _
|
||||
"Not great/not make headway/has room")
|
||||
oListModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlListBoxModel")
|
||||
oListModel.setPropertyValue ("PositionX", 10)
|
||||
oListModel.setPropertyValue ("PositionY", 64)
|
||||
oListModel.setPropertyValue ("Height", 12)
|
||||
oListModel.setPropertyValue ("Width", 200)
|
||||
oListModel.setPropertyValue ("Dropdown", True)
|
||||
oListModel.setPropertyValue ("StringItemList", mListItems)
|
||||
oDialogModel.insertByName ("lstApprasal1", oListModel)
|
||||
|
||||
' Adds a text label for the HP field.
|
||||
oTextModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlFixedTextModel")
|
||||
oTextModel.setPropertyValue ("PositionX", 10)
|
||||
oTextModel.setPropertyValue ("PositionY", 80)
|
||||
oTextModel.setPropertyValue ("Height", 12)
|
||||
oTextModel.setPropertyValue ("Width", 15)
|
||||
oTextModel.setPropertyValue ("Label", "Best:")
|
||||
oDialogModel.insertByName ("txtBest", oTextModel)
|
||||
|
||||
' Adds the attack is best check box
|
||||
oCheckBoxModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlCheckBoxModel")
|
||||
oCheckBoxModel.setPropertyValue ("PositionX", 25)
|
||||
oCheckBoxModel.setPropertyValue ("PositionY", 80)
|
||||
oCheckBoxModel.setPropertyValue ("Height", 12)
|
||||
oCheckBoxModel.setPropertyValue ("Width", 30)
|
||||
oCheckBoxModel.setPropertyValue ("Label", "~Attack")
|
||||
oDialogModel.insertByName ("cbxAttackBest", oCheckBoxModel)
|
||||
|
||||
' Adds the defense is best check box
|
||||
oCheckBoxModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlCheckBoxModel")
|
||||
oCheckBoxModel.setPropertyValue ("PositionX", 55)
|
||||
oCheckBoxModel.setPropertyValue ("PositionY", 80)
|
||||
oCheckBoxModel.setPropertyValue ("Height", 12)
|
||||
oCheckBoxModel.setPropertyValue ("Width", 35)
|
||||
oCheckBoxModel.setPropertyValue ("Label", "~Defense")
|
||||
oDialogModel.insertByName ("cbxDefenseBest", oCheckBoxModel)
|
||||
|
||||
' Adds the defense is best check box
|
||||
oCheckBoxModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlCheckBoxModel")
|
||||
oCheckBoxModel.setPropertyValue ("PositionX", 90)
|
||||
oCheckBoxModel.setPropertyValue ("PositionY", 80)
|
||||
oCheckBoxModel.setPropertyValue ("Height", 12)
|
||||
oCheckBoxModel.setPropertyValue ("Width", 45)
|
||||
oCheckBoxModel.setPropertyValue ("Label", "HP (~Stamina)")
|
||||
oDialogModel.insertByName ("cbxHPBest", oCheckBoxModel)
|
||||
|
||||
' Adds the second appraisal list.
|
||||
mListItems = Array ( _
|
||||
"WOW/incredible/stats are best", _
|
||||
"Excellent/impressed/impressive", _
|
||||
"Get the job done/noticeable/some good stats", _
|
||||
"No greatness/not out of the norm/kinda basic")
|
||||
oListModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlListBoxModel")
|
||||
oListModel.setPropertyValue ("PositionX", 10)
|
||||
oListModel.setPropertyValue ("PositionY", 95)
|
||||
oListModel.setPropertyValue ("Height", 12)
|
||||
oListModel.setPropertyValue ("Width", 200)
|
||||
oListModel.setPropertyValue ("Dropdown", True)
|
||||
oListModel.setPropertyValue ("StringItemList", mListItems)
|
||||
oDialogModel.insertByName ("lstApprasal2", oListModel)
|
||||
|
||||
' Adds the OK button.
|
||||
oButtonModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlButtonModel")
|
||||
oButtonModel.setPropertyValue ("PositionX", 35)
|
||||
oButtonModel.setPropertyValue ("PositionY", 120)
|
||||
oButtonModel.setPropertyValue ("Height", 15)
|
||||
oButtonModel.setPropertyValue ("Width", 60)
|
||||
oButtonModel.setPropertyValue ("PushButtonType", _
|
||||
com.sun.star.awt.PushButtonType.OK)
|
||||
oButtonModel.setPropertyValue ("DefaultButton", True)
|
||||
oDialogModel.insertByName ("btnOK", oButtonModel)
|
||||
|
||||
' Adds the cancel button.
|
||||
oButtonModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlButtonModel")
|
||||
oButtonModel.setPropertyValue ("PositionX", 125)
|
||||
oButtonModel.setPropertyValue ("PositionY", 120)
|
||||
oButtonModel.setPropertyValue ("Height", 15)
|
||||
oButtonModel.setPropertyValue ("Width", 60)
|
||||
oButtonModel.setPropertyValue ("PushButtonType", _
|
||||
com.sun.star.awt.PushButtonType.CANCEL)
|
||||
oDialogModel.insertByName ("btnCancel", oButtonModel)
|
||||
|
||||
' Adds the dialog model to the control and runs it.
|
||||
oDialog = CreateUnoService ("com.sun.star.awt.UnoControlDialog")
|
||||
oDialog.setModel (oDialogModel)
|
||||
oDialog.setVisible (True)
|
||||
oDialog.getControl ("lstPokemon").setFocus
|
||||
oDialog.execute
|
||||
|
||||
With aQuery
|
||||
.sPokemon = oDialog.getControl ("lstPokemon").getSelectedItem
|
||||
.nCP = oDialog.getControl ("numCP").getValue
|
||||
.nHP = oDialog.getControl ("numHP").getValue
|
||||
.nStarDust = CInt (oDialog.getControl ("lstStarDust").getSelectedItem)
|
||||
.nPlayerLevel = CInt (oDialog.getControl ("lstPlayerLevel").getSelectedItem)
|
||||
.nAppraisal1 = oDialog.getControl ("lstApprasal1").getSelectedItemPos + 1
|
||||
.nAppraisal2 = oDialog.getControl ("lstApprasal2").getSelectedItemPos + 1
|
||||
End With
|
||||
If oDialog.getControl ("cbxIsNew").getState = 1 Then
|
||||
aQuery.bIsNew = True
|
||||
Else
|
||||
aQuery.bIsNew = False
|
||||
End If
|
||||
aQuery.sBest = ""
|
||||
If oDialog.getControl ("cbxAttackBest").getState = 1 Then
|
||||
aQuery.sBest = aQuery.sBest & "Atk "
|
||||
End If
|
||||
If oDialog.getControl ("cbxDefenseBest").getState = 1 Then
|
||||
aQuery.sBest = aQuery.sBest & "Def "
|
||||
End If
|
||||
If oDialog.getControl ("cbxHPBest").getState = 1 Then
|
||||
aQuery.sBest = aQuery.sBest & "Sta "
|
||||
End If
|
||||
fnAskParam = aQuery
|
||||
End Function
|
||||
|
||||
sub subBtnOK_actionPerformed
|
||||
MsgBox "OK"
|
||||
End Sub
|
||||
|
||||
sub subBtnOK_disposing
|
||||
MsgBox "OK"
|
||||
End Sub
|
253
oxt/PokemonGoIV/2Data.vb
Normal file
253
oxt/PokemonGoIV/2Data.vb
Normal file
@ -0,0 +1,253 @@
|
||||
' 2Data: The Pokémon Go data for IV calculation
|
||||
' by imacat <imacat@mail.imacat.idv.tw>, 2016-11-28
|
||||
' Generated with _3Load.subReadDataSheets ()
|
||||
|
||||
Option Explicit
|
||||
|
||||
' fnGetBaseStatsData: Returns the base stats data.
|
||||
Function fnGetBaseStatsData As Variant
|
||||
fnGetBaseStatsData = Array( _
|
||||
Array ("Bulbasaur", "001", 90, 118, 118, "Venusaur"), _
|
||||
Array ("Ivysaur", "002", 120, 151, 151, "Venusaur"), _
|
||||
Array ("Venusaur", "003", 160, 198, 198, "Venusaur"), _
|
||||
Array ("Charmander", "004", 78, 116, 96, "Charizard"), _
|
||||
Array ("Charmeleon", "005", 116, 158, 129, "Charizard"), _
|
||||
Array ("Charizard", "006", 156, 223, 176, "Charizard"), _
|
||||
Array ("Squirtle", "007", 88, 94, 122, "Blastoise"), _
|
||||
Array ("Wartortle", "008", 118, 126, 155, "Blastoise"), _
|
||||
Array ("Blastoise", "009", 158, 171, 210, "Blastoise"), _
|
||||
Array ("Caterpie", "010", 90, 55, 62, "Butterfree"), _
|
||||
Array ("Metapod", "011", 100, 45, 64, "Butterfree"), _
|
||||
Array ("Butterfree", "012", 120, 167, 151, "Butterfree"), _
|
||||
Array ("Weedle", "013", 80, 63, 55, "Beedrill"), _
|
||||
Array ("Kakuna", "014", 90, 46, 86, "Beedrill"), _
|
||||
Array ("Beedrill", "015", 130, 169, 150, "Beedrill"), _
|
||||
Array ("Pidgey", "016", 80, 85, 76, "Pidgeot"), _
|
||||
Array ("Pidgeotto", "017", 126, 117, 108, "Pidgeot"), _
|
||||
Array ("Pidgeot", "018", 166, 166, 157, "Pidgeot"), _
|
||||
Array ("Rattata", "019", 60, 103, 70, "Raticate"), _
|
||||
Array ("Raticate", "020", 110, 161, 144, "Raticate"), _
|
||||
Array ("Spearow", "021", 80, 112, 61, "Fearow"), _
|
||||
Array ("Fearow", "022", 130, 182, 135, "Fearow"), _
|
||||
Array ("Ekans", "023", 70, 110, 102, "Arbok"), _
|
||||
Array ("Arbok", "024", 120, 167, 158, "Arbok"), _
|
||||
Array ("Pikachu", "025", 70, 112, 101, "Raichu"), _
|
||||
Array ("Raichu", "026", 120, 193, 165, "Raichu"), _
|
||||
Array ("Sandshrew", "027", 100, 126, 145, "Sandslash"), _
|
||||
Array ("Sandslash", "028", 150, 182, 202, "Sandslash"), _
|
||||
Array ("Nidoran♀", "029", 110, 86, 94, "Nidoqueen"), _
|
||||
Array ("Nidorina", "030", 140, 117, 126, "Nidoqueen"), _
|
||||
Array ("Nidoqueen", "031", 180, 180, 174, "Nidoqueen"), _
|
||||
Array ("Nidoran♂", "032", 92, 105, 76, "Nidoking"), _
|
||||
Array ("Nidorino", "033", 122, 137, 112, "Nidoking"), _
|
||||
Array ("Nidoking", "034", 162, 204, 157, "Nidoking"), _
|
||||
Array ("Clefairy", "035", 140, 107, 116, "Clefable"), _
|
||||
Array ("Clefable", "036", 190, 178, 171, "Clefable"), _
|
||||
Array ("Vulpix", "037", 76, 96, 122, "Ninetales"), _
|
||||
Array ("Ninetales", "038", 146, 169, 204, "Ninetales"), _
|
||||
Array ("Jigglypuff", "039", 230, 80, 44, "Wigglytuff"), _
|
||||
Array ("Wigglytuff", "040", 280, 156, 93, "Wigglytuff"), _
|
||||
Array ("Zubat", "041", 80, 83, 76, "Golbat"), _
|
||||
Array ("Golbat", "042", 150, 161, 153, "Golbat"), _
|
||||
Array ("Oddish", "043", 90, 131, 116, "Vileplume"), _
|
||||
Array ("Gloom", "044", 120, 153, 139, "Vileplume"), _
|
||||
Array ("Vileplume", "045", 150, 202, 170, "Vileplume"), _
|
||||
Array ("Paras", "046", 70, 121, 99, "Parasect"), _
|
||||
Array ("Parasect", "047", 120, 165, 146, "Parasect"), _
|
||||
Array ("Venonat", "048", 120, 100, 102, "Venomoth"), _
|
||||
Array ("Venomoth", "049", 140, 179, 150, "Venomoth"), _
|
||||
Array ("Diglett", "050", 20, 109, 88, "Dugtrio"), _
|
||||
Array ("Dugtrio", "051", 70, 167, 147, "Dugtrio"), _
|
||||
Array ("Meowth", "052", 80, 92, 81, "Persian"), _
|
||||
Array ("Persian", "053", 130, 150, 139, "Persian"), _
|
||||
Array ("Psyduck", "054", 100, 122, 96, "Golduck"), _
|
||||
Array ("Golduck", "055", 160, 191, 163, "Golduck"), _
|
||||
Array ("Mankey", "056", 80, 148, 87, "Primeape"), _
|
||||
Array ("Primeape", "057", 130, 207, 144, "Primeape"), _
|
||||
Array ("Growlithe", "058", 110, 136, 96, "Arcanine"), _
|
||||
Array ("Arcanine", "059", 180, 227, 166, "Arcanine"), _
|
||||
Array ("Poliwag", "060", 80, 101, 82, "Poliwrath"), _
|
||||
Array ("Poliwhirl", "061", 130, 130, 130, "Poliwrath"), _
|
||||
Array ("Poliwrath", "062", 180, 182, 187, "Poliwrath"), _
|
||||
Array ("Abra", "063", 50, 195, 103, "Alakazam"), _
|
||||
Array ("Kadabra", "064", 80, 232, 138, "Alakazam"), _
|
||||
Array ("Alakazam", "065", 110, 271, 194, "Alakazam"), _
|
||||
Array ("Machop", "066", 140, 137, 88, "Machamp"), _
|
||||
Array ("Machoke", "067", 160, 177, 130, "Machamp"), _
|
||||
Array ("Machamp", "068", 180, 234, 162, "Machamp"), _
|
||||
Array ("Bellsprout", "069", 100, 139, 64, "Victreebel"), _
|
||||
Array ("Weepinbell", "070", 130, 172, 95, "Victreebel"), _
|
||||
Array ("Victreebel", "071", 160, 207, 138, "Victreebel"), _
|
||||
Array ("Tentacool", "072", 80, 97, 182, "Tentacruel"), _
|
||||
Array ("Tentacruel", "073", 160, 166, 237, "Tentacruel"), _
|
||||
Array ("Geodude", "074", 80, 132, 163, "Golem"), _
|
||||
Array ("Graveler", "075", 110, 164, 196, "Golem"), _
|
||||
Array ("Golem", "076", 160, 211, 229, "Golem"), _
|
||||
Array ("Ponyta", "077", 100, 170, 132, "Rapidash"), _
|
||||
Array ("Rapidash", "078", 130, 207, 167, "Rapidash"), _
|
||||
Array ("Slowpoke", "079", 180, 109, 109, "Slowbro"), _
|
||||
Array ("Slowbro", "080", 190, 177, 194, "Slowbro"), _
|
||||
Array ("Magnemite", "081", 50, 165, 128, "Magneton"), _
|
||||
Array ("Magneton", "082", 100, 223, 182, "Magneton"), _
|
||||
Array ("Farfetch'd", "083", 104, 124, 118, "Farfetch'd"), _
|
||||
Array ("Doduo", "084", 70, 158, 88, "Dodrio"), _
|
||||
Array ("Dodrio", "085", 120, 218, 145, "Dodrio"), _
|
||||
Array ("Seel", "086", 130, 85, 128, "Dewgong"), _
|
||||
Array ("Dewgong", "087", 180, 139, 184, "Dewgong"), _
|
||||
Array ("Grimer", "088", 160, 135, 90, "Muk"), _
|
||||
Array ("Muk", "089", 210, 190, 184, "Muk"), _
|
||||
Array ("Shellder", "090", 60, 116, 168, "Cloyster"), _
|
||||
Array ("Cloyster", "091", 100, 186, 323, "Cloyster"), _
|
||||
Array ("Gastly", "092", 60, 186, 70, "Gengar"), _
|
||||
Array ("Haunter", "093", 90, 223, 112, "Gengar"), _
|
||||
Array ("Gengar", "094", 120, 261, 156, "Gengar"), _
|
||||
Array ("Onix", "095", 70, 85, 288, "Onix"), _
|
||||
Array ("Drowzee", "096", 120, 89, 158, "Hypno"), _
|
||||
Array ("Hypno", "097", 170, 144, 215, "Hypno"), _
|
||||
Array ("Krabby", "098", 60, 181, 156, "Kingler"), _
|
||||
Array ("Kingler", "099", 110, 240, 214, "Kingler"), _
|
||||
Array ("Voltorb", "100", 80, 109, 114, "Electrode"), _
|
||||
Array ("Electrode", "101", 120, 173, 179, "Electrode"), _
|
||||
Array ("Exeggcute", "102", 120, 107, 140, "Exeggutor"), _
|
||||
Array ("Exeggutor", "103", 190, 233, 158, "Exeggutor"), _
|
||||
Array ("Cubone", "104", 100, 90, 165, "Marowak"), _
|
||||
Array ("Marowak", "105", 120, 144, 200, "Marowak"), _
|
||||
Array ("Hitmonlee", "106", 100, 224, 211, "Hitmonlee"), _
|
||||
Array ("Hitmonchan", "107", 100, 193, 212, "Hitmonchan"), _
|
||||
Array ("Lickitung", "108", 180, 108, 137, "Lickitung"), _
|
||||
Array ("Koffing", "109", 80, 119, 164, "Weezing"), _
|
||||
Array ("Weezing", "110", 130, 174, 221, "Weezing"), _
|
||||
Array ("Rhyhorn", "111", 160, 140, 157, "Rhydon"), _
|
||||
Array ("Rhydon", "112", 210, 222, 206, "Rhydon"), _
|
||||
Array ("Chansey", "113", 500, 60, 176, "Chansey"), _
|
||||
Array ("Tangela", "114", 130, 183, 205, "Tangela"), _
|
||||
Array ("Kangaskhan", "115", 210, 181, 165, "Kangaskhan"), _
|
||||
Array ("Horsea", "116", 60, 129, 125, "Seadra"), _
|
||||
Array ("Seadra", "117", 110, 187, 182, "Seadra"), _
|
||||
Array ("Goldeen", "118", 90, 123, 115, "Seaking"), _
|
||||
Array ("Seaking", "119", 160, 175, 154, "Seaking"), _
|
||||
Array ("Staryu", "120", 60, 137, 112, "Starmie"), _
|
||||
Array ("Starmie", "121", 120, 210, 184, "Starmie"), _
|
||||
Array ("Mr. Mime", "122", 80, 192, 233, "Mr. Mime"), _
|
||||
Array ("Scyther", "123", 140, 218, 170, "Scyther"), _
|
||||
Array ("Jynx", "124", 130, 223, 182, "Jynx"), _
|
||||
Array ("Electabuzz", "125", 130, 198, 173, "Electabuzz"), _
|
||||
Array ("Magmar", "126", 130, 206, 169, "Magmar"), _
|
||||
Array ("Pinsir", "127", 130, 238, 197, "Pinsir"), _
|
||||
Array ("Tauros", "128", 150, 198, 197, "Tauros"), _
|
||||
Array ("Magikarp", "129", 40, 29, 102, "Gyarados"), _
|
||||
Array ("Gyarados", "130", 190, 237, 197, "Gyarados"), _
|
||||
Array ("Lapras", "131", 260, 186, 190, "Lapras"), _
|
||||
Array ("Ditto", "132", 96, 91, 91, "Ditto"), _
|
||||
Array ("Eevee", "133", 110, 104, 121, "Vaporeon"), _
|
||||
Array ("Vaporeon", "134", 260, 205, 177, "Vaporeon"), _
|
||||
Array ("Jolteon", "135", 130, 232, 201, "Jolteon"), _
|
||||
Array ("Flareon", "136", 130, 246, 204, "Flareon"), _
|
||||
Array ("Porygon", "137", 130, 153, 139, "Porygon"), _
|
||||
Array ("Omanyte", "138", 70, 155, 174, "Omastar"), _
|
||||
Array ("Omastar", "139", 140, 207, 227, "Omastar"), _
|
||||
Array ("Kabuto", "140", 60, 148, 162, "Kabutops"), _
|
||||
Array ("Kabutops", "141", 120, 220, 203, "Kabutops"), _
|
||||
Array ("Aerodactyl", "142", 160, 221, 164, "Aerodactyl"), _
|
||||
Array ("Snorlax", "143", 320, 190, 190, "Snorlax"), _
|
||||
Array ("Articuno", "144", 180, 192, 249, "Articuno"), _
|
||||
Array ("Zapdos", "145", 180, 253, 188, "Zapdos"), _
|
||||
Array ("Moltres", "146", 180, 251, 184, "Moltres"), _
|
||||
Array ("Dratini", "147", 82, 119, 94, "Dragonite"), _
|
||||
Array ("Dragonair", "148", 122, 163, 138, "Dragonite"), _
|
||||
Array ("Dragonite", "149", 182, 263, 201, "Dragonite"), _
|
||||
Array ("Mewtwo", "150", 212, 330, 200, "Mewtwo"), _
|
||||
Array ("Mew", "151", 200, 210, 209, "Mew"))
|
||||
End Function
|
||||
|
||||
' fnGetCPMData: Returns the combat power multiplier data.
|
||||
Function fnGetCPMData As Variant
|
||||
fnGetCPMData = Array( _
|
||||
-1, _
|
||||
9.4E-02, _
|
||||
0.16639787, _
|
||||
0.21573247, _
|
||||
0.25572005, _
|
||||
0.29024988, _
|
||||
0.3210876, _
|
||||
0.34921268, _
|
||||
0.37523559, _
|
||||
0.39956728, _
|
||||
0.42250001, _
|
||||
0.44310755, _
|
||||
0.46279839, _
|
||||
0.48168495, _
|
||||
0.49985844, _
|
||||
0.51739395, _
|
||||
0.53435433, _
|
||||
0.55079269, _
|
||||
0.56675452, _
|
||||
0.58227891, _
|
||||
0.59740001, _
|
||||
0.61215729, _
|
||||
0.62656713, _
|
||||
0.64065295, _
|
||||
0.65443563, _
|
||||
0.667934, _
|
||||
0.68116492, _
|
||||
0.69414365, _
|
||||
0.70688421, _
|
||||
0.71939909, _
|
||||
0.7317, _
|
||||
0.73776948, _
|
||||
0.74378943, _
|
||||
0.74976104, _
|
||||
0.75568551, _
|
||||
0.76156384, _
|
||||
0.76739717, _
|
||||
0.7731865, _
|
||||
0.77893275, _
|
||||
0.78463697, _
|
||||
0.78463697)
|
||||
End Function
|
||||
|
||||
' fnGetStarDustData: Returns the star dust data.
|
||||
Function fnGetStarDustData As Variant
|
||||
fnGetStarDustData = Array( _
|
||||
-1, _
|
||||
200, _
|
||||
200, _
|
||||
400, _
|
||||
400, _
|
||||
600, _
|
||||
600, _
|
||||
800, _
|
||||
800, _
|
||||
1000, _
|
||||
1000, _
|
||||
1300, _
|
||||
1300, _
|
||||
1600, _
|
||||
1600, _
|
||||
1900, _
|
||||
1900, _
|
||||
2200, _
|
||||
2200, _
|
||||
2500, _
|
||||
2500, _
|
||||
3000, _
|
||||
3000, _
|
||||
3500, _
|
||||
3500, _
|
||||
4000, _
|
||||
4000, _
|
||||
4500, _
|
||||
4500, _
|
||||
5000, _
|
||||
5000, _
|
||||
6000, _
|
||||
6000, _
|
||||
7000, _
|
||||
7000, _
|
||||
8000, _
|
||||
8000, _
|
||||
9000, _
|
||||
9000, _
|
||||
10000, _
|
||||
10000)
|
||||
End Function
|
163
oxt/PokemonGoIV/3Load.vb
Normal file
163
oxt/PokemonGoIV/3Load.vb
Normal file
@ -0,0 +1,163 @@
|
||||
' 3Load: The Pokémon Go IV data
|
||||
' by imacat <imacat@mail.imacat.idv.tw>, 2016-11-28
|
||||
|
||||
Option Explicit
|
||||
|
||||
' subReadDataSheets: Reads the data sheets and shows the data as
|
||||
' OpenOffice Basic arrays
|
||||
Sub subReadDataSheets
|
||||
Dim sOutput as String, mData As Variant
|
||||
|
||||
sOutput = "" _
|
||||
& "' 2Data: 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 _3Load.subReadDataSheets ()" & Chr (10) _
|
||||
& Chr (10) _
|
||||
& "Option Explicit"
|
||||
sOutput = sOutput & Chr (10) & Chr (10) & fnReadBaseStatsSheet
|
||||
sOutput = sOutput & Chr (10) & Chr (10) & fnReadCPMSheet
|
||||
sOutput = sOutput & Chr (10) & Chr (10) & fnReadStarDustSheet
|
||||
subShowBasicData (sOutput)
|
||||
End Sub
|
||||
|
||||
' subShowBasicData: Shows the data table as Basic arrays
|
||||
Sub subShowBasicData (sContent As String)
|
||||
Dim oDialog As Object, oDialogModel As Object
|
||||
Dim oEditModel As Object, oButtonModel As Object
|
||||
|
||||
' Creates a dialog
|
||||
oDialogModel = CreateUnoService ( _
|
||||
"com.sun.star.awt.UnoControlDialogModel")
|
||||
oDialogModel.setPropertyValue ("PositionX", 100)
|
||||
oDialogModel.setPropertyValue ("PositionY", 100)
|
||||
oDialogModel.setPropertyValue ("Height", 130)
|
||||
oDialogModel.setPropertyValue ("Width", 200)
|
||||
oDialogModel.setPropertyValue ("Title", "Pokémon Go Data")
|
||||
|
||||
' Adds the content area
|
||||
oEditModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlEditModel")
|
||||
oEditModel.setPropertyValue ("PositionX", 5)
|
||||
oEditModel.setPropertyValue ("PositionY", 5)
|
||||
oEditModel.setPropertyValue ("Height", 100)
|
||||
oEditModel.setPropertyValue ("Width", 190)
|
||||
oEditModel.setPropertyValue ("MultiLine", True)
|
||||
oEditModel.setPropertyValue ("Text", sContent)
|
||||
oEditModel.setPropertyValue ("ReadOnly", True)
|
||||
oDialogModel.insertByName ("edtContent", oEditModel)
|
||||
|
||||
' Adds the OK button.
|
||||
oButtonModel = oDialogModel.createInstance ( _
|
||||
"com.sun.star.awt.UnoControlButtonModel")
|
||||
oButtonModel.setPropertyValue ("PositionX", 70)
|
||||
oButtonModel.setPropertyValue ("PositionY", 110)
|
||||
oButtonModel.setPropertyValue ("Height", 15)
|
||||
oButtonModel.setPropertyValue ("Width", 60)
|
||||
oButtonModel.setPropertyValue ("PushButtonType", _
|
||||
com.sun.star.awt.PushButtonType.OK)
|
||||
oButtonModel.setPropertyValue ("DefaultButton", True)
|
||||
oDialogModel.insertByName ("btnOK", oButtonModel)
|
||||
|
||||
' Adds the dialog model to the control and runs it.
|
||||
oDialog = CreateUnoService ("com.sun.star.awt.UnoControlDialog")
|
||||
oDialog.setModel (oDialogModel)
|
||||
oDialog.setVisible (True)
|
||||
oDialog.execute
|
||||
End Sub
|
||||
|
||||
' fnReadBaseStatsSheet: Reads the base stats sheet.
|
||||
Function fnReadBaseStatsSheet As String
|
||||
Dim oSheet As Object, oRange As Object, mData As Variant
|
||||
Dim nI As Integer, sOutput As String
|
||||
Dim nJ As Integer, sEvolveInto As String
|
||||
|
||||
oSheet = ThisComponent.getSheets.getByName ("basestat")
|
||||
oRange = oSheet.getCellRangeByName ("BaseStats")
|
||||
mData = oRange.getDataArray
|
||||
|
||||
sOutput = "" _
|
||||
& "' fnGetBaseStatsData: Returns the base stats data." & Chr (10) _
|
||||
& "Function fnGetBaseStatsData As Variant" & Chr (10) _
|
||||
& Chr (9) & "fnGetBaseStatsData = Array( _" & Chr (10)
|
||||
For nI = 1 To UBound (mData) - 1
|
||||
For nJ = 9 To 7 Step -1
|
||||
If mData (nI) (nJ) <> "" Then
|
||||
sEvolveInto = mData (nI) (nJ)
|
||||
nJ = 6
|
||||
End If
|
||||
Next nJ
|
||||
sOutput = sOutput _
|
||||
& Chr (9) & Chr (9) & "Array (""" & mData (nI) (0) _
|
||||
& """, """ & mData (nI) (1) _
|
||||
& """, " & mData (nI) (3) _
|
||||
& ", " & mData (nI) (4) _
|
||||
& ", " & mData (nI) (5) _
|
||||
& ", """ & sEvolveInto & """), _" & Chr (10)
|
||||
Next nI
|
||||
nI = UBound (mData)
|
||||
For nJ = 9 To 7 Step -1
|
||||
If mData (nI) (nJ) <> "" Then
|
||||
sEvolveInto = mData (nI) (nJ)
|
||||
nJ = 6
|
||||
End If
|
||||
Next nJ
|
||||
sOutput = sOutput _
|
||||
& Chr (9) & Chr (9) & "Array (""" & mData (nI) (0) _
|
||||
& """, """ & mData (nI) (1) _
|
||||
& """, " & mData (nI) (3) _
|
||||
& ", " & mData (nI) (4) _
|
||||
& ", " & mData (nI) (5) _
|
||||
& ", """ & sEvolveInto & """))" & Chr (10) _
|
||||
& "End Function"
|
||||
fnReadBaseStatsSheet = sOutput
|
||||
End Function
|
||||
|
||||
' fnReadCPMSheet: Reads the combat power multiplier sheet.
|
||||
Function fnReadCPMSheet As String
|
||||
Dim oSheet As Object, oRange As Object, mData As Variant
|
||||
Dim nI As Integer, sOutput As String
|
||||
|
||||
oSheet = ThisComponent.getSheets.getByName ("cpm")
|
||||
oRange = oSheet.getCellRangeByName ("CPM")
|
||||
mData = oRange.getDataArray
|
||||
|
||||
sOutput = "" _
|
||||
& "' fnGetCPMData: Returns the combat power multiplier data." & Chr (10) _
|
||||
& "Function fnGetCPMData As Variant" & Chr (10) _
|
||||
& Chr (9) & "fnGetCPMData = Array( _" & Chr (10) _
|
||||
& Chr (9) & Chr (9) & "-1, _" & Chr (10)
|
||||
For nI = 1 To UBound (mData) - 2 Step 2
|
||||
sOutput = sOutput _
|
||||
& Chr (9) & Chr (9) & mData (nI) (1) & ", _" & Chr (10)
|
||||
Next nI
|
||||
nI = UBound (mData) - 2
|
||||
sOutput = sOutput _
|
||||
& Chr (9) & Chr (9) & mData (nI) (1) & ")" & Chr (10) _
|
||||
& "End Function"
|
||||
fnReadCPMSheet = sOutput
|
||||
End Function
|
||||
|
||||
' fnReadStarDustSheet: Reads the star dust sheet.
|
||||
Function fnReadStarDustSheet As String
|
||||
Dim oSheet As Object, oRange As Object, mData As Variant
|
||||
Dim nI As Integer, sOutput As String
|
||||
|
||||
oSheet = ThisComponent.getSheets.getByName ("lvup")
|
||||
oRange = oSheet.getCellRangeByName ("A2:D81")
|
||||
mData = oRange.getDataArray
|
||||
|
||||
sOutput = "" _
|
||||
& "' fnGetStarDustData: Returns the star dust data." & Chr (10) _
|
||||
& "Function fnGetStarDustData As Variant" & Chr (10) _
|
||||
& Chr (9) & "fnGetStarDustData = Array( _" & Chr (10) _
|
||||
& Chr (9) & Chr (9) & "-1, _" & Chr (10)
|
||||
For nI = 1 To UBound (mData) - 1 Step 2
|
||||
sOutput = sOutput _
|
||||
& Chr (9) & Chr (9) & mData (nI) (2) & ", _" & Chr (10)
|
||||
Next nI
|
||||
nI = UBound (mData)
|
||||
sOutput = sOutput _
|
||||
& Chr (9) & Chr (9) & mData (nI) (2) & ")" & Chr (10) _
|
||||
& "End Function"
|
||||
fnReadStarDustSheet = sOutput
|
||||
End Function
|
30
oxt/description.xml
Normal file
30
oxt/description.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<description
|
||||
xmlns="http://openoffice.org/extensions/description/2006"
|
||||
xmlns:dep="http://openoffice.org/extensions/description/2006"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<identifier value="tw.idv.imacat.office.pokemongoiv"/>
|
||||
<version value="@VERSION@"/>
|
||||
<!-- <dependencies>
|
||||
<OpenOffice.org-minimal-version value="2.1" dep:name="OpenOffice.org 2.1"/>
|
||||
</dependencies> -->
|
||||
<publisher>
|
||||
<name xlink:href="http://www.imacat.idv.tw/">imacat</name>
|
||||
<name lang="zh-TW" xlink:href="http://www.imacat.idv.tw/">依瑪貓</name>
|
||||
</publisher>
|
||||
<registration>
|
||||
<simple-license accept-by="admin" default-license-id="ID0" suppress-on-update="true" >
|
||||
<license-text xlink:href="registration/LICENSE" lang="en" license-id="ID0" />
|
||||
</simple-license>
|
||||
</registration>
|
||||
<display-name>
|
||||
<name>Pokémon Go IV Calculator</name>
|
||||
<name lang="zh-TW">寶可夢 Go IV 計算機</name>
|
||||
</display-name>
|
||||
<icon>
|
||||
<default xlink:href="icons/pokemongoiv.png" />
|
||||
</icon>
|
||||
<update-information>
|
||||
<src xlink:href="https://dl.dropboxusercontent.com/content_link/AGbnfVoZDLbAIthKeqDkSg4xEmCHjEEfm4vLdljO6Vy6Ve5D4McZHYjuEC4usz6K/file?dl=1" />
|
||||
</update-information>
|
||||
</description>
|
BIN
oxt/icons/image1_16.bmp
Normal file
BIN
oxt/icons/image1_16.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 822 B |
BIN
oxt/icons/image1_16h.bmp
Normal file
BIN
oxt/icons/image1_16h.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 822 B |
BIN
oxt/icons/image1_26.bmp
Normal file
BIN
oxt/icons/image1_26.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
oxt/icons/image1_26h.bmp
Normal file
BIN
oxt/icons/image1_26h.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
oxt/icons/pokemongoiv.png
Normal file
BIN
oxt/icons/pokemongoiv.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
4
oxt/pkg-desc/pkg-description.txt
Normal file
4
oxt/pkg-desc/pkg-description.txt
Normal file
@ -0,0 +1,4 @@
|
||||
PokemonGoIV - Pokémon Go IV Calculator
|
||||
Copyright (c) 2016 imacat
|
||||
|
||||
Calculates the individual values (IVs) of the Pokémon.
|
4
oxt/pkg-desc/pkg-description.zh-TW.txt
Normal file
4
oxt/pkg-desc/pkg-description.zh-TW.txt
Normal file
@ -0,0 +1,4 @@
|
||||
PokemonGoIV - 寶可夢 Go IV 計算機
|
||||
版權所有 (c) 2016 依瑪貓
|
||||
|
||||
計算寶可夢的 IV 值。
|
202
oxt/registration/LICENSE
Normal file
202
oxt/registration/LICENSE
Normal file
@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
Reference in New Issue
Block a user