2016-09-07 18:50:38 +02:00
Public Class ScriptV1
Public Enum ScriptTypes As Integer
Move = 0
MoveAsync = 1
MovePlayer = 2
Turn = 3
TurnPlayer = 4
Warp = 5
WarpPlayer = 6
Heal = 7
ViewPokemonImage = 8
GiveItem = 9
RemoveItem = 10
GetBadge = 11
Pokemon = 12
NPC = 13
Player = 14
Text = 15
Options = 16
SelectCase = 17
Wait = 18
Camera = 19
Battle = 20
Script = 21
Trainer = 22
Achievement = 23
Action = 24
Music = 25
Sound = 26
Register = 27
Unregister = 28
MessageBulb = 29
Entity = 30
Environment = 31
Level = 33
SwitchWhen = 34
SwitchEndWhen = 35
SwitchIf = 36
SwitchThen = 37
SwitchElse = 38
SwitchEndIf = 39
SwitchEnd = 40
End Enum
Public ScriptType As ScriptTypes = ScriptTypes . Text
Public Value As String = " "
Public started As Boolean = False
Public IsReady As Boolean = False
Public CanContinue As Boolean = False
Public Sub Initialize ( ByVal Line As String )
If Line . StartsWith ( " @ " ) = True Then
Line = Line . Remove ( 0 , 1 )
Dim Script As String = Line
Dim Command As String = " "
If Line . Contains ( " : " ) = True Then
Script = Line . Remove ( Line . IndexOf ( " : " ) )
Command = Line . Remove ( 0 , Line . IndexOf ( " : " ) + 1 )
End If
Select Case Script
Case " Move "
If Command . StartsWith ( " Async, " ) = True Then
Command = Command . Remove ( 0 , 6 )
Me . ScriptType = ScriptTypes . MoveAsync
ElseIf Command . StartsWith ( " Player, " ) = True Then
Command = Command . Remove ( 0 , 7 )
Me . ScriptType = ScriptTypes . MovePlayer
Else
Me . ScriptType = ScriptTypes . Move
End If
Me . Value = Command
Case " Turn "
If Command . StartsWith ( " Player, " ) = True Then
Command = Command . Remove ( 0 , 7 )
Me . ScriptType = ScriptTypes . TurnPlayer
Else
Me . ScriptType = ScriptTypes . Turn
End If
Me . Value = Command
Case " Warp "
If Command . StartsWith ( " Player, " ) = True Then
Command = Command . Remove ( 0 , 7 )
Me . ScriptType = ScriptTypes . WarpPlayer
Else
Me . ScriptType = ScriptTypes . Warp
End If
Me . Value = Command
Case " Heal "
Me . ScriptType = ScriptTypes . Heal
Me . Value = Command
Case " ViewPokemonImage "
Me . ScriptType = ScriptTypes . ViewPokemonImage
Me . Value = Command
Case " GiveItem "
Me . ScriptType = ScriptTypes . GiveItem
Me . Value = Command
Case " RemoveItem "
Me . ScriptType = ScriptTypes . RemoveItem
Me . Value = Command
Case " GetBadge "
Me . ScriptType = ScriptTypes . GetBadge
Me . Value = Command
Case " Action "
Me . ScriptType = ScriptTypes . Action
Me . Value = Command
Case " Music "
Me . ScriptType = ScriptTypes . Music
Me . Value = Command
Case " Sound "
Me . ScriptType = ScriptTypes . Sound
Me . Value = Command
Case " Text "
Me . ScriptType = ScriptTypes . Text
Me . Value = Command
Case " Options "
Me . ScriptType = ScriptTypes . Options
Me . Value = Command
Case " Wait "
Me . ScriptType = ScriptTypes . Wait
Me . Value = Command
Case " Register "
Me . ScriptType = ScriptTypes . Register
Me . Value = Command
Case " Unregister "
Me . ScriptType = ScriptTypes . Unregister
Me . Value = Command
Case " NPC "
Me . ScriptType = ScriptTypes . NPC
Me . Value = Command
Case " Achievement "
Me . ScriptType = ScriptTypes . Achievement
Me . Value = Command
Case " Trainer "
Me . ScriptType = ScriptTypes . Trainer
Me . Value = Command
Case " Battle "
Me . ScriptType = ScriptTypes . Battle
Me . Value = Command
Case " Script "
Me . ScriptType = ScriptTypes . Script
Me . Value = Command
Case " Bulb " , " MessageBulb "
Me . ScriptType = ScriptTypes . MessageBulb
Me . Value = Command
Case " Camera "
Me . ScriptType = ScriptTypes . Camera
Me . Value = Command
Case " Pokemon "
Me . ScriptType = ScriptTypes . Pokemon
Me . Value = Command
Case " Player "
Me . ScriptType = ScriptTypes . Player
Me . Value = Command
Case " Entity "
Me . ScriptType = ScriptTypes . Entity
Me . Value = Command
Case " Environment "
Me . ScriptType = ScriptTypes . Environment
Me . Value = Command
Case " Level "
Me . ScriptType = ScriptTypes . Level
Me . Value = Command
End Select
ElseIf Line . StartsWith ( " : " ) = True Then
Line = Line . Remove ( 0 , 1 )
Dim Script As String = " "
Dim Command As String = " "
If Line . Contains ( " : " ) = True Then
Script = Line . Remove ( Line . IndexOf ( " : " ) )
Command = Line . Remove ( 0 , Line . IndexOf ( " : " ) + 1 )
Else
Script = Line
Command = " "
End If
Select Case Script
Case " if "
Me . ScriptType = ScriptTypes . SwitchIf
Me . Value = Command
Case " when "
Me . ScriptType = ScriptTypes . SwitchWhen
Me . Value = Command
Case " then "
Me . ScriptType = ScriptTypes . SwitchThen
Case " else "
Me . ScriptType = ScriptTypes . SwitchElse
Case " endif "
Me . ScriptType = ScriptTypes . SwitchEndIf
Case " endwhen "
Me . ScriptType = ScriptTypes . SwitchEndWhen
Case " end "
Me . ScriptType = ScriptTypes . SwitchEnd
Case " select "
Me . ScriptType = ScriptTypes . SelectCase
Me . Value = Command
End Select
End If
End Sub
Public Sub Update ( )
Select Case Me . ScriptType
Case ScriptTypes . Text
Me . DoText ( )
Case ScriptTypes . Wait
Me . DoWait ( )
Case ScriptTypes . Move
Me . Move ( )
Case ScriptTypes . MoveAsync
Me . MoveAsync ( )
Case ScriptTypes . MovePlayer
Me . MovePlayer ( )
Case ScriptTypes . Register
Me . Register ( )
Case ScriptTypes . Unregister
Me . Unregister ( )
Case ScriptTypes . Turn
Me . Turn ( )
Case ScriptTypes . TurnPlayer
Me . TurnPlayer ( )
Case ScriptTypes . Warp
Me . Warp ( )
Case ScriptTypes . WarpPlayer
Me . WarpPlayer ( )
Case ScriptTypes . Heal
Me . Heal ( )
Case ScriptTypes . Action
Me . DoAction ( )
Case ScriptTypes . Music
Me . DoMusic ( )
Case ScriptTypes . Sound
Me . DoSound ( )
Case ScriptTypes . ViewPokemonImage
Me . ViewPokemonImage ( )
Case ScriptTypes . NPC
Me . DoNPC ( )
Case ScriptTypes . Achievement
Me . GetAchievement ( )
Case ScriptTypes . GiveItem
Me . GiveItem ( )
Case ScriptTypes . RemoveItem
Me . RemoveItem ( )
Case ScriptTypes . Trainer
Me . DoTrainerBattle ( )
Case ScriptTypes . Battle
Me . DoBattle ( )
Case ScriptTypes . Script
Me . DoScript ( )
Case ScriptTypes . MessageBulb
Me . DoMessageBulb ( )
Case ScriptTypes . Camera
Me . DoCamera ( )
Case ScriptTypes . GetBadge
Me . GetBadge ( )
Case ScriptTypes . Pokemon
Me . DoPokemon ( )
Case ScriptTypes . Player
Me . DoPlayer ( )
Case ScriptTypes . Entity
Me . DoEntity ( )
Case ScriptTypes . Environment
Me . DoEnvironment ( )
Case ScriptTypes . Level
Me . DoLevel ( )
Case ScriptTypes . SwitchIf
Me . DoIf ( )
Case ScriptTypes . SwitchThen
Me . IsReady = True
Case ScriptTypes . SwitchElse
Dim oS As OverworldScreen = CType ( Core . CurrentScreen , OverworldScreen )
oS . ActionScript . ChooseIf ( True )
Me . IsReady = True
Case ScriptTypes . SwitchEndIf
Dim oS As OverworldScreen = CType ( Core . CurrentScreen , OverworldScreen )
oS . ActionScript . ChooseIf ( True )
Me . IsReady = True
Case ScriptTypes . SwitchWhen
If ActionScript . CSL ( ) . WaitingEndWhen ( ActionScript . CSL ( ) . WhenIndex ) = True Then
Dim oS As OverworldScreen = CType ( Core . CurrentScreen , OverworldScreen )
oS . ActionScript . Switch ( " " )
End If
Me . IsReady = True
Case ScriptTypes . SwitchEndWhen
Dim oS As OverworldScreen = CType ( Core . CurrentScreen , OverworldScreen )
oS . ActionScript . Switch ( " " )
Me . IsReady = True
Case ScriptTypes . SwitchEnd
Me . EndScript ( )
Case ScriptTypes . Options
Me . DoOptions ( )
Case ScriptTypes . SelectCase
Me . DoSelect ( )
End Select
End Sub
#Region "NewScripts"
Public Sub EndScript ( )
ActionScript . ScriptLevelIndex -= 1
If ActionScript . ScriptLevelIndex = - 1 Then
Dim oS As OverworldScreen = CType ( Core . CurrentScreen , OverworldScreen )
oS . ActionScript . Scripts . Clear ( )
oS . ActionScript . reDelay = 1 . 0F
Me . IsReady = True
Screen . TextBox . reDelay = 1 . 0F
ActionScript . TempInputDirection = - 1
End If
End Sub
Private Sub Register ( )
ActionScript . RegisterID ( Me . Value )
Me . IsReady = True
End Sub
Private Sub Unregister ( )
ActionScript . UnregisterID ( Me . Value )
Me . IsReady = True
End Sub
Private Sub GetAchievement ( )
Dim IndiciesData As String = Value . GetSplit ( 0 , " | " )
IndiciesData = IndiciesData . Remove ( 0 , 1 )
IndiciesData = IndiciesData . Remove ( IndiciesData . Length - 1 , 1 )
Dim StringIndicies ( ) As String = IndiciesData . Split ( CChar ( " , " ) )
Dim Indicies As New List ( Of Integer )
For i = 0 To StringIndicies . Count - 1
Indicies . Add ( CInt ( StringIndicies ( i ) ) )
Next
Dim aInput As String = Value . GetSplit ( 1 , " | " )
Me . IsReady = True
End Sub
Private Sub DoScript ( )
If Core . CurrentScreen . Identification = Screen . Identifications . OverworldScreen Then
CType ( Core . CurrentScreen , OverworldScreen ) . ActionScript . StartScript ( Value , 0 )
End If
End Sub
Private Sub DoCamera ( )
Dim c As OverworldCamera = CType ( Screen . Camera , OverworldCamera )
If c . ThirdPerson = True Then
Dim action As String = Value . GetSplit ( 0 )
Select Case action . ToLower ( )
Case " set "
Dim x As Single = CSng ( Value . GetSplit ( 1 ) . Replace ( " . " , GameController . DecSeparator ) )
Dim y As Single = CSng ( Value . GetSplit ( 2 ) . Replace ( " . " , GameController . DecSeparator ) )
Dim z As Single = CSng ( Value . GetSplit ( 3 ) . Replace ( " . " , GameController . DecSeparator ) )
Dim yaw As Single = CSng ( Value . GetSplit ( 4 ) . Replace ( " . " , GameController . DecSeparator ) )
Dim pitch As Single = CSng ( Value . GetSplit ( 5 ) . Replace ( " . " , GameController . DecSeparator ) )
c . ThirdPersonOffset = New Vector3 ( x , y , z )
c . Yaw = yaw
c . Pitch = pitch
Case " reset "
c . ThirdPersonOffset = New Vector3 ( 0 . 0F , 0 . 3F , 1 . 5F )
Case " yaw "
Dim yaw As Single = CSng ( Value . GetSplit ( 1 ) . Replace ( " , " , " . " ) . Replace ( " . " , GameController . DecSeparator ) )
c . Yaw = yaw
Case " pitch "
Dim pitch As Single = CSng ( Value . GetSplit ( 1 ) . Replace ( " , " , " . " ) . Replace ( " . " , GameController . DecSeparator ) )
c . Pitch = pitch
Case " position "
Dim x As Single = CSng ( Value . GetSplit ( 1 ) . Replace ( " . " , GameController . DecSeparator ) )
Dim y As Single = CSng ( Value . GetSplit ( 2 ) . Replace ( " . " , GameController . DecSeparator ) )
Dim z As Single = CSng ( Value . GetSplit ( 3 ) . Replace ( " . " , GameController . DecSeparator ) )
c . ThirdPersonOffset = New Vector3 ( x , y , z )
Case " x "
Dim x As Single = CSng ( Value . GetSplit ( 1 ) . Replace ( " . " , GameController . DecSeparator ) )
c . ThirdPersonOffset . X = x
Case " y "
Dim y As Single = CSng ( Value . GetSplit ( 1 ) . Replace ( " . " , GameController . DecSeparator ) )
c . ThirdPersonOffset . Y = y
Case " z "
Dim z As Single = CSng ( Value . GetSplit ( 1 ) . Replace ( " . " , GameController . DecSeparator ) )
c . ThirdPersonOffset . Z = z
End Select
c . UpdateThirdPersonCamera ( )
c . UpdateFrustum ( )
c . UpdateViewMatrix ( )
Screen . Level . UpdateEntities ( )
Screen . Level . Entities = ( From e In Screen . Level . Entities Order By e . CameraDistance Descending ) . ToList ( )
Screen . Level . UpdateEntities ( )
End If
Me . IsReady = True
End Sub
Private Sub DoText ( )
Screen . TextBox . reDelay = 0 . 0F
Screen . TextBox . Show ( Me . Value , { } )
Me . IsReady = True
End Sub
Private Sub DoSelect ( )
Dim condition As String = " "
Dim check As String = Value
If Value . Contains ( " ( " ) = True And Value . Contains ( " ) " ) = True Then
condition = Value . Remove ( 0 , Value . IndexOf ( " ( " ) + 1 )
condition = condition . Remove ( condition . LastIndexOf ( " ) " ) )
check = Value . Remove ( Value . IndexOf ( " ( " ) )
End If
Select Case check . ToLower ( )
Case " random "
check = CStr ( Core . Random . Next ( 1 , CInt ( condition ) + 1 ) )
End Select
Dim oS As OverworldScreen = CType ( Core . CurrentScreen , OverworldScreen )
ActionScript . CSL ( ) . WhenIndex += 1
oS . ActionScript . Switch ( check )
Me . IsReady = True
End Sub
Private Sub DoOptions ( )
Screen . TextBox . Showing = True
Dim Options ( ) As String = Me . Value . Split ( CChar ( " , " ) )
For i = 0 To Options . Count - 1
If i <= Options . Count - 1 Then
Dim flag = Options ( i )
Dim removeFlag As Boolean = False
Select Case flag
Case " [TEXT=FALSE] "
removeFlag = True
Screen . TextBox . Showing = False
End Select
If removeFlag = True Then
Dim l As List ( Of String ) = Options . ToList ( )
l . RemoveAt ( i )
Options = l . ToArray ( )
i -= 1
End If
End If
Next
Screen . ChooseBox . Show ( Options , 0 , True )
ActionScript . CSL ( ) . WhenIndex += 1
Me . IsReady = True
End Sub
Private Sub DoIf ( )
Dim condition As String = " "
Dim check As String = Value
If Value . Contains ( " ( " ) = True And Value . Contains ( " ) " ) = True Then
condition = Value . Remove ( 0 , Value . IndexOf ( " ( " ) + 1 )
condition = condition . Remove ( condition . LastIndexOf ( " ) " ) )
check = Value . Remove ( Value . IndexOf ( " ( " ) )
End If
Dim oS As OverworldScreen = CType ( Core . CurrentScreen , OverworldScreen )
Dim T As Boolean = False
Dim inverse As Boolean = False
If check . StartsWith ( " not " ) = True Then
check = check . Remove ( 0 , 4 )
inverse = True
End If
Select Case check . ToLower ( )
Case " register "
T = ActionScript . IsRegistered ( condition )
Case " daytime "
If CInt ( condition ) = World . GetTime ( ) Then
T = True
End If
Case " freeplaceinparty "
If Core . Player . Pokemons . Count < 6 Then
T = True
End If
Case " season "
If CInt ( condition ) = CInt ( World . CurrentSeason ) Then
T = True
End If
Case " nopokemon "
If Core . Player . Pokemons . Count = 0 Then
T = True
End If
Case " countpokemon "
If Core . Player . Pokemons . Count = CInt ( condition ) Then
T = True
End If
Case " day "
If CInt ( condition ) = My . Computer . Clock . LocalTime . DayOfWeek Then
T = True
End If
Case " aurora "
If condition = " 0 " Then
T = Not World . IsAurora
Else
T = World . IsAurora
End If
Case " random "
If Core . Random . Next ( 0 , CInt ( condition ) ) = 0 Then
T = True
End If
Case " position "
Dim PositionValues ( ) As String = condition . Split ( CChar ( " , " ) )
Dim checkPosition As New Vector3 ( CInt ( Screen . Camera . Position . X ) , CInt ( Screen . Camera . Position . Y ) , CInt ( Screen . Camera . Position . Z ) )
If PositionValues ( 0 ) . ToLower ( ) <> " player " Then
Dim targetID As Integer = CInt ( PositionValues ( 0 ) )
checkPosition = Screen . Level . GetNPC ( targetID ) . Position
End If
Dim p As New Vector3 ( CSng ( PositionValues ( 1 ) ) , CSng ( PositionValues ( 2 ) ) , CSng ( PositionValues ( 3 ) ) )
If p = checkPosition Then
T = True
Else
T = False
End If
Case " weather "
If CInt ( condition ) = Screen . Level . World . CurrentMapWeather Then
T = True
Else
T = False
End If
Case " regionweather "
If CInt ( condition ) = World . GetCurrentRegionWeather ( ) Then
T = True
Else
T = False
End If
Case " hasbadge "
If Core . Player . Badges . Contains ( CInt ( condition ) ) = True Then
T = True
Else
T = False
End If
Case " hasitem "
2023-05-29 15:33:57 +02:00
If Core . Player . Inventory . GetItemAmount ( condition ) > 0 Then
2016-09-07 18:50:38 +02:00
T = True
Else
T = False
End If
Case " haspokemon "
For Each p As Pokemon In Core . Player . Pokemons
If p . Number = CInt ( condition ) Then
T = True
Exit For
End If
Next
End Select
If inverse = True Then
T = Not T
End If
ActionScript . CSL ( ) . WaitingEndIf ( ActionScript . CSL ( ) . IfIndex + 1 ) = False
ActionScript . CSL ( ) . CanTriggerElse ( ActionScript . CSL ( ) . IfIndex + 1 ) = False
oS . ActionScript . ChooseIf ( T )
Me . IsReady = True
End Sub
Private Sub DoWait ( )
If CInt ( Me . Value ) > 0 Then
Me . Value = CStr ( CInt ( Me . Value ) - 1 )
End If
If CInt ( Me . Value ) <= 0 Then
Me . IsReady = True
End If
End Sub
Private Sub DoAction ( )
Select Case True
Case Me . Value . ToLower ( ) = " storagesystem "
Core . SetScreen ( New TransitionScreen ( Core . CurrentScreen , New StorageSystemScreen ( Core . CurrentScreen ) , Color . Black , False ) )
Case Me . Value . ToLower ( ) = " apricornkurt "
Core . SetScreen ( New ApricornScreen ( Core . CurrentScreen , " Kurt " ) )
Case Me . Value . ToLower ( ) . StartsWith ( " trade( " )
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Dim storeData As String = CStr ( Value . GetSplit ( 0 ) )
Dim canBuy As Boolean = CBool ( Value . GetSplit ( 1 ) )
Dim canSell As Boolean = CBool ( Value . GetSplit ( 2 ) )
Dim currencyIndicator As String = " P "
If Value . CountSplits ( ) > 3 Then
currencyIndicator = Value . GetSplit ( 3 )
End If
2023-06-08 16:14:48 +02:00
Core . SetScreen ( New TransitionScreen ( Core . CurrentScreen , New TradeScreen ( Core . CurrentScreen , storeData , canBuy , canSell , currencyIndicator , " " ) , Color . Black , False ) )
2016-09-07 18:50:38 +02:00
Case Me . Value . ToLower ( ) . StartsWith ( " getpokemon( " )
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Dim commas As Integer = 0
For Each c As Char In Value
If c = " , " Then
commas += 1
End If
Next
Dim PokemonID As Integer = CInt ( Me . Value . GetSplit ( 0 ) )
Dim Level As Integer = CInt ( Me . Value . GetSplit ( 1 ) )
Dim catchMethod As String = " random reason "
If commas > 1 Then
catchMethod = Me . Value . GetSplit ( 2 )
End If
2023-05-29 15:33:57 +02:00
Dim catchBall As Item = Item . GetItemByID ( 1 . ToString )
2016-09-07 18:50:38 +02:00
If commas > 2 Then
2023-05-29 15:33:57 +02:00
catchBall = Item . GetItemByID ( Me . Value . GetSplit ( 3 ) )
2016-09-07 18:50:38 +02:00
End If
Dim catchLocation As String = Screen . Level . MapName
If commas > 3 Then
catchLocation = Me . Value . GetSplit ( 4 )
End If
Dim isEgg As Boolean = False
If commas > 4 Then
isEgg = CBool ( Me . Value . GetSplit ( 5 ) )
End If
Dim catchTrainer As String = Core . Player . Name
If commas > 5 And Me . Value . GetSplit ( 6 ) <> " <playername> " Then
catchTrainer = Me . Value . GetSplit ( 6 )
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
2023-05-29 15:33:57 +02:00
Pokemon . SetCatchInfos ( Item . GetItemByID ( 5 . ToString ) , " obtained at " )
2016-09-07 18:50:38 +02:00
Else
Pokemon . EggSteps = 0
End If
Core . Player . Pokemons . Add ( Pokemon )
Dim pokedexType As Integer = 2
If Pokemon . IsShiny = True Then
pokedexType = 3
End If
2023-07-12 20:09:06 +02:00
Dim dexID As String = PokemonForms . GetPokemonDataFileName ( Pokemon . Number , Pokemon . AdditionalData )
If dexID . Contains ( " _ " ) = False Then
If PokemonForms . GetAdditionalDataForms ( Pokemon . Number ) IsNot Nothing AndAlso PokemonForms . GetAdditionalDataForms ( Pokemon . Number ) . Contains ( Pokemon . AdditionalData ) Then
dexID = Pokemon . Number & " ; " & Pokemon . AdditionalData
Else
dexID = Pokemon . Number . ToString
End If
End If
Core . Player . PokedexData = Pokedex . ChangeEntry ( Core . Player . PokedexData , dexID , pokedexType )
2016-09-07 18:50:38 +02:00
Case Me . Value . ToLower ( ) . StartsWith ( " townmap, " )
Dim startRegion As String = Me . Value . GetSplit ( 1 )
Core . SetScreen ( New TransitionScreen ( Core . CurrentScreen , New MapScreen ( Core . CurrentScreen , startRegion , { " view " } ) , Color . Black , False ) )
Case Me . Value . ToLower ( ) = " opendonation "
Core . SetScreen ( New DonationScreen ( Core . CurrentScreen ) )
Case Me . Value . ToLower ( ) = " receivepokedex "
2018-01-07 18:01:32 +01:00
Core . Player . HasPokedex = True
2016-09-07 18:50:38 +02:00
For Each p As Pokemon In Core . Player . Pokemons
Dim i As Integer = 2
If p . IsShiny = True Then
i = 3
End If
2023-07-21 16:30:12 +02:00
Dim dexID As String = PokemonForms . GetPokemonDataFileName ( p . Number , p . AdditionalData , True )
2023-07-12 20:09:06 +02:00
Core . Player . PokedexData = Pokedex . ChangeEntry ( Core . Player . PokedexData , dexID , i )
2016-09-07 18:50:38 +02:00
Next
Case Me . Value . ToLower ( ) = " receivepokegear "
2018-01-07 18:01:32 +01:00
Core . Player . HasPokegear = True
2016-09-07 18:50:38 +02:00
Case Me . Value . ToLower ( ) . StartsWith ( " renamepokemon( " ) = True
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Dim index As String = Me . Value
Dim renameOTcheck As Boolean = False
Dim canRename As Boolean = True
If Me . Value . Contains ( " , " ) = True Then
index = Me . Value . GetSplit ( 0 )
renameOTcheck = CBool ( Me . Value . GetSplit ( 1 ) )
End If
Dim PokemonIndex As Integer = 0
2018-01-07 18:01:32 +01:00
If StringHelper . IsNumeric ( index ) Then
2016-09-07 18:50:38 +02:00
PokemonIndex = CInt ( index )
Else
If index . ToLower ( ) = " last " Then
PokemonIndex = Core . Player . Pokemons . Count - 1
End If
End If
If renameOTcheck = True Then
If Core . Player . Pokemons ( PokemonIndex ) . OT <> Core . Player . OT Then
canRename = False
End If
End If
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? " , { } , True , False )
End If
Case Me . Value . ToLower ( ) = " renamerival "
Core . SetScreen ( New NameObjectScreen ( Core . CurrentScreen , TextureManager . GetTexture ( " NPC\4 " , New Rectangle ( 0 , 64 , 32 , 32 ) ) , False , False , " rival " , " Silver " , AddressOf Script . NameRival ) )
Case Me . Value . ToLower ( ) . StartsWith ( " playcry( " )
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Dim p As Pokemon = Pokemon . GetPokemonByID ( CInt ( Value ) )
p . PlayCry ( )
Case Me . Value . ToLower ( ) . StartsWith ( " showOpokemon( " )
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Screen . Level . OverworldPokemon . Visible = CBool ( Value )
Case Me . Value . ToLower ( ) = " togglethirdperson "
If Core . CurrentScreen . Identification = Screen . Identifications . OverworldScreen Then
Dim c As OverworldCamera = CType ( Screen . Camera , OverworldCamera )
c . SetThirdPerson ( Not c . ThirdPerson , False )
c . UpdateFrustum ( )
c . UpdateViewMatrix ( )
Screen . Level . UpdateEntities ( )
Screen . Level . Entities = ( From e In Screen . Level . Entities Order By e . CameraDistance Descending ) . ToList ( )
Screen . Level . UpdateEntities ( )
End If
Case Me . Value . ToLower ( ) = " activatethirdperson "
If Core . CurrentScreen . Identification = Screen . Identifications . OverworldScreen Then
Dim c As OverworldCamera = CType ( Screen . Camera , OverworldCamera )
c . SetThirdPerson ( True , False )
c . UpdateFrustum ( )
c . UpdateViewMatrix ( )
Screen . Level . UpdateEntities ( )
Screen . Level . Entities = ( From e In Screen . Level . Entities Order By e . CameraDistance Descending ) . ToList ( )
Screen . Level . UpdateEntities ( )
End If
Case Me . Value . ToLower ( ) = " deactivatethirdperson "
If Core . CurrentScreen . Identification = Screen . Identifications . OverworldScreen Then
Dim c As OverworldCamera = CType ( Screen . Camera , OverworldCamera )
c . SetThirdPerson ( False , False )
c . UpdateFrustum ( )
c . UpdateViewMatrix ( )
Screen . Level . UpdateEntities ( )
Screen . Level . Entities = ( From e In Screen . Level . Entities Order By e . CameraDistance Descending ) . ToList ( )
Screen . Level . UpdateEntities ( )
End If
Case Me . Value . ToLower ( ) . StartsWith ( " setfont( " )
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Select Case Me . Value . ToLower ( )
Case " standard "
Screen . TextBox . TextFont = FontManager . GetFontContainer ( " textfont " )
Case " unown "
Screen . TextBox . TextFont = FontManager . GetFontContainer ( " unown " )
End Select
Case Me . Value . ToLower ( ) . StartsWith ( " setrenderdistance( " )
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Select Case Me . Value . ToLower ( )
Case " 0 " , " tiny "
Core . GameOptions . RenderDistance = 0
Case " 1 " , " small "
Core . GameOptions . RenderDistance = 1
Case " 2 " , " normal "
Core . GameOptions . RenderDistance = 2
Case " 3 " , " far "
Core . GameOptions . RenderDistance = 3
Case " 4 " , " extreme "
Core . GameOptions . RenderDistance = 4
End Select
Screen . Level . World = New World ( Screen . Level . EnvironmentType , Screen . Level . WeatherType )
Case Me . Value . ToLower ( ) . StartsWith ( " wearskin( " )
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
With Screen . Level . OwnPlayer
Dim TextureID As String = Value
Logger . Debug ( TextureID )
2018-02-21 16:34:06 +01:00
. Texture = P3D . TextureManager . GetTexture ( " Textures\NPC\ " & TextureID )
2016-09-07 18:50:38 +02:00
. SkinName = TextureID
. UpdateEntity ( )
End With
Case Me . Value . ToLower ( ) = " toggledarkness "
Screen . Level . IsDark = Not Screen . Level . IsDark
Case Me . Value . ToLower ( ) . StartsWith ( " globalhub " ) , Me . Value . ToLower ( ) . StartsWith ( " friendhub " )
2018-01-07 18:01:32 +01:00
If GameJolt . API . LoggedIn = True And Core . Player . IsGameJoltSave = True Or GameController . IS_DEBUG_ACTIVE = True Then
2016-09-07 18:50:38 +02:00
If GameJolt . LogInScreen . UserBanned ( Core . GameJoltSave . GameJoltID ) = False Then
Core . SetScreen ( New TransitionScreen ( Core . CurrentScreen , New GameJolt . GTSMainScreen ( Core . CurrentScreen ) , Color . Black , False ) )
Else
Screen . TextBox . Show ( " This GameJolt account~( " & Core . GameJoltSave . GameJoltID & " ) is banned~from the GTS! " , { } , False , False , Color . Red )
End If
Else
Screen . TextBox . Show ( " You are not using~your GameJolt profile.*Please connect to GameJolt~and switch to the GameJolt~profile to enable the GTS.*You can do this by going~back to the main menu~and choosing "" Play online "" . " , { } , False , False , Color . Red )
End If
Case Me . Value . ToLower ( ) . StartsWith ( " gamejoltlogin " )
Core . SetScreen ( New GameJolt . LogInScreen ( Core . CurrentScreen ) )
Case Me . Value . ToLower ( ) . StartsWith ( " readpokemon( " ) = True
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
Dim p As Pokemon = Core . Player . Pokemons ( CInt ( Value ) )
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 )
Case Me . Value . ToLower . StartsWith ( " achieveemblem( " ) = True
Me . Value = Me . Value . Remove ( 0 , Me . Value . IndexOf ( " ( " ) + 1 )
Me . Value = Me . Value . Remove ( Me . Value . Length - 1 , 1 )
GameJolt . Emblem . AchieveEmblem ( Me . Value )
End Select
Me . IsReady = True
End Sub
Private Sub DoMusic ( )
2018-02-24 01:20:42 +01:00
MusicManager . Play ( Me . Value , True )
2016-09-07 18:50:38 +02:00
If Core . CurrentScreen . Identification = Screen . Identifications . OverworldScreen Then
Screen . Level . MusicLoop = Me . Value
End If
Me . IsReady = True
End Sub
Private Sub DoSound ( )
Dim sound As String = Me . Value
Dim stopMusic As Boolean = False
If Me . Value . Contains ( " , " ) = True Then
sound = Me . Value . GetSplit ( 0 )
stopMusic = CBool ( Me . Value . GetSplit ( 1 ) )
End If
SoundManager . PlaySound ( sound , stopMusic )
Me . IsReady = True
End Sub
Private Sub DoMessageBulb ( )
If Me . started = False Then
Me . started = True
Dim Data ( ) As String = Me . Value . Split ( CChar ( " | " ) )
Dim ID As Integer = CInt ( Data ( 0 ) )
Dim Position As New Vector3 ( CSng ( Data ( 1 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( Data ( 2 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( Data ( 3 ) . Replace ( " . " , GameController . DecSeparator ) ) )
2022-06-14 18:12:29 +02:00
Dim noType As MessageBulb . NotificationTypes = MessageBulb . NotificationTypes . Waiting
2016-09-07 18:50:38 +02:00
Select Case ID
Case 0
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Waiting
2016-09-07 18:50:38 +02:00
Case 1
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Exclamation
2016-09-07 18:50:38 +02:00
Case 2
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Shouting
2016-09-07 18:50:38 +02:00
Case 3
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Question
2016-09-07 18:50:38 +02:00
Case 4
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Note
2016-09-07 18:50:38 +02:00
Case 5
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Heart
2016-09-07 18:50:38 +02:00
Case 6
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Unhappy
2016-09-07 18:50:38 +02:00
Case 7
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Happy
2016-09-07 18:50:38 +02:00
Case 8
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Friendly
2016-09-07 18:50:38 +02:00
Case 9
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Poisoned
2016-09-07 18:50:38 +02:00
Case Else
2022-06-14 18:12:29 +02:00
noType = MessageBulb . NotificationTypes . Exclamation
2016-09-07 18:50:38 +02:00
End Select
Screen . Level . Entities . Add ( New MessageBulb ( Position , noType ) )
End If
Dim contains As Boolean = False
Screen . Level . Entities = ( From e In Screen . Level . Entities Order By e . CameraDistance Descending ) . ToList ( )
For Each e As Entity In Screen . Level . Entities
If e . EntityID = " MessageBulb " Then
e . Update ( )
contains = True
End If
Next
If contains = False Then
Me . IsReady = True
Else
For i = 0 To Screen . Level . Entities . Count - 1
If i <= Screen . Level . Entities . Count - 1 Then
If Screen . Level . Entities ( i ) . CanBeRemoved = True Then
Screen . Level . Entities . RemoveAt ( i )
i -= 1
End If
Else
Exit For
End If
Next
End If
End Sub
Private Sub DoBattle ( )
Dim ActionValue As String = Value . GetSplit ( 0 )
Select Case ActionValue . ToLower ( )
Case " trainer "
Dim ID As String = Value . GetSplit ( 1 )
Dim t As New Trainer ( ID )
If Value . CountSeperators ( " , " ) > 1 Then
For Each v As String In Value . Split ( CChar ( " , " ) )
Select Case v
Case " generate_pokemon_tower "
Dim level As Integer = 0
For Each p As Pokemon In Core . Player . Pokemons
If p . Level > level Then
level = p . Level
End If
Next
While CStr ( level ) ( CStr ( level ) . Length - 1 ) <> " 0 "
level += 1
End While
End Select
Next
End If
Dim b As New BattleSystem . BattleScreen ( t , Core . CurrentScreen , 0 )
Core . SetScreen ( New BattleIntroScreen ( Core . CurrentScreen , b , t , t . GetIniMusicName ( ) , t . IntroType ) )
Case " wild "
Dim ID As Integer = CInt ( Value . GetSplit ( 1 ) )
Dim Level As Integer = CInt ( Value . GetSplit ( 2 ) )
Dim p As Pokemon = Pokemon . GetPokemonByID ( ID )
p . Generate ( Level , True )
2023-07-21 16:30:12 +02:00
Dim dexID As String = PokemonForms . GetPokemonDataFileName ( p . Number , p . AdditionalData , True )
2023-07-12 20:09:06 +02:00
Core . Player . PokedexData = Pokedex . ChangeEntry ( Core . Player . PokedexData , dexID , 1 )
2016-09-07 18:50:38 +02:00
Dim b As New BattleSystem . BattleScreen ( p , Core . CurrentScreen , 0 )
Core . SetScreen ( New BattleIntroScreen ( Core . CurrentScreen , b , Core . Random . Next ( 0 , 10 ) ) )
End Select
Me . IsReady = True
End Sub
Private Sub DoTrainerBattle ( )
Dim t As New Trainer ( Value )
If t . IsBeaten ( ) = False Then
If started = False Then
CType ( Core . CurrentScreen , OverworldScreen ) . TrainerEncountered = True
2018-02-24 01:20:42 +01:00
MusicManager . Play ( t . GetInSightMusic ( ) , True )
2016-09-07 18:50:38 +02:00
If t . IntroMessage <> " " Then
Screen . TextBox . reDelay = 0 . 0F
Screen . TextBox . Show ( t . IntroMessage , { } )
End If
started = True
End If
If Screen . TextBox . Showing = False Then
CType ( Core . CurrentScreen , OverworldScreen ) . TrainerEncountered = False
Dim b As New BattleSystem . BattleScreen ( New Trainer ( Value ) , Core . CurrentScreen , 0 )
Core . SetScreen ( New BattleIntroScreen ( Core . CurrentScreen , b , t , t . GetIniMusicName ( ) , t . IntroType ) )
End If
Else
Screen . TextBox . reDelay = 0 . 0F
Screen . TextBox . Show ( t . DefeatMessage , { } )
Me . IsReady = True
End If
If Screen . TextBox . Showing = False Then
Me . IsReady = True
End If
End Sub
Private Sub DoPokemon ( )
Dim command As String = Value
Dim argument As String = " "
If command . Contains ( " ( " ) = True And command . EndsWith ( " ) " ) = True Then
argument = command . Remove ( 0 , command . IndexOf ( " ( " ) + 1 )
argument = argument . Remove ( argument . Length - 1 , 1 )
command = command . Remove ( command . IndexOf ( " ( " ) )
End If
Select Case command . ToLower ( )
Case " cry "
Dim PokemonID As Integer = CInt ( argument )
Dim p As Pokemon = Pokemon . GetPokemonByID ( PokemonID )
p . PlayCry ( )
Case " remove "
Dim index As Integer = CInt ( 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 "
Dim commas As Integer = 0
For Each c As Char In argument
If c = " , " Then
commas += 1
End If
Next
Dim PokemonID As Integer = CInt ( argument . GetSplit ( 0 ) )
Dim Level As Integer = CInt ( argument . GetSplit ( 1 ) )
Dim catchMethod As String = " random reason "
If commas > 1 Then
catchMethod = argument . GetSplit ( 2 )
End If
2023-05-29 15:33:57 +02:00
Dim catchBall As Item = Item . GetItemByID ( 1 . ToString )
2016-09-07 18:50:38 +02:00
If commas > 2 Then
2023-05-29 15:33:57 +02:00
catchBall = Item . GetItemByID ( argument . GetSplit ( 3 ) )
2016-09-07 18:50:38 +02:00
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 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
2023-05-29 15:33:57 +02:00
Pokemon . SetCatchInfos ( Item . GetItemByID ( 5 . ToString ) , " obtained at " )
2016-09-07 18:50:38 +02:00
Else
Pokemon . EggSteps = 0
End If
Core . Player . Pokemons . Add ( Pokemon )
Dim pokedexType As Integer = 2
If Pokemon . IsShiny = True Then
pokedexType = 3
End If
2023-07-12 20:09:06 +02:00
Dim dexID As String = PokemonForms . GetPokemonDataFileName ( Pokemon . Number , Pokemon . AdditionalData )
If dexID . Contains ( " _ " ) = False Then
If PokemonForms . GetAdditionalDataForms ( Pokemon . Number ) IsNot Nothing AndAlso PokemonForms . GetAdditionalDataForms ( Pokemon . Number ) . Contains ( Pokemon . AdditionalData ) Then
dexID = Pokemon . Number & " ; " & Pokemon . AdditionalData
Else
dexID = Pokemon . Number . ToString
End If
End If
Core . Player . PokedexData = Pokedex . ChangeEntry ( Core . Player . PokedexData , dexID , pokedexType )
2016-09-07 18:50:38 +02:00
Case " setadditionalvalue "
Dim Index As Integer = CInt ( 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 = CInt ( 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 = CInt ( argument . GetSplit ( 0 , " , " ) )
Dim stat As String = argument . GetSplit ( 1 , " , " )
Dim statValue As Integer = CInt ( 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 = CInt ( argument . GetSplit ( 0 , " , " ) )
Dim attackIndex As Integer = CInt ( 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 " clearattacks "
Dim Index As Integer = CInt ( argument )
If Core . Player . Pokemons . Count - 1 >= Index Then
Core . Player . Pokemons ( Index ) . Attacks . Clear ( )
End If
Case " addattack "
Dim Index As Integer = CInt ( argument . GetSplit ( 0 , " , " ) )
Dim attackID As Integer = CInt ( 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 " removeattack "
Dim Index As Integer = CInt ( argument . GetSplit ( 0 , " , " ) )
Dim attackIndex As Integer = CInt ( 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 " setshiny "
Dim Index As Integer = CInt ( 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 " changelevel "
Dim Index As Integer = CInt ( argument . GetSplit ( 0 , " , " ) )
Dim newLevel As Integer = CInt ( 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 = CInt ( argument . GetSplit ( 0 , " , " ) )
Dim exp As Integer = CInt ( 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 = CInt ( argument . GetSplit ( 0 , " , " ) )
Dim Nature As Pokemon . Natures = Pokemon . ConvertIDToNature ( CInt ( 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
2023-05-29 15:33:57 +02:00
Core . SetScreen ( New PartyScreen ( Core . CurrentScreen , Item . GetItemByID ( 5 . ToString ) , AddressOf Script . DoNPCTrade , " Choose trade Pokémon " , True ) )
2017-08-11 07:02:26 +02:00
CType ( Core . CurrentScreen , PartyScreen ) . ExitedSub = AddressOf Script . ExitedNPCTrade
2016-09-07 18:50:38 +02:00
Case " hide "
Screen . Level . OverworldPokemon . Visible = False
End Select
Me . IsReady = True
End Sub
Private Sub DoNPC ( )
Dim command As String = Value
Dim argument As String = " "
If command . Contains ( " ( " ) = True And command . EndsWith ( " ) " ) = True Then
argument = command . Remove ( 0 , command . IndexOf ( " ( " ) + 1 )
argument = argument . Remove ( argument . Length - 1 , 1 )
command = command . Remove ( command . IndexOf ( " ( " ) )
End If
Select Case command . ToLower ( )
Case " remove "
Dim targetNPC As Entity = Screen . Level . GetNPC ( CInt ( argument ) )
Screen . Level . Entities . Remove ( targetNPC )
Me . IsReady = True
Case " position " , " warp "
Dim targetNPC As NPC = Screen . Level . GetNPC ( CInt ( argument . GetSplit ( 0 ) ) )
Dim PositionData ( ) As String = argument . Split ( CChar ( " , " ) )
targetNPC . Position = New Vector3 ( CSng ( PositionData ( 1 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( PositionData ( 2 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( PositionData ( 3 ) . Replace ( " . " , GameController . DecSeparator ) ) )
targetNPC . CreatedWorld = False
Me . IsReady = True
Case " register "
NPC . AddNPCData ( argument )
Me . IsReady = True
Case " unregister "
NPC . RemoveNPCData ( argument )
Me . IsReady = True
Case " wearskin "
Dim textureID As String = argument . GetSplit ( 1 )
Dim targetNPC As NPC = Screen . Level . GetNPC ( CInt ( argument . GetSplit ( 0 ) ) )
targetNPC . SetupSprite ( textureID , " " , False )
Me . IsReady = True
Case " move "
Dim targetNPC As NPC = Screen . Level . GetNPC ( CInt ( argument . GetSplit ( 0 ) ) )
Dim steps As Integer = CInt ( argument . GetSplit ( 1 ) )
Screen . Level . UpdateEntities ( )
If started = False Then
targetNPC . Moved += steps
started = True
Else
If targetNPC . Moved <= 0 . 0F Then
Me . IsReady = True
End If
End If
Case " turn "
Dim targetNPC As NPC = Screen . Level . GetNPC ( CInt ( argument . GetSplit ( 0 ) ) )
targetNPC . faceRotation = CInt ( argument . GetSplit ( 1 ) )
targetNPC . Update ( )
targetNPC . UpdateEntity ( )
Me . IsReady = True
Case Else
Me . IsReady = True
End Select
End Sub
Private Sub DoPlayer ( )
Dim command As String = Value
Dim argument As String = " "
If command . Contains ( " ( " ) = True And command . EndsWith ( " ) " ) = True Then
argument = command . Remove ( 0 , command . IndexOf ( " ( " ) + 1 )
argument = argument . Remove ( argument . Length - 1 , 1 )
command = command . Remove ( command . IndexOf ( " ( " ) )
End If
Select Case command . ToLower ( )
Case " wearskin "
With Screen . Level . OwnPlayer
Dim TextureID As String = argument
. SetTexture ( TextureID , False )
. UpdateEntity ( )
End With
Me . IsReady = True
Case " move "
If Me . started = False Then
Screen . Camera . Move ( CSng ( argument ) )
started = True
Screen . Level . OverworldPokemon . Visible = False
Else
Screen . Level . UpdateEntities ( )
Screen . Camera . Update ( )
If Screen . Camera . IsMoving ( ) = False Then
Me . IsReady = True
End If
End If
Case " turn "
If Me . started = False Then
Screen . Camera . Turn ( CInt ( argument ) )
started = True
Screen . Level . OverworldPokemon . Visible = False
Else
Screen . Camera . Update ( )
Screen . Level . UpdateEntities ( )
If Screen . Camera . Turning = False Then
Me . IsReady = True
End If
End If
Case " turnto "
If Me . started = False Then
2018-01-07 18:01:32 +01:00
Dim turns As Integer = CInt ( argument ) - Screen . Camera . GetPlayerFacingDirection ( )
2016-09-07 18:50:38 +02:00
If turns < 0 Then
turns = turns + 4
End If
If turns > 0 Then
Screen . Camera . Turn ( turns )
started = True
Screen . Level . OverworldPokemon . Visible = False
Else
Me . IsReady = True
End If
Else
Screen . Camera . Update ( )
Screen . Level . UpdateEntities ( )
If Screen . Camera . Turning = False Then
Me . IsReady = True
End If
End If
Case " warp "
Dim commas As Integer = 0
For Each c As Char In argument
If c = " , " Then
commas += 1
End If
Next
Select Case commas
Case 4
Screen . Level . WarpData . WarpDestination = argument . GetSplit ( 0 )
Screen . Level . WarpData . WarpPosition = New Vector3 ( CSng ( argument . GetSplit ( 1 ) ) , CSng ( argument . GetSplit ( 2 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( argument . GetSplit ( 3 ) ) )
Screen . Level . WarpData . WarpRotations = CInt ( argument . GetSplit ( 4 ) )
Screen . Level . WarpData . DoWarpInNextTick = True
Screen . Level . WarpData . CorrectCameraYaw = Screen . Camera . Yaw
Case 2
Screen . Camera . Position = New Vector3 ( CSng ( argument . GetSplit ( 0 ) ) , CSng ( argument . GetSplit ( 1 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( argument . GetSplit ( 2 ) ) )
End Select
Screen . Level . OverworldPokemon . warped = True
Screen . Level . OverworldPokemon . Visible = False
Me . IsReady = True
Case " stopmovement "
Screen . Camera . StopMovement ( )
Me . IsReady = True
Case " money "
Core . Player . Money += CInt ( argument )
Me . IsReady = True
Case " setmovement "
Dim movements ( ) As String = argument . Split ( CChar ( " , " ) )
Screen . Camera . PlannedMovement = New Vector3 ( CInt ( movements ( 0 ) ) ,
CInt ( movements ( 1 ) ) ,
CInt ( movements ( 2 ) ) )
Me . IsReady = True
Case Else
Me . IsReady = True
End Select
End Sub
Private Sub DoEntity ( )
Dim command As String = Value
Dim argument As String = " "
If command . Contains ( " ( " ) = True And command . EndsWith ( " ) " ) = True Then
argument = command . Remove ( 0 , command . IndexOf ( " ( " ) + 1 )
argument = argument . Remove ( argument . Length - 1 , 1 )
command = command . Remove ( command . IndexOf ( " ( " ) )
End If
Dim entID As Integer = CInt ( argument . GetSplit ( 0 ) )
Dim ent As Entity = Screen . Level . GetEntity ( entID )
If Not ent Is Nothing Then
Select Case command . ToLower ( )
Case " warp "
Dim PositionList As List ( Of String ) = argument . Split ( CChar ( " , " ) ) . ToList ( )
Dim newPosition As Vector3 = New Vector3 ( CSng ( PositionList ( 1 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( PositionList ( 2 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( PositionList ( 3 ) . Replace ( " . " , GameController . DecSeparator ) ) )
ent . Position = newPosition
ent . CreatedWorld = False
Case " scale "
Dim ScaleList As List ( Of String ) = argument . Split ( CChar ( " , " ) ) . ToList ( )
Dim newScale As Vector3 = New Vector3 ( CSng ( ScaleList ( 1 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( ScaleList ( 2 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( ScaleList ( 3 ) . Replace ( " . " , GameController . DecSeparator ) ) )
ent . Scale = newScale
ent . CreatedWorld = False
Case " remove "
ent . CanBeRemoved = True
Case " setid "
ent . ID = CInt ( argument . GetSplit ( 1 ) )
Case " opacity "
ent . NormalOpacity = CSng ( CInt ( argument . GetSplit ( 1 ) ) / 100 )
Case " visible "
ent . Visible = CBool ( argument . GetSplit ( 1 ) )
'Case "move"
Case " setadditionalvalue "
ent . AdditionalValue = argument . GetSplit ( 1 )
Case " collision "
ent . Collision = CBool ( argument . GetSplit ( 1 ) )
End Select
End If
Me . IsReady = True
End Sub
Private Sub DoEnvironment ( )
Dim command As String = Value
Dim argument As String = " "
If command . Contains ( " ( " ) = True And command . EndsWith ( " ) " ) = True Then
argument = command . Remove ( 0 , command . IndexOf ( " ( " ) + 1 )
argument = argument . Remove ( argument . Length - 1 , 1 )
command = command . Remove ( command . IndexOf ( " ( " ) )
End If
Select Case argument . ToLower ( )
Case " changeweathertype "
Screen . Level . WeatherType = CInt ( argument )
Screen . Level . World = New World ( Screen . Level . EnvironmentType , Screen . Level . WeatherType )
Case " changeenvironmenttype "
Screen . Level . EnvironmentType = CInt ( argument )
Screen . Level . World = New World ( Screen . Level . EnvironmentType , Screen . Level . WeatherType )
Case " canfly "
Screen . Level . CanFly = CBool ( argument )
Case " candig "
Screen . Level . CanDig = CBool ( argument )
Case " canteleport "
Screen . Level . CanTeleport = CBool ( argument )
Case " wildpokemongrass "
Screen . Level . WildPokemonGrass = CBool ( argument )
Case " wildpokemonwater "
Screen . Level . WildPokemonWater = CBool ( argument )
Case " wildpokemoneverywhere "
Screen . Level . WildPokemonFloor = CBool ( argument )
Case " isdark "
Screen . Level . IsDark = CBool ( argument )
Case " resetwalkedsteps "
Screen . Level . WalkedSteps = 0
End Select
Me . IsReady = True
End Sub
Private Sub DoLevel ( )
Dim command As String = Value
Dim argument As String = " "
If command . Contains ( " ( " ) = True And command . EndsWith ( " ) " ) = True Then
argument = command . Remove ( 0 , command . IndexOf ( " ( " ) + 1 )
argument = argument . Remove ( argument . Length - 1 , 1 )
command = command . Remove ( command . IndexOf ( " ( " ) )
End If
Select Case command . ToLower ( )
Case " update "
Screen . Level . Update ( )
Screen . Level . UpdateEntities ( )
Screen . Camera . Update ( )
End Select
Me . IsReady = True
End Sub
#End Region
Private Sub ViewPokemonImage ( )
Dim PokemonID As Integer = CInt ( Me . Value . GetSplit ( 0 ) )
Dim Shiny As Boolean = CBool ( Me . Value . GetSplit ( 1 ) )
Dim Front As Boolean = CBool ( Me . Value . GetSplit ( 2 ) )
Screen . PokemonImageView . Show ( PokemonID , Shiny , Front )
Me . IsReady = True
End Sub
Private Sub Move ( )
Dim targetID As Integer = CInt ( Me . Value . GetSplit ( 0 ) )
Dim targetNPC As NPC = Screen . Level . GetNPC ( targetID )
Dim moved As Integer = CInt ( Me . Value . GetSplit ( 1 ) )
Screen . Level . UpdateEntities ( )
If started = False Then
targetNPC . Moved += moved
started = True
Else
If targetNPC . Moved <= 0 . 0F Then
Me . IsReady = True
End If
End If
End Sub
Private Sub MoveAsync ( )
Dim targetID As Integer = CInt ( Me . Value . GetSplit ( 0 ) )
Dim targetNPC As NPC = Screen . Level . GetNPC ( targetID )
Dim moved As Integer = CInt ( Me . Value . GetSplit ( 1 ) )
targetNPC . Moved += moved
started = True
Me . IsReady = True
End Sub
Private Sub MovePlayer ( )
If Me . started = False Then
Screen . Camera . Move ( CSng ( Value ) )
started = True
Screen . Level . OverworldPokemon . Visible = False
Else
Screen . Level . UpdateEntities ( )
Screen . Camera . Update ( )
If Screen . Camera . IsMoving ( ) = False Then
Me . IsReady = True
End If
End If
End Sub
Private Sub Turn ( )
Dim targetID As Integer = CInt ( Value . GetSplit ( 0 ) )
Dim targetNPC As NPC = Screen . Level . GetNPC ( targetID )
targetNPC . faceRotation = CInt ( Value . GetSplit ( 1 ) )
targetNPC . Update ( )
targetNPC . UpdateEntity ( )
Me . IsReady = True
End Sub
Private Sub Warp ( )
Dim targetID As Integer = CInt ( Value . GetSplit ( 0 ) )
Dim targetNPC As NPC = Screen . Level . GetNPC ( targetID )
Dim targetPosition As New Vector3 ( CInt ( Value . GetSplit ( 1 ) ) , CInt ( Value . GetSplit ( 2 ) ) , CInt ( Value . GetSplit ( 3 ) ) )
targetNPC . Position = targetPosition
Logger . Debug ( targetNPC . Position . ToString ( ) )
targetNPC . Update ( )
Me . IsReady = True
End Sub
Private Sub WarpPlayer ( )
Dim commas As Integer = 0
For Each c As Char In Value
If c = " , " Then
commas += 1
End If
Next
Select Case commas
Case 4
Screen . Level . WarpData . WarpDestination = Me . Value . GetSplit ( 0 )
Screen . Level . WarpData . WarpPosition = New Vector3 ( CSng ( Me . Value . GetSplit ( 1 ) ) , CSng ( Me . Value . GetSplit ( 2 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( Me . Value . GetSplit ( 3 ) ) )
Screen . Level . WarpData . WarpRotations = CInt ( Me . Value . GetSplit ( 4 ) )
Screen . Level . WarpData . DoWarpInNextTick = True
Screen . Level . WarpData . CorrectCameraYaw = Screen . Camera . Yaw
Case 2
Screen . Camera . Position = New Vector3 ( CSng ( Me . Value . GetSplit ( 0 ) ) , CSng ( Me . Value . GetSplit ( 1 ) . Replace ( " . " , GameController . DecSeparator ) ) , CSng ( Me . Value . GetSplit ( 2 ) ) )
End Select
Screen . Level . OverworldPokemon . Visible = False
Me . IsReady = True
End Sub
Private Sub Heal ( )
If Me . Value = " " Then
Core . Player . HealParty ( )
Else
Dim Data ( ) As String = Me . Value . Split ( CChar ( " , " ) )
Dim Members As New List ( Of Integer )
For Each Member As String In Data
Members . Add ( CInt ( Member ) )
Next
Core . Player . HealParty ( Members . ToArray ( ) )
End If
Me . IsReady = True
End Sub
Private Sub TurnPlayer ( )
If Me . started = False Then
Screen . Camera . Turn ( CInt ( Value ) )
started = True
Screen . Level . OverworldPokemon . Visible = False
Else
Screen . Camera . Update ( )
Screen . Level . UpdateEntities ( )
If Screen . Camera . Turning = False Then
Me . IsReady = True
End If
End If
End Sub
Private Sub GiveItem ( )
2023-05-29 15:33:57 +02:00
Dim ItemID As String = Me . Value . GetSplit ( 0 )
2016-09-07 18:50:38 +02:00
Dim Item As Item = Item . GetItemByID ( ItemID )
Dim Amount As Integer = CInt ( Me . Value . GetSplit ( 1 ) )
Dim Message As String = " "
If Amount = 1 Then
2023-08-09 16:20:16 +02:00
Message = " Received the~ " & Item . OneLineName ( ) & " .* " & Core . Player . Name & " stored it in the~ " & Item . ItemType . ToString ( ) & " pocket. "
2016-09-07 18:50:38 +02:00
Else
2023-08-09 16:20:16 +02:00
Message = " Received " & Amount & " ~ " & Item . OneLinePluralName ( ) & " .* " & Core . Player . Name & " stored them~in the " & Item . ItemType . ToString ( ) & " pocket. "
2016-09-07 18:50:38 +02:00
End If
Core . Player . Inventory . AddItem ( ItemID , Amount )
2021-08-22 16:10:06 +02:00
SoundManager . PlaySound ( " Receive_Item " , True )
2016-09-07 18:50:38 +02:00
Screen . TextBox . reDelay = 0 . 0F
Screen . TextBox . Show ( Message , { } )
Me . IsReady = True
End Sub
Private Sub RemoveItem ( )
2023-05-29 15:33:57 +02:00
Dim ItemID As String = Me . Value . GetSplit ( 0 )
2016-09-07 18:50:38 +02:00
Dim Item As Item = Item . GetItemByID ( ItemID )
Dim Amount As Integer = CInt ( Me . Value . GetSplit ( 1 ) )
Dim Message As String = " "
If Amount = 1 Then
2023-08-09 16:20:16 +02:00
Message = " <playername> handed over the~ " & Item . OneLineName ( ) & " ! "
2016-09-07 18:50:38 +02:00
Else
2023-08-09 16:20:16 +02:00
Message = " <playername> handed over the~ " & Item . OneLinePluralName ( ) & " ! "
2016-09-07 18:50:38 +02:00
End If
Core . Player . Inventory . RemoveItem ( ItemID , Amount )
Screen . TextBox . reDelay = 0 . 0F
Screen . TextBox . Show ( Message , { } )
Me . IsReady = True
End Sub
Private Sub GetBadge ( )
2018-01-07 18:01:32 +01:00
If StringHelper . IsNumeric ( Value ) = True Then
2016-09-07 18:50:38 +02:00
If Core . Player . Badges . Contains ( CInt ( Value ) ) = False Then
Core . Player . Badges . Add ( CInt ( Value ) )
SoundManager . PlaySound ( " badge_acquired " , True )
Screen . TextBox . Show ( Core . Player . Name & " received the~ " & Badge . GetBadgeName ( CInt ( Value ) ) & " badge. " , { } , False , False )
Core . Player . AddPoints ( 10 , " Got a badge (V1 script!). " )
End If
Else
Throw New Exception ( " Invalid argument exception " )
End If
Me . IsReady = True
End Sub
Protected Overrides Sub Finalize ( )
MyBase . Finalize ( )
End Sub
End Class