Fixed to move the source from the oxt directory and copied the xba source into the oxt directory.
This commit is contained in:
parent
fa28164aa6
commit
932c6bed77
400
oxt/PokemonGoIV/0Main.xba
Normal file
400
oxt/PokemonGoIV/0Main.xba
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
||||||
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="0Main" script:language="StarBasic">' 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
|
||||||
|
bIsCancelled As Boolean
|
||||||
|
End Type
|
||||||
|
|
||||||
|
Private maBaseStats () As New aStats
|
||||||
|
Private mCPM () As Double, mStarDust () As Integer
|
||||||
|
|
||||||
|
' subMain: The main program
|
||||||
|
Sub subMain
|
||||||
|
Dim maIVs As Variant, nI As Integer, sOutput As String
|
||||||
|
Dim aQuery As New aFindIVParam, aBaseStats As New aStats
|
||||||
|
|
||||||
|
aQuery = fnAskParam
|
||||||
|
If aQuery.bIsCancelled Then
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
|
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
|
||||||
|
</script:module>
|
329
oxt/PokemonGoIV/1Dialog.xba
Normal file
329
oxt/PokemonGoIV/1Dialog.xba
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
||||||
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="1Dialog" script:language="StarBasic">' 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
|
||||||
|
bIsCancelled As Boolean
|
||||||
|
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 Go IV Calculator")
|
||||||
|
|
||||||
|
' 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", "S~tar 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 ( _
|
||||||
|
"1. Amazed me/wonder/best", _
|
||||||
|
"2. Strong/caught my attention", _
|
||||||
|
"3. Decent/above average", _
|
||||||
|
"4. 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 ( _
|
||||||
|
"1. WOW/incredible/stats are best", _
|
||||||
|
"2. Excellent/impressed/impressive", _
|
||||||
|
"3. Get the job done/noticeable/some good stats", _
|
||||||
|
"4. 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
|
||||||
|
If oDialog.execute = 0 Then
|
||||||
|
aQuery.bIsCancelled = True
|
||||||
|
fnAskParam = aQuery
|
||||||
|
Exit Function
|
||||||
|
End If
|
||||||
|
|
||||||
|
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
|
||||||
|
.bIsCancelled = False
|
||||||
|
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
|
||||||
|
</script:module>
|
256
oxt/PokemonGoIV/2Data.xba
Normal file
256
oxt/PokemonGoIV/2Data.xba
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
||||||
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="2Data" script:language="StarBasic">' 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
|
||||||
|
</script:module>
|
166
oxt/PokemonGoIV/3Load.xba
Normal file
166
oxt/PokemonGoIV/3Load.xba
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
||||||
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="3Load" script:language="StarBasic">' 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
|
||||||
|
</script:module>
|
3
oxt/PokemonGoIV/dialog.xlb
Normal file
3
oxt/PokemonGoIV/dialog.xlb
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
|
||||||
|
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="PokemonGoIV" library:readonly="false" library:passwordprotected="false"/>
|
8
oxt/PokemonGoIV/script.xlb
Normal file
8
oxt/PokemonGoIV/script.xlb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
|
||||||
|
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="PokemonGoIV" library:readonly="false" library:passwordprotected="false">
|
||||||
|
<library:element library:name="3Load"/>
|
||||||
|
<library:element library:name="0Main"/>
|
||||||
|
<library:element library:name="1Dialog"/>
|
||||||
|
<library:element library:name="2Data"/>
|
||||||
|
</library:library>
|
Loading…
Reference in New Issue
Block a user