Update @Pokemon.NewRoaming(...) command...

@Pokemon.NewRoaming(RoamerID,PokémonID,Level,regionID,startLevelFile,MusicLoop,[Shiny],[ScriptPath])

RoamerID & ScriptPath are new.
* RoamerID (int) = A required identifier for the roaming Pokémon, can be used in scripts.
* ScriptPath (str) = Path to a script file to execute after every encounter with any roaming Pokémon
This commit is contained in:
JappaWakka 2024-04-04 17:49:46 +02:00
parent 4c5bd0b7f6
commit f280c5718c
6 changed files with 55 additions and 36 deletions

View File

@ -1276,13 +1276,13 @@ nextIndex:
'Shift the Roaming Pokemon. 'Shift the Roaming Pokemon.
If RoamingBattle = True Then If RoamingBattle = True Then
If FieldEffects.RoamingFled = False AndAlso Battle.Fled = False AndAlso Battle.Caught = True Or OppPokemon.HP <= 0 Or OppPokemon.Status = Pokemon.StatusProblems.Fainted Then If FieldEffects.RoamingFled = False AndAlso Battle.Fled = False AndAlso Battle.Caught = True Or OppPokemon.HP <= 0 Or OppPokemon.Status = Pokemon.StatusProblems.Fainted Then
If RoamingPokemonStorage.ScriptPath <> "" Then
CType(SavedOverworld.OverworldScreen, OverworldScreen).AfterRoamingBattleScript = RoamingPokemonStorage.ScriptPath
End If
Core.Player.RoamingPokemonData = RoamingPokemon.RemoveRoamingPokemon(RoamingPokemonStorage) Core.Player.RoamingPokemonData = RoamingPokemon.RemoveRoamingPokemon(RoamingPokemonStorage)
Else Else
Core.Player.RoamingPokemonData = RoamingPokemon.ReplaceRoamingPokemon(RoamingPokemonStorage) Core.Player.RoamingPokemonData = RoamingPokemon.ReplaceRoamingPokemon(RoamingPokemonStorage)
End If End If
If RoamingPokemonStorage.ScriptPath <> "" Then
CType(SavedOverworld.OverworldScreen, OverworldScreen).AfterRoamingBattleScript = RoamingPokemonStorage.ScriptPath
End If
RoamingPokemon.ShiftRoamingPokemon(RoamingPokemonStorage.WorldID) RoamingPokemon.ShiftRoamingPokemon(RoamingPokemonStorage.WorldID)
End If End If

View File

@ -430,6 +430,7 @@ Public Class PokemonForms
Return FileName Return FileName
End Function End Function
'Return the identifier for the Pokémon including the suffix when available, including non-data forms if desired.
Public Shared Function GetPokemonDataFileName(ByVal Number As Integer, ByVal AdditionalData As String, Optional ByVal AlsoCheckNonDataForms As Boolean = False) As String Public Shared Function GetPokemonDataFileName(ByVal Number As Integer, ByVal AdditionalData As String, Optional ByVal AlsoCheckNonDataForms As Boolean = False) As String
Dim FileName As String = Number.ToString() Dim FileName As String = Number.ToString()
Dim FilePath As String = GameModeManager.GetPokemonDataFilePath(FileName & ".dat") Dim FilePath As String = GameModeManager.GetPokemonDataFilePath(FileName & ".dat")

View File

