Reworked evolution system a bit. Now Held items are removed properly when a Trading + Held Item evolution condition occurs.
This commit is contained in:
parent
5bb1633633
commit
32a92eb7e3
|
@ -21,9 +21,9 @@ Public Class EvolutionCondition
|
|||
Public Structure Condition
|
||||
Dim ConditionType As ConditionTypes
|
||||
Dim Argument As String
|
||||
Dim Trigger As EvolutionTrigger
|
||||
End Structure
|
||||
|
||||
Public Trigger As EvolutionTrigger
|
||||
Public Evolution As Integer = 0
|
||||
Public Conditions As New List(Of Condition)
|
||||
|
||||
|
@ -31,7 +31,7 @@ Public Class EvolutionCondition
|
|||
Me.Evolution = evolution
|
||||
End Sub
|
||||
|
||||
Public Sub AddCondition(ByVal type As String, ByVal arg As String, ByVal trigger As String)
|
||||
Public Sub AddCondition(ByVal type As String, ByVal arg As String)
|
||||
Dim c As New Condition
|
||||
c.Argument = arg
|
||||
|
||||
|
@ -67,19 +67,20 @@ Public Class EvolutionCondition
|
|||
Case "weather"
|
||||
c.ConditionType = ConditionTypes.Weather
|
||||
End Select
|
||||
Me.Conditions.Add(c)
|
||||
End Sub
|
||||
|
||||
Public Sub SetTrigger(ByVal trigger As String)
|
||||
Select Case trigger.ToLower()
|
||||
Case "none", ""
|
||||
c.Trigger = EvolutionTrigger.None
|
||||
Me.Trigger = EvolutionTrigger.None
|
||||
Case "level", "levelup"
|
||||
c.Trigger = EvolutionTrigger.LevelUp
|
||||
Me.Trigger = EvolutionTrigger.LevelUp
|
||||
Case "trade", "trading"
|
||||
c.Trigger = EvolutionTrigger.Trading
|
||||
Me.Trigger = EvolutionTrigger.Trading
|
||||
Case "item", "itemuse"
|
||||
c.Trigger = EvolutionTrigger.ItemUse
|
||||
Me.Trigger = EvolutionTrigger.ItemUse
|
||||
End Select
|
||||
|
||||
Me.Conditions.Add(c)
|
||||
End Sub
|
||||
|
||||
Public ReadOnly Property Count() As Integer
|
||||
|
@ -102,24 +103,31 @@ Public Class EvolutionCondition
|
|||
''' <param name="trigger">The trigger that triggered the evolution.</param>
|
||||
''' <param name="arg">An argument (for example Item ID)</param>
|
||||
Public Shared Function EvolutionNumber(ByVal p As Pokemon, ByVal trigger As EvolutionTrigger, ByVal arg As String) As Integer
|
||||
Dim e As EvolutionCondition = GetEvolutionCondition(p, trigger, arg)
|
||||
If e Is Nothing Then
|
||||
Return 0
|
||||
Else
|
||||
Return e.Evolution
|
||||
End If
|
||||
End Function
|
||||
|
||||
Public Shared Function GetEvolutionCondition(ByVal p As Pokemon, ByVal trigger As EvolutionTrigger, ByVal arg As String) As EvolutionCondition
|
||||
If trigger = EvolutionTrigger.LevelUp Or trigger = EvolutionTrigger.Trading Then
|
||||
If Not p.Item Is Nothing Then
|
||||
If p.Item.ID = 112 Then
|
||||
Return 0
|
||||
Return Nothing
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
Dim possibleEvolutions As New List(Of Integer)
|
||||
Dim possibleEvolutions As New List(Of EvolutionCondition)
|
||||
|
||||
For Each e As EvolutionCondition In p.EvolutionConditions
|
||||
Dim canEvolve As Boolean = True
|
||||
|
||||
For Each c As Condition In e.Conditions
|
||||
If c.Trigger <> trigger Then
|
||||
canEvolve = False
|
||||
End If
|
||||
Next
|
||||
If trigger <> e.Trigger Then
|
||||
canEvolve = False
|
||||
End If
|
||||
|
||||
If canEvolve = True Then
|
||||
For Each c As Condition In e.Conditions
|
||||
|
@ -156,6 +164,8 @@ Public Class EvolutionCondition
|
|||
Else
|
||||
If p.Item.ID <> CInt(c.Argument) Then
|
||||
canEvolve = False
|
||||
'ElseIf c.Trigger = EvolutionTrigger.Trading Then
|
||||
'REMOVE HELD ITEM CHECK
|
||||
End If
|
||||
End If
|
||||
Case ConditionTypes.InParty
|
||||
|
@ -220,15 +230,16 @@ Public Class EvolutionCondition
|
|||
End If
|
||||
|
||||
If canEvolve = True Then
|
||||
possibleEvolutions.Add(e.Evolution)
|
||||
possibleEvolutions.Add(e)
|
||||
End If
|
||||
Next
|
||||
|
||||
'Assuming there is never more than one possible evolution for trading + held item
|
||||
If possibleEvolutions.Count > 0 Then
|
||||
Return possibleEvolutions(Core.Random.Next(0, possibleEvolutions.Count))
|
||||
End If
|
||||
|
||||
Return 0
|
||||
Return Nothing
|
||||
End Function
|
||||
|
||||
End Class
|
||||
|
|
|
@ -1447,15 +1447,17 @@ Public Class Pokemon
|
|||
Dim EvolutionExists As Boolean = False
|
||||
Dim e As EvolutionCondition = New EvolutionCondition
|
||||
|
||||
e.SetTrigger(Trigger)
|
||||
e.SetEvolution(Evolution)
|
||||
|
||||
For Each oldE As EvolutionCondition In Me.EvolutionConditions
|
||||
If Evolution = oldE.Evolution Then
|
||||
If e.Evolution = oldE.Evolution AndAlso e.Trigger = oldE.Trigger Then
|
||||
e = oldE
|
||||
EvolutionExists = True
|
||||
End If
|
||||
Next
|
||||
|
||||
e.SetEvolution(Evolution)
|
||||
e.AddCondition(Type, Argument, Trigger)
|
||||
e.AddCondition(Type, Argument)
|
||||
|
||||
If EvolutionExists = False Then
|
||||
EvolutionConditions.Add(e)
|
||||
|
|
|
@ -345,7 +345,7 @@
|
|||
Case "moon ball"
|
||||
For Each ev As EvolutionCondition In cp.EvolutionConditions
|
||||
For Each con As EvolutionCondition.Condition In ev.Conditions
|
||||
If con.ConditionType = EvolutionCondition.ConditionTypes.Item And con.Argument = "8" And con.Trigger = EvolutionCondition.EvolutionTrigger.ItemUse Then
|
||||
If con.ConditionType = EvolutionCondition.ConditionTypes.Item And con.Argument = "8" And ev.Trigger = EvolutionCondition.EvolutionTrigger.ItemUse Then
|
||||
BallRate = 4.0F
|
||||
Exit For
|
||||
End If
|
||||
|
|
|
@ -263,6 +263,21 @@
|
|||
End If
|
||||
End If
|
||||
|
||||
If Me.EvolutionTrigger = EvolutionCondition.EvolutionTrigger.Trading Then
|
||||
Dim econ As EvolutionCondition = EvolutionCondition.GetEvolutionCondition(currentPokemon, Me.EvolutionTrigger, Me.EvolutionArg)
|
||||
Dim removeItem As Boolean = False
|
||||
If econ.Trigger = EvolutionCondition.EvolutionTrigger.Trading Then
|
||||
For i = 0 To econ.Conditions.Count - 1
|
||||
If econ.Conditions(i).ConditionType = EvolutionCondition.ConditionTypes.HoldItem Then
|
||||
removeItem = True
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
If removeItem Then
|
||||
evolvedPokemon.Item = Nothing
|
||||
End If
|
||||
End If
|
||||
|
||||
Core.Player.AddPoints(10, "Evolved Pokémon.")
|
||||
|
||||
If ConnectScreen.Connected = True Then
|
||||
|
|
Loading…
Reference in New Issue