mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-13 07:25:03 +01:00
optimise grpToGR
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user