@ -1,5 +1,6 @@
Public Class RoamingPokemon Public Class RoamingPokemon
Public RoamerID As Integer = -1
Public WorldID As Integer = -1 Public WorldID As Integer = -1
Public LevelFile As String = "" Public LevelFile As String = ""
Public MusicLoop As String = "" Public MusicLoop As String = ""
@ -9,19 +10,20 @@ Public Class RoamingPokemon
Public Sub New(ByVal DataLine As String) Public Sub New(ByVal DataLine As String)
Dim data() As String = DataLine.Split(CChar("|")) Dim data() As String = DataLine.Split(CChar("|"))
Me.RoamerID = CInt(data(0))
Me.PokemonReference = Pokemon.GetPokemonByData(data(6)) Me.PokemonReference = Pokemon.GetPokemonByData(data(6))
Me.WorldID = CInt(data(2)) Me.WorldID = CInt(data(3))
Me.LevelFile = data(3) Me.LevelFile = data(4)
Me.MusicLoop = data(4) Me.MusicLoop = data(5)
If data.Length = 8 Then If data.Length = 9 Then
ScriptPath = data(7) ScriptPath = data(8)
End If End If
End Sub End Sub
Public Function CompareData() As String Public Function CompareData() As String
Return Me.PokemonReference.Number.ToString() & "|" & Me.PokemonReference.Level.ToString() & "|" & Me.WorldID.ToString() & "|" Return Me.RoamerID.ToString & "|" & PokemonForms.GetPokemonDataFileName(Me.PokemonReference.Number, Me.PokemonReference.AdditionalData, True) & "|" & Me.PokemonReference.Level.ToString() & "|" & Me.WorldID.ToString() & "|"
End Function End Function
Public Function GetPokemon() As Pokemon Public Function GetPokemon() As Pokemon
@ -33,14 +35,14 @@ Public Class RoamingPokemon
Dim newData As String = "" Dim newData As String = ""
For Each line As String In Core.Player.RoamingPokemonData.SplitAtNewline() For Each line As String In Core.Player.RoamingPokemonData.SplitAtNewline()
If line <> "" And line.CountSeperators("|") >= 6 Then If line <> "" And line.CountSeperators("|") >= 7 Then
Dim data() As String = line.Split(CChar("|")) Dim data() As String = line.Split(CChar("|"))
If newData <> "" Then If newData <> "" Then
newData &= Environment.NewLine newData &= Environment.NewLine
End If End If
If CInt(data(2)) = worldID Or worldID = -1 Then If CInt(data(3)) = worldID Or worldID = -1 Then
Dim regionsFile As String = GameModeManager.GetScriptPath("worldmap\roaming_regions.dat") Dim regionsFile As String = GameModeManager.GetScriptPath("worldmap\roaming_regions.dat")
Security.FileValidation.CheckFileValid(regionsFile, False, "RoamingPokemon.vb") Security.FileValidation.CheckFileValid(regionsFile, False, "RoamingPokemon.vb")
@ -48,22 +50,23 @@ Public Class RoamingPokemon
Dim levelList As New List(Of String) Dim levelList As New List(Of String)
For Each worldLine As String In worldList For Each worldLine As String In worldList
If worldLine.StartsWith(CInt(data(2)).ToString() & "|") = True Then If worldLine.StartsWith(CInt(data(3)).ToString() & "|") = True Then
levelList = worldLine.Remove(0, worldLine.IndexOf("|") + 1).Split(CChar(",")).ToList() levelList = worldLine.Remove(0, worldLine.IndexOf("|") + 1).Split(CChar(",")).ToList()
End If End If
Next Next
Dim currentIndex As Integer = levelList.IndexOf(data(3)) Dim currentIndex As Integer = levelList.IndexOf(data(4))
Dim nextIndex As Integer = currentIndex + 1 Dim nextIndex As Integer = currentIndex + 1
If nextIndex > levelList.Count - 1 Then If nextIndex > levelList.Count - 1 Then
nextIndex = 0 nextIndex = 0
End If End If
If data.Length = 7 Then 'RoamerID|PokémonID|Level|regionID|startLevelFile|MusicLoop|Shiny|PokemonData|ScriptPath
'PokémonID,Level,regionID,startLevelFile,MusicLoop,Shiny,PokemonData,ScriptPath If data.Length = 8 Then
newData &= data(0) & "|" & data(1) & "|" & CInt(data(2)).ToString() & "|" & levelList(nextIndex) & "|" & data(4) & "|" & data(5) & "|" & data(6) & "|" 'No Script
newData &= data(0) & "|" & data(1) & "|" & data(2) & "|" & CInt(data(3)).ToString() & "|" & levelList(nextIndex) & "|" & data(5) & "|" & data(6) & "|" & data(7) & "|"
Else Else
'PokémonID,Level,regionID,startLevelFile,MusicLoop,Shiny,PokemonData,ScriptPath 'With Script
newData &= data(0) & "|" & data(1) & "|" & CInt(data(2)).ToString() & "|" & levelList(nextIndex) & "|" & data(4) & "|" & data(5) & "|" & data(6) & "|" & data(7) newData &= data(0) & "|" & data(1) & "|" & data(2) & "|" & CInt(data(3)).ToString() & "|" & levelList(nextIndex) & "|" & data(5) & "|" & data(6) & "|" & data(7) & "|" & data(8)
End If End If
Else Else
@ -85,7 +88,12 @@ Public Class RoamingPokemon
Dim newData As String = "" Dim newData As String = ""
For Each line As String In Core.Player.RoamingPokemonData.SplitAtNewline() For Each line As String In Core.Player.RoamingPokemonData.SplitAtNewline()
If line.StartsWith(compareData) = False Then If line.CountSeperators("|") = 7 AndAlso line.StartsWith(compareData.Remove(0, compareData.IndexOf("|") + 1)) = False Then
If newData <> "" Then
newData &= Environment.NewLine
End If
newData &= line
ElseIf line.StartsWith(compareData) = False Then
If newData <> "" Then If newData <> "" Then
newData &= Environment.NewLine newData &= Environment.NewLine
End If End If
@ -105,10 +113,13 @@ Public Class RoamingPokemon
If newData <> "" Then If newData <> "" Then
newData &= Environment.NewLine newData &= Environment.NewLine
End If End If
If line.StartsWith(compareData) = False Then
If line.CountSeperators("|") = 7 AndAlso line.StartsWith(compareData.Remove(0, compareData.IndexOf("|") + 1)) = False Then
newData &= line
ElseIf line.StartsWith(compareData) = False Then
newData &= line newData &= line
Else Else
newData &= p.PokemonReference.Number & "|" & p.PokemonReference.Level & "|" & p.WorldID.ToString() & "|" & p.LevelFile & "|" & p.MusicLoop & "|" & p.PokemonReference.IsShiny & "|" & p.PokemonReference.GetSaveData() & "|" & p.ScriptPath newData &= p.RoamerID & "|" & p.PokemonReference.Number & "|" & p.PokemonReference.Level & "|" & p.WorldID.ToString() & "|" & p.LevelFile & "|" & p.MusicLoop & "|" & p.PokemonReference.IsShiny & "|" & p.PokemonReference.GetSaveData() & "|" & p.ScriptPath
End If End If
Next Next

