299 lines
9.4 KiB
VB.net
299 lines
9.4 KiB
VB.net
Public Class Pokedex
|
|
|
|
'0 = undiscovered
|
|
'1 = seen
|
|
'2 = caught + seen
|
|
'3 = shiny + caught + seen
|
|
|
|
Public Shared AutoDetect As Boolean = True
|
|
Public Const POKEMONCOUNT As Integer = 721
|
|
|
|
#Region "PlayerData"
|
|
|
|
Public Shared Function CountEntries(ByVal Data As String, ByVal Type() As Integer) As Integer
|
|
Dim counts As Integer = 0
|
|
|
|
Dim pData() As String = Data.Split(CChar(Environment.NewLine))
|
|
For Each Entry As String In pData
|
|
Entry = Entry.Remove(0, Entry.IndexOf("{") + 1)
|
|
Entry = Entry.Remove(Entry.Length - 1, 1)
|
|
|
|
Dim eID As Integer = CInt(Entry.GetSplit(0, "|"))
|
|
Dim eType As Integer = CInt(Entry.GetSplit(1, "|"))
|
|
|
|
If Type.Contains(eType) = True Then
|
|
counts += 1
|
|
End If
|
|
Next
|
|
|
|
Return counts
|
|
End Function
|
|
|
|
Public Shared Function CountEntries(ByVal Data As String, ByVal Type() As Integer, ByVal Range() As String) As Integer
|
|
Dim IDs As New List(Of Integer)
|
|
|
|
For Each r As String In Range
|
|
If StringHelper.IsNumeric(r) = True Then
|
|
If IDs.Contains(CInt(r)) = False Then
|
|
IDs.Add(CInt(r))
|
|
End If
|
|
Else
|
|
If r.Contains("-") = True Then
|
|
Dim min As Integer = CInt(r.Remove(r.IndexOf("-")))
|
|
Dim max As Integer = CInt(r.Remove(0, r.IndexOf("-") + 1))
|
|
|
|
For i = min To max
|
|
If IDs.Contains(i) = False Then
|
|
IDs.Add(i)
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
Dim counts As Integer = 0
|
|
|
|
Dim pData() As String = Data.Split(CChar(Environment.NewLine))
|
|
For Each Entry As String In pData
|
|
Entry = Entry.Remove(0, Entry.IndexOf("{") + 1)
|
|
Entry = Entry.Remove(Entry.Length - 1, 1)
|
|
|
|
Dim eID As Integer = CInt(Entry.GetSplit(0, "|"))
|
|
Dim eType As Integer = CInt(Entry.GetSplit(1, "|"))
|
|
|
|
If IDs.Contains(eID) = True Then
|
|
If Type.Contains(eType) = True Then
|
|
counts += 1
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
Return counts
|
|
End Function
|
|
|
|
Public Shared Function GetEntryType(ByVal Data As String, ByVal ID As Integer) As Integer
|
|
Dim pData() As String = Data.Split(CChar(Environment.NewLine))
|
|
|
|
If pData.Count >= ID Then
|
|
If pData(ID - 1).Contains(ID.ToString() & "|") = True Then
|
|
Dim Entry As String = pData(ID - 1)
|
|
Return CInt(Entry.Remove(Entry.Length - 1, 1).Remove(0, Entry.IndexOf("|") + 1))
|
|
End If
|
|
End If
|
|
|
|
For Each Entry As String In pData
|
|
If Entry.Contains(ID.ToString() & "|") = True Then
|
|
Return CInt(Entry.Remove(Entry.Length - 1, 1).Remove(0, Entry.IndexOf("|") + 1))
|
|
End If
|
|
Next
|
|
|
|
Return 0
|
|
End Function
|
|
|
|
Public Shared Function ChangeEntry(ByVal Data As String, ByVal ID As Integer, ByVal Type As Integer) As String
|
|
If Type = 0 Or AutoDetect = True Then
|
|
If Data.Contains("{" & ID & "|") = True Then
|
|
Dim cEntry As Integer = GetEntryType(Data, ID)
|
|
If cEntry < Type Then
|
|
Return Data.Replace("{" & ID & "|" & cEntry & "}", "{" & ID & "|" & Type & "}")
|
|
Else
|
|
Return Data
|
|
End If
|
|
Else
|
|
If Data <> "" Then
|
|
Data &= Environment.NewLine
|
|
End If
|
|
Data &= "{" & ID & "|" & Type & "}"
|
|
Return Data
|
|
End If
|
|
End If
|
|
Return Data
|
|
End Function
|
|
|
|
Public Shared Function NewPokedex() As String
|
|
Dim Data As String = ""
|
|
|
|
For i = 1 To POKEMONCOUNT
|
|
Data &= "{" & i & "|0}"
|
|
If i <> POKEMONCOUNT Then
|
|
Data &= Environment.NewLine
|
|
End If
|
|
Next
|
|
|
|
Return Data
|
|
End Function
|
|
|
|
Public Shared Function GetLastSeen(ByVal Data As String) As Integer
|
|
Dim pData() As String = Data.Split(CChar(Environment.NewLine))
|
|
Dim lastSeen As Integer = 1
|
|
|
|
For Each Entry As String In pData
|
|
Entry = Entry.Remove(0, Entry.IndexOf("{") + 1)
|
|
Entry = Entry.Remove(Entry.Length - 1, 1)
|
|
|
|
Dim eID As Integer = CInt(Entry.GetSplit(0, "|"))
|
|
Dim eType As Integer = CInt(Entry.GetSplit(1, "|"))
|
|
|
|
If eType > 0 Then
|
|
lastSeen = eID
|
|
End If
|
|
Next
|
|
|
|
Return lastSeen
|
|
End Function
|
|
|
|
Public Shared Sub Load()
|
|
Core.Player.Pokedexes.Clear()
|
|
|
|
Dim path As String = GameModeManager.GetContentFilePath("Data\pokedex.dat")
|
|
Security.FileValidation.CheckFileValid(path, False, "Pokedex.vb")
|
|
|
|
Dim lines() As String = System.IO.File.ReadAllLines(path)
|
|
For Each PokedexData As String In lines
|
|
Core.Player.Pokedexes.Add(New Pokedex(PokedexData))
|
|
Next
|
|
End Sub
|
|
|
|
Public Shared Function RegisterPokemon(ByVal Data As String, ByVal Pokemon As Pokemon) As String
|
|
If Pokemon.IsShiny = True Then
|
|
Return ChangeEntry(Data, Pokemon.Number, 3)
|
|
Else
|
|
Return ChangeEntry(Data, Pokemon.Number, 2)
|
|
End If
|
|
End Function
|
|
|
|
#End Region
|
|
|
|
#Region "PokedexHandler"
|
|
|
|
'The Pokedex screen changes the PokemonList array to add Pokémon not in the array, so this will get used to count things when focussing on the Pokémon in this dex.
|
|
Private _originalPokemonList As New Dictionary(Of Integer, Integer)
|
|
|
|
'Fields:
|
|
Public PokemonList As New Dictionary(Of Integer, Integer)
|
|
Public Name As String = ""
|
|
Public Activation As String = ""
|
|
Public OriginalCount As Integer = 0
|
|
Public IncludeExternalPokemon As Boolean = False 'for the pokedex screen, if true, this pokedex view will include all Pokémon seen/caught at the end.
|
|
|
|
Public Sub New(ByVal input As String)
|
|
Dim data() As String = input.Split(CChar("|"))
|
|
|
|
Me.Name = data(0)
|
|
Me.Activation = data(1)
|
|
|
|
Dim pokemonData() As String = data(2).Split(CChar(","))
|
|
|
|
Dim Place As Integer = 1
|
|
|
|
For Each l As String In pokemonData
|
|
l = l.Replace("[MAX]", POKEMONCOUNT.ToString())
|
|
|
|
If l.Contains("-") = True Then
|
|
Dim range() As String = l.Split(CChar("-"))
|
|
Dim min As Integer = CInt(range(0))
|
|
Dim max As Integer = CInt(range(1))
|
|
|
|
For j = min To max
|
|
PokemonList.Add(Place, j)
|
|
_originalPokemonList.Add(Place, j)
|
|
|
|
Place += 1
|
|
Next
|
|
Else
|
|
PokemonList.Add(Place, CInt(l))
|
|
_originalPokemonList.Add(Place, CInt(l))
|
|
|
|
Place += 1
|
|
End If
|
|
Next
|
|
|
|
If data.Length >= 4 Then
|
|
Me.IncludeExternalPokemon = CBool(data(3))
|
|
End If
|
|
|
|
Me.OriginalCount = Me.PokemonList.Count
|
|
End Sub
|
|
|
|
Dim TempPlaces As New Dictionary(Of Integer, Integer)
|
|
|
|
Public Function GetPlace(ByVal PokemonNumber As Integer) As Integer
|
|
If TempPlaces.ContainsKey(PokemonNumber) = True Then
|
|
Return TempPlaces(PokemonNumber)
|
|
End If
|
|
|
|
If PokemonList.ContainsValue(PokemonNumber) = True Then
|
|
For i = 0 To PokemonList.Values.Count - 1
|
|
If PokemonList.Values(i) = PokemonNumber Then
|
|
TempPlaces.Add(PokemonNumber, PokemonList.Keys(i))
|
|
Return PokemonList.Keys(i)
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
Return -1
|
|
End Function
|
|
|
|
Public Function GetPokemonNumber(ByVal Place As Integer) As Integer
|
|
If PokemonList.ContainsKey(Place) = True Then
|
|
Return PokemonList(Place)
|
|
End If
|
|
Return -1
|
|
End Function
|
|
|
|
Public ReadOnly Property IsActivated() As Boolean
|
|
Get
|
|
If Me.Activation = "0" Then
|
|
Return True
|
|
Else
|
|
If ActionScript.IsRegistered(Me.Activation) = True Then
|
|
Return True
|
|
End If
|
|
End If
|
|
Return False
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Obtained() As Integer
|
|
Get
|
|
Dim o As Integer = 0
|
|
For Each v As Integer In _originalPokemonList.Values
|
|
If GetEntryType(Core.Player.PokedexData, v) > 1 Then
|
|
o += 1
|
|
End If
|
|
Next
|
|
Return o
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Seen() As Integer
|
|
Get
|
|
Dim o As Integer = 0
|
|
For Each v As Integer In _originalPokemonList.Values
|
|
If GetEntryType(Core.Player.PokedexData, v) = 1 Then
|
|
o += 1
|
|
End If
|
|
Next
|
|
Return o
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property Count() As Integer
|
|
Get
|
|
Return Me._originalPokemonList.Keys.Count
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property HasPokemon(ByVal pokemonNumber As Integer, ByVal originalList As Boolean) As Boolean
|
|
Get
|
|
If originalList = True Then
|
|
Return _originalPokemonList.ContainsValue(pokemonNumber)
|
|
Else
|
|
Return PokemonList.ContainsValue(pokemonNumber)
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
#End Region
|
|
|
|
End Class |