From e9a8a898566275b2ee8edb2c05776f5afbe5d6fe Mon Sep 17 00:00:00 2001 From: JappaWakka Date: Fri, 31 Jan 2025 13:13:45 +0100 Subject: [PATCH] Fix issue trainer and wild at same time... When a wild and trainer encounter happen at the same time, they no longer cancel each other out (hopefully) --- P3D/Entites/Other/NPC.vb | 13 +++++++++---- P3D/Overworld/OverworldScreen.vb | 20 +++++++++++--------- P3D/World/Level.vb | 10 +++++++--- P3D/World/PokemonEncounter.vb | 3 +++ 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/P3D/Entites/Other/NPC.vb b/P3D/Entites/Other/NPC.vb index 21933752f..b607271f0 100644 --- a/P3D/Entites/Other/NPC.vb +++ b/P3D/Entites/Other/NPC.vb @@ -347,7 +347,7 @@ End If End Sub - Public Sub CheckInSight() + Public Function CheckInSight() As Boolean If Me.TrainerSight > -1 And Screen.Level.PokemonEncounterData.EncounteredPokemon = False And Core.CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then If CInt(Me.Position.Y) = CInt(Screen.Camera.Position.Y) And Screen.Camera.IsMoving() = False Then If Moved = 0.0F And Me.CanBeRemoved = False Then @@ -434,7 +434,8 @@ If l.ToLower.StartsWith("@trainer:") = True Then Dim trainerID As String = l.GetSplit(1, ":") If Trainer.IsBeaten(trainerID) = True Then - Exit Sub + Return False + Exit Function Else Dim t As New Trainer(trainerID) InSightMusic = t.GetInSightMusic() @@ -442,7 +443,8 @@ ElseIf l.ToLower.StartsWith("@battle.starttrainer(") = True Then Dim trainerID As String = l.Remove(l.Length - 1, 1).Remove(0, "@battle.starttrainer(".Length) If Trainer.IsBeaten(trainerID) = True Then - Exit Sub + Return False + Exit Function Else Dim t As New Trainer(trainerID) InSightMusic = t.GetInSightMusic() @@ -507,6 +509,7 @@ CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2,,, "NPCInSight") ActionScript.IsInSightScript = True + Return True End If End If End If @@ -514,7 +517,9 @@ End If End If End If - End Sub + Return False + + End Function Public Overrides Sub ClickFunction() If Me.Movement = Movements.Straight Then diff --git a/P3D/Overworld/OverworldScreen.vb b/P3D/Overworld/OverworldScreen.vb index a6319a8cc..19dc41cd2 100644 --- a/P3D/Overworld/OverworldScreen.vb +++ b/P3D/Overworld/OverworldScreen.vb @@ -281,6 +281,17 @@ Public Class OverworldScreen End If End If + If Core.Player.CheckForTrainersLater = True AndAlso Core.CurrentScreen.Identification = Screen.Identifications.OverworldScreen AndAlso CType(CurrentScreen, OverworldScreen).ActionScript.IsReady = True Then + Screen.Level.PokemonEncounterData.EncounteredPokemon = False + Screen.Level.CheckTrainerSights() + If CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then + If CType(CurrentScreen, OverworldScreen).ActionScript.IsReady = False Then + Core.Player._stepEventStartedTrainer = True + End If + End If + Core.Player.CheckForTrainersLater = False + End If + SkyDome.Update() Level.RouteSign.Update() @@ -473,15 +484,6 @@ Public Class OverworldScreen ActionScript.StartScript(AfterRoamingBattleScript, 0,,, "AfterRoamingBattleScript") AfterRoamingBattleScript = "" End If - If Core.Player.CheckForTrainersLater = True Then - Screen.Level.CheckTrainerSights() - If CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then - If CType(CurrentScreen, OverworldScreen).ActionScript.IsReady = False Then - Core.Player._stepEventStartedTrainer = True - End If - End If - Core.Player.CheckForTrainersLater = False - End If End Sub ''' diff --git a/P3D/World/Level.vb b/P3D/World/Level.vb index 3a3aef7df..5e2297c1e 100644 --- a/P3D/World/Level.vb +++ b/P3D/World/Level.vb @@ -1245,16 +1245,20 @@ Public Class Level ''' ''' Checks all NPCs on the map for if the player is in their line of sight. ''' - Public Sub CheckTrainerSights() + Public Function CheckTrainerSights() As Boolean + Dim IsInSight = False For Each Entity As Entity In Entities If Entity.EntityID = "NPC" Then Dim NPC As NPC = CType(Entity, NPC) If NPC.IsTrainer = True Then - NPC.CheckInSight() + If NPC.CheckInSight() = True Then + IsInSight = True + End If End If End If Next - End Sub + Return IsInSight + End Function ''' ''' Determines whether the player can use Ride on this map. diff --git a/P3D/World/PokemonEncounter.vb b/P3D/World/PokemonEncounter.vb index 704b904ad..3b12e9591 100644 --- a/P3D/World/PokemonEncounter.vb +++ b/P3D/World/PokemonEncounter.vb @@ -34,6 +34,9 @@ Public Class PokemonEncounter With Me._levelReference If .WalkedSteps > 3 Then ' Three Step Rule - Only after walking 3 steps, try to encounter a wild Pokémon: + If Screen.Level.CheckTrainerSights() = True Then + Exit Sub + End If ' Compose the correct .poke file from the levelfile, if the pokeFile parameter is empty: If pokeFile = "" Then pokeFile = .LevelFile.Remove(.LevelFile.Length - 4, 4) & ".poke"