From 8d580181bf26b41d2f5c7be2f51f8d0cbc59f59f Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 9 Nov 2021 17:45:01 +0800 Subject: [PATCH] crash fix for initialized map --- bot.go | 14 ++++++++++++-- packet.go | 37 ++++++++++++++++++++++++++++++------- ttd.go | 11 ++++++++++- version.go | 8 ++++---- 4 files changed, 56 insertions(+), 14 deletions(-) diff --git a/bot.go b/bot.go index bed3d62..2caf03f 100644 --- a/bot.go +++ b/bot.go @@ -57,6 +57,8 @@ func (b *Bot) BotHandlers() { b.bot.Handle("/companies", botCompanies) b.bot.Handle("/clients", botClients) b.bot.Handle("/players", botPlayers) + b.bot.Handle("/give", botGive) + b.bot.Handle("/take", botTake) b.bot.Handle(tb.OnPhoto, botPhoto) b.bot.Handle(tb.OnChannelPost, botChannelPost) @@ -151,13 +153,13 @@ func botPlayers(m *tb.Message) { online := "" for _, cc := range cfg.Clients { if cc.Online { - online = online + fmt.Sprintf(" - @%s (%s) : %s", cc.Username, cc.TimeLeft, srv.Status.Companies[cc.CompanyID].Name) + "\r\n" + online = online + fmt.Sprintf(" - %s (%s) : %s", cc.Username, cc.TimeLeft, srv.Status.Companies[cc.CompanyID].Name) + "\r\n" } } offline := "" for _, cc := range cfg.Clients { if _, ok := srv.Status.Companies[cc.CompanyID]; ok && !cc.Online { - offline = offline + fmt.Sprintf(" - @%s (%s) : %s", cc.Username, cc.TimeLeft, srv.Status.Companies[cc.CompanyID].Name) + "\r\n" + offline = offline + fmt.Sprintf(" - %s (%s) : %s", cc.Username, cc.TimeLeft, srv.Status.Companies[cc.CompanyID].Name) + "\r\n" } } @@ -171,6 +173,14 @@ func botPlayers(m *tb.Message) { bot.SendChat(m.Chat.ID, str) } +func botGive(m *tb.Message) { + PrintText(m) +} + +func botTake(m *tb.Message) { + PrintText(m) +} + func botDeregister(m *tb.Message) { cc, ok := cfg.Clients[m.Sender.ID] if !ok { diff --git a/packet.go b/packet.go index 5925f4f..48f1ede 100644 --- a/packet.go +++ b/packet.go @@ -380,14 +380,26 @@ func (p *PacketServerCompanyNew) Read(b []byte) { } func (p *PacketServerCompanyInfo) Read(b []byte) { + var err error r := bufio.NewReader(bytes.NewReader(b)) r.Discard(3) c, _ := r.ReadByte() p.CompanyID = uint8(c) - p.Name, _ = r.ReadString(0) - p.Name = p.Name[:len(p.Name)-1] - p.President, _ = r.ReadString(0) - p.President = p.President[:len(p.President)-1] + p.Name, err = r.ReadString(0) + logErrorDebug(err, "PacketServerCompanyInfo.Read : Name") + if err != nil { + p.Name = "Error" + } else { + p.Name = p.Name[:len(p.Name)-1] + } + + p.President, err = r.ReadString(0) + logErrorDebug(err, "PacketServerCompanyInfo.Read : President") + if err != nil { + p.President = "Error" + } else { + p.President = p.President[:len(p.President)-1] + } c, _ = r.ReadByte() p.Color = uint8(c) c, _ = r.ReadByte() @@ -410,14 +422,25 @@ func (p *PacketServerCompanyInfo) Read(b []byte) { } func (p *PacketServerCompanyUpdate) Read(b []byte) { + var err error r := bufio.NewReader(bytes.NewReader(b)) r.Discard(3) c, _ := r.ReadByte() p.CompanyID = uint8(c) - p.Name, _ = r.ReadString(0) - p.Name = p.Name[:len(p.Name)-1] + p.Name, err = r.ReadString(0) + logErrorDebug(err, "PacketServerCompanyUpdate.Read : Name") + if err != nil { + p.Name = "Error" + } else { + p.Name = p.Name[:len(p.Name)-1] + } p.President, _ = r.ReadString(0) - p.President = p.President[:len(p.President)-1] + logErrorDebug(err, "PacketServerCompanyUpdate.Read : President") + if err != nil { + p.President = "Error" + } else { + p.President = p.President[:len(p.President)-1] + } c, _ = r.ReadByte() p.Color = uint8(c) c, _ = r.ReadByte() diff --git a/ttd.go b/ttd.go index 2b4e39d..35a1e64 100644 --- a/ttd.go +++ b/ttd.go @@ -348,7 +348,16 @@ func (s *ServerTTD) Poll(stop chan struct{}) { } sp.Read(buffer[:p.PLength]) logInfoDebug("Server.Poll() : PacketServerCompanyUpdate :\n- CompanyID: %d\n- Name: %s\n- President: %s\n- Protected: %t", sp.CompanyID, sp.Name, sp.President, sp.Protected) - c := s.Status.Companies[sp.CompanyID] + c := &CompanyTTD{ + CompanyID: sp.CompanyID, + FirstSeen: time.Now(), + ClientID: 0, + } + if _, ok := s.Status.Companies[sp.CompanyID]; !ok { + s.Status.Companies[sp.CompanyID] = c + } else { + c = s.Status.Companies[sp.CompanyID] + } c.Name = sp.Name c.FirstSeen = time.Now() c.LastSeen = time.Now() diff --git a/version.go b/version.go index 9d8a435..f55cfbf 100644 --- a/version.go +++ b/version.go @@ -1,6 +1,6 @@ // Code generated by version.sh (@generated) DO NOT EDIT. package main -var githash = "93de432" -var buildstamp = "2021-11-09_05:24:29" -var commits = "175" -var version = "93de432-b175 - 2021-11-09_05:24:29" +var githash = "a100fb6" +var buildstamp = "2021-11-09_09:44:42" +var commits = "176" +var version = "a100fb6-b176 - 2021-11-09_09:44:42"