I notice you us MsgBox alen() on the client side, and MsgBox len() on the server side...
Have you tried messing around with switching LenB() aLen() and Len() around with eachother?
Here's my code, client side SendMap()
Code:
Public Sub SendMap()
Dim Buffer() As Byte
Buffer = ""
Buffer = AddLongToBuffer(Buffer, Player(MyIndex).Map)
Buffer = AddToBuffer(Buffer, VarPtr(Map), LenB(Map))
Call SendDataNew(Buffer, SMsgMapData)
End Sub
Server Side HandleMapData:
Code:
Private Sub HandleMapData(ByVal Index As Long, ByVal StartAddr As Long, ByVal ByteLen As Long, ByVal ExtraVar As Long)
Dim Buffer() As Byte
Dim Mapnum As Integer
'Dim nMap As MapRec
Dim i As Integer, X As Long, Y As Long
If HasAccess(Index, ADMIN_MAPPER) = 0 Then Exit Sub
'Call ClearMapNpcs
'Call ClearMapItems
Buffer = ""
Buffer = FillBuffer(StartAddr, ByteLen)
Mapnum = GetLongFromBuffer(Buffer, True)
'Debug.Print aLen(Buffer)
'Debug.Print "Start = " & Buffer(LBound(Buffer))
'Debug.Print "End = " & Buffer(UBound(Buffer))
'Call CopyMemory(ByVal VarPtr(Map(MapNum)), ByVal VarPtr(Buffer(0)), aLen(Buffer))
'Debug.Print "Sizeof: Map(" & MapNum & "): " & LenB(Map(MapNum)) & vbCrLf & "Sizeof: Buffer: " & aLen(Buffer)
Call CopyMemory(ByVal VarPtr(Map(Mapnum)), Buffer(0), aLen(Buffer))
For i = 1 To MAX_MAP_NPCS
tStr = tStr & " " & STR(Map(Mapnum).Npc(i))
Next i
Debug.Print "NPC's that we recieve from the client: " & tStr
'Spawn NPCs
Call RewriteMapNPCs(Mapnum)
Call SendMapNpcsToMap(Mapnum)
Call SpawnMapNpcs(Mapnum)
'Save the map
Call SaveMap(Mapnum)
'Refresh map for everyone online
For i = 1 To MAX_PLAYERS
If IsPlaying(i) And GetPlayerMap(i) = Mapnum Then
Call PlayerWarp(i, Mapnum, GetPlayerX(i), GetPlayerY(i))
End If
Next
End Sub
AS FAR AS I KNOW, this code WAS working in Valkoria, before I messed up other stuff. As you can see from the comments, I had some troubles of my own. We managed to get through it... it was tough though.
Here's my UDTs for reference.
Code:
Type MapRec
Name As String * NAME_LENGTH
'MapName() As Byte
Revision As Long
Moral As Byte
Up As Integer
Down As Integer
Left As Integer
Right As Integer
Music As Byte
BootMap As Integer
BootX As Byte
BootY As Byte
Shop As Byte
Indoors As Byte '40
Tile(0 To MAX_MAPX, 0 To MAX_MAPY) As TileRec '15 per, 15x11
Npc(1 To MAX_MAP_NPCS) As Byte
End Type
Type TileRec
Ground As Integer
Mask As Integer
Anim As Integer
Fringe As Integer
Type As Byte
Data1 As Integer
Data2 As Integer
Data3 As Integer
End Type