Renamed the Appraisal1 field to Total, and the Appraisal2 field to Max.

This commit is contained in:
依瑪貓 2016-12-12 17:13:09 +08:00
parent a3752fac44
commit 6965883232
4 changed files with 296 additions and 283 deletions

View File

@ -52,9 +52,9 @@ Type aFindIVParam
nStarDust As Integer
nPlayerLevel As Integer
bIsNew As Boolean
nAppraisal1 As Integer
nTotal As Integer
sBest As String
nAppraisal2 As Integer
nMax As Integer
bIsCancelled As Boolean
End Type
@ -88,13 +88,13 @@ Function fnAskParam As aFindIVParam
DialogLibraries.loadLibrary "PokemonGoIV"
oDialog = CreateUnoDialog (DialogLibraries.PokemonGoIV.DlgMain)
oDialog.getControl ("lstAppraisal1").setVisible (False)
oDialog.getControl ("lstTotal").setVisible (False)
oDialog.getControl ("txtBestBefore").setVisible (False)
oDialog.getControl ("lstBest").setVisible (False)
oDialog.getControl ("txtBestAfter").setVisible (False)
oDialog.getControl ("cbxBest2").setVisible (False)
oDialog.getControl ("cbxBest3").setVisible (False)
oDialog.getControl ("lstAppraisal2").setVisible (False)
oDialog.getControl ("lstMax").setVisible (False)
oDialog.getControl ("imgPokemon").getModel.setPropertyValue ( _
"ImageURL", fnGetImageUrl ("Unknown"))
@ -113,8 +113,8 @@ Function fnAskParam As aFindIVParam
.nHP = oDialog.getControl ("numHP").getValue
.nStarDust = CInt (oDialog.getControl ("lstStarDust").getSelectedItem)
.nPlayerLevel = CInt (oDialog.getControl ("lstPlayerLevel").getSelectedItem)
.nAppraisal1 = oDialog.getControl ("lstAppraisal1").getSelectedItemPos + 1
.nAppraisal2 = oDialog.getControl ("lstAppraisal2").getSelectedItemPos + 1
.nTotal = oDialog.getControl ("lstTotal").getSelectedItemPos + 1
.nMax = oDialog.getControl ("lstMax").getSelectedItemPos + 1
.bIsCancelled = False
End With
If oDialog.getControl ("cbxIsNew").getState = 1 Then
@ -220,8 +220,8 @@ Sub subLstPokemonSelected (oEvent As object)
oImageModel.setPropertyValue ("ImageURL", _
fnGetImageUrl (sImageId))
' Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, True)
' Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, True)
' Checks if the required columns are filled.
subBtnOKCheck (oEvent)
End Sub
@ -245,8 +245,8 @@ Sub subRdoTeamValorItemChanged (oEvent As object)
oText.setVisible (True)
oText.setText (fnGetResString ("AppraiseFromCandela"))
' Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, False)
' Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, False)
' Updates the text of the best stat appraisal.
subUpdateBestStatAppraisal (oDialog, _
@ -257,7 +257,7 @@ Sub subRdoTeamValorItemChanged (oEvent As object)
"It's got excellent stats! How exciting!", _
"Its stats indicate that in battle, it'll get the job done.", _
"Its stats don't point to greatness in battle.")
oList = oDialog.getControl ("lstAppraisal2")
oList = oDialog.getControl ("lstMax")
oList.removeItems (0, oList.getItemCount())
oList.addItems (mItems, 0)
oList.setVisible (True)
@ -282,8 +282,8 @@ Sub subRdoTeamMysticItemChanged (oEvent As object)
oText.setVisible (True)
oText.setText (fnGetResString ("AppraiseFromBlanche"))
' Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, False)
' Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, False)
' Updates the text of the best stat appraisal.
subUpdateBestStatAppraisal (oDialog, _
@ -294,7 +294,7 @@ Sub subRdoTeamMysticItemChanged (oEvent As object)
"I am certainly impressed by its stats, I must say.", _
"Its stats are noticeably trending to the positive.", _
"Its stats are not out of the norm, in my opinion.")
oList = oDialog.getControl ("lstAppraisal2")
oList = oDialog.getControl ("lstMax")
oList.removeItems (0, oList.getItemCount())
oList.addItems (mItems, 0)
oList.setVisible (True)
@ -319,8 +319,8 @@ Sub subRdoTeamInstinctItemChanged (oEvent As object)
oText.setVisible (True)
oText.setText (fnGetResString ("AppraiseFromSpark"))
' Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, False)
' Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, False)
' Updates the text of the best stat appraisal.
subUpdateBestStatAppraisal (oDialog, _
@ -331,7 +331,7 @@ Sub subRdoTeamInstinctItemChanged (oEvent As object)
"Its stats are really strong! Impressive.", _
"It's definitely got some good stats. Definitely!", _
"Its stats are all right, but kinda basic, as far as I can see.")
oList = oDialog.getControl ("lstAppraisal2")
oList = oDialog.getControl ("lstMax")
oList.removeItems (0, oList.getItemCount())
oList.addItems (mItems, 0)
oList.setVisible (True)
@ -472,8 +472,10 @@ Sub subLstBestItemChanged (oEvent As object)
End If
End Sub
' subUpdateAppraisal1: Updates the text of the first appraisal.
Sub subUpdateAppraisal1 (oDialog As Object, bIsKeepSelected As Boolean)
' subUpdateTotalAppraisal: Updates the text of the stats total
' appraisal.
Sub subUpdateTotalAppraisal ( _
oDialog As Object, bIsKeepSelected As Boolean)
Dim sPokemon As String, oList As Object, nSelected As Integer
Dim mItems () As String, nI As Integer
@ -511,7 +513,7 @@ Sub subUpdateAppraisal1 (oDialog As Object, bIsKeepSelected As Boolean)
Next nI
End If
oList = oDialog.getControl ("lstAppraisal1")
oList = oDialog.getControl ("lstTotal")
If bIsKeepSelected Then
nSelected = oList.getSelectedItemPos
End If
@ -545,7 +547,7 @@ Function fnFindIV ( _
End If
subReadStarDust
nEvolved = UBound (aBaseStats.mEvolved)
ReDim maEvBaseStats (nEvolved) As New aStats
ReDim Preserve maEvBaseStats (nEvolved) As New aStats
For nI = 0 To nEvolved
aTempStats = fnGetBaseStats (aBaseStats.mEvolved (nI))
With maEvBaseStats (nI)
@ -907,25 +909,21 @@ Function fnFilterAppraisals (aQuery As aFindIVParam, _
nStamina As Integer) As Boolean
Dim nTotal As Integer, nMax As Integer, sBest As String
' The first appraisal.
' The stats total.
nTotal = nAttack + nDefense + nStamina
If aQuery.nAppraisal1 = 1 _
And Not (nTotal >= 37) Then
If aQuery.nTotal = 1 And Not (nTotal >= 37) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal1 = 2 _
And Not (nTotal >= 30 And nTotal <= 36) Then
If aQuery.nTotal = 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
If aQuery.nTotal = 3 And Not (nTotal >= 23 And nTotal <= 29) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal1 = 4 _
And Not (nTotal <= 22) Then
If aQuery.nTotal = 4 And Not (nTotal <= 22) Then
fnFilterAppraisals = True
Exit Function
End If
@ -953,20 +951,20 @@ Function fnFilterAppraisals (aQuery As aFindIVParam, _
Exit Function
End If
End If
' The second appraisal.
If aQuery.nAppraisal2 = 1 And Not (nMax = 15) Then
' The max stat value.
If aQuery.nMax = 1 And Not (nMax = 15) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal2 = 2 And Not (nMax = 13 Or nMax = 14) Then
If aQuery.nMax = 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
If aQuery.nMax = 3 And Not (nMax >= 8 And nMax <= 12) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal2 = 4 And Not (nMax <= 7) Then
If aQuery.nMax = 4 And Not (nMax <= 7) Then
fnFilterAppraisals = True
Exit Function
End If

View File

@ -19,23 +19,31 @@
Option Explicit
&apos; The stats of a Pokémon.
&apos; The base stats of a Pokémon.
Type aStats
sNo As String
sPokemon As String
nStamina As Integer
nAttack As Integer
nDefense As Integer
mEvolved () As String
End Type
&apos; The individual values of a Pokémon.
Type aIV
fLevel As Double
nStamina As Integer
nAttack As Integer
nDefense As Integer
nTotal As Integer
nMaxCP As Integer
maEvolvedForms () As aEvolveForm
maEvolved () As aEvolvedStats
End Type
&apos; The amount of star dust to power-up.
Type aStarDust
fLevel As Double
nStarDust As Integer
&apos; The calculated evolved stats of a Pokémon.
Type aEvolvedStats
nCP As Integer
nMaxCP As Integer
End Type
&apos; The parameters to find the individual values.
@ -46,35 +54,30 @@ Type aFindIVParam
nStarDust As Integer
nPlayerLevel As Integer
bIsNew As Boolean
nAppraisal1 As Integer
nTotal As Integer
sBest As String
nAppraisal2 As Integer
nMax As Integer
bIsCancelled As Boolean
End Type
Type aEvolveForm
sPokemon As String
nCP As Integer
nMaxCP As Integer
End Type
Private maBaseStats () As New aStats
Private mCPM () As Double, mStarDust () As Integer
&apos; subMain: The main program
Sub subMain
Dim maIVs As Variant, nI As Integer
Dim aQuery As New aFindIVParam, aBaseStats As New aStats
Dim aBaseStats As New aStats, maIVs As Variant, nI As Integer
Dim aQuery As New aFindIVParam
aQuery = fnAskParam
If aQuery.bIsCancelled Then
Exit Sub
End If
maIVs = fnFindIV (aQuery)
aBaseStats = fnGetBaseStats (aQuery.sPokemon)
maIVs = fnFindIV (aBaseStats, aQuery)
If UBound (maIVs) = -1 Then
MsgBox fnGetResString (&quot;ErrorNotFound&quot;)
Else
subSaveIV (aQuery, maIVs)
subSaveIV (aBaseStats, aQuery, maIVs)
End If
End Sub
@ -87,18 +90,18 @@ Function fnAskParam As aFindIVParam
DialogLibraries.loadLibrary &quot;PokemonGoIV&quot;
oDialog = CreateUnoDialog (DialogLibraries.PokemonGoIV.DlgMain)
oDialog.getControl (&quot;lstAppraisal1&quot;).setVisible (False)
oDialog.getControl (&quot;lstTotal&quot;).setVisible (False)
oDialog.getControl (&quot;txtBestBefore&quot;).setVisible (False)
oDialog.getControl (&quot;lstBest&quot;).setVisible (False)
oDialog.getControl (&quot;txtBestAfter&quot;).setVisible (False)
oDialog.getControl (&quot;cbxBest2&quot;).setVisible (False)
oDialog.getControl (&quot;cbxBest3&quot;).setVisible (False)
oDialog.getControl (&quot;lstAppraisal2&quot;).setVisible (False)
oDialog.getControl (&quot;lstMax&quot;).setVisible (False)
oDialog.getControl (&quot;imgPokemon&quot;).getModel.setPropertyValue ( _
&quot;ImageURL&quot;, fnGetImageUrl (&quot;Unknown&quot;))
&quot;ImageURL&quot;, fnGetImageUrl (&quot;Unknown&quot;))
oDialog.getControl (&quot;imgTeamLogo&quot;).getModel.setPropertyValue ( _
&quot;ImageURL&quot;, fnGetImageUrl (&quot;Unknown&quot;))
&quot;ImageURL&quot;, fnGetImageUrl (&quot;Unknown&quot;))
If oDialog.execute = 0 Then
aQuery.bIsCancelled = True
@ -112,8 +115,8 @@ Function fnAskParam As aFindIVParam
.nHP = oDialog.getControl (&quot;numHP&quot;).getValue
.nStarDust = CInt (oDialog.getControl (&quot;lstStarDust&quot;).getSelectedItem)
.nPlayerLevel = CInt (oDialog.getControl (&quot;lstPlayerLevel&quot;).getSelectedItem)
.nAppraisal1 = oDialog.getControl (&quot;lstAppraisal1&quot;).getSelectedItemPos + 1
.nAppraisal2 = oDialog.getControl (&quot;lstAppraisal2&quot;).getSelectedItemPos + 1
.nTotal = oDialog.getControl (&quot;lstTotal&quot;).getSelectedItemPos + 1
.nMax = oDialog.getControl (&quot;lstMax&quot;).getSelectedItemPos + 1
.bIsCancelled = False
End With
If oDialog.getControl (&quot;cbxIsNew&quot;).getState = 1 Then
@ -219,8 +222,8 @@ Sub subLstPokemonSelected (oEvent As object)
oImageModel.setPropertyValue (&quot;ImageURL&quot;, _
fnGetImageUrl (sImageId))
&apos; Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, True)
&apos; Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, True)
&apos; Checks if the required columns are filled.
subBtnOKCheck (oEvent)
End Sub
@ -244,8 +247,8 @@ Sub subRdoTeamValorItemChanged (oEvent As object)
oText.setVisible (True)
oText.setText (fnGetResString (&quot;AppraiseFromCandela&quot;))
&apos; Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, False)
&apos; Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, False)
&apos; Updates the text of the best stat appraisal.
subUpdateBestStatAppraisal (oDialog, _
@ -256,7 +259,7 @@ Sub subRdoTeamValorItemChanged (oEvent As object)
&quot;It&apos;s got excellent stats! How exciting!&quot;, _
&quot;Its stats indicate that in battle, it&apos;ll get the job done.&quot;, _
&quot;Its stats don&apos;t point to greatness in battle.&quot;)
oList = oDialog.getControl (&quot;lstAppraisal2&quot;)
oList = oDialog.getControl (&quot;lstMax&quot;)
oList.removeItems (0, oList.getItemCount())
oList.addItems (mItems, 0)
oList.setVisible (True)
@ -281,8 +284,8 @@ Sub subRdoTeamMysticItemChanged (oEvent As object)
oText.setVisible (True)
oText.setText (fnGetResString (&quot;AppraiseFromBlanche&quot;))
&apos; Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, False)
&apos; Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, False)
&apos; Updates the text of the best stat appraisal.
subUpdateBestStatAppraisal (oDialog, _
@ -293,7 +296,7 @@ Sub subRdoTeamMysticItemChanged (oEvent As object)
&quot;I am certainly impressed by its stats, I must say.&quot;, _
&quot;Its stats are noticeably trending to the positive.&quot;, _
&quot;Its stats are not out of the norm, in my opinion.&quot;)
oList = oDialog.getControl (&quot;lstAppraisal2&quot;)
oList = oDialog.getControl (&quot;lstMax&quot;)
oList.removeItems (0, oList.getItemCount())
oList.addItems (mItems, 0)
oList.setVisible (True)
@ -318,8 +321,8 @@ Sub subRdoTeamInstinctItemChanged (oEvent As object)
oText.setVisible (True)
oText.setText (fnGetResString (&quot;AppraiseFromSpark&quot;))
&apos; Updates the text of the first appraisal.
subUpdateAppraisal1 (oDialog, False)
&apos; Updates the text of the stats total appraisal.
subUpdateTotalAppraisal (oDialog, False)
&apos; Updates the text of the best stat appraisal.
subUpdateBestStatAppraisal (oDialog, _
@ -330,7 +333,7 @@ Sub subRdoTeamInstinctItemChanged (oEvent As object)
&quot;Its stats are really strong! Impressive.&quot;, _
&quot;It&apos;s definitely got some good stats. Definitely!&quot;, _
&quot;Its stats are all right, but kinda basic, as far as I can see.&quot;)
oList = oDialog.getControl (&quot;lstAppraisal2&quot;)
oList = oDialog.getControl (&quot;lstMax&quot;)
oList.removeItems (0, oList.getItemCount())
oList.addItems (mItems, 0)
oList.setVisible (True)
@ -471,66 +474,69 @@ Sub subLstBestItemChanged (oEvent As object)
End If
End Sub
&apos; subUpdateAppraisal1: Updates the text of the first appraisal.
Sub subUpdateAppraisal1 (oDialog As Object, bIsKeepSelected As Boolean)
&apos; subUpdateTotalAppraisal: Updates the text of the stats total
&apos; appraisal.
Sub subUpdateTotalAppraisal ( _
oDialog As Object, bIsKeepSelected As Boolean)
Dim sPokemon As String, oList As Object, nSelected As Integer
Dim mItems () As String, nI As Integer
If oDialog.getControl (&quot;rdoTeamValor&quot;).getState Then
mItems = Array ( _
&quot;Overall, your [Pokémon] simply amazes me. It can accomplish anything!&quot;, _
&quot;Overall, your [Pokémon] is a strong Pokémon. You should be proud!&quot;, _
&quot;Overall, your [Pokémon] is a decent Pokémon.&quot;, _
&quot;Overall, your [Pokémon] may not be great in battle, but I still like it!&quot;)
mItems = Array ( _
&quot;Overall, your [Pokémon] simply amazes me. It can accomplish anything!&quot;, _
&quot;Overall, your [Pokémon] is a strong Pokémon. You should be proud!&quot;, _
&quot;Overall, your [Pokémon] is a decent Pokémon.&quot;, _
&quot;Overall, your [Pokémon] may not be great in battle, but I still like it!&quot;)
End If
If oDialog.getControl (&quot;rdoTeamMystic&quot;).getState Then
mItems = Array ( _
&quot;Overall, your [Pokémon] is a wonder! What a breathtaking Pokémon!&quot;, _
&quot;Overall, your [Pokémon] has certainly caught my attention.&quot;, _
&quot;Overall, your [Pokémon] is above average.&quot;, _
&quot;Overall, your [Pokémon] is not likely to make much headway in battle.&quot;)
mItems = Array ( _
&quot;Overall, your [Pokémon] is a wonder! What a breathtaking Pokémon!&quot;, _
&quot;Overall, your [Pokémon] has certainly caught my attention.&quot;, _
&quot;Overall, your [Pokémon] is above average.&quot;, _
&quot;Overall, your [Pokémon] is not likely to make much headway in battle.&quot;)
End If
If oDialog.getControl (&quot;rdoTeamInstinct&quot;).getState Then
mItems = Array ( _
&quot;Overall, your [Pokémon] looks like it can really battle with the best of them!&quot;, _
&quot;Overall, your [Pokémon] is really strong!&quot;, _
&quot;Overall, your [Pokémon] is pretty decent!&quot;, _
&quot;Overall, your [Pokémon] has room for improvement as far as battling goes.&quot;)
mItems = Array ( _
&quot;Overall, your [Pokémon] looks like it can really battle with the best of them!&quot;, _
&quot;Overall, your [Pokémon] is really strong!&quot;, _
&quot;Overall, your [Pokémon] is pretty decent!&quot;, _
&quot;Overall, your [Pokémon] has room for improvement as far as battling goes.&quot;)
End If
&apos; The team was not selected yet.
If UBound (mItems) = -1 Then
Exit sub
Exit sub
End If
sPokemon = oDialog.getControl (&quot;lstPokemon&quot;).getSelectedItem
If sPokemon &lt;&gt; &quot;&quot; Then
For nI = 0 To UBound (mItems)
mItems (nI) = fnReplace (mItems (nI), _
&quot;[Pokémon]&quot;, sPokemon)
Next nI
For nI = 0 To UBound (mItems)
mItems (nI) = fnReplace (mItems (nI), _
&quot;[Pokémon]&quot;, sPokemon)
Next nI
End If
oList = oDialog.getControl (&quot;lstAppraisal1&quot;)
oList = oDialog.getControl (&quot;lstTotal&quot;)
If bIsKeepSelected Then
nSelected = oList.getSelectedItemPos
nSelected = oList.getSelectedItemPos
End If
oList.removeItems (0, oList.getItemCount())
oList.addItems (mItems, 0)
If bIsKeepSelected Then
oList.selectItemPos (nSelected, True)
oList.selectItemPos (nSelected, True)
End If
oList.setVisible (True)
End Sub
&apos; 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
Function fnFindIV ( _
aBaseStats As aStats, aQuery As aFindIVParam) As Variant
Dim nEvolved As Integer
Dim maEvBaseStats () As New aStats, aTempStats As New aStats
Dim maIV () As New aIV, aTempIV As New aIV
Dim 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
Dim maEvolvedForms () As New aEvolveForm
Dim fStep As Double, nN As Integer
If aQuery.sPokemon = &quot;&quot; Then
fnFindIV = maIV
@ -541,9 +547,18 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
Else
fStep = 0.5
End If
aBaseStats = fnGetBaseStats (aQuery.sPokemon)
subReadStarDust
nCount = -1
nEvolved = UBound (aBaseStats.mEvolved)
ReDim Preserve maEvBaseStats (nEvolved) As New aStats
For nI = 0 To nEvolved
aTempStats = fnGetBaseStats (aBaseStats.mEvolved (nI))
With maEvBaseStats (nI)
.nAttack = aTempStats.nAttack
.nDefense = aTempStats.nDefense
.nStamina = aTempStats.nStamina
End With
Next nI
nN = -1
For fLevel = 1 To UBound (mStarDust) Step fStep
If mStarDust (CInt (fLevel - 0.5)) = aQuery.nStarDust Then
For nStamina = 0 To 15
@ -551,32 +566,33 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
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
And Not fnFilterAppraisals (aQuery, nAttack, nDefense, nStamina) Then
nN = nN + 1
ReDim Preserve maIV (nN) As New aIV
With maIV (nN)
.fLevel = fLevel
.nAttack = nAttack
.nDefense = nDefense
.nStamina = nStamina
.nTotal = nAttack + nDefense + nStamina
.nTotal = nAttack _
+ nDefense + nStamina
End With
If aQuery.nPlayerLevel &lt;&gt; 0 Then
maIV (nCount).nMaxCP = fnCalcCP (aBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
Else
maIV (nCount).nMaxCP = -1
maIV (nN).nMaxCP = fnCalcCP ( _
aBaseStats, _
aQuery.nPlayerLevel + 1.5, _
nAttack, nDefense, nStamina)
End If
maIV (nCount).maEvolvedForms = fnGetEvolvedFormArray (UBound (aBaseStats.maEvolvedForms))
For nI = 0 To UBound (aBaseStats.maEvolvedForms)
maIV (nCount).maEvolvedForms (nI).sPokemon = aBaseStats.maEvolvedForms (nI).sPokemon
aEvBaseStats = fnGetBaseStats (aBaseStats.maEvolvedForms (nI).sPokemon)
maIV (nCount).maEvolvedForms (nI).nCP = fnCalcCP (aEvBaseStats, fLevel, nAttack, nDefense, nStamina)
maIV (nN).maEvolved _
= fnGetEvolvedArray (nEvolved)
For nI = 0 To nEvolved
maIV (nN).maEvolved (nI).nCP _
= fnCalcCP ( _
maEvBaseStats (nI), _
fLevel, nAttack, _
nDefense, nStamina)
If aQuery.nPlayerLevel &lt;&gt; 0 Then
maIV (nCount).maEvolvedForms (nI).nMaxCP = fnCalcCP (aEvBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
Else
maIV (nCount).maEvolvedForms (nI).nMaxCP = -1
maIV (nN).maEvolved (nI).nMaxCP = fnCalcCP (maEvBaseStats (nI), aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
End If
Next nI
End If
@ -590,6 +606,9 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
For nI = 0 To UBound (maIV) - 1
For nJ = nI + 1 To UBound (maIV)
If fnCompareIV (maIV (nI), maIV (nJ)) &gt; 0 Then
&apos; This is an array of data. The data are actually
&apos; allocated in sequences. maIV (nI) is not a
&apos; reference. They cannot simply be assigned.
subCopyIV (maIV (nI), aTempIV)
subCopyIV (maIV (nJ), maIV (nI))
subCopyIV (aTempIV, maIV (nJ))
@ -600,19 +619,19 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
End Function
&apos; fnCompareIV: Compare two IVs for sorting
Function fnCompareIV (aIVa As aStats, aIVb As aStats) As Double
Function fnCompareIV (aIVa As aIV, aIVb As aIV) As Double
Dim nCPa As Integer, nCPb As Integer, nI As Integer
nCPa = aIVa.nMaxCP
For nI = 0 To UBound (aIVa.maEvolvedForms)
If nCPa &lt; aIVa.maEvolvedForms (nI).nMaxCP Then
nCPa = aIVa.maEvolvedForms (nI).nMaxCP
For nI = 0 To UBound (aIVa.maEvolved)
If nCPa &lt; aIVa.maEvolved (nI).nMaxCP Then
nCPa = aIVa.maEvolved (nI).nMaxCP
End If
Next nI
nCPb = aIVb.nMaxCP
For nI = 0 To UBound (aIVb.maEvolvedForms)
If nCPb &lt; aIVb.maEvolvedForms (nI).nMaxCP Then
nCPb = aIVb.maEvolvedForms (nI).nMaxCP
For nI = 0 To UBound (aIVb.maEvolved)
If nCPb &lt; aIVb.maEvolved (nI).nMaxCP Then
nCPb = aIVb.maEvolved (nI).nMaxCP
End If
Next nI
fnCompareIV = nCPb - nCPa
@ -621,15 +640,15 @@ Function fnCompareIV (aIVa As aStats, aIVb As aStats) As Double
End If
nCPa = 0
For nI = 0 To UBound (aIVa.maEvolvedForms)
If nCPa &lt; aIVa.maEvolvedForms (nI).nCP Then
nCPa = aIVa.maEvolvedForms (nI).nCP
For nI = 0 To UBound (aIVa.maEvolved)
If nCPa &lt; aIVa.maEvolved (nI).nCP Then
nCPa = aIVa.maEvolved (nI).nCP
End If
Next nI
nCPb = 0
For nI = 0 To UBound (aIVb.maEvolvedForms)
If nCPb &lt; aIVb.maEvolvedForms (nI).nCP Then
nCPb = aIVb.maEvolvedForms (nI).nCP
For nI = 0 To UBound (aIVb.maEvolved)
If nCPb &lt; aIVb.maEvolved (nI).nCP Then
nCPb = aIVb.maEvolved (nI).nCP
End If
Next nI
fnCompareIV = nCPb - nCPa
@ -660,77 +679,88 @@ Function fnCompareIV (aIVa As aStats, aIVb As aStats) As Double
End Function
&apos; subCopyIV: Copies one IV to another
Function subCopyIV (aFrom As aStats, aTo As aStats) As Double
Dim nI As Integer, maEvolvedForms () As New aEvolveForm
Function subCopyIV (aFrom As aIV, aTo As aIV) As Double
Dim nI As Integer
With aTo
.sNo = aFrom.sNo
.sPokemon = aFrom.sPokemon
.fLevel = aFrom.fLevel
.nAttack = aFrom.nAttack
.nDefense = aFrom.nDefense
.nStamina = aFrom.nStamina
.nTotal = aFrom.nTotal
.nMaxCP = aFrom.nMaxCP
End With
aTo.maEvolvedForms = fnGetEvolvedFormArray (UBound (aFrom.maEvolvedForms))
For nI = 0 To UBound (aFrom.maEvolvedForms)
With aTo.maEvolvedForms (nI)
.sPokemon = aFrom.maEvolvedForms (nI).sPokemon
.nCP = aFrom.maEvolvedForms (nI).nCP
.nMaxCP = aFrom.maEvolvedForms (nI).nMaxCP
aTo.maEvolved = fnGetEvolvedArray (UBound (aFrom.maEvolved))
For nI = 0 To UBound (aFrom.maEvolved)
With aTo.maEvolved (nI)
.nCP = aFrom.maEvolved (nI).nCP
.nMaxCP = aFrom.maEvolved (nI).nMaxCP
End With
Next nI
End Function
&apos; subSaveIV: Saves the found IV
Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
Sub subSaveIV ( _
aBaseStats As aStats, aQuery As aFindIVParam, maIVs () As aIV)
Dim oDoc As Object, oSheet As Object
Dim oRange As Object, oColumns As Object, oRows As Object
Dim nI As Integer, nJ As Integer, nFrontCols As Integer
Dim nI As Integer, nJ As Integer, nFront As Integer
Dim nEvolved As Integer
Dim mData (Ubound (maIVs) + 1) As Variant, mRow () As Variant
Dim mProps () As New com.sun.star.beans.PropertyValue
oDoc = StarDesktop.loadComponentFromURL ( _
&quot;private:factory/scalc&quot;, &quot;_default&quot;, 0, mProps)
oSheet = oDoc.getSheets.getByIndex (0)
nEvolved = UBound (maIVs (0).maEvolved) + 1
mRow = Array ( _
&quot;No&quot;, &quot;Pokemon&quot;, &quot;CP&quot;, &quot;HP&quot;, &quot;Star dust&quot;, _
&quot;Lv&quot;, &quot;Atk&quot;, &quot;Def&quot;, &quot;Sta&quot;, &quot;IV&quot;)
nFrontCols = UBound (mRow)
nFront = UBound (mRow)
If aQuery.sPokemon = &quot;Eevee&quot; Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 6) As Variant
mRow (nFrontCols + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 2) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 3) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 4) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 5) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (2).sPokemon
mRow (nFrontCols + 6) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (2).sPokemon
ReDim Preserve mRow (nFront + 6) As Variant
mRow (nFront + 1) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (0)
mRow (nFront + 2) = &quot;Powered-up as &quot; _
&amp; aBaseStats.mEvolved (0)
mRow (nFront + 3) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (1)
mRow (nFront + 4) = &quot;Powered-up as &quot; _
&amp; aBaseStats.mEvolved (1)
mRow (nFront + 5) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (2)
mRow (nFront + 6) = &quot;Powered-up as &quot; _
&amp; aBaseStats.mEvolved (2)
Else
ReDim Preserve mRow (nFrontCols + 3) As Variant
mRow (nFrontCols + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 2) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 3) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (2).sPokemon
ReDim Preserve mRow (nFront + 3) As Variant
mRow (nFront + 1) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (0)
mRow (nFront + 2) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (1)
mRow (nFront + 3) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (2)
End If
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
If nEvolved = 0 Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 1) As Variant
mRow (nFrontCols + 1) = &quot;Powered-up&quot;
ReDim Preserve mRow (nFront + 1) As Variant
mRow (nFront + 1) = &quot;Powered-up&quot;
End If
Else
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + UBound (maIVs (0).maEvolvedForms) + 2) As Variant
For nJ = 0 To UBound (maIVs (0).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (nJ).sPokemon
ReDim Preserve mRow (nFront + nEvolved + 1) As Variant
For nJ = 0 To nEvolved - 1
mRow (nFront + nJ + 1) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (nJ)
Next nJ
mRow (UBound (mRow)) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (UBound (maIVs (0).maEvolvedForms)).sPokemon
mRow (UBound (mRow)) = &quot;Powered-up as &quot; _
&amp; aBaseStats.mEvolved (nEvolved - 1)
Else
ReDim Preserve mRow (nFrontCols + UBound (maIVs (0).maEvolvedForms) + 1) As Variant
For nJ = 0 To UBound (maIVs (0).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (nJ).sPokemon
ReDim Preserve mRow (nFront + nEvolved) As Variant
For nJ = 0 To nEvolved - 1
mRow (nFront + nJ + 1) = &quot;CP as &quot; _
&amp; aBaseStats.mEvolved (nJ)
Next nJ
End If
End If
@ -740,40 +770,41 @@ Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
For nI = 0 To UBound (maIVs)
mRow = Array ( _
&quot;&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot;, _
maIVs (nI).fLevel, maIVs (nI).nAttack, maIVs (nI).nDefense, _
maIVs (nI).nStamina, maIVs (nI).nTotal / 45)
maIVs (nI).fLevel, maIVs (nI).nAttack, _
maIVs (nI).nDefense, maIVs (nI).nStamina, _
maIVs (nI).nTotal / 45)
If aQuery.sPokemon = &quot;Eevee&quot; Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 6) As Variant
mRow (nFrontCols + 1) = maIVs (nI).maEvolvedForms (0).nCP
mRow (nFrontCols + 2) = maIVs (nI).maEvolvedForms (0).nMaxCP
mRow (nFrontCols + 3) = maIVs (nI).maEvolvedForms (1).nCP
mRow (nFrontCols + 4) = maIVs (nI).maEvolvedForms (1).nMaxCP
mRow (nFrontCols + 5) = maIVs (nI).maEvolvedForms (2).nCP
mRow (nFrontCols + 6) = maIVs (nI).maEvolvedForms (2).nMaxCP
ReDim Preserve mRow (nFront + 6) As Variant
mRow (nFront + 1) = maIVs (nI).maEvolved (0).nCP
mRow (nFront + 2) = maIVs (nI).maEvolved (0).nMaxCP
mRow (nFront + 3) = maIVs (nI).maEvolved (1).nCP
mRow (nFront + 4) = maIVs (nI).maEvolved (1).nMaxCP
mRow (nFront + 5) = maIVs (nI).maEvolved (2).nCP
mRow (nFront + 6) = maIVs (nI).maEvolved (2).nMaxCP
Else
ReDim Preserve mRow (nFrontCols + 3) As Variant
mRow (nFrontCols + 1) = maIVs (nI).maEvolvedForms (0).nCP
mRow (nFrontCols + 2) = maIVs (nI).maEvolvedForms (1).nCP
mRow (nFrontCols + 3) = maIVs (nI).maEvolvedForms (2).nCP
ReDim Preserve mRow (nFront + 3) As Variant
mRow (nFront + 1) = maIVs (nI).maEvolved (0).nCP
mRow (nFront + 2) = maIVs (nI).maEvolved (1).nCP
mRow (nFront + 3) = maIVs (nI).maEvolved (2).nCP
End If
Else
If UBound (maIVs (nI).maEvolvedForms) = -1 Then
If nEvolved = 0 Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 1) As Variant
mRow (nFrontCols + 1) = maIVs (nI).nMaxCP
ReDim Preserve mRow (nFront + 1) As Variant
mRow (nFront + 1) = maIVs (nI).nMaxCP
End If
Else
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + UBound (maIVs (nI).maEvolvedForms) + 2) As Variant
For nJ = 0 To UBound (maIVs (nI).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = maIVs (nI).maEvolvedForms (nJ).nCP
ReDim Preserve mRow (nFront + nEvolved + 1) As Variant
For nJ = 0 To nEvolved - 1
mRow (nFront + nJ + 1) = maIVs (nI).maEvolved (nJ).nCP
Next nJ
mRow (UBound (mRow)) = maIVs (nI).maEvolvedForms (UBound (maIVs (nI).maEvolvedForms)).nMaxCP
mRow (UBound (mRow)) = maIVs (nI).maEvolved (nEvolved - 1).nMaxCP
Else
ReDim Preserve mRow (nFrontCols + UBound (maIVs (nI).maEvolvedForms) + 1) As Variant
For nJ = 0 To UBound (maIVs (nI).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = maIVs (nI).maEvolvedForms (nJ).nCP
ReDim Preserve mRow (nFront + nEvolved) As Variant
For nJ = 0 To nEvolved - 1
mRow (nFront + nJ + 1) = maIVs (nI).maEvolved (nJ).nCP
Next nJ
End If
End If
@ -782,7 +813,7 @@ Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
Next nI
&apos; Fills the query information at the first row
mData (1) (0) = maIVs (0).sNo
mData (1) (0) = aBaseStats.sNo
mData (1) (1) = aQuery.sPokemon
mData (1) (2) = aQuery.nCP
mData (1) (3) = aQuery.nHP
@ -817,12 +848,12 @@ Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 15, 0)
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
If nEvolved = 0 Then
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 10, 0)
Else
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 10 + UBound (maIVs (0).maEvolvedForms) + 2, 0)
10, 0, 10 + nEvolved + 1, 0)
End If
End If
oRange.setPropertyValue (&quot;IsTextWrapped&quot;, True)
@ -843,49 +874,58 @@ Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
If aQuery.sPokemon = &quot;Eevee&quot; Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
For nI = 0 To 5 Step 2
oColumns.getByIndex (10 + nI).setPropertyValue (&quot;Width&quot;, 2310)
oColumns.getByIndex (10 + nI + 1).setPropertyValue (&quot;Width&quot;, 2810)
oColumns.getByIndex (10 + nI).setPropertyValue ( _
&quot;Width&quot;, 2310)
oColumns.getByIndex (10 + nI + 1).setPropertyValue ( _
&quot;Width&quot;, 2810)
Next nI
Else
For nI = 0 To 2
oColumns.getByIndex (10 + nI).setPropertyValue (&quot;Width&quot;, 2310)
oColumns.getByIndex (10 + nI).setPropertyValue ( _
&quot;Width&quot;, 2310)
Next nI
End If
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
If nEvolved = 0 Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
oColumns.getByIndex (10).setPropertyValue (&quot;Width&quot;, 2200)
oColumns.getByIndex (10).setPropertyValue ( _
&quot;Width&quot;, 2200)
End If
Else
For nI = 0 To UBound (maIVs (0).maEvolvedForms)
oColumns.getByIndex (10 + nI).setPropertyValue (&quot;Width&quot;, 2310)
For nI = 0 To nEvolved - 1
oColumns.getByIndex (10 + nI).setPropertyValue ( _
&quot;Width&quot;, 2310)
Next nI
If aQuery.nPlayerLevel &lt;&gt; 0 Then
oColumns.getByIndex (10 + UBound (maIVs (0).maEvolvedForms) + 1).setPropertyValue (&quot;Width&quot;, 2810)
oColumns.getByIndex ( _
10 + nEvolved).setPropertyValue ( _
&quot;Width&quot;, 2810)
End If
End If
End If
End Sub
&apos; fnFilterAppraisals: Filters the IV by the appraisals.
Function fnFilterAppraisals (aQuery As aFindIVParam, nAttack As Integer, nDefense As Integer, nStamina As Integer) As Boolean
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
&apos; The first appraisal.
&apos; The stats total.
nTotal = nAttack + nDefense + nStamina
If aQuery.nAppraisal1 = 1 And Not (nTotal &gt;= 37) Then
If aQuery.nTotal = 1 And Not (nTotal &gt;= 37) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal1 = 2 And Not (nTotal &gt;= 30 And nTotal &lt;= 36) Then
If aQuery.nTotal = 2 And Not (nTotal &gt;= 30 And nTotal &lt;= 36) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal1 = 3 And Not (nTotal &gt;= 23 And nTotal &lt;= 29) Then
If aQuery.nTotal = 3 And Not (nTotal &gt;= 23 And nTotal &lt;= 29) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal1 = 4 And Not (nTotal &lt;= 22) Then
If aQuery.nTotal = 4 And Not (nTotal &lt;= 22) Then
fnFilterAppraisals = True
Exit Function
End If
@ -913,20 +953,20 @@ Function fnFilterAppraisals (aQuery As aFindIVParam, nAttack As Integer, nDefens
Exit Function
End If
End If
&apos; The second appraisal.
If aQuery.nAppraisal2 = 1 And Not (nMax = 15) Then
&apos; The max stat value.
If aQuery.nMax = 1 And Not (nMax = 15) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal2 = 2 And Not (nMax = 13 Or nMax = 14) Then
If aQuery.nMax = 2 And Not (nMax = 13 Or nMax = 14) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal2 = 3 And Not (nMax &gt;= 8 And nMax &lt;= 12) Then
If aQuery.nMax = 3 And Not (nMax &gt;= 8 And nMax &lt;= 12) Then
fnFilterAppraisals = True
Exit Function
End If
If aQuery.nAppraisal2 = 4 And Not (nMax &lt;= 7) Then
If aQuery.nMax = 4 And Not (nMax &lt;= 7) Then
fnFilterAppraisals = True
Exit Function
End If
@ -934,21 +974,24 @@ Function fnFilterAppraisals (aQuery As aFindIVParam, nAttack As Integer, nDefens
End Function
&apos; 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
Dim nCP As Integer
Function fnCalcCP (aBaseStats As aStats, fLevel As Double, _
nAttack As Integer, nDefense As Integer, _
nStamina As Integer) As Integer
Dim nCP As Integer
nCP = fnFloor ((aBaseStats.nAttack + nAttack) _
* ((aBaseStats.nDefense + nDefense) ^ 0.5) _
* ((aBaseStats.nStamina + nStamina) ^ 0.5) _
* (fnGetCPM (fLevel) ^ 2) / 10)
If nCP &lt; 10 Then
nCP = 10
nCP = 10
End If
fnCalcCP = nCP
End Function
&apos; fnCalcHP: Calculates the hit points of the Pokémon
Function fnCalcHP (aBaseStats As aStats, fLevel As Double, nStamina As Integer) As Integer
Function fnCalcHP (aBaseStats As aStats, _
fLevel As Double, nStamina As Integer) As Integer
Dim nHP As Integer
nHP = fnFloor ((aBaseStats.nStamina + nStamina) _
@ -993,6 +1036,7 @@ End Function
&apos; subReadBaseStats: Reads the base stats table.
Sub subReadBaseStats
Dim mData As Variant, nI As Integer, nJ As Integer
DIm nEvolved As Integer
If UBound (maBaseStats) = -1 Then
mData = fnGetBaseStatsData
@ -1005,52 +1049,47 @@ Sub subReadBaseStats
.nAttack = mData (nI) (3)
.nDefense = mData (nI) (4)
End With
maBaseStats (nI).maEvolvedForms = fnGetEvolvedFormArray (UBound (mData (nI) (5)))
For nJ = 0 To UBound (maBaseStats (nI).maEvolvedForms)
With maBaseStats (nI).maEvolvedForms (nJ)
.sPokemon = mData (nI) (5) (nJ)
.nCP = -1
.nMaxCP = -1
End With
nEvolved = UBound (mData (nI) (5))
maBaseStats (nI).mEvolved = fnGetStringArray (nEvolved)
For nJ = 0 To nEvolved
maBaseStats (nI).mEvolved (nJ) = mData (nI) (5) (nJ)
Next nJ
Next nI
End If
End Sub
&apos; fnGetEvolvedFormArray: Obtains a blank aEvolveForm array
Function fnGetEvolvedFormArray (nUBound As Integer) As Variant
If nUBound = -1 Then
fnGetEvolvedFormArray = fnGetEmptyEvolvedFormArray
Else
fnGetEvolvedFormArray = fnGetNumberedEvolvedFormArray (nUBound)
&apos; fnGetStringArray: Obtains a blank string array
Function fnGetStringArray (nUBound As Integer) As Variant
Dim mData () As String
If nUBound &gt;= 0 Then
ReDim Preserve mData (nUBound) As String
End If
fnGetStringArray = mData
End Function
&apos; fnGetNumberedEvolvedFormArray: Obtains a numbered aEvolveForm array
Function fnGetNumberedEvolvedFormArray (nUBound As Integer) As Variant
Dim mData (nUBound) As New aEvolveForm
&apos; fnGetEvolvedArray: Obtains a blank aEvolvedStats array
Function fnGetEvolvedArray (nUBound As Integer) As Variant
Dim mData () As New aEvolvedStats
fnGetNumberedEvolvedFormArray = mData
End Function
&apos; fnGetEmptyEvolvedFormArray: Obtains an empty aEvolveForm array
Function fnGetEmptyEvolvedFormArray () As Variant
Dim mData () As New aEvolveForm
fnGetEmptyEvolvedFormArray = mData
If nUBound &gt;= 0 Then
ReDim Preserve mData (nUBound) As New aEvolvedStats
End If
fnGetEvolvedArray = mData
End Function
&apos; fnReplace: Replaces all occurrances of a term to another.
Function fnReplace (sText As String, sFrom As String, sTo As String) As String
Dim nPos As Integer
nPos = InStr (sText, sFrom)
Do While nPos &lt;&gt; 0
sText = Left (sText, nPos - 1) &amp; sTo _
&amp; Right (sText, Len (sText) - nPos - Len (sFrom) + 1)
nPos = InStr (nPos + Len (sTo), sText, sFrom)
Loop
fnReplace = sText
Function fnReplace ( _
sText As String, sFrom As String, sTo As String) As String
Dim nPos As Integer
nPos = InStr (sText, sFrom)
Do While nPos &lt;&gt; 0
sText = Left (sText, nPos - 1) &amp; sTo _
&amp; Right (sText, Len (sText) - nPos - Len (sFrom) + 1)
nPos = InStr (nPos + Len (sTo), sText, sFrom)
Loop
fnReplace = sText
End Function
&apos; subReadCPM: Reads the CPM table.

View File

@ -9,46 +9,22 @@ Const BASE_KEY As String = &quot;/org.openoffice.Office.Addons.PokemonGoIV.Addon
&apos; fnGetImageUrl: Returns the image URL for the UNO image controls.
Function fnGetImageUrl (sName As String) As String
BasicLibraries.loadLibrary &quot;Tools&quot;
Dim oRegKey As Object
oRegKey = fnGetRegistryKeyContent (BASE_KEY &amp; &quot;FileResources/&quot; &amp; sName)
oRegKey = GetRegistryKeyContent (BASE_KEY &amp; &quot;FileResources/&quot; &amp; sName)
fnGetImageUrl = fnExpandMacroFieldExpression (oRegKey.Url)
End Function
&apos; fnGetResString: Returns the localized text string.
Function fnGetResString (sID As String) As String
BasicLibraries.loadLibrary &quot;Tools&quot;
Dim oRegKey As Object
oRegKey = fnGetRegistryKeyContent (BASE_KEY &amp; &quot;Messages/&quot; &amp; sID)
oRegKey = GetRegistryKeyContent (BASE_KEY &amp; &quot;Messages/&quot; &amp; sID)
fnGetResString = oRegKey.Text
End Function
&apos; fnGetRegistryKeyContent: Returns the registry key content
Function fnGetRegistryKeyContent (sKeyName as string, Optional bforUpdate as Boolean)
Dim oConfigProvider As Object
Dim aNodePath (0) As New com.sun.star.beans.PropertyValue
oConfigProvider = createUnoService ( _
&quot;com.sun.star.configuration.ConfigurationProvider&quot;)
aNodePath(0).Name = &quot;nodepath&quot;
aNodePath(0).Value = sKeyName
If IsMissing (bForUpdate) Then
fnGetRegistryKeyContent = oConfigProvider.createInstanceWithArguments ( _
&quot;com.sun.star.configuration.ConfigurationAccess&quot;, _
aNodePath())
Else
If bForUpdate Then
fnGetRegistryKeyContent = oConfigProvider.createInstanceWithArguments ( _
&quot;com.sun.star.configuration.ConfigurationUpdateAccess&quot;, _
aNodePath())
Else
fnGetRegistryKeyContent = oConfigProvider.createInstanceWithArguments ( _
&quot;com.sun.star.configuration.ConfigurationAccess&quot;, _
aNodePath())
End If
End If
End Function
&apos; fnExpandMacroFieldExpression
Function fnExpandMacroFieldExpression (sURL As String) As String
Dim sTemp As String

View File

@ -264,7 +264,7 @@
</dlg:radiogroup>
<dlg:img dlg:style-id="0" dlg:id="imgTeamLeader" dlg:tab-index="28" dlg:left="10" dlg:top="110" dlg:width="30" dlg:height="35"/>
<dlg:text dlg:id="txtLeaderAppraise" dlg:tab-index="27" dlg:left="45" dlg:top="116" dlg:width="180" dlg:height="8"/>
<dlg:menulist dlg:id="lstAppraisal1" dlg:tab-index="9" dlg:left="45" dlg:top="129" dlg:width="180" dlg:height="12" dlg:spin="true"/>
<dlg:menulist dlg:id="lstTotal" dlg:tab-index="9" dlg:left="45" dlg:top="129" dlg:width="180" dlg:height="12" dlg:spin="true"/>
<dlg:text dlg:id="txtBestBefore" dlg:tab-index="23" dlg:left="45" dlg:top="146" dlg:width="20" dlg:height="8"/>
<dlg:menulist dlg:id="lstBest" dlg:tab-index="10" dlg:left="65" dlg:top="144" dlg:width="45" dlg:height="12" dlg:spin="true">
<script:event script:event-name="on-itemstatechange" script:macro-name="vnd.sun.star.script:PokemonGoIV.0Main.subLstBestItemChanged?language=Basic&amp;location=application" script:language="Script"/>
@ -272,8 +272,8 @@
<dlg:text dlg:id="txtBestAfter" dlg:tab-index="24" dlg:left="110" dlg:top="146" dlg:width="100" dlg:height="8"/>
<dlg:checkbox dlg:id="cbxBest2" dlg:tab-index="11" dlg:left="45" dlg:top="161" dlg:width="180" dlg:height="8" dlg:checked="false"/>
<dlg:checkbox dlg:id="cbxBest3" dlg:tab-index="12" dlg:left="45" dlg:top="176" dlg:width="180" dlg:height="8" dlg:checked="false"/>
<dlg:menulist dlg:id="lstAppraisal2" dlg:tab-index="13" dlg:left="45" dlg:top="189" dlg:width="180" dlg:height="12" dlg:spin="true"/>
<dlg:menulist dlg:id="lstMax" dlg:tab-index="13" dlg:left="45" dlg:top="189" dlg:width="180" dlg:height="12" dlg:spin="true"/>
<dlg:button dlg:id="btnOK" dlg:tab-index="14" dlg:disabled="true" dlg:left="40" dlg:top="215" dlg:width="60" dlg:height="15" dlg:default="true" dlg:button-type="ok"/>
<dlg:button dlg:id="btnCancel" dlg:tab-index="15" dlg:left="135" dlg:top="215" dlg:width="60" dlg:height="15" dlg:button-type="cancel"/>
</dlg:bulletinboard>
</dlg:window>
</dlg:window>