P3D-Legacy/P3D/World/ActionScript/V2/ScriptCommands/DoPokemon.vb

850 lines
41 KiB
VB.net

Namespace ScriptVersion2
Partial Class ScriptCommander
' --------------------------------------------------------------------------------------------------------------------------
' Contains the @pokemon commands.
' --------------------------------------------------------------------------------------------------------------------------
Private Shared Sub DoPokemon(ByVal subClass As String)
Dim command As String = ScriptComparer.GetSubClassArgumentPair(subClass).Command
Dim argument As String = ScriptComparer.GetSubClassArgumentPair(subClass).Argument
Select Case command.ToLower()
Case "cry"
Dim PokemonID As Integer = int(argument)
Dim p As Pokemon = Pokemon.GetPokemonByID(PokemonID)
p.PlayCry()
Case "remove"
Dim index As Integer = int(argument)
If Core.Player.Pokemons.Count - 1 >= index Then
Logger.Debug("Remove Pokémon (" & Core.Player.Pokemons(index).GetDisplayName() & ") at index " & index)
Core.Player.Pokemons.RemoveAt(index)
End If
Case "add"
' PokemonID,Level,Method,Ball,Location,IsEgg,TrainerName,HeldItem
If argument.StartsWith("{") = True Or argument.Remove(0, 1).StartsWith(",{") = True Then
Dim insertIndex As Integer = Core.Player.Pokemons.Count
If argument.Remove(0, 1).StartsWith(",{") = True Then
insertIndex = int(argument.GetSplit(0))
End If
argument = argument.Remove(0, argument.IndexOf("{"))
Dim p As Pokemon = Pokemon.GetPokemonByData(argument.Replace("§", ",").Replace("«", "[").Replace("»", "]"))
Core.Player.Pokemons.Insert(insertIndex, p)
Dim pokedexType As Integer = 2
If p.IsShiny = True Then
pokedexType = 3
End If
If p.IsEgg() = False Then
Core.Player.PokedexData = Pokedex.ChangeEntry(Core.Player.PokedexData, p.Number, pokedexType)
End If
Else
Dim commas As Integer = 0
For Each c As Char In argument
If c = "," Then
commas += 1
End If
Next
Dim PokemonID As Integer = int(argument.GetSplit(0))
Dim Level As Integer = int(argument.GetSplit(1))
Dim catchMethod As String = "random reason"
If commas > 1 Then
catchMethod = argument.GetSplit(2)
End If
Dim catchBall As Item = Item.GetItemByID(1)
If commas > 2 Then
catchBall = Item.GetItemByID(int(argument.GetSplit(3)))
End If
Dim catchLocation As String = Screen.Level.MapName
If commas > 3 Then
catchLocation = argument.GetSplit(4)
End If
Dim isEgg As Boolean = False
If commas > 4 Then
isEgg = CBool(argument.GetSplit(5))
End If
Dim catchTrainer As String = Core.Player.Name
If commas > 5 And argument.GetSplit(6) <> "<playername>" Then
catchTrainer = argument.GetSplit(6)
End If
Dim heldItem As Integer = 0
If commas > 6 Then
heldItem = CInt(argument.GetSplit(7))
End If
Dim isShiny As Boolean = False
If commas > 7 Then
isShiny = CBool(argument.GetSplit(8))
End If
Dim Pokemon As Pokemon = Pokemon.GetPokemonByID(PokemonID)
Pokemon.Generate(Level, True)
Pokemon.CatchTrainerName = catchTrainer
Pokemon.OT = Core.Player.OT
Pokemon.CatchLocation = catchLocation
Pokemon.CatchBall = catchBall
Pokemon.CatchMethod = catchMethod
If isEgg = True Then
Pokemon.EggSteps = 1
Pokemon.SetCatchInfos(Item.GetItemByID(5), "obtained at")
Else
Pokemon.EggSteps = 0
End If
If heldItem <> 0 Then
Pokemon.Item = Item.GetItemByID(heldItem)
End If
Pokemon.IsShiny = isShiny
Core.Player.Pokemons.Add(Pokemon)
Dim pokedexType As Integer = 2
If Pokemon.IsShiny = True Then
pokedexType = 3
End If
If Pokemon.IsEgg() = False Then
Core.Player.PokedexData = Pokedex.ChangeEntry(Core.Player.PokedexData, Pokemon.Number, pokedexType)
End If
End If
Case "setadditionalvalue", "setadditionaldata"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim AdditionalValue As String = argument.GetSplit(1, ",")
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).AdditionalData = AdditionalValue
End If
Case "setnickname"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim NickName As String = argument.GetSplit(1, ",")
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).NickName = NickName
End If
Case "setstat"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim stat As String = argument.GetSplit(1, ",")
Dim statValue As Integer = int(argument.GetSplit(2, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
With Core.Player.Pokemons(Index)
Select Case stat.ToLower()
Case "maxhp", "hp"
.MaxHP = statValue
Case "chp"
.HP = statValue
Case "atk", "attack"
.Attack = statValue
Case "def", "defense"
.Defense = statValue
Case "spatk", "specialattack", "spattack"
.SpAttack = statValue
Case "spdef", "specialdefense", "spdefense"
.SpDefense = statValue
Case "speed"
.Speed = statValue
End Select
End With
End If
Case "clear"
Core.Player.Pokemons.Clear()
Case "removeattack"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim attackIndex As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Dim p As Pokemon = Core.Player.Pokemons(Index)
If p.Attacks.Count - 1 >= attackIndex Then
p.Attacks.RemoveAt(attackIndex)
End If
End If
Case "removeattackid"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim attackId As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Dim p As Pokemon = Core.Player.Pokemons(Index)
For a = 0 To (p.Attacks.Count - 1)
If p.Attacks(a).ID = attackId Then
p.Attacks.RemoveAt(a)
Exit For
End If
Next
End If
Case "clearattacks"
Dim Index As Integer = int(argument)
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).Attacks.Clear()
End If
Case "addattack"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim attackID As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Dim p As Pokemon = Core.Player.Pokemons(Index)
If p.Attacks.Count < 4 Then
Dim newAttack As BattleSystem.Attack = BattleSystem.Attack.GetAttackByID(attackID)
p.Attacks.Add(newAttack)
End If
End If
Case "setshiny"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim isShiny As Boolean = CBool(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).IsShiny = isShiny
End If
Case "setshinyall"
Dim isShiny As Boolean = CBool(argument.GetSplit(0, ","))
For i = 0 To Core.Player.Pokemons.Count - 1
Core.Player.Pokemons(i).IsShiny = isShiny
Next
Case "changelevel"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim newLevel As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).Level = newLevel
End If
Case "gainexp"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim exp As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).Experience += exp
End If
Case "setnature"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim Nature As Pokemon.Natures = Pokemon.ConvertIDToNature(int(argument.GetSplit(1, ",")))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).Nature = Nature
End If
Case "npctrade"
Dim splits() As String = argument.Split(CChar("|"))
Script.SaveNPCTrade = splits
Dim selScreen = New PartyScreen(Core.CurrentScreen, Item.GetItemByID(5), AddressOf Script.DoNPCTrade, "Choose Pokémon for trade", True) With {.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection, .CanExit = True}
AddHandler selScreen.SelectedObject, AddressOf Script.DoNPCTradeHandler
Core.SetScreen(selScreen)
CType(Core.CurrentScreen, PartyScreen).ExitedSub = AddressOf Script.ExitedNPCTrade
CanContinue = False
Case "hide"
Screen.Level.OverworldPokemon.Visible = False
Case "rename"
Dim index As String = argument
Dim renameOTcheck As Boolean = False
Dim canRename As Boolean = True
If argument.Contains(",") = True Then
index = argument.GetSplit(0)
renameOTcheck = CBool(argument.GetSplit(1))
End If
Dim PokemonIndex As Integer = 0
Select Case index.ToLower()
Case "last"
PokemonIndex = Core.Player.Pokemons.Count - 1
Case Else
PokemonIndex = int(index)
End Select
If renameOTcheck = True Then
If Core.Player.Pokemons(PokemonIndex).OT = Core.Player.OT Then
canRename = False
End If
End If
If Core.Player.Pokemons(PokemonIndex).IsEgg() = False Then
If canRename = True Then
Core.SetScreen(New NameObjectScreen(Core.CurrentScreen, Core.Player.Pokemons(PokemonIndex)))
Else
Screen.TextBox.Show("I cannot rename this~Pokémon because the~OT is different!*Did you receive it in~a trade or something?")
End If
Else
Screen.TextBox.Show("I cannot rename~this egg...")
End If
CanContinue = False
Case "read"
Dim p As Pokemon = Core.Player.Pokemons(int(argument))
Dim message As String = "Hm... I see your~" & p.GetDisplayName()
Dim addmessage As String = "~is very stable with~"
If p.EVAttack > p.EVDefense And p.EVAttack > p.EVHP And p.EVAttack > p.EVSpAttack And p.EVAttack > p.EVSpDefense And p.EVAttack > p.EVSpeed Then
addmessage &= "performing physical moves."
End If
If p.EVDefense > p.EVAttack And p.EVDefense > p.EVHP And p.EVDefense > p.EVSpAttack And p.EVDefense > p.EVSpDefense And p.EVDefense > p.EVSpeed Then
addmessage &= "taking hits."
End If
If p.EVHP > p.EVAttack And p.EVHP > p.EVDefense And p.EVHP > p.EVSpAttack And p.EVHP > p.EVSpDefense And p.EVHP > p.EVSpeed Then
addmessage &= "taking damage."
End If
If p.EVSpAttack > p.EVAttack And p.EVSpAttack > p.EVDefense And p.EVSpAttack > p.EVHP And p.EVSpAttack > p.EVSpDefense And p.EVSpAttack > p.EVSpeed Then
addmessage &= "performing complex strategies."
End If
If p.EVSpDefense > p.EVAttack And p.EVSpDefense > p.EVDefense And p.EVSpDefense > p.EVHP And p.EVSpDefense > p.EVSpAttack And p.EVSpDefense > p.EVSpeed Then
addmessage &= "breaking strategies."
End If
If p.EVSpeed > p.EVAttack And p.EVSpeed > p.EVDefense And p.EVSpeed > p.EVHP And p.EVSpeed > p.EVSpAttack And p.EVSpeed > p.EVSpDefense Then
addmessage &= "speeding the others out."
End If
If addmessage = "~is very stable with~" Then
addmessage = "~is very well balanced."
End If
message &= addmessage
message &= "*...~...*What that means?~I am not sure..."
Screen.TextBox.Show(message, {}, False, False)
CanContinue = False
Case "heal"
If argument = "" Then
Core.Player.HealParty()
Else
If argument.Contains(",") = True Then
Dim data() As String = argument.Split(CChar(","))
Dim Members As New List(Of Integer)
For Each member As String In data
Members.Add(int(member))
Next
Core.Player.HealParty(Members.ToArray())
Else
Core.Player.HealParty({int(argument)})
End If
End If
Case "setfriendship"
Dim index As Integer = int(argument.GetSplit(0))
Dim amount As Integer = int(argument.GetSplit(1))
Core.Player.Pokemons(index).Friendship = amount
Case "addfriendship"
Dim index As Integer = int(argument.GetSplit(0))
Dim amount As Integer = int(argument.GetSplit(1))
Core.Player.Pokemons(index).Friendship += amount
Case "select"
Dim canExit As Boolean = False
Dim canChooseEgg As Boolean = True
Dim canChooseFainted As Boolean = True
If argument <> "" Then
Dim data() As String = argument.Split(CChar(","))
If data.Length > 0 Then
canExit = CBool(data(0))
End If
If data.Length > 1 Then
canChooseFainted = CBool(data(1))
End If
If data.Length > 2 Then
canChooseEgg = CBool(data(2))
End If
End If
Dim selScreen = New PartyScreen(Core.CurrentScreen, Item.GetItemByID(5), Nothing, "Choose Pokémon", canExit, canChooseFainted, canChooseEgg) With {.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection, .CanExit = canExit}
AddHandler selScreen.SelectedObject, Nothing
Core.SetScreen(selScreen)
CanContinue = False
Case "selectmove"
Dim index As Integer = 0
Dim canHMMOve As Boolean = True
Dim canExit As Boolean = False
If argument.Contains(",") = True Then
Dim args As List(Of String) = argument.Split(CChar(",")).ToList()
For i = 0 To args.Count - 1
Dim arg As String = args(i)
Select Case i
Case 0
index = int(arg)
Case 1
canHMMOve = CBool(arg)
Case 2
canExit = CBool(arg)
End Select
Next
Else
index = int(argument)
End If
Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(index), canHMMOve, canExit, Nothing))
CanContinue = False
Case "calcstats"
Dim index As Integer = int(argument)
Core.Player.Pokemons(index).CalculateStats()
Case "learnattack"
Dim index As Integer = int(argument.GetSplit(0))
Dim attackID As Integer = int(argument.GetSplit(1))
Core.SetScreen(New LearnAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(index), BattleSystem.Attack.GetAttackByID(attackID)))
CanContinue = False
Case "setgender"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim Gender As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index And Gender >= 0 And Gender <= 2 Then
Core.Player.Pokemons(Index).Gender = CType(Gender, Pokemon.Genders)
End If
Case "setability"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim abilityID As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).Ability = Ability.GetAbilityByID(abilityID)
End If
Case "setev"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim ev As String = argument.GetSplit(1, ",")
Dim evValue As Integer = int(argument.GetSplit(2, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
With Core.Player.Pokemons(Index)
Select Case ev.ToLower()
Case "hp"
.EVHP = evValue
Case "atk", "attack"
.EVAttack = evValue
Case "def", "defense"
.EVDefense = evValue
Case "spatk", "specialattack", "spattack"
.EVSpAttack = evValue
Case "spdef", "specialdefense", "spdefense"
.EVSpDefense = evValue
Case "speed"
.EVSpeed = evValue
End Select
End With
End If
Case "setallevs"
Dim Index As Integer = int(argument.GetSplit(0, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
With Core.Player.Pokemons(Index)
.EVHP = Clamp(int(argument.GetSplit(1, ",")), 0, 252)
.EVAttack = Clamp(int(argument.GetSplit(2, ",")), 0, 252)
.EVDefense = Clamp(int(argument.GetSplit(3, ",")), 0, 252)
.EVSpAttack = Clamp(int(argument.GetSplit(4, ",")), 0, 252)
.EVSpDefense = Clamp(int(argument.GetSplit(5, ",")), 0, 252)
.EVSpeed = Clamp(int(argument.GetSplit(6, ",")), 0, 252)
End With
End If
Case "setiv"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim dv As String = argument.GetSplit(1, ",")
Dim dvValue As Integer = int(argument.GetSplit(2, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
With Core.Player.Pokemons(Index)
Select Case dv.ToLower()
Case "hp"
.IVHP = dvValue
Case "atk", "attack"
.IVAttack = dvValue
Case "def", "defense"
.IVDefense = dvValue
Case "spatk", "specialattack", "spattack"
.IVSpAttack = dvValue
Case "spdef", "specialdefense", "spdefense"
.IVSpDefense = dvValue
Case "speed"
.IVSpeed = dvValue
End Select
End With
End If
Case "setallivs"
Dim Index As Integer = int(argument.GetSplit(0, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
With Core.Player.Pokemons(Index)
.IVHP = Clamp(int(argument.GetSplit(1, ",")), 0, 31)
.IVAttack = Clamp(int(argument.GetSplit(2, ",")), 0, 31)
.IVDefense = Clamp(int(argument.GetSplit(3, ",")), 0, 31)
.IVSpAttack = Clamp(int(argument.GetSplit(4, ",")), 0, 31)
.IVSpDefense = Clamp(int(argument.GetSplit(5, ",")), 0, 31)
.IVSpeed = Clamp(int(argument.GetSplit(6, ",")), 0, 31)
End With
End If
Case "registerhalloffame"
Dim count As Integer = -1
Dim NewHallOfFameData As String = ""
If Core.Player.HallOfFameData <> "" Then
Dim data() As String = Core.Player.HallOfFameData.SplitAtNewline()
For Each l As String In data
Dim id As Integer = CInt(l.Remove(l.IndexOf(",")))
If id > count Then
count = id
End If
Next
For Each l As String In data
Dim id As Integer = CInt(l.Remove(l.IndexOf(",")))
If id > (count - 19) OrElse id = 0 Then 'last 20 entries saved, plus the first entry
NewHallOfFameData &= l & Environment.NewLine
End If
Next
End If
count += 1
Dim time As String = TimeHelpers.GetDisplayTime(TimeHelpers.GetCurrentPlayTime(), True)
Dim newData As String
If Core.Player.IsGameJoltSave Then
newData = count & ",(" & Core.Player.Name & "|" & time & "|" & GameJoltSave.Points & "|" & Core.Player.OT & "|" & Core.Player.Skin & ")"
Else
newData = count & ",(" & Core.Player.Name & "|" & time & "|" & Core.Player.Points & "|" & Core.Player.OT & "|" & Core.Player.Skin & ")"
End If
For Each p As Pokemon In Core.Player.Pokemons
If p.IsEgg() = False Then
Dim pData As String = p.GetHallOfFameData()
newData &= Environment.NewLine & count & "," & pData
End If
Next
NewHallOfFameData &= newData
Core.Player.HallOfFameData = NewHallOfFameData
Case "setot"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim OT As String = argument.GetSplit(1, ",")
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).OT = OT
End If
Case "setitem"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim newItem As Item = Item.GetItemByID(int(argument.GetSplit(1, ",")))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).Item = newItem
End If
Case "removeitem"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Core.Player.Pokemons(Index).Item = Nothing
Case "setitemdata"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim itemData As String = argument.GetSplit(1, ",")
If Core.Player.Pokemons.Count - 1 >= Index Then
If Not Core.Player.Pokemons(Index).Item Is Nothing Then
Core.Player.Pokemons(Index).Item.AdditionalData = itemData
End If
End If
Case "setcatchtrainer"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim Trainer As String = argument.GetSplit(1, ",")
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).CatchTrainerName = Trainer
End If
Case "setcatchball"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim catchBall As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).CatchBall = Item.GetItemByID(catchBall)
End If
Case "setcatchmethod"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim method As String = argument.GetSplit(1, ",")
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).CatchMethod = method
End If
Case "setcatchplace", "setcatchlocation"
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim place As String = argument.GetSplit(1, ",")
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).CatchLocation = place
End If
Case "newroaming"
' PokémonID,Level,regionID,startLevelFile,MusicLoop
Dim data() As String = argument.Split(CChar(","))
Dim p As Pokemon = Pokemon.GetPokemonByID(CInt(data(0)))
p.Generate(CInt(data(1)), True)
If Core.Player.RoamingPokemonData <> "" Then
Core.Player.RoamingPokemonData &= Environment.NewLine
End If
Core.Player.RoamingPokemonData &= data(0) & "|" & data(1) & "|" & data(2) & "|" & data(3) & "|" & data(4) & "|" & p.GetSaveData()
Case "evolve"
Dim args() As String = argument.Split(CChar(","))
Dim triggerStr As String = "level"
If args.Count > 1 Then
triggerStr = args(1)
End If
Dim trigger As EvolutionCondition.EvolutionTrigger = EvolutionCondition.EvolutionTrigger.LevelUp
Dim evolutionArg As String = ""
If args.Count > 2 Then
evolutionArg = args(2)
End If
Dim p As Pokemon = Core.Player.Pokemons(int(args(0)))
Select Case triggerStr
Case "level", "levelup", "level up", "level-up"
trigger = EvolutionCondition.EvolutionTrigger.LevelUp
Case "none"
trigger = EvolutionCondition.EvolutionTrigger.None
Case "itemuse", "item use", "item", "item-use"
trigger = EvolutionCondition.EvolutionTrigger.ItemUse
Case "trade", "trading"
trigger = EvolutionCondition.EvolutionTrigger.Trading
End Select
If p.CanEvolve(trigger, evolutionArg) = True Then
Core.SetScreen(New TransitionScreen(Core.CurrentScreen,
New EvolutionScreen(Core.CurrentScreen, {int(args(0))}.ToList(),
evolutionArg,
trigger,
False), Color.Black, False))
CanContinue = False
Else
Logger.Log(Logger.LogTypes.Message, "ScriptCommander.vb: The Pokémon is not able to evolve with the given conditions.")
End If
Case "reload"
Dim PokemonIndex As Integer = int(argument)
If Core.Player.Pokemons.Count - 1 >= PokemonIndex Then
Core.Player.Pokemons(PokemonIndex).ReloadDefinitions()
Core.Player.Pokemons(PokemonIndex).CalculateStats()
End If
Case "reloadall"
For i = 0 To Core.Player.Pokemons.Count - 1
Core.Player.Pokemons(i).ReloadDefinitions()
Core.Player.Pokemons(i).CalculateStats()
Next
''Just debug testing tools.
''Make sure X and Y megas hold the correct stone. Other megas may have no stone.
Case "megaevolve"
Dim p As Pokemon = Core.Player.Pokemons(int(argument))
If p.Item IsNot Nothing Then
Select Case p.Item.ID
Case 516, 529
p.AdditionalData = "mega_x"
Case 517, 530
p.AdditionalData = "mega_y"
Case Else
p.AdditionalData = "mega"
End Select
Else
p.AdditionalData = "mega"
End If
p.ReloadDefinitions()
p.CalculateStats()
p.LoadAltAbility()
Case "megaevolveall"
For i = 0 To Core.Player.Pokemons.Count - 1
Dim p As Pokemon = Core.Player.Pokemons(i)
If p.Item IsNot Nothing Then
Select Case p.Item.ID
Case 516, 529
p.AdditionalData = "mega_x"
Case 517, 530
p.AdditionalData = "mega_y"
Case Else
p.AdditionalData = "mega"
End Select
Else
p.AdditionalData = "mega"
End If
p.ReloadDefinitions()
p.CalculateStats()
p.LoadAltAbility()
Next
Case "clone"
Dim PokemonIndex As Integer = int(argument)
If Core.Player.Pokemons.Count - 1 >= PokemonIndex And Core.Player.Pokemons.Count < 6 Then
Core.Player.Pokemons.Add(Core.Player.Pokemons(PokemonIndex))
End If
Case "sendtostorage"
' @Pokemon.SendToStorage(PokeIndex, [BoxIndex])
Dim Data() As String = argument.Split(CChar(","))
If Data.Length = 1 Then
Dim PokemonIndex As Integer = int(Data(0))
If Core.Player.Pokemons.Count - 1 >= PokemonIndex Then
StorageSystemScreen.DepositPokemon(Core.Player.Pokemons(PokemonIndex))
Core.Player.Pokemons.RemoveAt(PokemonIndex)
End If
ElseIf Data.Length = 2 Then
Dim PokemonIndex As Integer = int(Data(0))
If Core.Player.Pokemons.Count - 1 >= PokemonIndex Then
StorageSystemScreen.DepositPokemon(Core.Player.Pokemons(PokemonIndex), int(Data(1)))
Core.Player.Pokemons.RemoveAt(PokemonIndex)
End If
End If
Case "addtostorage"
' @Pokemon.AddToStorage([BoxIndex], PokemonData)
' @Pokemon.AddToStorage(PokemonID, Level, [Method], [BallID], [Location], [isEgg], [trainerName], [heldItem], [isShiny])
If argument.StartsWith("{") = True Or argument.Remove(0, argument.IndexOf(",")).StartsWith(",{") = True Then
Dim insertIndex As Integer = -1
If argument.Remove(0, argument.IndexOf(",")).StartsWith(",{") = True Then
insertIndex = int(argument.GetSplit(0))
End If
argument = argument.Remove(0, argument.IndexOf("{"))
Dim p As Pokemon = Pokemon.GetPokemonByData(argument.Replace("§", ",").Replace("«", "[").Replace("»", "]"))
StorageSystemScreen.DepositPokemon(p, insertIndex)
Dim pokedexType As Integer = 2
If p.IsShiny = True Then
pokedexType = 3
End If
If p.IsEgg() = False Then
Core.Player.PokedexData = Pokedex.ChangeEntry(Core.Player.PokedexData, p.Number, pokedexType)
End If
Else
Dim commas As Integer = 0
For Each c As Char In argument
If c = "," Then
commas += 1
End If
Next
Dim PokemonID As Integer = int(argument.GetSplit(0))
Dim Level As Integer = int(argument.GetSplit(1))
Dim catchMethod As String = "random reason"
If commas > 1 Then
catchMethod = argument.GetSplit(2)
End If
Dim catchBall As Item = Item.GetItemByID(1)
If commas > 2 Then
catchBall = Item.GetItemByID(int(argument.GetSplit(3)))
End If
Dim catchLocation As String = Screen.Level.MapName
If commas > 3 Then
catchLocation = argument.GetSplit(4)
End If
Dim isEgg As Boolean = False
If commas > 4 Then
isEgg = CBool(argument.GetSplit(5))
End If
Dim catchTrainer As String = Core.Player.Name
If commas > 5 And argument.GetSplit(6) <> "<playername>" Then
catchTrainer = argument.GetSplit(6)
End If
Dim heldItem As Integer = 0
If commas > 6 Then
heldItem = CInt(argument.GetSplit(7))
End If
Dim isShiny As Boolean = False
If commas > 7 Then
isShiny = CBool(argument.GetSplit(8))
End If
Dim Pokemon As Pokemon = Pokemon.GetPokemonByID(PokemonID)
Pokemon.Generate(Level, True)
Pokemon.CatchTrainerName = catchTrainer
Pokemon.OT = Core.Player.OT
Pokemon.CatchLocation = catchLocation
Pokemon.CatchBall = catchBall
Pokemon.CatchMethod = catchMethod
If isEgg = True Then
Pokemon.EggSteps = 1
Pokemon.SetCatchInfos(Item.GetItemByID(5), "obtained at")
Else
Pokemon.EggSteps = 0
End If
If heldItem <> 0 Then
Pokemon.Item = Item.GetItemByID(heldItem)
End If
Pokemon.IsShiny = isShiny
StorageSystemScreen.DepositPokemon(Pokemon)
Dim pokedexType As Integer = 2
If Pokemon.IsShiny = True Then
pokedexType = 3
End If
If Pokemon.IsEgg() = False Then
Core.Player.PokedexData = Pokedex.ChangeEntry(Core.Player.PokedexData, Pokemon.Number, pokedexType)
End If
End If
Case "addsteps"
' @Pokemon.AddSteps(PokemonIndex, StepsToAdd)
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim StepsToAdd As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).EggSteps += StepsToAdd
End If
Case "setsteps"
' @Pokemon.SetSteps(PokemonIndex, StepsToSet)
Dim Index As Integer = int(argument.GetSplit(0, ","))
Dim StepsToSet As Integer = int(argument.GetSplit(1, ","))
If Core.Player.Pokemons.Count - 1 >= Index Then
Core.Player.Pokemons(Index).EggSteps = StepsToSet
End If
End Select
IsReady = True
End Sub
End Class
End Namespace