diff options
| -rw-r--r-- | classic/ext_env_map_aspect.go | 50 | ||||
| -rw-r--r-- | server/player.go | 2 | ||||
| -rw-r--r-- | server/server.go | 1 |
3 files changed, 52 insertions, 1 deletions
diff --git a/classic/ext_env_map_aspect.go b/classic/ext_env_map_aspect.go new file mode 100644 index 0000000..0c2f5e1 --- /dev/null +++ b/classic/ext_env_map_aspect.go @@ -0,0 +1,50 @@ +package classic + +import "bytes" + +type DoubleString [128]byte + +func PadDString(str string) DoubleString { + var pstr DoubleString + copy(pstr[:], []byte(str)) + if len(str) < 64 { + copy(pstr[len(str):], bytes.Repeat([]byte(" "), 128 - len(str))) + } + return pstr +} + +func UnpadDString(pstr DoubleString) string { + return string(bytes.TrimRight(pstr[:], " ")) +} + +func (s DoubleString) String() string { + return UnpadDString(s) +} + +type SetMapEnvUrl struct { + TexturePackUrl DoubleString +} +func (p *SetMapEnvUrl) PacketId() byte { + return 0x28 +} + +const ( + SideBlock = iota + HorizonBlock + EdgeHeight + CloudsHeight + ViewDistance + CloudsSpeed + WeatherSpeed + WeatherFad + ExpFog + SidesEdgeOffset +) + +type SetMapEnvProperty struct { + PropertyType byte + PropertyVal int +} +func (p *SetMapEnvProperty) PacketId() byte { + return 0x29 +} diff --git a/server/player.go b/server/player.go index 04be3fa..6c3babb 100644 --- a/server/player.go +++ b/server/player.go @@ -280,7 +280,7 @@ func (p *player) OnLevelData(from *level, info levelInfo, data io.ReadCloser) { return } p.client.SendPacket(p, &classic.SetMapEnvUrl { - TexturePackUrl: classic.PadString(info.TexturePack), + TexturePackUrl: classic.PadDString(info.TexturePack), }) }) p.client.SendPacket(p, &classic.SpawnPlayerExt { diff --git a/server/server.go b/server/server.go index a207c79..a7a08ca 100644 --- a/server/server.go +++ b/server/server.go @@ -16,6 +16,7 @@ import ( var SoftwareName = "Metronode" var supportedExtensions = []string { "ExtEntityPositions", + "EnvMapAspect.2", "HackControl", "LongerMessages", "FullCP437", |