View File

@ -108,8 +108,12 @@ Public Class Spawner
Dim possibleEncounters As New List(Of String) Dim possibleEncounters As New List(Of String)
For Each cLine As String In roamingData For Each cLine As String In roamingData
If cLine <> "" And cLine.CountSeperators("|") >= 6 Then If cLine <> "" Then
possibleEncounters.Add(cLine) If cLine.CountSeperators("|") >= 8 Then
possibleEncounters.Add(cLine)
ElseIf cLine.CountSeperators("|") = 7 Then
possibleEncounters.Add(Random.Next(100, 1001).ToString & "|" & cLine)
End If
End If End If
Next Next
@ -120,7 +124,7 @@ Public Class Spawner
Dim line As String = possibleEncounters(i) Dim line As String = possibleEncounters(i)
Dim data() As String = line.Split(CChar("|")) Dim data() As String = line.Split(CChar("|"))
If data(3).ToLower() = LevelFile.ToLower() Then If data(4).ToLower() = LevelFile.ToLower() Then
Return New RoamingPokemon(line) Return New RoamingPokemon(line)
End If End If
Next Next

View File

@ -673,37 +673,37 @@
Core.Player.Pokemons(Index).CatchLocation = placeLocalization Core.Player.Pokemons(Index).CatchLocation = placeLocalization
End If End If
Case "newroaming" Case "newroaming"
' PokémonID,Level,regionID,startLevelFile,MusicLoop,[Shiny],[ScriptPath] ' RoamerID,PokémonID,Level,regionID,startLevelFile,MusicLoop,[Shiny],[ScriptPath]
Dim data() As String = argument.Split(CChar(",")) Dim data() As String = argument.Split(CChar(","))
Dim PokemonID As String = data(0) Dim PokemonID As String = data(1)
Dim PokemonAddition As String = "xXx" Dim PokemonAddition As String = "xXx"
If PokemonID.Contains("_") Then If PokemonID.Contains("_") Then
PokemonAddition = PokemonForms.GetAdditionalValueFromDataFile(data(0)) PokemonAddition = PokemonForms.GetAdditionalValueFromDataFile(data(0))
PokemonID = data(0).GetSplit(0, "_") PokemonID = data(1).GetSplit(0, "_")
End If End If
If PokemonID.Contains(";") Then If PokemonID.Contains(";") Then
PokemonAddition = data(0).GetSplit(1, ";") PokemonAddition = data(0).GetSplit(1, ";")
PokemonID = data(0).GetSplit(0, ";") PokemonID = data(1).GetSplit(0, ";")
End If End If
Dim p As Pokemon = Pokemon.GetPokemonByID(CInt(PokemonID), PokemonAddition) Dim p As Pokemon = Pokemon.GetPokemonByID(CInt(PokemonID), PokemonAddition)
p.Generate(CInt(data(1)), True, PokemonAddition) p.Generate(CInt(data(2)), True, PokemonAddition)
If data.Length > 5 AndAlso data(5) <> "" AndAlso data(5) <> "-1" Then If data.Length > 6 AndAlso data(6) <> "" AndAlso data(6) <> "-1" Then
p.IsShiny = CBool(data(5)) p.IsShiny = CBool(data(6))
End If End If
Dim ScriptPath As String = "" Dim ScriptPath As String = ""
If data.Length > 6 AndAlso data(6) <> "" Then If data.Length > 7 AndAlso data(7) <> "" Then
ScriptPath = data(6) ScriptPath = data(7)
End If End If
If Core.Player.RoamingPokemonData <> "" Then If Core.Player.RoamingPokemonData <> "" Then
Core.Player.RoamingPokemonData &= Environment.NewLine Core.Player.RoamingPokemonData &= Environment.NewLine
End If End If
Core.Player.RoamingPokemonData &= data(0) & "|" & data(1) & "|" & data(2) & "|" & data(3) & "|" & data(4) & "|" & p.IsShiny & "|" & p.GetSaveData() & "|" & ScriptPath Core.Player.RoamingPokemonData &= data(0) & "|" & data(1) & "|" & data(2) & "|" & data(3) & "|" & data(4) & "|" & data(5) & "|" & p.IsShiny & "|" & p.GetSaveData() & "|" & ScriptPath
Case "evolve" Case "evolve"
Dim args() As String = argument.Split(CChar(",")) Dim args() As String = argument.Split(CChar(","))
Dim triggerStr As String = "level" Dim triggerStr As String = "level"

