mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 07:55:33 +01:00
various Tower changes
This commit is contained in:
@@ -11,12 +11,12 @@ import (
|
|||||||
// MsgMhfPostGemInfo represents the MSG_MHF_POST_GEM_INFO
|
// MsgMhfPostGemInfo represents the MSG_MHF_POST_GEM_INFO
|
||||||
type MsgMhfPostGemInfo struct {
|
type MsgMhfPostGemInfo struct {
|
||||||
AckHandle uint32
|
AckHandle uint32
|
||||||
Unk0 uint32
|
Op uint32
|
||||||
Unk1 uint32
|
Unk1 uint32
|
||||||
Unk2 int32
|
Gem int32
|
||||||
Unk3 int32
|
Quantity int32
|
||||||
Unk4 int32
|
CID int32
|
||||||
Unk5 int32
|
Message int32
|
||||||
Unk6 int32
|
Unk6 int32
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,12 +28,12 @@ func (m *MsgMhfPostGemInfo) Opcode() network.PacketID {
|
|||||||
// Parse parses the packet from binary
|
// Parse parses the packet from binary
|
||||||
func (m *MsgMhfPostGemInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
func (m *MsgMhfPostGemInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
||||||
m.AckHandle = bf.ReadUint32()
|
m.AckHandle = bf.ReadUint32()
|
||||||
m.Unk0 = bf.ReadUint32()
|
m.Op = bf.ReadUint32()
|
||||||
m.Unk1 = bf.ReadUint32()
|
m.Unk1 = bf.ReadUint32()
|
||||||
m.Unk2 = bf.ReadInt32()
|
m.Gem = bf.ReadInt32()
|
||||||
m.Unk3 = bf.ReadInt32()
|
m.Quantity = bf.ReadInt32()
|
||||||
m.Unk4 = bf.ReadInt32()
|
m.CID = bf.ReadInt32()
|
||||||
m.Unk5 = bf.ReadInt32()
|
m.Message = bf.ReadInt32()
|
||||||
m.Unk6 = bf.ReadInt32()
|
m.Unk6 = bf.ReadInt32()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,26 @@
|
|||||||
package mhfpacket
|
package mhfpacket
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"erupe-ce/network/clientctx"
|
|
||||||
"erupe-ce/network"
|
|
||||||
"erupe-ce/common/byteframe"
|
"erupe-ce/common/byteframe"
|
||||||
|
"erupe-ce/network"
|
||||||
|
"erupe-ce/network/clientctx"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MsgMhfPostTenrouirai represents the MSG_MHF_POST_TENROUIRAI
|
// MsgMhfPostTenrouirai represents the MSG_MHF_POST_TENROUIRAI
|
||||||
type MsgMhfPostTenrouirai struct{
|
type MsgMhfPostTenrouirai struct {
|
||||||
AckHandle uint32
|
AckHandle uint32
|
||||||
Unk0 uint16
|
Unk0 uint8
|
||||||
Unk1 uint32
|
Unk1 uint8
|
||||||
Unk2 uint32
|
GuildID uint32
|
||||||
Unk3 uint32
|
Unk3 uint8
|
||||||
Unk4 uint32
|
Unk4 uint16
|
||||||
Unk5 uint8
|
Unk5 uint16
|
||||||
|
Unk6 uint16
|
||||||
|
Unk7 uint16
|
||||||
|
Unk8 uint16
|
||||||
|
Unk9 uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
// Opcode returns the ID associated with this packet type.
|
// Opcode returns the ID associated with this packet type.
|
||||||
@@ -27,12 +31,16 @@ func (m *MsgMhfPostTenrouirai) Opcode() network.PacketID {
|
|||||||
// Parse parses the packet from binary
|
// Parse parses the packet from binary
|
||||||
func (m *MsgMhfPostTenrouirai) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
func (m *MsgMhfPostTenrouirai) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
|
||||||
m.AckHandle = bf.ReadUint32()
|
m.AckHandle = bf.ReadUint32()
|
||||||
m.Unk0 = bf.ReadUint16()
|
m.Unk0 = bf.ReadUint8()
|
||||||
m.Unk1 = bf.ReadUint32()
|
m.Unk1 = bf.ReadUint8()
|
||||||
m.Unk2 = bf.ReadUint32()
|
m.GuildID = bf.ReadUint32()
|
||||||
m.Unk3 = bf.ReadUint32()
|
m.Unk3 = bf.ReadUint8()
|
||||||
m.Unk4 = bf.ReadUint32()
|
m.Unk4 = bf.ReadUint16()
|
||||||
m.Unk5 = bf.ReadUint8()
|
m.Unk5 = bf.ReadUint16()
|
||||||
|
m.Unk6 = bf.ReadUint16()
|
||||||
|
m.Unk7 = bf.ReadUint16()
|
||||||
|
m.Unk8 = bf.ReadUint16()
|
||||||
|
m.Unk9 = bf.ReadUint16()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ type MsgMhfPostTowerInfo struct {
|
|||||||
AckHandle uint32
|
AckHandle uint32
|
||||||
InfoType uint32
|
InfoType uint32
|
||||||
Unk1 uint32
|
Unk1 uint32
|
||||||
Unk2 int32
|
Skill int32
|
||||||
Unk3 int32
|
TR int32
|
||||||
Unk4 int32
|
TRP int32
|
||||||
Unk5 int32
|
Cost int32
|
||||||
Unk6 int32
|
Unk6 int32
|
||||||
Unk7 int32
|
Unk7 int32
|
||||||
Unk8 int32
|
Zone1 int32
|
||||||
Unk9 int64
|
Unk9 int64
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,13 +33,13 @@ func (m *MsgMhfPostTowerInfo) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clie
|
|||||||
m.AckHandle = bf.ReadUint32()
|
m.AckHandle = bf.ReadUint32()
|
||||||
m.InfoType = bf.ReadUint32()
|
m.InfoType = bf.ReadUint32()
|
||||||
m.Unk1 = bf.ReadUint32()
|
m.Unk1 = bf.ReadUint32()
|
||||||
m.Unk2 = bf.ReadInt32()
|
m.Skill = bf.ReadInt32()
|
||||||
m.Unk3 = bf.ReadInt32()
|
m.TR = bf.ReadInt32()
|
||||||
m.Unk4 = bf.ReadInt32()
|
m.TRP = bf.ReadInt32()
|
||||||
m.Unk5 = bf.ReadInt32()
|
m.Cost = bf.ReadInt32()
|
||||||
m.Unk6 = bf.ReadInt32()
|
m.Unk6 = bf.ReadInt32()
|
||||||
m.Unk7 = bf.ReadInt32()
|
m.Unk7 = bf.ReadInt32()
|
||||||
m.Unk8 = bf.ReadInt32()
|
m.Zone1 = bf.ReadInt32()
|
||||||
m.Unk9 = bf.ReadInt64()
|
m.Unk9 = bf.ReadInt64()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ CREATE TABLE IF NOT EXISTS tower (
|
|||||||
trp INT,
|
trp INT,
|
||||||
tsp INT,
|
tsp INT,
|
||||||
zone1 INT,
|
zone1 INT,
|
||||||
skills TEXT DEFAULT '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0'
|
skills TEXT DEFAULT '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0',
|
||||||
|
gems TEXT DEFAULT '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0'
|
||||||
);
|
);
|
||||||
|
|
||||||
END;
|
END;
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
package channelserver
|
package channelserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"go.uber.org/zap"
|
||||||
|
|
||||||
"erupe-ce/common/byteframe"
|
"erupe-ce/common/byteframe"
|
||||||
"erupe-ce/common/stringsupport"
|
"erupe-ce/common/stringsupport"
|
||||||
"erupe-ce/network/mhfpacket"
|
"erupe-ce/network/mhfpacket"
|
||||||
@@ -100,15 +102,32 @@ func handleMsgMhfGetTowerInfo(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
|
|
||||||
func handleMsgMhfPostTowerInfo(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfPostTowerInfo(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfPostTowerInfo)
|
pkt := p.(*mhfpacket.MsgMhfPostTowerInfo)
|
||||||
|
|
||||||
|
if s.server.erupeConfig.DevModeOptions.QuestDebugTools {
|
||||||
|
s.logger.Debug(
|
||||||
|
p.Opcode().String(),
|
||||||
|
zap.Uint32("InfoType", pkt.InfoType),
|
||||||
|
zap.Uint32("Unk1", pkt.Unk1),
|
||||||
|
zap.Int32("Skill", pkt.Skill),
|
||||||
|
zap.Int32("TR", pkt.TR),
|
||||||
|
zap.Int32("TRP", pkt.TRP),
|
||||||
|
zap.Int32("Cost", pkt.Cost),
|
||||||
|
zap.Int32("Unk6", pkt.Unk6),
|
||||||
|
zap.Int32("Unk7", pkt.Unk7),
|
||||||
|
zap.Int32("Zone1", pkt.Zone1),
|
||||||
|
zap.Int64("Unk9", pkt.Unk9),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
switch pkt.InfoType {
|
switch pkt.InfoType {
|
||||||
case 2:
|
case 2:
|
||||||
skills := "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
|
skills := "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
|
||||||
s.server.db.QueryRow(`SELECT skills FROM tower WHERE char_id=$1`, s.charID).Scan(&skills)
|
s.server.db.QueryRow(`SELECT skills FROM tower WHERE char_id=$1`, s.charID).Scan(&skills)
|
||||||
s.server.db.Exec(`UPDATE tower SET skills=$1, tsp=tsp-$2 WHERE char_id=$3`, stringsupport.CSVSetIndex(skills, int(pkt.Unk2), stringsupport.CSVGetIndex(skills, int(pkt.Unk2))+1), pkt.Unk5, s.charID)
|
s.server.db.Exec(`UPDATE tower SET skills=$1, tsp=tsp-$2 WHERE char_id=$3`, stringsupport.CSVSetIndex(skills, int(pkt.Skill), stringsupport.CSVGetIndex(skills, int(pkt.Skill))+1), pkt.Cost, s.charID)
|
||||||
case 7:
|
case 7:
|
||||||
s.server.db.Exec(`UPDATE tower SET tr=$1, trp=$2, zone1=zone1+$3 WHERE char_id=$4`, pkt.Unk3, pkt.Unk4, pkt.Unk8, s.charID)
|
s.server.db.Exec(`UPDATE tower SET tr=$1, trp=trp+$2, zone1=zone1+$3 WHERE char_id=$4`, pkt.TR, pkt.TRP, pkt.Zone1, s.charID)
|
||||||
}
|
}
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
|
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
}
|
}
|
||||||
|
|
||||||
type TenrouiraiCharScore struct {
|
type TenrouiraiCharScore struct {
|
||||||
@@ -170,7 +189,24 @@ func handleMsgMhfGetTenrouirai(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
|
|
||||||
func handleMsgMhfPostTenrouirai(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfPostTenrouirai(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfPostTenrouirai)
|
pkt := p.(*mhfpacket.MsgMhfPostTenrouirai)
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
|
|
||||||
|
if s.server.erupeConfig.DevModeOptions.QuestDebugTools {
|
||||||
|
s.logger.Debug(
|
||||||
|
p.Opcode().String(),
|
||||||
|
zap.Uint8("Unk0", pkt.Unk0),
|
||||||
|
zap.Uint8("Unk1", pkt.Unk1),
|
||||||
|
zap.Uint32("GuildID", pkt.GuildID),
|
||||||
|
zap.Uint8("Unk3", pkt.Unk3),
|
||||||
|
zap.Uint16("Unk4", pkt.Unk4),
|
||||||
|
zap.Uint16("Unk5", pkt.Unk5),
|
||||||
|
zap.Uint16("Unk6", pkt.Unk6),
|
||||||
|
zap.Uint16("Unk7", pkt.Unk7),
|
||||||
|
zap.Uint16("Unk8", pkt.Unk8),
|
||||||
|
zap.Uint16("Unk9", pkt.Unk9),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleMsgMhfGetBreakSeibatuLevelReward(s *Session, p mhfpacket.MHFPacket) {}
|
func handleMsgMhfGetBreakSeibatuLevelReward(s *Session, p mhfpacket.MHFPacket) {}
|
||||||
@@ -223,8 +259,8 @@ func handleMsgMhfPresentBox(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GemInfo struct {
|
type GemInfo struct {
|
||||||
Unk0 uint16
|
Gem uint16
|
||||||
Unk1 uint16
|
Quantity uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
type GemHistory struct {
|
type GemHistory struct {
|
||||||
@@ -239,8 +275,22 @@ func handleMsgMhfGetGemInfo(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
var data []*byteframe.ByteFrame
|
var data []*byteframe.ByteFrame
|
||||||
gemInfo := []GemInfo{}
|
gemInfo := []GemInfo{}
|
||||||
gemHistory := []GemHistory{}
|
gemHistory := []GemHistory{}
|
||||||
|
|
||||||
|
tempGems := "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
|
||||||
|
s.server.db.QueryRow(`SELECT gems FROM tower WHERE char_id=$1`, s.charID).Scan(&tempGems)
|
||||||
|
for i, v := range stringsupport.CSVElems(tempGems) {
|
||||||
|
gemInfo = append(gemInfo, GemInfo{uint16(((i / 3) * 256) + ((i % 3) + 1)), uint16(v)})
|
||||||
|
}
|
||||||
|
|
||||||
switch pkt.Unk0 {
|
switch pkt.Unk0 {
|
||||||
case 1:
|
case 1:
|
||||||
|
for _, info := range gemInfo {
|
||||||
|
bf := byteframe.NewByteFrame()
|
||||||
|
bf.WriteUint16(info.Gem)
|
||||||
|
bf.WriteUint16(info.Quantity)
|
||||||
|
data = append(data, bf)
|
||||||
|
}
|
||||||
|
default:
|
||||||
for _, history := range gemHistory {
|
for _, history := range gemHistory {
|
||||||
bf := byteframe.NewByteFrame()
|
bf := byteframe.NewByteFrame()
|
||||||
bf.WriteUint16(history.Unk0)
|
bf.WriteUint16(history.Unk0)
|
||||||
@@ -249,18 +299,34 @@ func handleMsgMhfGetGemInfo(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
bf.WriteBytes(stringsupport.PaddedString(history.Unk3, 14, true))
|
bf.WriteBytes(stringsupport.PaddedString(history.Unk3, 14, true))
|
||||||
data = append(data, bf)
|
data = append(data, bf)
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
for _, info := range gemInfo {
|
|
||||||
bf := byteframe.NewByteFrame()
|
|
||||||
bf.WriteUint16(info.Unk0)
|
|
||||||
bf.WriteUint16(info.Unk1)
|
|
||||||
data = append(data, bf)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
doAckEarthSucceed(s, pkt.AckHandle, data)
|
doAckEarthSucceed(s, pkt.AckHandle, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleMsgMhfPostGemInfo(s *Session, p mhfpacket.MHFPacket) {
|
func handleMsgMhfPostGemInfo(s *Session, p mhfpacket.MHFPacket) {
|
||||||
pkt := p.(*mhfpacket.MsgMhfPostGemInfo)
|
pkt := p.(*mhfpacket.MsgMhfPostGemInfo)
|
||||||
|
|
||||||
|
if s.server.erupeConfig.DevModeOptions.QuestDebugTools {
|
||||||
|
s.logger.Debug(
|
||||||
|
p.Opcode().String(),
|
||||||
|
zap.Uint32("Op", pkt.Op),
|
||||||
|
zap.Uint32("Unk1", pkt.Unk1),
|
||||||
|
zap.Int32("Gem", pkt.Gem),
|
||||||
|
zap.Int32("Quantity", pkt.Quantity),
|
||||||
|
zap.Int32("CID", pkt.CID),
|
||||||
|
zap.Int32("Message", pkt.Message),
|
||||||
|
zap.Int32("Unk6", pkt.Unk6),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
gems := "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
|
||||||
|
s.server.db.QueryRow(`SELECT gems FROM tower WHERE char_id=$1`, s.charID).Scan(&gems)
|
||||||
|
switch pkt.Op {
|
||||||
|
case 1: // Add gem
|
||||||
|
i := int(((pkt.Gem / 256) * 3) + (((pkt.Gem - ((pkt.Gem / 256) * 256)) - 1) % 3))
|
||||||
|
s.server.db.Exec(`UPDATE tower SET gems=$1 WHERE char_id=$2`, stringsupport.CSVSetIndex(gems, i, stringsupport.CSVGetIndex(gems, i)+int(pkt.Quantity)), s.charID)
|
||||||
|
case 2: // Transfer gem
|
||||||
|
// no way im doing this for now
|
||||||
|
}
|
||||||
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user