From a9b9c94347a616db6311560af3acf8c982d6489b Mon Sep 17 00:00:00 2001 From: wish Date: Wed, 21 Feb 2024 03:46:15 +1100 Subject: [PATCH] fix RNG --- common/mhfitem/mhfitem.go | 7 +++++++ common/token/token.go | 9 +++++---- server/channelserver/handlers_cast_binary.go | 2 +- server/channelserver/handlers_event.go | 3 +-- server/channelserver/handlers_festa.go | 2 +- server/channelserver/handlers_house.go | 7 ++++--- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/common/mhfitem/mhfitem.go b/common/mhfitem/mhfitem.go index 9ad93758a..0249faa34 100644 --- a/common/mhfitem/mhfitem.go +++ b/common/mhfitem/mhfitem.go @@ -2,6 +2,7 @@ package mhfitem import ( "erupe-ce/common/byteframe" + "erupe-ce/common/token" _config "erupe-ce/config" ) @@ -43,6 +44,9 @@ type MHFItemStack struct { func ReadWarehouseItem(bf *byteframe.ByteFrame) MHFItemStack { var item MHFItemStack item.WarehouseID = bf.ReadUint32() + if item.WarehouseID == 0 { + item.WarehouseID = token.RNG.Uint32() + } item.Item.ItemID = bf.ReadUint16() item.Quantity = bf.ReadUint16() item.Unk0 = bf.ReadUint32() @@ -76,6 +80,9 @@ func ReadWarehouseEquipment(bf *byteframe.ByteFrame) MHFEquipment { equipment.Sigils[i].Effects = make([]MHFSigilEffect, 3) } equipment.WarehouseID = bf.ReadUint32() + if equipment.WarehouseID == 0 { + equipment.WarehouseID = token.RNG.Uint32() + } equipment.ItemType = bf.ReadUint8() equipment.Unk0 = bf.ReadUint8() equipment.ItemID = bf.ReadUint16() diff --git a/common/token/token.go b/common/token/token.go index c474fdaf5..decd16893 100644 --- a/common/token/token.go +++ b/common/token/token.go @@ -5,18 +5,19 @@ import ( "time" ) +var RNG = NewRNG() + // Generate returns an alphanumeric token of specified length func Generate(length int) string { - rng := RNG() var chars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") b := make([]rune, length) for i := range b { - b[i] = chars[rng.Intn(len(chars))] + b[i] = chars[RNG.Intn(len(chars))] } return string(b) } -// RNG returns a new RNG generator -func RNG() *rand.Rand { +// NewRNG returns a new NewRNG generator +func NewRNG() *rand.Rand { return rand.New(rand.NewSource(time.Now().UnixNano())) } diff --git a/server/channelserver/handlers_cast_binary.go b/server/channelserver/handlers_cast_binary.go index 67e6e3a3a..17815dc30 100644 --- a/server/channelserver/handlers_cast_binary.go +++ b/server/channelserver/handlers_cast_binary.go @@ -478,7 +478,7 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) { m := binpacket.MsgBinChat{ Type: BinaryMessageTypeChat, Flags: 4, - Message: fmt.Sprintf(`%d`, token.RNG().Intn(100)+1), + Message: fmt.Sprintf(`%d`, token.RNG.Intn(100)+1), SenderName: author, } bf := byteframe.NewByteFrame() diff --git a/server/channelserver/handlers_event.go b/server/channelserver/handlers_event.go index d39b629d9..7bc384226 100644 --- a/server/channelserver/handlers_event.go +++ b/server/channelserver/handlers_event.go @@ -101,8 +101,7 @@ func generateFeatureWeapons(count int) activeFeature { nums := make([]int, 0) var result int for len(nums) < count { - rng := token.RNG() - num := rng.Intn(_max) + num := token.RNG.Intn(_max) exist := false for _, v := range nums { if v == num { diff --git a/server/channelserver/handlers_festa.go b/server/channelserver/handlers_festa.go index f833a1f4e..eecd268e3 100644 --- a/server/channelserver/handlers_festa.go +++ b/server/channelserver/handlers_festa.go @@ -455,7 +455,7 @@ func handleMsgMhfEntryFesta(s *Session, p mhfpacket.MHFPacket) { doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) return } - team := uint32(token.RNG().Intn(2)) + team := uint32(token.RNG.Intn(2)) switch team { case 0: s.server.db.Exec("INSERT INTO festa_registrations VALUES ($1, 'blue')", guild.ID) diff --git a/server/channelserver/handlers_house.go b/server/channelserver/handlers_house.go index 04365bfb2..13535791f 100644 --- a/server/channelserver/handlers_house.go +++ b/server/channelserver/handlers_house.go @@ -433,13 +433,14 @@ func handleMsgMhfOperateWarehouse(s *Session, p mhfpacket.MHFPacket) { func addWarehouseItem(s *Session, item mhfitem.MHFItemStack) { giftBox := warehouseGetItems(s, 10) - item.WarehouseID = token.RNG().Uint32() + item.WarehouseID = token.RNG.Uint32() giftBox = append(giftBox, item) s.server.db.Exec("UPDATE warehouse SET item10=$1 WHERE character_id=$2", mhfitem.SerializeWarehouseItems(giftBox), s.charID) } func addWarehouseEquipment(s *Session, equipment mhfitem.MHFEquipment) { giftBox := warehouseGetEquipment(s, 10) + equipment.WarehouseID = token.RNG.Uint32() giftBox = append(giftBox, equipment) s.server.db.Exec("UPDATE warehouse SET equip10=$1 WHERE character_id=$2", mhfitem.SerializeWarehouseEquipment(giftBox), s.charID) } @@ -509,7 +510,7 @@ func handleMsgMhfUpdateWarehouse(s *Session, p mhfpacket.MHFPacket) { } } if !exists { - uItem.WarehouseID = token.RNG().Uint32() + uItem.WarehouseID = token.RNG.Uint32() fItems = append(fItems, uItem) } } @@ -532,7 +533,7 @@ func handleMsgMhfUpdateWarehouse(s *Session, p mhfpacket.MHFPacket) { } } if !exists { - uEquip.WarehouseID = token.RNG().Uint32() + uEquip.WarehouseID = token.RNG.Uint32() fEquip = append(fEquip, uEquip) } }