View File

@ -804,10 +804,13 @@ Namespace ScriptVersion2
New ScriptArgument("location", ScriptArgument.ArgumentTypes.Str)}.ToList(), "Sets the Catch Location of a Pokémon in the player's party.")) New ScriptArgument("location", ScriptArgument.ArgumentTypes.Str)}.ToList(), "Sets the Catch Location of a Pokémon in the player's party."))
r(New ScriptCommand("pokemon", "setstatus", {New ScriptArgument("pokemonIndex", ScriptArgument.ArgumentTypes.Int), r(New ScriptCommand("pokemon", "setstatus", {New ScriptArgument("pokemonIndex", ScriptArgument.ArgumentTypes.Int),
New ScriptArgument("status", ScriptArgument.ArgumentTypes.Str, {"brn", "frz", "prz", "psn", "bpsn", "slp", "fnt"})}.ToList(), "Sets the status of a Pokémon in the player's party. Setting that to ""fnt"" (Fainted) will also set the Pokémon's HP to 0.")) New ScriptArgument("status", ScriptArgument.ArgumentTypes.Str, {"brn", "frz", "prz", "psn", "bpsn", "slp", "fnt"})}.ToList(), "Sets the status of a Pokémon in the player's party. Setting that to ""fnt"" (Fainted) will also set the Pokémon's HP to 0."))
r(New ScriptCommand("pokemon", "newroaming", {New ScriptArgument("pokemonID", ScriptArgument.ArgumentTypes.Int), r(New ScriptCommand("pokemon", "newroaming", {New ScriptArgument("roamerID", ScriptArgument.ArgumentTypes.Int),
New ScriptArgument("pokemonID", ScriptArgument.ArgumentTypes.Str),
New ScriptArgument("level", ScriptArgument.ArgumentTypes.Int), New ScriptArgument("level", ScriptArgument.ArgumentTypes.Int),
New ScriptArgument("regionID", ScriptArgument.ArgumentTypes.Int), New ScriptArgument("regionID", ScriptArgument.ArgumentTypes.Int),
New ScriptArgument("startMap", ScriptArgument.ArgumentTypes.Str)}.ToList(), "Adds a new Roaming Pokémon to the list of Roaming Pokémon.", "|", False)) New ScriptArgument("startMap", ScriptArgument.ArgumentTypes.Str),
New ScriptArgument("shiny", ScriptArgument.ArgumentTypes.Bool, True, "-1"),
New ScriptArgument("scriptPath", ScriptArgument.ArgumentTypes.Str, True)}.ToList(), "Adds a new Roaming Pokémon to the list of Roaming Pokémon.", "|", False))
r(New ScriptCommand("pokemon", "evolve", {New ScriptArgument("pokemonIndex", ScriptArgument.ArgumentTypes.Int), r(New ScriptCommand("pokemon", "evolve", {New ScriptArgument("pokemonIndex", ScriptArgument.ArgumentTypes.Int),
New ScriptArgument("evolutionTrigger", ScriptArgument.ArgumentTypes.Str, {"level", "none", "item", "trade"}, True, "level"), New ScriptArgument("evolutionTrigger", ScriptArgument.ArgumentTypes.Str, {"level", "none", "item", "trade"}, True, "level"),
New ScriptArgument("evolutionArgument", ScriptArgument.ArgumentTypes.Str, True, "")}.ToList(), "Tries to evolve a Pokémon with the given conditions.")) New ScriptArgument("evolutionArgument", ScriptArgument.ArgumentTypes.Str, True, "")}.ToList(), "Tries to evolve a Pokémon with the given conditions."))