Fix items lost if switch pokémon after knocked off

This commit is contained in:
JappaWakka 2024-05-01 13:26:29 +02:00
parent 1a7e08d361
commit 9873f15aa5
3 changed files with 68 additions and 19 deletions

View File

@ -1338,6 +1338,7 @@ nextIndex:
End If End If
Dim hasLevelUp As Boolean = False Dim hasLevelUp As Boolean = False
Dim ItemReturnScript As String = "@Text.Show("
For Each p As Pokemon In Core.Player.Pokemons For Each p As Pokemon In Core.Player.Pokemons
If p.hasLeveledUp = True Then If p.hasLeveledUp = True Then
hasLevelUp = True hasLevelUp = True
@ -1351,7 +1352,10 @@ nextIndex:
End If End If
p.Item.AdditionalData = p.OriginalItem.AdditionalData p.Item.AdditionalData = p.OriginalItem.AdditionalData
Screen.TextBox.Show(Core.Player.Name & " received~" & p.OriginalItem.Name & "and gave it back to~" & p.GetDisplayName & "!") If ItemReturnScript <> "" Then
ItemReturnScript &= "*"
End If
ItemReturnScript &= Core.Player.Name & " received~" & p.OriginalItem.Name & "*and gave it back to~" & p.GetDisplayName & "!"
p.OriginalItem = Nothing p.OriginalItem = Nothing
End If End If
Else Else
@ -1364,7 +1368,12 @@ nextIndex:
End If End If
p.Item.AdditionalData = p.OriginalItem.AdditionalData p.Item.AdditionalData = p.OriginalItem.AdditionalData
Screen.TextBox.Show(Core.Player.Name & " found~" & p.OriginalItem.Name & "*and gave it back to~" & p.GetDisplayName & "!")
If ItemReturnScript <> "" Then
ItemReturnScript &= "*"
End If
ItemReturnScript &= Core.Player.Name & " found~" & p.OriginalItem.Name & "*and gave it back to~" & p.GetDisplayName & "!"
p.OriginalItem = Nothing p.OriginalItem = Nothing
Else Else
If p.OriginalItem.IsGameModeItem = True Then If p.OriginalItem.IsGameModeItem = True Then
@ -1372,15 +1381,27 @@ nextIndex:
Else Else
Core.Player.Inventory.AddItem(p.OriginalItem.ID.ToString, 1) Core.Player.Inventory.AddItem(p.OriginalItem.ID.ToString, 1)
End If End If
If ItemReturnScript <> "" Then
ItemReturnScript &= ")" & Environment.NewLine
End If
ItemReturnScript &= "@Sound.Play(item_found)" & Environment.NewLine & "@Text.Show(" & Core.Player.Name & " found~" & p.OriginalItem.Name & "!*" & Core.Player.Inventory.GetMessageReceive(p.OriginalItem, 1)
SoundManager.PlaySound("item_found", True)
Screen.TextBox.Show(Core.Player.Name & " found~" & p.OriginalItem.Name & "!*" & Core.Player.Inventory.GetMessageReceive(p.OriginalItem, 1))
p.OriginalItem = Nothing p.OriginalItem = Nothing
End If
End If End If
End If
End If End If
p.ResetTemp() p.ResetTemp()
Next Next
If ItemReturnScript <> "" Then
ItemReturnScript &= ")"
End If
Dim s As String =
"version=2" & Environment.NewLine &
ItemReturnScript & Environment.NewLine &
":end"
CType(SavedOverworld.OverworldScreen, OverworldScreen).ActionScript.StartScript(s, 2, False)
If hasLevelUp = False Then If hasLevelUp = False Then
Core.SetScreen(New TransitionScreen(Me, SavedOverworld.OverworldScreen, New Color(255, 255, 255), False, AddressOf ChangeSavedScreen)) Core.SetScreen(New TransitionScreen(Me, SavedOverworld.OverworldScreen, New Color(255, 255, 255), False, AddressOf ChangeSavedScreen))
@ -1421,38 +1442,67 @@ nextIndex:
FieldEffects.OppRageFistPower = 0 FieldEffects.OppRageFistPower = 0
Else Else
Dim ItemReturnScript As String = "@Text.Show("
For Each p As Pokemon In Core.Player.Pokemons For Each p As Pokemon In Core.Player.Pokemons
If IsRemoteBattle = True Then If IsRemoteBattle = True Then
If p.OriginalItem IsNot Nothing Then If p.OriginalItem IsNot Nothing Then
If p.OriginalItem.IsGameModeItem = True Then If p.OriginalItem.IsGameModeItem = True Then
p.Item = P3D.Item.GetItemByID(p.OriginalItem.gmID.ToString) p.Item = P3D.Item.GetItemByID(p.OriginalItem.gmID)
Else Else
p.Item = P3D.Item.GetItemByID(p.OriginalItem.ID.ToString) p.Item = P3D.Item.GetItemByID(p.OriginalItem.ID.ToString)
End If End If
p.Item.AdditionalData = p.OriginalItem.AdditionalData p.Item.AdditionalData = p.OriginalItem.AdditionalData
Screen.TextBox.Show(Core.Player.Name & " received~" & p.OriginalItem.Name & "and gave it back to~" & p.GetDisplayName & "!") If ItemReturnScript <> "" Then
ItemReturnScript &= "*"
End If
ItemReturnScript &= Core.Player.Name & " received~" & p.OriginalItem.Name & "*and gave it back to~" & p.GetDisplayName & "!"
p.OriginalItem = Nothing
End If End If
Else Else
If Not p.OriginalItem Is Nothing Then If Not p.OriginalItem Is Nothing Then
If p.Item IsNot Nothing Then If p.Item Is Nothing Then
If p.OriginalItem.IsGameModeItem = True Then
p.Item = P3D.Item.GetItemByID(p.OriginalItem.gmID.ToString)
Else
p.Item = P3D.Item.GetItemByID(p.OriginalItem.ID.ToString)
End If
p.Item.AdditionalData = p.OriginalItem.AdditionalData
If ItemReturnScript <> "" Then
ItemReturnScript &= "*"
End If
ItemReturnScript &= Core.Player.Name & " found~" & p.OriginalItem.Name & "*and gave it back to~" & p.GetDisplayName & "!"
p.OriginalItem = Nothing
Else
If p.OriginalItem.IsGameModeItem = True Then If p.OriginalItem.IsGameModeItem = True Then
Core.Player.Inventory.AddItem(p.OriginalItem.gmID, 1) Core.Player.Inventory.AddItem(p.OriginalItem.gmID, 1)
Else Else
Core.Player.Inventory.AddItem(p.OriginalItem.ID.ToString, 1) Core.Player.Inventory.AddItem(p.OriginalItem.ID.ToString, 1)
End If End If
SoundManager.PlaySound("item_found", True) If ItemReturnScript <> "" Then
Screen.TextBox.Show(Core.Player.Name & " found~" & p.OriginalItem.Name & "!*" & Core.Player.Inventory.GetMessageReceive(p.OriginalItem, 1)) ItemReturnScript &= ")" & Environment.NewLine
p.OriginalItem = Nothing End If
Else ItemReturnScript &= "@Sound.Play(item_found)" & Environment.NewLine & "@Text.Show(" & Core.Player.Name & " found~" & p.OriginalItem.Name & "!*" & Core.Player.Inventory.GetMessageReceive(p.OriginalItem, 1)
p.Item = P3D.Item.GetItemByID(p.OriginalItem.ID.ToString)
p.Item.AdditionalData = p.OriginalItem.AdditionalData
Screen.TextBox.Show(Core.Player.Name & " found~" & p.OriginalItem.Name & "*and gave it back to~" & p.GetDisplayName & "!")
p.OriginalItem = Nothing p.OriginalItem = Nothing
End If End If
End If End If
End If End If
p.ResetTemp() p.ResetTemp()
Next Next
If ItemReturnScript <> "" Then
ItemReturnScript &= ")"
End If
Dim s As String =
"version=2" & Environment.NewLine &
ItemReturnScript & Environment.NewLine &
":end"
CType(SavedOverworld.OverworldScreen, OverworldScreen).ActionScript.StartScript(s, 2, False)
FieldEffects.OwnRageFistPower = 0 FieldEffects.OwnRageFistPower = 0
FieldEffects.OppRageFistPower = 0 FieldEffects.OppRageFistPower = 0

View File

@ -1074,10 +1074,6 @@ Public Class Pokemon
_originalNumber = -1 _originalNumber = -1
End If End If
If Not _originalItem Is Nothing Then
Me._originalItem = Nothing
End If
If OriginalType1 IsNot Nothing Then If OriginalType1 IsNot Nothing Then
Me.Type1.Type = OriginalType1.Type Me.Type1.Type = OriginalType1.Type
OriginalType1 = Nothing OriginalType1 = Nothing

View File

@ -297,6 +297,9 @@ nextIndex:
End Sub End Sub
Private Sub CatchPokemon() Private Sub CatchPokemon()
If Not p.OriginalItem Is Nothing Then
p.OriginalItem = Nothing
End If
p.ResetTemp() p.ResetTemp()
Dim s As String = "Gotcha!~" & p.GetName() & " was caught!" Dim s As String = "Gotcha!~" & p.GetName() & " was caught!"