From e75a77e6b8a62473d9bb4f7a197dcd57d6f46970 Mon Sep 17 00:00:00 2001 From: wish Date: Sat, 28 Oct 2023 11:55:06 +1100 Subject: [PATCH] optimise grpToGR --- server/channelserver/handlers_character.go | 2 +- server/channelserver/handlers_data.go | 179 ++++----------------- 2 files changed, 29 insertions(+), 152 deletions(-) diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index 4c5802293..cf17693d7 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -226,7 +226,7 @@ func (save *CharacterSaveData) updateStructWithSaveData() { if _config.ErupeConfig.RealClientMode >= _config.G10 { save.KQF = save.decompSave[save.Pointers[pKQF] : save.Pointers[pKQF]+8] if save.HRP == uint16(999) { - save.GR = grpToGR(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4])) + save.GR = grpToGR(int(binary.LittleEndian.Uint32(save.decompSave[save.Pointers[pGRP] : save.Pointers[pGRP]+4]))) } } } diff --git a/server/channelserver/handlers_data.go b/server/channelserver/handlers_data.go index 74f6de9d0..5de1c4f65 100644 --- a/server/channelserver/handlers_data.go +++ b/server/channelserver/handlers_data.go @@ -73,162 +73,39 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } -func grpToGR(n uint32) uint16 { - var gr uint16 - gr = 1 - switch grp := int(n); { - case grp < 208750: // Up to 50 - i := 0 - for { - grp -= 500 - if grp <= 500 { - if grp < 0 { - i-- +func grpToGR(n int) uint16 { + var gr int + a := []int{208750, 593400, 993400, 1400900, 2315900, 3340900, 4505900, 5850900, 7415900, 9230900, 11345900, 100000000} + b := []int{7850, 8000, 8150, 9150, 10250, 11650, 13450, 15650, 18150, 21150, 23950} + c := []int{51, 100, 150, 200, 300, 400, 500, 600, 700, 800, 900} + + for i := 0; i < len(a); i++ { + if n < a[i] { + if i == 0 { + for { + n -= 500 + if n <= 500 { + if n < 0 { + i-- + } + break + } else { + i++ + for j := 0; j < i; j++ { + n -= 150 + } + } } - break + gr = i + 2 } else { - i++ - for j := 0; j < i; j++ { - grp -= 150 - } + n -= a[i-1] + gr = c[i-1] + gr += n / b[i-1] } + break } - gr = uint16(i + 2) - break - case grp < 593400: // 51-99 - grp -= 208750 - i := 51 - for { - if grp < 7850 { - break - } - i++ - grp -= 7850 - } - gr = uint16(i) - break - case grp < 993400: // 100-149 - grp -= 593400 - i := 100 - for { - if grp < 8000 { - break - } - i++ - grp -= 8000 - } - gr = uint16(i) - break - case grp < 1400900: // 150-199 - grp -= 993400 - i := 150 - for { - if grp < 8150 { - break - } - i++ - grp -= 8150 - } - gr = uint16(i) - break - case grp < 2315900: // 200-299 - grp -= 1400900 - i := 200 - for { - if grp < 9150 { - break - } - i++ - grp -= 9150 - } - gr = uint16(i) - break - case grp < 3340900: // 300-399 - grp -= 2315900 - i := 300 - for { - if grp < 10250 { - break - } - i++ - grp -= 10250 - } - gr = uint16(i) - break - case grp < 4505900: // 400-499 - grp -= 3340900 - i := 400 - for { - if grp < 11650 { - break - } - i++ - grp -= 11650 - } - gr = uint16(i) - break - case grp < 5850900: // 500-599 - grp -= 4505900 - i := 500 - for { - if grp < 13450 { - break - } - i++ - grp -= 13450 - } - gr = uint16(i) - break - case grp < 7415900: // 600-699 - grp -= 5850900 - i := 600 - for { - if grp < 15650 { - break - } - i++ - grp -= 15650 - } - gr = uint16(i) - break - case grp < 9230900: // 700-799 - grp -= 7415900 - i := 700 - for { - if grp < 18150 { - break - } - i++ - grp -= 18150 - } - gr = uint16(i) - break - case grp < 11345900: // 800-899 - grp -= 9230900 - i := 800 - for { - if grp < 21150 { - break - } - i++ - grp -= 21150 - } - gr = uint16(i) - break - default: // 900+ - grp -= 11345900 - i := 900 - for { - if grp < 23950 { - break - } - i++ - grp -= 23950 - } - gr = uint16(i) - break } - return gr + return uint16(gr) } func dumpSaveData(s *Session, data []byte, suffix string) {