266 lines
12 KiB
VB.net
266 lines
12 KiB
VB.net
Namespace ScriptVersion2
|
|
|
|
Partial Class ScriptCommander
|
|
|
|
' --------------------------------------------------------------------------------------------------------------------------
|
|
' Contains the @npc commands.
|
|
' --------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Private Shared Sub DoNPC(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 "remove"
|
|
Dim targetNPC As Entity = Screen.Level.GetNPC(int(argument))
|
|
|
|
Screen.Level.Entities.Remove(targetNPC)
|
|
|
|
IsReady = True
|
|
Case "position", "warp"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
|
|
Dim PositionData() As String = argument.Split(CChar(","))
|
|
targetNPC.Position = New Vector3(sng(PositionData(1).Replace("~", CStr(targetNPC.Position.X)).Replace(".", GameController.DecSeparator)),
|
|
sng(PositionData(2).Replace("~", CStr(targetNPC.Position.Y)).Replace(".", GameController.DecSeparator)),
|
|
sng(PositionData(3).Replace("~", CStr(targetNPC.Position.Z)).Replace(".", GameController.DecSeparator)))
|
|
targetNPC.CreatedWorld = False
|
|
|
|
If targetNPC.InCameraFocus() = True Then
|
|
Screen.Camera.Update()
|
|
End If
|
|
|
|
IsReady = True
|
|
Case "addtoposition"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
|
|
Dim PositionData() As String = argument.Split(CChar(","))
|
|
targetNPC.Position += New Vector3(sng(PositionData(1).Replace("~", CStr(targetNPC.Position.X)).Replace(".", GameController.DecSeparator)),
|
|
sng(PositionData(2).Replace("~", CStr(targetNPC.Position.Y)).Replace(".", GameController.DecSeparator)),
|
|
sng(PositionData(3).Replace("~", CStr(targetNPC.Position.Z)).Replace(".", GameController.DecSeparator)))
|
|
targetNPC.CreatedWorld = False
|
|
|
|
If targetNPC.InCameraFocus() = True Then
|
|
Screen.Camera.Update()
|
|
End If
|
|
IsReady = True
|
|
Case "register"
|
|
NPC.AddNPCData(argument)
|
|
|
|
IsReady = True
|
|
Case "unregister"
|
|
NPC.RemoveNPCData(argument)
|
|
|
|
IsReady = True
|
|
Case "wearskin"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim textureID As String = argument.GetSplit(1)
|
|
|
|
targetNPC.SetupSprite(textureID, "", False)
|
|
IsReady = True
|
|
Case "setonlineskin"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim GameJoltID As String = argument.GetSplit(1)
|
|
|
|
If GameJoltID <> "" Then
|
|
targetNPC.SetupSprite(targetNPC.TextureID, GameJoltID, True)
|
|
End If
|
|
IsReady = True
|
|
Case "move"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim steps As Integer = int(argument.GetSplit(1))
|
|
|
|
Screen.Level.UpdateEntities()
|
|
If ScriptV2.started = False Then
|
|
If steps < 0 Then
|
|
If targetNPC.Speed > 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
Else
|
|
If targetNPC.Speed < 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
End If
|
|
|
|
steps = steps.ToPositive()
|
|
|
|
targetNPC.Moved += steps
|
|
ScriptV2.started = True
|
|
Else
|
|
If targetNPC.Moved <= 0.0F Then
|
|
If targetNPC.Speed < 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
IsReady = True
|
|
Else
|
|
If targetNPC.InCameraFocus() = True Then
|
|
Screen.Camera.Update()
|
|
End If
|
|
End If
|
|
End If
|
|
Case "setmovey"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim steps As Integer = int(argument.GetSplit(1))
|
|
|
|
targetNPC.MoveY = steps
|
|
|
|
IsReady = True
|
|
Case "moveasync"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim steps As Integer = int(argument.GetSplit(1))
|
|
|
|
Screen.Level.UpdateEntities()
|
|
If steps < 0 Then
|
|
If targetNPC.Speed > 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
Else
|
|
If targetNPC.Speed < 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
End If
|
|
|
|
steps = steps.ToPositive()
|
|
|
|
targetNPC.Moved += steps
|
|
targetNPC.MoveAsync = True
|
|
|
|
IsReady = True
|
|
Case "dance"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim steps As Integer = int(argument.GetSplit(1))
|
|
|
|
Screen.Level.UpdateEntities()
|
|
targetNPC.isDancing = True
|
|
If ScriptV2.started = False Then
|
|
If steps < 0 Then
|
|
If targetNPC.Speed > 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
Else
|
|
If targetNPC.Speed < 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
End If
|
|
|
|
steps = steps.ToPositive()
|
|
|
|
targetNPC.Moved += steps
|
|
ScriptV2.started = True
|
|
Else
|
|
If targetNPC.Moved <= 0.0F Then
|
|
If targetNPC.Speed < 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
IsReady = True
|
|
Else
|
|
If targetNPC.InCameraFocus() = True Then
|
|
Screen.Camera.Update()
|
|
End If
|
|
End If
|
|
End If
|
|
Case "danceasync"
|
|
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim steps As Integer = int(argument.GetSplit(1))
|
|
|
|
Screen.Level.UpdateEntities()
|
|
|
|
targetNPC.isDancing = True
|
|
If steps < 0 Then
|
|
If targetNPC.Speed > 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
Else
|
|
If targetNPC.Speed < 0 Then
|
|
targetNPC.Speed *= -1
|
|
End If
|
|
End If
|
|
|
|
steps = steps.ToPositive()
|
|
|
|
targetNPC.Moved += steps
|
|
targetNPC.MoveAsync = True
|
|
|
|
IsReady = True
|
|
Case "turn"
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
|
|
targetNPC.faceRotation = int(argument.GetSplit(1))
|
|
targetNPC.Update()
|
|
targetNPC.UpdateEntity()
|
|
IsReady = True
|
|
Case "spawn"
|
|
Dim args() As String = argument.Split(CChar(","))
|
|
|
|
' Required parameters: position
|
|
' Optional parameters: actionvalue, additionalvalue, textureid, animateidle, rotation, name, id, movement
|
|
|
|
Dim position As Vector3 = New Vector3(sng(args(0)), sng(args(1)), sng(args(2)))
|
|
Dim actionValue As Integer = 0
|
|
Dim additionalValue As String = ""
|
|
Dim TextureID As String = "0"
|
|
Dim AnimateIdle As Boolean = False
|
|
Dim Rotation As Integer = 0
|
|
Dim Name As String = ""
|
|
Dim ID As Integer = 0
|
|
Dim Movement As String = "Still"
|
|
Dim MoveRectangles As New List(Of Rectangle)
|
|
|
|
If args.Count >= 4 Then
|
|
actionValue = int(args(3))
|
|
If args.Count >= 5 Then
|
|
additionalValue = args(4)
|
|
If args.Count >= 6 Then
|
|
TextureID = args(5)
|
|
If args.Count >= 7 Then
|
|
AnimateIdle = CBool(args(6))
|
|
If args.Count >= 8 Then
|
|
Rotation = int(args(7))
|
|
If args.Count >= 9 Then
|
|
Name = args(8)
|
|
If args.Count >= 10 Then
|
|
ID = int(args(9))
|
|
If args.Count >= 11 Then
|
|
Movement = args(10)
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
If Not Screen.Level.GetNPC(ID) Is Nothing Then
|
|
Logger.Log(Logger.LogTypes.Message, "ScriptCommander.vb: (@npc." & command & ") An NPC with the ID """ & ID & """ already exists.")
|
|
End If
|
|
|
|
Dim NPC As NPC = CType(Entity.GetNewEntity("NPC", position, {Nothing}, {0, 0}, True, New Vector3(0.0F), New Vector3(1.0F), BaseModel.BillModel, actionValue, additionalValue, True, New Vector3(1.0F), -1, Screen.Level.LevelFile, "", New Vector3(0), {TextureID, Rotation, Name, ID, AnimateIdle, Movement, MoveRectangles}), NPC)
|
|
Screen.Level.Entities.Add(NPC)
|
|
|
|
IsReady = True
|
|
Case "setspeed"
|
|
If argument.CountSeperators(",") > 0 Then
|
|
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
|
|
Dim speed As Single = sng(argument.GetSplit(1))
|
|
|
|
If Not targetNPC Is Nothing Then
|
|
targetNPC.Speed = speed * 0.04F
|
|
Else
|
|
Logger.Log(Logger.LogTypes.Warning, "ScriptCommander.vb: (@npc." & command & ") The targeted NPC with ID """ & int(argument.GetSplit(0)) & """ doesn't exist.")
|
|
End If
|
|
Else
|
|
Logger.Log(Logger.LogTypes.Warning, "ScriptCommander.vb: (@npc." & command & ") Invalid argument passed.")
|
|
End If
|
|
|
|
IsReady = True
|
|
Case Else
|
|
Logger.Log(Logger.LogTypes.Warning, "ScriptCommander.vb: (@npc." & command & ") Command not found.")
|
|
IsReady = True
|
|
End Select
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
End Namespace |