@@ -37,7 +37,9 @@
Packets.Add(ClientPackets.CBanList, AddressOf Packet_Banlist)
Packets.Add(ClientPackets.CBanDestroy, AddressOf Packet_DestroyBans)
Packets.Add(ClientPackets.CBanPlayer, AddressOf Packet_BanPlayer)
Packets.Add(ClientPackets.CRequestEditMap, AddressOf Packet_EditMapRequest)
Packets.Add(ClientPackets.CRequestEditItem, AddressOf Packet_EditItem)
Packets.Add(ClientPackets.CSaveItem, AddressOf Packet_SaveItem)
Packets.Add(ClientPackets.CRequestEditNpc, AddressOf Packet_EditNpc)
@@ -140,6 +142,7 @@
'editor login
Packets.Add(ClientPackets.CEditorLogin, AddressOf Packet_EditorLogin)
Packets.Add(ClientPackets.CEditorRequestMap, AddressOf Packet_EditorRequestMap)
Packets.Add(ClientPackets.CEditorMapData, AddressOf Packet_EditorMapData)
End Sub
Public Sub HandleDataPackets( ByVal index As Integer , ByVal data() As Byte )
@@ -1370,12 +1373,7 @@
Gettingmap = True
Dim ineditor As Integer = Buffer.ReadInteger
If ineditor > 0 Then
MapNum = ineditor
Else
MapNum = GetPlayerMap(Index)
End If
MapNum = GetPlayerMap(Index)
i = Map(MapNum).Revision + 1
ClearMap(MapNum)
@@ -1599,7 +1597,7 @@
' Send map
SendMapData(i, MapNum, True )
End If
Next i
Next
Buffer = Nothing
End Sub
@@ -3784,4 +3782,253 @@
End If
End Sub
Sub Packet_EditorMapData( ByVal Index As Integer , ByVal Data() As Byte )
Dim i As Integer
Dim MapNum As Integer
Dim x As Integer
Dim y As Integer
Dim Buffer As ByteBuffer
Buffer = New ByteBuffer
Buffer.WriteBytes(Data)
If Buffer.ReadInteger <> ClientPackets.CEditorMapData Then Exit Sub
Data = Buffer.ReadBytes(Data.Length - 4 )
Buffer = New ByteBuffer
Buffer.WriteBytes(Decompress(Data))
' Prevent hacking
If GetPlayerAccess(Index) < AdminType.Mapper Then Exit Sub
Gettingmap = True
MapNum = Buffer.ReadInteger
i = Map(MapNum).Revision + 1
ClearMap(MapNum)
Map(MapNum).Name = Buffer.ReadString
Map(MapNum).Music = Buffer.ReadString
Map(MapNum).Revision = i
Map(MapNum).Moral = Buffer.ReadInteger
Map(MapNum).Tileset = Buffer.ReadInteger
Map(MapNum).Up = Buffer.ReadInteger
Map(MapNum).Down = Buffer.ReadInteger
Map(MapNum).Left = Buffer.ReadInteger
Map(MapNum).Right = Buffer.ReadInteger
Map(MapNum).BootMap = Buffer.ReadInteger
Map(MapNum).BootX = Buffer.ReadInteger
Map(MapNum).BootY = Buffer.ReadInteger
Map(MapNum).MaxX = Buffer.ReadInteger
Map(MapNum).MaxY = Buffer.ReadInteger
Map(MapNum).WeatherType = Buffer.ReadInteger
Map(MapNum).FogIndex = Buffer.ReadInteger
Map(MapNum).WeatherIntensity = Buffer.ReadInteger
Map(MapNum).FogAlpha = Buffer.ReadInteger
Map(MapNum).FogSpeed = Buffer.ReadInteger
Map(MapNum).HasMapTint = Buffer.ReadInteger
Map(MapNum).MapTintR = Buffer.ReadInteger
Map(MapNum).MapTintG = Buffer.ReadInteger
Map(MapNum).MapTintB = Buffer.ReadInteger
Map(MapNum).MapTintA = Buffer.ReadInteger
ReDim Map(MapNum).Tile( 0 To Map(MapNum).MaxX, 0 To Map(MapNum).MaxY)
For x = 1 To MAX_MAP_NPCS
ClearMapNpc(x, MapNum)
Map(MapNum).Npc(x) = Buffer.ReadInteger
Next
With Map(MapNum)
For x = 0 To .MaxX
For y = 0 To .MaxY
.Tile(x, y).Data1 = Buffer.ReadInteger
.Tile(x, y).Data2 = Buffer.ReadInteger
.Tile(x, y).Data3 = Buffer.ReadInteger
.Tile(x, y).DirBlock = Buffer.ReadInteger
ReDim .Tile(x, y).Layer( 0 To MapLayer.Count - 1 )
For i = 0 To MapLayer.Count - 1
.Tile(x, y).Layer(i).Tileset = Buffer.ReadInteger
.Tile(x, y).Layer(i).x = Buffer.ReadInteger
.Tile(x, y).Layer(i).y = Buffer.ReadInteger
.Tile(x, y).Layer(i).AutoTile = Buffer.ReadInteger
Next
.Tile(x, y).Type = Buffer.ReadInteger
Next
Next
End With
'Event Data!
Map(MapNum).EventCount = Buffer.ReadInteger
If Map(MapNum).EventCount > 0 Then
ReDim Map(MapNum).Events( 0 To Map(MapNum).EventCount)
For i = 1 To Map(MapNum).EventCount
With Map(MapNum).Events(i)
.Name = Buffer.ReadString
.Globals = Buffer.ReadInteger
.X = Buffer.ReadInteger
.Y = Buffer.ReadInteger
.PageCount = Buffer.ReadInteger
End With
If Map(MapNum).Events(i).PageCount > 0 Then
ReDim Map(MapNum).Events(i).Pages( 0 To Map(MapNum).Events(i).PageCount)
ReDim TempPlayer(i).EventMap.EventPages( 0 To Map(MapNum).Events(i).PageCount)
For x = 1 To Map(MapNum).Events(i).PageCount
With Map(MapNum).Events(i).Pages(x)
.chkVariable = Buffer.ReadInteger
.VariableIndex = Buffer.ReadInteger
.VariableCondition = Buffer.ReadInteger
.VariableCompare = Buffer.ReadInteger
Map(MapNum).Events(i).Pages(x).chkSwitch = Buffer.ReadInteger
Map(MapNum).Events(i).Pages(x).SwitchIndex = Buffer.ReadInteger
.SwitchCompare = Buffer.ReadInteger
.chkHasItem = Buffer.ReadInteger
.HasItemIndex = Buffer.ReadInteger
.HasItemAmount = Buffer.ReadInteger
.chkSelfSwitch = Buffer.ReadInteger
.SelfSwitchIndex = Buffer.ReadInteger
.SelfSwitchCompare = Buffer.ReadInteger
.GraphicType = Buffer.ReadInteger
.Graphic = Buffer.ReadInteger
.GraphicX = Buffer.ReadInteger
.GraphicY = Buffer.ReadInteger
.GraphicX2 = Buffer.ReadInteger
.GraphicY2 = Buffer.ReadInteger
.MoveType = Buffer.ReadInteger
.MoveSpeed = Buffer.ReadInteger
.MoveFreq = Buffer.ReadInteger
.MoveRouteCount = Buffer.ReadInteger
.IgnoreMoveRoute = Buffer.ReadInteger
.RepeatMoveRoute = Buffer.ReadInteger
If .MoveRouteCount > 0 Then
ReDim Map(MapNum).Events(i).Pages(x).MoveRoute(.MoveRouteCount)
For y = 1 To .MoveRouteCount
.MoveRoute(y).Index = Buffer.ReadInteger
.MoveRoute(y).Data1 = Buffer.ReadInteger
.MoveRoute(y).Data2 = Buffer.ReadInteger
.MoveRoute(y).Data3 = Buffer.ReadInteger
.MoveRoute(y).Data4 = Buffer.ReadInteger
.MoveRoute(y).Data5 = Buffer.ReadInteger
.MoveRoute(y).Data6 = Buffer.ReadInteger
Next
End If
.WalkAnim = Buffer.ReadInteger
.DirFix = Buffer.ReadInteger
.WalkThrough = Buffer.ReadInteger
.ShowName = Buffer.ReadInteger
.Trigger = Buffer.ReadInteger
.CommandListCount = Buffer.ReadInteger
.Position = Buffer.ReadInteger
.QuestNum = Buffer.ReadInteger
.chkPlayerGender = Buffer.ReadInteger
End With
If Map(MapNum).Events(i).Pages(x).CommandListCount > 0 Then
ReDim Map(MapNum).Events(i).Pages(x).CommandList( 0 To Map(MapNum).Events(i).Pages(x).CommandListCount)
For y = 1 To Map(MapNum).Events(i).Pages(x).CommandListCount
Map(MapNum).Events(i).Pages(x).CommandList(y).CommandCount = Buffer.ReadInteger
Map(MapNum).Events(i).Pages(x).CommandList(y).ParentList = Buffer.ReadInteger
If Map(MapNum).Events(i).Pages(x).CommandList(y).CommandCount > 0 Then
ReDim Map(MapNum).Events(i).Pages(x).CommandList(y).Commands( 0 To Map(MapNum).Events(i).Pages(x).CommandList(y).CommandCount)
For z = 1 To Map(MapNum).Events(i).Pages(x).CommandList(y).CommandCount
With Map(MapNum).Events(i).Pages(x).CommandList(y).Commands(z)
.Index = Buffer.ReadInteger
.Text1 = Buffer.ReadString
.Text2 = Buffer.ReadString
.Text3 = Buffer.ReadString
.Text4 = Buffer.ReadString
.Text5 = Buffer.ReadString
.Data1 = Buffer.ReadInteger
.Data2 = Buffer.ReadInteger
.Data3 = Buffer.ReadInteger
.Data4 = Buffer.ReadInteger
.Data5 = Buffer.ReadInteger
.Data6 = Buffer.ReadInteger
.ConditionalBranch.CommandList = Buffer.ReadInteger
.ConditionalBranch.Condition = Buffer.ReadInteger
.ConditionalBranch.Data1 = Buffer.ReadInteger
.ConditionalBranch.Data2 = Buffer.ReadInteger
.ConditionalBranch.Data3 = Buffer.ReadInteger
.ConditionalBranch.ElseCommandList = Buffer.ReadInteger
.MoveRouteCount = Buffer.ReadInteger
Dim tmpcount As Integer = .MoveRouteCount
If tmpcount > 0 Then
ReDim Preserve .MoveRoute(tmpcount)
For w = 1 To tmpcount
.MoveRoute(w).Index = Buffer.ReadInteger
.MoveRoute(w).Data1 = Buffer.ReadInteger
.MoveRoute(w).Data2 = Buffer.ReadInteger
.MoveRoute(w).Data3 = Buffer.ReadInteger
.MoveRoute(w).Data4 = Buffer.ReadInteger
.MoveRoute(w).Data5 = Buffer.ReadInteger
.MoveRoute(w).Data6 = Buffer.ReadInteger
Next
End If
End With
Next
End If
Next
End If
Next
End If
Next
End If
'End Event Data
' Save the map
SaveMap(MapNum)
Gettingmap = False
SendMapNpcsToMap(MapNum)
SpawnMapNpcs(MapNum)
SpawnGlobalEvents(MapNum)
For i = 1 To MAX_PLAYERS
If IsPlaying(i) Then
If Player(i).Character(TempPlayer(i).CurChar).Map = MapNum Then
SpawnMapEventsFor(i, MapNum)
End If
End If
Next
' Clear out it all
For i = 1 To MAX_MAP_ITEMS
SpawnItemSlot(i, 0 , 0 , GetPlayerMap(Index), MapItem(GetPlayerMap(Index), i).x, MapItem(GetPlayerMap(Index), i).y)
ClearMapItem(i, GetPlayerMap(Index))
Next
' Respawn
SpawnMapItems(MapNum)
ClearTempTile(MapNum)
CacheResources(MapNum)
' Refresh map for everyone online
For i = 1 To MAX_PLAYERS
If IsPlaying(i) And GetPlayerMap(i) = MapNum Then
PlayerWarp(i, MapNum, GetPlayerX(i), GetPlayerY(i))
' Send map
SendMapData(i, MapNum, True )
End If
Next
Buffer = Nothing
End Sub
End Module