revert broadcast package refactor in prep for session interface refactor

This commit is contained in:
stratic-dev
2024-10-15 04:11:58 +01:00
parent f6efbb39a6
commit 0fa7f37743
39 changed files with 475 additions and 523 deletions

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"encoding/binary" "encoding/binary"
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
"erupe-ce/utils/mhfcourse" "erupe-ce/utils/mhfcourse"
@@ -31,7 +30,7 @@ func stubEnumerateNoResults(s *Session, ackHandle uint32) {
enumBf := byteframe.NewByteFrame() enumBf := byteframe.NewByteFrame()
enumBf.WriteUint32(0) // Entry count (count for quests, rankings, events, etc.) enumBf.WriteUint32(0) // Entry count (count for quests, rankings, events, etc.)
broadcast.DoAckBufSucceed(s, ackHandle, enumBf.Data()) s.DoAckBufSucceed(ackHandle, enumBf.Data())
} }
func updateRights(s *Session) { func updateRights(s *Session) {
@@ -82,7 +81,7 @@ func handleMsgSysTerminalLog(s *Session, p mhfpacket.MHFPacket) {
} }
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(pkt.LogID + 1) // LogID to use for requests after this. resp.WriteUint32(pkt.LogID + 1) // LogID to use for requests after this.
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgSysLogin(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysLogin(s *Session, p mhfpacket.MHFPacket) {
@@ -129,7 +128,7 @@ func handleMsgSysLogin(s *Session, p mhfpacket.MHFPacket) {
panic(err) panic(err)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
updateRights(s) updateRights(s)
@@ -236,7 +235,7 @@ func handleMsgSysSetStatus(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysPing(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysPing(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysPing) pkt := p.(*mhfpacket.MsgSysPing)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgSysTime(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysTime(s *Session, p mhfpacket.MHFPacket) {
@@ -267,7 +266,7 @@ func handleMsgSysIssueLogkey(s *Session, p mhfpacket.MHFPacket) {
// Issue it. // Issue it.
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteBytes(logKey) resp.WriteBytes(logKey)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgSysRecordLog(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysRecordLog(s *Session, p mhfpacket.MHFPacket) {
@@ -289,7 +288,7 @@ func handleMsgSysRecordLog(s *Session, p mhfpacket.MHFPacket) {
} }
// remove a client returning to town from reserved slots to make sure the stage is hidden from board // remove a client returning to town from reserved slots to make sure the stage is hidden from board
delete(s.stage.reservedClientSlots, s.CharID) delete(s.stage.reservedClientSlots, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgSysEcho(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysEcho(s *Session, p mhfpacket.MHFPacket) {}
@@ -314,12 +313,12 @@ func handleMsgSysLockGlobalSema(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint8(0) bf.WriteUint8(0)
ps.Uint16(bf, pkt.ServerChannelIDString, false) ps.Uint16(bf, pkt.ServerChannelIDString, false)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgSysUnlockGlobalSema(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysUnlockGlobalSema(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysUnlockGlobalSema) pkt := p.(*mhfpacket.MsgSysUnlockGlobalSema)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgSysUpdateRight(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysUpdateRight(s *Session, p mhfpacket.MHFPacket) {}
@@ -331,7 +330,7 @@ func handleMsgSysAuthTerminal(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysRightsReload(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysRightsReload(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysRightsReload) pkt := p.(*mhfpacket.MsgSysRightsReload)
updateRights(s) updateRights(s)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
@@ -580,7 +579,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
} }
resp.Seek(0, io.SeekStart) resp.Seek(0, io.SeekStart)
resp.WriteUint16(count) resp.WriteUint16(count)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgCaExchangeItem(s *Session, p mhfpacket.MHFPacket) {} func handleMsgCaExchangeItem(s *Session, p mhfpacket.MHFPacket) {}
@@ -590,7 +589,7 @@ func handleMsgMhfServerCommand(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfAnnounce(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAnnounce(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAnnounce) pkt := p.(*mhfpacket.MsgMhfAnnounce)
s.Server.BroadcastRaviente(pkt.IPAddress, pkt.Port, pkt.StageID, pkt.Data.ReadUint8()) s.Server.BroadcastRaviente(pkt.IPAddress, pkt.Port, pkt.StageID, pkt.Data.ReadUint8())
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfSetLoginwindow(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfSetLoginwindow(s *Session, p mhfpacket.MHFPacket) {}
@@ -613,7 +612,7 @@ func handleMsgMhfGetCaUniqueID(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfTransferItem(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfTransferItem(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfTransferItem) pkt := p.(*mhfpacket.MsgMhfTransferItem)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfEnumeratePrice(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEnumeratePrice(s *Session, p mhfpacket.MHFPacket) {
@@ -778,7 +777,7 @@ func handleMsgMhfEnumeratePrice(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(gz.Unk3) bf.WriteUint16(gz.Unk3)
bf.WriteUint8(gz.Unk4) bf.WriteUint8(gz.Unk4)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfEnumerateOrder(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEnumerateOrder(s *Session, p mhfpacket.MHFPacket) {
@@ -812,7 +811,7 @@ func handleMsgMhfEnumerateUnionItem(s *Session, p mhfpacket.MHFPacket) {
items := userGetItems(s) items := userGetItems(s)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteBytes(mhfitem.SerializeWarehouseItems(items)) bf.WriteBytes(mhfitem.SerializeWarehouseItems(items))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfUpdateUnionItem(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateUnionItem(s *Session, p mhfpacket.MHFPacket) {
@@ -823,7 +822,7 @@ func handleMsgMhfUpdateUnionItem(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec(`UPDATE users u SET item_box=$1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2)`, mhfitem.SerializeWarehouseItems(newStacks), s.CharID) database.Exec(`UPDATE users u SET item_box=$1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2)`, mhfitem.SerializeWarehouseItems(newStacks), s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfGetCogInfo(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfGetCogInfo(s *Session, p mhfpacket.MHFPacket) {}
@@ -857,7 +856,7 @@ func handleMsgMhfCheckWeeklyStamp(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(0) bf.WriteUint16(0)
bf.WriteUint16(0) bf.WriteUint16(0)
bf.WriteUint32(uint32(gametime.TimeWeekStart().Unix())) bf.WriteUint32(uint32(gametime.TimeWeekStart().Unix()))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfExchangeWeeklyStamp(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfExchangeWeeklyStamp(s *Session, p mhfpacket.MHFPacket) {
@@ -887,7 +886,7 @@ func handleMsgMhfExchangeWeeklyStamp(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(tktStack.Item.ItemID) bf.WriteUint16(tktStack.Item.ItemID)
bf.WriteUint16(tktStack.Quantity) bf.WriteUint16(tktStack.Quantity)
bf.WriteUint32(uint32(gametime.TimeWeekStart().Unix())) bf.WriteUint32(uint32(gametime.TimeWeekStart().Unix()))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func getGoocooData(s *Session, cid uint32) [][]byte { func getGoocooData(s *Session, cid uint32) [][]byte {
@@ -919,7 +918,7 @@ func handleMsgMhfEnumerateGuacot(s *Session, p mhfpacket.MHFPacket) {
for _, goocoo := range goocoos { for _, goocoo := range goocoos {
bf.WriteBytes(goocoo) bf.WriteBytes(goocoo)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfUpdateGuacot(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateGuacot(s *Session, p mhfpacket.MHFPacket) {
@@ -946,7 +945,7 @@ func handleMsgMhfUpdateGuacot(s *Session, p mhfpacket.MHFPacket) {
dumpSaveData(s, bf.Data(), fmt.Sprintf("goocoo-%d", goocoo.Index)) dumpSaveData(s, bf.Data(), fmt.Sprintf("goocoo-%d", goocoo.Index))
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
type Scenario struct { type Scenario struct {
@@ -971,7 +970,7 @@ func handleMsgMhfInfoScenarioCounter(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
scenarioData.Close() scenarioData.Close()
s.Logger.Error("Failed to get scenario counter info from db", zap.Error(err)) s.Logger.Error("Failed to get scenario counter info from db", zap.Error(err))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
for scenarioData.Next() { for scenarioData.Next() {
@@ -1000,7 +999,7 @@ func handleMsgMhfInfoScenarioCounter(s *Session, p mhfpacket.MHFPacket) {
} }
bf.WriteUint8(scenario.CategoryID) bf.WriteUint8(scenario.CategoryID)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetEtcPoints(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetEtcPoints(s *Session, p mhfpacket.MHFPacket) {
@@ -1022,7 +1021,7 @@ func handleMsgMhfGetEtcPoints(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(bonusQuests) resp.WriteUint32(bonusQuests)
resp.WriteUint32(dailyQuests) resp.WriteUint32(dailyQuests)
resp.WriteUint32(promoPoints) resp.WriteUint32(promoPoints)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) {
@@ -1050,7 +1049,7 @@ func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) {
database.Exec(fmt.Sprintf(`UPDATE characters SET %s = %s + $1 WHERE id = $2`, column, column), pkt.Delta, s.CharID) database.Exec(fmt.Sprintf(`UPDATE characters SET %s = %s + $1 WHERE id = $2`, column, column), pkt.Delta, s.CharID)
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) {
@@ -1111,14 +1110,14 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(rewardUnk) bf.WriteUint16(rewardUnk)
bf.WriteUint16(reward.Item.ItemID) bf.WriteUint16(reward.Item.ItemID)
bf.WriteUint16(reward.Quantity) bf.WriteUint16(reward.Quantity)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfStampcardPrize(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfStampcardPrize(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfUnreserveSrg(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUnreserveSrg(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfUnreserveSrg) pkt := p.(*mhfpacket.MsgMhfUnreserveSrg)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfKickExportForce(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfKickExportForce(s *Session, p mhfpacket.MHFPacket) {}
@@ -1141,7 +1140,7 @@ func handleMsgMhfGetEarthStatus(s *Session, p mhfpacket.MHFPacket) {
} }
bf.WriteInt32(m) bf.WriteInt32(m)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfRegistSpabiTime(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfRegistSpabiTime(s *Session, p mhfpacket.MHFPacket) {}
@@ -1180,7 +1179,7 @@ func handleMsgMhfGetEarthValue(s *Session, p mhfpacket.MHFPacket) {
} }
data = append(data, bf) data = append(data, bf)
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfDebugPostValue(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfDebugPostValue(s *Session, p mhfpacket.MHFPacket) {}
@@ -1191,7 +1190,7 @@ func handleMsgMhfGetRandFromTable(s *Session, p mhfpacket.MHFPacket) {
for i := uint16(0); i < pkt.Results; i++ { for i := uint16(0); i < pkt.Results; i++ {
bf.WriteUint32(0) bf.WriteUint32(0)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetSenyuDailyCount(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetSenyuDailyCount(s *Session, p mhfpacket.MHFPacket) {
@@ -1199,7 +1198,7 @@ func handleMsgMhfGetSenyuDailyCount(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint16(0) bf.WriteUint16(0)
bf.WriteUint16(0) bf.WriteUint16(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
type SeibattleTimetable struct { type SeibattleTimetable struct {
@@ -1337,12 +1336,12 @@ func handleMsgMhfGetSeibattle(s *Session, p mhfpacket.MHFPacket) {
data = append(data, bf) data = append(data, bf)
} }
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfPostSeibattle(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostSeibattle(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPostSeibattle) pkt := p.(*mhfpacket.MsgMhfPostSeibattle)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfGetDailyMissionMaster(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfGetDailyMissionMaster(s *Session, p mhfpacket.MHFPacket) {}
@@ -1375,7 +1374,7 @@ func handleMsgMhfGetEquipSkinHist(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to load skin_hist", zap.Error(err)) s.Logger.Error("Failed to load skin_hist", zap.Error(err))
data = make([]byte, size) data = make([]byte, size)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfUpdateEquipSkinHist(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateEquipSkinHist(s *Session, p mhfpacket.MHFPacket) {
@@ -1389,7 +1388,7 @@ func handleMsgMhfUpdateEquipSkinHist(s *Session, p mhfpacket.MHFPacket) {
err = database.QueryRow("SELECT COALESCE(skin_hist, $2) FROM characters WHERE id = $1", s.CharID, make([]byte, size)).Scan(&data) err = database.QueryRow("SELECT COALESCE(skin_hist, $2) FROM characters WHERE id = $1", s.CharID, make([]byte, size)).Scan(&data)
if err != nil { if err != nil {
s.Logger.Error("Failed to get skin_hist", zap.Error(err)) s.Logger.Error("Failed to get skin_hist", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -1401,14 +1400,14 @@ func handleMsgMhfUpdateEquipSkinHist(s *Session, p mhfpacket.MHFPacket) {
data[startByte+byteInd] |= bits.Reverse8(1 << uint(bitInByte)) data[startByte+byteInd] |= bits.Reverse8(1 << uint(bitInByte))
dumpSaveData(s, data, "skinhist") dumpSaveData(s, data, "skinhist")
database.Exec("UPDATE characters SET skin_hist=$1 WHERE id=$2", data, s.CharID) database.Exec("UPDATE characters SET skin_hist=$1 WHERE id=$2", data, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfGetUdShopCoin(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdShopCoin(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdShopCoin) pkt := p.(*mhfpacket.MsgMhfGetUdShopCoin)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(0) bf.WriteUint32(0)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfUseUdShopCoin(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfUseUdShopCoin(s *Session, p mhfpacket.MHFPacket) {}
@@ -1426,7 +1425,7 @@ func handleMsgMhfGetEnhancedMinidata(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to load minidata") s.Logger.Error("Failed to load minidata")
data = make([]byte, 1) data = make([]byte, 1)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSetEnhancedMinidata(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSetEnhancedMinidata(s *Session, p mhfpacket.MHFPacket) {
@@ -1440,7 +1439,7 @@ func handleMsgMhfSetEnhancedMinidata(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to save minidata", zap.Error(err)) s.Logger.Error("Failed to save minidata", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfGetLobbyCrowd(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetLobbyCrowd(s *Session, p mhfpacket.MHFPacket) {
@@ -1450,7 +1449,7 @@ func handleMsgMhfGetLobbyCrowd(s *Session, p mhfpacket.MHFPacket) {
// It can be worried about later if we ever get to the point where there are // It can be worried about later if we ever get to the point where there are
// full servers to actually need to migrate people from and empty ones to // full servers to actually need to migrate people from and empty ones to
pkt := p.(*mhfpacket.MsgMhfGetLobbyCrowd) pkt := p.(*mhfpacket.MsgMhfGetLobbyCrowd)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 0x320)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 0x320))
} }
type TrendWeapon struct { type TrendWeapon struct {
@@ -1490,7 +1489,7 @@ func handleMsgMhfGetTrendWeapon(s *Session, p mhfpacket.MHFPacket) {
} }
bf.Seek(0, 0) bf.Seek(0, 0)
bf.WriteUint8(x) bf.WriteUint8(x)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfUpdateUseTrendWeaponLog(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateUseTrendWeaponLog(s *Session, p mhfpacket.MHFPacket) {
@@ -1501,5 +1500,5 @@ func handleMsgMhfUpdateUseTrendWeaponLog(s *Session, p mhfpacket.MHFPacket) {
} }
database.Exec(`INSERT INTO trend_weapons (weapon_id, weapon_type, count) VALUES ($1, $2, 1) ON CONFLICT (weapon_id) DO database.Exec(`INSERT INTO trend_weapons (weapon_id, weapon_type, count) VALUES ($1, $2, 1) ON CONFLICT (weapon_id) DO
UPDATE SET count = trend_weapons.count+1`, pkt.WeaponID, pkt.WeaponType) UPDATE SET count = trend_weapons.count+1`, pkt.WeaponID, pkt.WeaponType)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"fmt" "fmt"
@@ -106,7 +105,7 @@ func handleMsgMhfGetAchievement(s *Session, p mhfpacket.MHFPacket) {
&scores[17], &scores[18], &scores[19], &scores[20], &scores[21], &scores[22], &scores[23], &scores[24], &scores[17], &scores[18], &scores[19], &scores[20], &scores[21], &scores[22], &scores[23], &scores[24],
&scores[25], &scores[26], &scores[27], &scores[28], &scores[29], &scores[30], &scores[31], &scores[32]) &scores[25], &scores[26], &scores[27], &scores[28], &scores[29], &scores[30], &scores[31], &scores[32])
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 20)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 20))
return return
} }
@@ -142,12 +141,12 @@ func handleMsgMhfGetAchievement(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(points) resp.WriteUint32(points)
resp.WriteUint32(points) resp.WriteUint32(points)
resp.WriteUint32(points) resp.WriteUint32(points)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfSetCaAchievementHist(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSetCaAchievementHist(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSetCaAchievementHist) pkt := p.(*mhfpacket.MsgMhfSetCaAchievementHist)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfResetAchievement(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfResetAchievement(s *Session, p mhfpacket.MHFPacket) {}

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
"erupe-ce/utils/token" "erupe-ce/utils/token"
@@ -20,7 +19,7 @@ func handleMsgMhfGetBbsUserStatus(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(0) bf.WriteUint32(0)
bf.WriteUint32(0) bf.WriteUint32(0)
bf.WriteUint32(0) bf.WriteUint32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
// Checks the status of Bultin Board Server to see if authenticated // Checks the status of Bultin Board Server to see if authenticated
@@ -31,7 +30,7 @@ func handleMsgMhfGetBbsSnsStatus(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(401) //unk http status? bf.WriteUint32(401) //unk http status?
bf.WriteUint32(401) //unk http status? bf.WriteUint32(401) //unk http status?
bf.WriteUint32(0) bf.WriteUint32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
// Tells the game client what host port and gives the bultin board article a token // Tells the game client what host port and gives the bultin board article a token
@@ -50,6 +49,6 @@ func handleMsgMhfApplyBbsArticle(s *Session, p mhfpacket.MHFPacket) {
if config.GetConfig().Screenshots.Enabled && config.GetConfig().Discord.Enabled { if config.GetConfig().Screenshots.Enabled && config.GetConfig().Discord.Enabled {
s.Server.DiscordScreenShotSend(pkt.Name, pkt.Title, pkt.Description, articleToken) s.Server.DiscordScreenShotSend(pkt.Name, pkt.Title, pkt.Description, articleToken)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }

View File

@@ -1,7 +1,6 @@
package channelserver package channelserver
import ( import (
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
@@ -30,7 +29,7 @@ func handleMsgMhfAcquireCafeItem(s *Session, p mhfpacket.MHFPacket) {
} }
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(netcafePoints) resp.WriteUint32(netcafePoints)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfUpdateCafepoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateCafepoint(s *Session, p mhfpacket.MHFPacket) {
@@ -46,7 +45,7 @@ func handleMsgMhfUpdateCafepoint(s *Session, p mhfpacket.MHFPacket) {
} }
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(netcafePoints) resp.WriteUint32(netcafePoints)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfCheckDailyCafepoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfCheckDailyCafepoint(s *Session, p mhfpacket.MHFPacket) {
@@ -83,7 +82,7 @@ func handleMsgMhfCheckDailyCafepoint(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(bondBonus) bf.WriteUint32(bondBonus)
bf.WriteUint32(bonusQuests) bf.WriteUint32(bonusQuests)
bf.WriteUint32(dailyQuests) bf.WriteUint32(dailyQuests)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) {
@@ -118,7 +117,7 @@ func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(0) bf.WriteUint16(0)
ps.Uint16(bf, fmt.Sprintf(s.Server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true) ps.Uint16(bf, fmt.Sprintf(s.Server.i18n.cafe.reset, int(cafeReset.Month()), cafeReset.Day()), true)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
type CafeBonus struct { type CafeBonus struct {
@@ -148,7 +147,7 @@ func handleMsgMhfGetCafeDurationBonusInfo(s *Session, p mhfpacket.MHFPacket) {
FROM cafebonus cb ORDER BY id ASC;`, s.CharID) FROM cafebonus cb ORDER BY id ASC;`, s.CharID)
if err != nil { if err != nil {
s.Logger.Error("Error getting cafebonus", zap.Error(err)) s.Logger.Error("Error getting cafebonus", zap.Error(err))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
} else { } else {
for rows.Next() { for rows.Next() {
count++ count++
@@ -168,7 +167,7 @@ func handleMsgMhfGetCafeDurationBonusInfo(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(uint32(gametime.TimeAdjusted().Unix())) resp.WriteUint32(uint32(gametime.TimeAdjusted().Unix()))
resp.WriteUint32(count) resp.WriteUint32(count)
resp.WriteBytes(bf.Data()) resp.WriteBytes(bf.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
} }
@@ -194,7 +193,7 @@ func handleMsgMhfReceiveCafeDurationBonus(s *Session, p mhfpacket.MHFPacket) {
WHERE ch.id = $1 WHERE ch.id = $1
) >= time_req`, s.CharID, gametime.TimeAdjusted().Unix()-s.sessionStart) ) >= time_req`, s.CharID, gametime.TimeAdjusted().Unix()-s.sessionStart)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} else { } else {
for rows.Next() { for rows.Next() {
cafeBonus := &CafeBonus{} cafeBonus := &CafeBonus{}
@@ -210,7 +209,7 @@ func handleMsgMhfReceiveCafeDurationBonus(s *Session, p mhfpacket.MHFPacket) {
} }
bf.Seek(0, io.SeekStart) bf.Seek(0, io.SeekStart)
bf.WriteUint32(count) bf.WriteUint32(count)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
} }
@@ -232,7 +231,7 @@ func handleMsgMhfPostCafeDurationBonusReceived(s *Session, p mhfpacket.MHFPacket
} }
database.Exec("INSERT INTO public.cafe_accepted VALUES ($1, $2)", cbID, s.CharID) database.Exec("INSERT INTO public.cafe_accepted VALUES ($1, $2)", cbID, s.CharID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func addPointNetcafe(s *Session, p int) error { func addPointNetcafe(s *Session, p int) error {
@@ -264,17 +263,17 @@ func handleMsgMhfStartBoostTime(s *Session, p mhfpacket.MHFPacket) {
boostLimit := gametime.TimeAdjusted().Add(time.Duration(config.GetConfig().GameplayOptions.BoostTimeDuration) * time.Second) boostLimit := gametime.TimeAdjusted().Add(time.Duration(config.GetConfig().GameplayOptions.BoostTimeDuration) * time.Second)
if config.GetConfig().GameplayOptions.DisableBoostTime { if config.GetConfig().GameplayOptions.DisableBoostTime {
bf.WriteUint32(0) bf.WriteUint32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
return return
} }
database.Exec("UPDATE characters SET boost_time=$1 WHERE id=$2", boostLimit, s.CharID) database.Exec("UPDATE characters SET boost_time=$1 WHERE id=$2", boostLimit, s.CharID)
bf.WriteUint32(uint32(boostLimit.Unix())) bf.WriteUint32(uint32(boostLimit.Unix()))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetBoostTime(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetBoostTime(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetBoostTime) pkt := p.(*mhfpacket.MsgMhfGetBoostTime)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{}) s.DoAckBufSucceed(pkt.AckHandle, []byte{})
} }
func handleMsgMhfGetBoostTimeLimit(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetBoostTimeLimit(s *Session, p mhfpacket.MHFPacket) {
@@ -291,8 +290,8 @@ func handleMsgMhfGetBoostTimeLimit(s *Session, p mhfpacket.MHFPacket) {
} else { } else {
bf.WriteUint32(uint32(boostLimit.Unix())) bf.WriteUint32(uint32(boostLimit.Unix()))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfGetBoostRight(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetBoostRight(s *Session, p mhfpacket.MHFPacket) {
@@ -304,27 +303,27 @@ func handleMsgMhfGetBoostRight(s *Session, p mhfpacket.MHFPacket) {
} }
err = database.QueryRow("SELECT boost_time FROM characters WHERE id=$1", s.CharID).Scan(&boostLimit) err = database.QueryRow("SELECT boost_time FROM characters WHERE id=$1", s.CharID).Scan(&boostLimit)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
if boostLimit.After(gametime.TimeAdjusted()) { if boostLimit.After(gametime.TimeAdjusted()) {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x02}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x02})
} }
} }
func handleMsgMhfPostBoostTimeQuestReturn(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostBoostTimeQuestReturn(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPostBoostTimeQuestReturn) pkt := p.(*mhfpacket.MsgMhfPostBoostTimeQuestReturn)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfPostBoostTime(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostBoostTime(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPostBoostTime) pkt := p.(*mhfpacket.MsgMhfPostBoostTime)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfPostBoostTimeLimit(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostBoostTimeLimit(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPostBoostTimeLimit) pkt := p.(*mhfpacket.MsgMhfPostBoostTimeLimit)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
ps "erupe-ce/utils/pascalstring" ps "erupe-ce/utils/pascalstring"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
@@ -130,7 +129,7 @@ func handleMsgMhfEnumerateCampaign(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(link.CategoryID) bf.WriteUint16(link.CategoryID)
bf.WriteUint32(link.CampaignID) bf.WriteUint32(link.CampaignID)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfStateCampaign(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfStateCampaign(s *Session, p mhfpacket.MHFPacket) {
@@ -138,14 +137,14 @@ func handleMsgMhfStateCampaign(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint16(1) bf.WriteUint16(1)
bf.WriteUint16(0) bf.WriteUint16(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfApplyCampaign(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfApplyCampaign(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfApplyCampaign) pkt := p.(*mhfpacket.MsgMhfApplyCampaign)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(1) bf.WriteUint32(1)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfEnumerateItem(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEnumerateItem(s *Session, p mhfpacket.MHFPacket) {
@@ -168,10 +167,10 @@ func handleMsgMhfEnumerateItem(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(item.Unk4) bf.WriteUint32(item.Unk4)
bf.WriteUint32(item.Unk5) bf.WriteUint32(item.Unk5)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfAcquireItem(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAcquireItem(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAcquireItem) pkt := p.(*mhfpacket.MsgMhfAcquireItem)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
"time" "time"
@@ -68,7 +67,7 @@ func handleMsgMhfGetRyoudama(s *Session, p mhfpacket.MHFPacket) {
data = append(data, bf) data = append(data, bf)
} }
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfPostRyoudama(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfPostRyoudama(s *Session, p mhfpacket.MHFPacket) {}
@@ -76,12 +75,12 @@ func handleMsgMhfPostRyoudama(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetTinyBin(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetTinyBin(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetTinyBin) pkt := p.(*mhfpacket.MsgMhfGetTinyBin)
// requested after conquest quests // requested after conquest quests
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{}) s.DoAckBufSucceed(pkt.AckHandle, []byte{})
} }
func handleMsgMhfPostTinyBin(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostTinyBin(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPostTinyBin) pkt := p.(*mhfpacket.MsgMhfPostTinyBin)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfCaravanMyScore(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfCaravanMyScore(s *Session, p mhfpacket.MHFPacket) {
@@ -93,7 +92,7 @@ func handleMsgMhfCaravanMyScore(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
*/ */
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfCaravanRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfCaravanRanking(s *Session, p mhfpacket.MHFPacket) {
@@ -109,7 +108,7 @@ func handleMsgMhfCaravanRanking(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(1) bf.WriteInt32(1)
bf.WriteBytes(stringsupport.PaddedString("Test", 14, true)) bf.WriteBytes(stringsupport.PaddedString("Test", 14, true))
*/ */
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfCaravanMyRank(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfCaravanMyRank(s *Session, p mhfpacket.MHFPacket) {
@@ -120,5 +119,5 @@ func handleMsgMhfCaravanMyRank(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
*/ */
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }

View File

@@ -5,7 +5,6 @@ import (
"errors" "errors"
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/utils/bfutil" "erupe-ce/utils/bfutil"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
"fmt" "fmt"
@@ -261,5 +260,5 @@ func (save *CharacterSaveData) updateStructWithSaveData() {
func handleMsgMhfSexChanger(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSexChanger(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSexChanger) pkt := p.(*mhfpacket.MsgMhfSexChanger)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
@@ -19,7 +18,7 @@ func handleMsgSysEnumerateClient(s *Session, p mhfpacket.MHFPacket) {
if !ok { if !ok {
s.Server.stagesLock.RUnlock() s.Server.stagesLock.RUnlock()
s.Logger.Warn("Can't enumerate clients for stage that doesn't exist!", zap.String("stageID", pkt.StageID)) s.Logger.Warn("Can't enumerate clients for stage that doesn't exist!", zap.String("stageID", pkt.StageID))
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
s.Server.stagesLock.RUnlock() s.Server.stagesLock.RUnlock()
@@ -55,7 +54,7 @@ func handleMsgSysEnumerateClient(s *Session, p mhfpacket.MHFPacket) {
} }
stage.RUnlock() stage.RUnlock()
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
s.Logger.Debug("MsgSysEnumerateClient Done!") s.Logger.Debug("MsgSysEnumerateClient Done!")
} }
@@ -86,7 +85,7 @@ func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) {
} }
resp.Seek(0, 0) resp.Seek(0, 0)
resp.WriteUint32(count) resp.WriteUint32(count)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) {
@@ -119,7 +118,7 @@ func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) {
} }
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfShutClient(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfShutClient(s *Session, p mhfpacket.MHFPacket) {}

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
"erupe-ce/utils/mhfmon" "erupe-ce/utils/mhfmon"
@@ -39,7 +38,7 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) {
diff, err := nullcomp.Decompress(pkt.RawDataPayload) diff, err := nullcomp.Decompress(pkt.RawDataPayload)
if err != nil { if err != nil {
s.Logger.Error("Failed to decompress diff", zap.Error(err)) s.Logger.Error("Failed to decompress diff", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
// Perform diff. // Perform diff.
@@ -51,7 +50,7 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) {
saveData, err := nullcomp.Decompress(pkt.RawDataPayload) saveData, err := nullcomp.Decompress(pkt.RawDataPayload)
if err != nil { if err != nil {
s.Logger.Error("Failed to decompress savedata from packet", zap.Error(err)) s.Logger.Error("Failed to decompress savedata from packet", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
if config.GetConfig().SaveDumps.RawEnabled { if config.GetConfig().SaveDumps.RawEnabled {
@@ -82,7 +81,7 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to update character name in db", zap.Error(err)) s.Logger.Error("Failed to update character name in db", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func grpToGR(n int) uint16 { func grpToGR(n int) uint16 {
@@ -154,7 +153,7 @@ func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) {
} }
if _, err := os.Stat(filepath.Join(config.GetConfig().BinPath, "save_override.bin")); err == nil { if _, err := os.Stat(filepath.Join(config.GetConfig().BinPath, "save_override.bin")); err == nil {
data, _ := os.ReadFile(filepath.Join(config.GetConfig().BinPath, "save_override.bin")) data, _ := os.ReadFile(filepath.Join(config.GetConfig().BinPath, "save_override.bin"))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
return return
} }
@@ -165,7 +164,7 @@ func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) {
s.rawConn.Close() // Terminate the connection s.rawConn.Close() // Terminate the connection
return return
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
decompSaveData, err := nullcomp.Decompress(data) decompSaveData, err := nullcomp.Decompress(data)
if err != nil { if err != nil {
@@ -191,7 +190,7 @@ func handleMsgMhfSaveScenarioData(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to update scenario data in db", zap.Error(err)) s.Logger.Error("Failed to update scenario data in db", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfLoadScenarioData(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadScenarioData(s *Session, p mhfpacket.MHFPacket) {
@@ -209,7 +208,7 @@ func handleMsgMhfLoadScenarioData(s *Session, p mhfpacket.MHFPacket) {
} else { } else {
bf.WriteBytes(scenarioData) bf.WriteBytes(scenarioData)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
var paperGiftData = map[uint32][]PaperGift{ var paperGiftData = map[uint32][]PaperGift{
@@ -1546,7 +1545,7 @@ func handleMsgMhfGetPaperData(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(gift.Unk3) bf.WriteUint16(gift.Unk3)
data = append(data, bf) data = append(data, bf)
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} else if pkt.Unk2 == 0 { } else if pkt.Unk2 == 0 {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint16(uint16(len(paperMissions.Timetables))) bf.WriteUint16(uint16(len(paperMissions.Timetables)))
@@ -1564,7 +1563,7 @@ func handleMsgMhfGetPaperData(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(mdata.Reward2ID) bf.WriteUint16(mdata.Reward2ID)
bf.WriteUint8(mdata.Reward2Quantity) bf.WriteUint8(mdata.Reward2Quantity)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} else { } else {
for _, pdata := range paperData { for _, pdata := range paperData {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
@@ -1577,7 +1576,7 @@ func handleMsgMhfGetPaperData(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt16(pdata.Unk6) bf.WriteInt16(pdata.Unk6)
data = append(data, bf) data = append(data, bf)
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
ps "erupe-ce/utils/pascalstring" ps "erupe-ce/utils/pascalstring"
@@ -123,7 +122,7 @@ func handleMsgMhfEnumerateDistItem(s *Session, p mhfpacket.MHFPacket) {
} }
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
type DistributionItem struct { type DistributionItem struct {
@@ -167,7 +166,7 @@ func handleMsgMhfApplyDistItem(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(item.ID) bf.WriteUint32(item.ID)
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfAcquireDistItem(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAcquireDistItem(s *Session, p mhfpacket.MHFPacket) {
@@ -200,7 +199,7 @@ func handleMsgMhfAcquireDistItem(s *Session, p mhfpacket.MHFPacket) {
} }
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfGetDistDescription(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetDistDescription(s *Session, p mhfpacket.MHFPacket) {
@@ -213,11 +212,11 @@ func handleMsgMhfGetDistDescription(s *Session, p mhfpacket.MHFPacket) {
err = database.QueryRow("SELECT description FROM distribution WHERE id = $1", pkt.DistributionID).Scan(&desc) err = database.QueryRow("SELECT description FROM distribution WHERE id = $1", pkt.DistributionID).Scan(&desc)
if err != nil { if err != nil {
s.Logger.Error("Error parsing item distribution description", zap.Error(err)) s.Logger.Error("Error parsing item distribution description", zap.Error(err))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
ps.Uint16(bf, desc, true) ps.Uint16(bf, desc, true)
ps.Uint16(bf, "", false) ps.Uint16(bf, "", false)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"encoding/hex" "encoding/hex"
config "erupe-ce/config" config "erupe-ce/config"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
@@ -88,9 +87,9 @@ func handleMsgMhfGetUdSchedule(s *Session, p mhfpacket.MHFPacket) {
if config.GetConfig().DebugOptions.DivaOverride >= 0 { if config.GetConfig().DebugOptions.DivaOverride >= 0 {
if config.GetConfig().DebugOptions.DivaOverride == 0 { if config.GetConfig().DebugOptions.DivaOverride == 0 {
if config.GetConfig().ClientID >= config.Z2 { if config.GetConfig().ClientID >= config.Z2 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 36)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 36))
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 32)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 32))
} }
return return
} }
@@ -111,7 +110,7 @@ func handleMsgMhfGetUdSchedule(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(0x02) // Unk 00000010 bf.WriteUint16(0x02) // Unk 00000010
bf.WriteUint16(0x02) // Unk 00000010 bf.WriteUint16(0x02) // Unk 00000010
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetUdInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdInfo(s *Session, p mhfpacket.MHFPacket) {
@@ -131,45 +130,45 @@ func handleMsgMhfGetUdInfo(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(uint32(udInfo.EndTime.Unix())) resp.WriteUint32(uint32(udInfo.EndTime.Unix()))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfGetKijuInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetKijuInfo(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetKijuInfo) pkt := p.(*mhfpacket.MsgMhfGetKijuInfo)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("04965C959782CC8B468EEC00000000000000000000000000000000000000000000815C82A082E782B582DC82A982BA82CC82AB82B682E3815C0A965C959782C682CD96D282E98E7682A281420A95B782AD8ED282C997458B4382F0975E82A682E98142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001018BAD8C8282CC8B468EEC00000000000000000000000000000000000000000000815C82AB82E582A482B082AB82CC82AB82B682E3815C0A8BAD8C8282C682CD8BAD82A290BA904681420A95B782AD8ED282CC97CD82F08CA482AC909F82DC82B78142200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003138C8B8F5782CC8B468EEC00000000000000000000000000000000000000000000815C82AF82C182B582E382A482CC82AB82B682E3815C0A8C8B8F5782C682CD8A6D8CC582BD82E9904D978A81420A8F5782DF82E982D982C782C98EEB906C82BD82BF82CC90B8905F97CD82C682C882E9814200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041189CC8CEC82CC8B468EEC00000000000000000000000000000000000000000000815C82A482BD82DC82E082E882CC82AB82B682E3815C0A89CC8CEC82C682CD89CC955082CC8CEC82E881420A8F5782DF82E982D982C782C98EEB906C82BD82BF82CC8E7882A682C682C882E9814220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000212") data, _ := hex.DecodeString("04965C959782CC8B468EEC00000000000000000000000000000000000000000000815C82A082E782B582DC82A982BA82CC82AB82B682E3815C0A965C959782C682CD96D282E98E7682A281420A95B782AD8ED282C997458B4382F0975E82A682E98142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001018BAD8C8282CC8B468EEC00000000000000000000000000000000000000000000815C82AB82E582A482B082AB82CC82AB82B682E3815C0A8BAD8C8282C682CD8BAD82A290BA904681420A95B782AD8ED282CC97CD82F08CA482AC909F82DC82B78142200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003138C8B8F5782CC8B468EEC00000000000000000000000000000000000000000000815C82AF82C182B582E382A482CC82AB82B682E3815C0A8C8B8F5782C682CD8A6D8CC582BD82E9904D978A81420A8F5782DF82E982D982C782C98EEB906C82BD82BF82CC90B8905F97CD82C682C882E9814200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041189CC8CEC82CC8B468EEC00000000000000000000000000000000000000000000815C82A482BD82DC82E082E882CC82AB82B682E3815C0A89CC8CEC82C682CD89CC955082CC8CEC82E881420A8F5782DF82E982D982C782C98EEB906C82BD82BF82CC8E7882A682C682C882E9814220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000212")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSetKiju(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSetKiju(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSetKiju) pkt := p.(*mhfpacket.MsgMhfSetKiju)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfAddUdPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAddUdPoint(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAddUdPoint) pkt := p.(*mhfpacket.MsgMhfAddUdPoint)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfGetUdMyPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdMyPoint(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdMyPoint) pkt := p.(*mhfpacket.MsgMhfGetUdMyPoint)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("00040000013C000000FA000000000000000000040000007E0000003C02000000000000000000000000000000000000000000000000000002000004CC00000438000000000000000000000000000000000000000000000000000000020000026E00000230000000000000000000020000007D0000007D000000000000000000000000000000000000000000000000000000") data, _ := hex.DecodeString("00040000013C000000FA000000000000000000040000007E0000003C02000000000000000000000000000000000000000000000000000002000004CC00000438000000000000000000000000000000000000000000000000000000020000026E00000230000000000000000000020000007D0000007D000000000000000000000000000000000000000000000000000000")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfGetUdTotalPointInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdTotalPointInfo(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdTotalPointInfo) pkt := p.(*mhfpacket.MsgMhfGetUdTotalPointInfo)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("00000000000007A12000000000000F424000000000001E848000000000002DC6C000000000003D090000000000004C4B4000000000005B8D8000000000006ACFC000000000007A1200000000000089544000000000009896800000000000E4E1C00000000001312D0000000000017D78400000000001C9C3800000000002160EC00000000002625A000000000002AEA5400000000002FAF0800000000003473BC0000000000393870000000000042C1D800000000004C4B40000000000055D4A800000000005F5E10000000000008954400000000001C9C3800000000003473BC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020300000000000000000000000000000000000000000000000000000000000000000000000000000000101F1420") data, _ := hex.DecodeString("00000000000007A12000000000000F424000000000001E848000000000002DC6C000000000003D090000000000004C4B4000000000005B8D8000000000006ACFC000000000007A1200000000000089544000000000009896800000000000E4E1C00000000001312D0000000000017D78400000000001C9C3800000000002160EC00000000002625A000000000002AEA5400000000002FAF0800000000003473BC0000000000393870000000000042C1D800000000004C4B40000000000055D4A800000000005F5E10000000000008954400000000001C9C3800000000003473BC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020300000000000000000000000000000000000000000000000000000000000000000000000000000000101F1420")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfGetUdSelectedColorInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdSelectedColorInfo(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdSelectedColorInfo) pkt := p.(*mhfpacket.MsgMhfGetUdSelectedColorInfo)
// Unk // Unk
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x01, 0x01, 0x01, 0x02, 0x03, 0x02, 0x00, 0x00}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x01, 0x01, 0x01, 0x02, 0x03, 0x02, 0x00, 0x00})
} }
func handleMsgMhfGetUdMonsterPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdMonsterPoint(s *Session, p mhfpacket.MHFPacket) {
@@ -301,36 +300,36 @@ func handleMsgMhfGetUdMonsterPoint(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint16(mp.Points) resp.WriteUint16(mp.Points)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfGetUdDailyPresentList(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdDailyPresentList(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdDailyPresentList) pkt := p.(*mhfpacket.MsgMhfGetUdDailyPresentList)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000") data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfGetUdNormaPresentList(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdNormaPresentList(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdNormaPresentList) pkt := p.(*mhfpacket.MsgMhfGetUdNormaPresentList)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000") data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfAcquireUdItem(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAcquireUdItem(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAcquireUdItem) pkt := p.(*mhfpacket.MsgMhfAcquireUdItem)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfGetUdRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdRanking(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdRanking) pkt := p.(*mhfpacket.MsgMhfGetUdRanking)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfGetUdMyRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdMyRanking(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdMyRanking) pkt := p.(*mhfpacket.MsgMhfGetUdMyRanking)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("00000515000005150000CEB4000003CE000003CE0000CEB44D49444E494748542D414E47454C0000000000000000000000") data, _ := hex.DecodeString("00000515000005150000CEB4000003CE000003CE0000CEB44D49444E494748542D414E47454C0000000000000000000000")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
"erupe-ce/utils/token" "erupe-ce/utils/token"
@@ -48,7 +47,7 @@ func handleMsgMhfEnumerateEvent(s *Session, p mhfpacket.MHFPacket) {
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
type activeFeature struct { type activeFeature struct {
@@ -89,7 +88,7 @@ func handleMsgMhfGetWeeklySchedule(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(feature.ActiveFeatures) bf.WriteUint32(feature.ActiveFeatures)
bf.WriteUint16(0) bf.WriteUint16(0)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func generateFeatureWeapons(count int) activeFeature { func generateFeatureWeapons(count int) activeFeature {
@@ -147,7 +146,7 @@ func handleMsgMhfGetKeepLoginBoostStatus(s *Session, p mhfpacket.MHFPacket) {
rows, err := database.Queryx("SELECT week_req, expiration, reset FROM login_boost WHERE char_id=$1 ORDER BY week_req", s.CharID) rows, err := database.Queryx("SELECT week_req, expiration, reset FROM login_boost WHERE char_id=$1 ORDER BY week_req", s.CharID)
if err != nil || config.GetConfig().GameplayOptions.DisableLoginBoost { if err != nil || config.GetConfig().GameplayOptions.DisableLoginBoost {
rows.Close() rows.Close()
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 35)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 35))
return return
} }
for rows.Next() { for rows.Next() {
@@ -200,7 +199,7 @@ func handleMsgMhfGetKeepLoginBoostStatus(s *Session, p mhfpacket.MHFPacket) {
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfUseKeepLoginBoost(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUseKeepLoginBoost(s *Session, p mhfpacket.MHFPacket) {
@@ -222,12 +221,12 @@ func handleMsgMhfUseKeepLoginBoost(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec(`UPDATE login_boost SET expiration=$1, reset=$2 WHERE char_id=$3 AND week_req=$4`, expiration, gametime.TimeWeekNext(), s.CharID, pkt.BoostWeekUsed) database.Exec(`UPDATE login_boost SET expiration=$1, reset=$2 WHERE char_id=$3 AND week_req=$4`, expiration, gametime.TimeWeekNext(), s.CharID, pkt.BoostWeekUsed)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetRestrictionEvent(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfGetRestrictionEvent(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfSetRestrictionEvent(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSetRestrictionEvent(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSetRestrictionEvent) pkt := p.(*mhfpacket.MsgMhfSetRestrictionEvent)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
@@ -21,7 +20,7 @@ func handleMsgMhfSaveMezfesData(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec(`UPDATE characters SET mezfes=$1 WHERE id=$2`, pkt.RawDataPayload, s.CharID) database.Exec(`UPDATE characters SET mezfes=$1 WHERE id=$2`, pkt.RawDataPayload, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfLoadMezfesData(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadMezfesData(s *Session, p mhfpacket.MHFPacket) {
@@ -42,7 +41,7 @@ func handleMsgMhfLoadMezfesData(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(0) bf.WriteUint32(0)
bf.WriteUint32(0) bf.WriteUint32(0)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfEnumerateRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEnumerateRanking(s *Session, p mhfpacket.MHFPacket) {
@@ -75,7 +74,7 @@ func handleMsgMhfEnumerateRanking(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix())) // TS Current Time bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix())) // TS Current Time
bf.WriteUint8(3) bf.WriteUint8(3)
bf.WriteBytes(make([]byte, 4)) bf.WriteBytes(make([]byte, 4))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
return return
} }
bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix())) // TS Current Time bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix())) // TS Current Time
@@ -101,7 +100,7 @@ func handleMsgMhfEnumerateRanking(s *Session, p mhfpacket.MHFPacket) {
psUint16 desc psUint16 desc
*/ */
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func cleanupFesta(s *Session) { func cleanupFesta(s *Session) {
@@ -199,7 +198,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
var timestamps []uint32 var timestamps []uint32
if config.GetConfig().DebugOptions.FestaOverride >= 0 { if config.GetConfig().DebugOptions.FestaOverride >= 0 {
if config.GetConfig().DebugOptions.FestaOverride == 0 { if config.GetConfig().DebugOptions.FestaOverride == 0 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
timestamps = generateFestaTimestamps(s, uint32(config.GetConfig().DebugOptions.FestaOverride), true) timestamps = generateFestaTimestamps(s, uint32(config.GetConfig().DebugOptions.FestaOverride), true)
@@ -208,7 +207,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
} }
if timestamps[0] > uint32(gametime.TimeAdjusted().Unix()) { if timestamps[0] > uint32(gametime.TimeAdjusted().Unix()) {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -373,7 +372,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) {
if config.GetConfig().ClientID >= config.G52 { if config.GetConfig().ClientID >= config.G52 {
ps.Uint16(bf, "", false) ps.Uint16(bf, "", false)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
// state festa (U)ser // state festa (U)ser
@@ -389,7 +388,7 @@ func handleMsgMhfStateFestaU(s *Session, p mhfpacket.MHFPacket) {
applicant, _ = guild.HasApplicationForCharID(s, s.CharID) applicant, _ = guild.HasApplicationForCharID(s, s.CharID)
} }
if err != nil || guild == nil || applicant { if err != nil || guild == nil || applicant {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
var souls, exists uint32 var souls, exists uint32
@@ -404,7 +403,7 @@ func handleMsgMhfStateFestaU(s *Session, p mhfpacket.MHFPacket) {
bf.WriteBool(false) bf.WriteBool(false)
bf.WriteBool(true) bf.WriteBool(true)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
// state festa (G)uild // state festa (G)uild
@@ -422,7 +421,7 @@ func handleMsgMhfStateFestaG(s *Session, p mhfpacket.MHFPacket) {
resp.WriteInt32(-1) resp.WriteInt32(-1)
resp.WriteInt32(0) resp.WriteInt32(0)
resp.WriteInt32(0) resp.WriteInt32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
return return
} }
resp.WriteUint32(guild.Souls) resp.WriteUint32(guild.Souls)
@@ -430,19 +429,19 @@ func handleMsgMhfStateFestaG(s *Session, p mhfpacket.MHFPacket) {
resp.WriteInt32(1) // unk, rank? resp.WriteInt32(1) // unk, rank?
resp.WriteInt32(1) // unk resp.WriteInt32(1) // unk
resp.WriteInt32(1) // unk resp.WriteInt32(1) // unk
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfEnumerateFestaMember(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEnumerateFestaMember(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfEnumerateFestaMember) pkt := p.(*mhfpacket.MsgMhfEnumerateFestaMember)
guild, err := GetGuildInfoByCharacterId(s, s.CharID) guild, err := GetGuildInfoByCharacterId(s, s.CharID)
if err != nil || guild == nil { if err != nil || guild == nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
members, err := GetGuildMembers(s, guild.ID, false) members, err := GetGuildMembers(s, guild.ID, false)
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
sort.Slice(members, func(i, j int) bool { sort.Slice(members, func(i, j int) bool {
@@ -466,7 +465,7 @@ func handleMsgMhfEnumerateFestaMember(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(member.Souls) bf.WriteUint32(member.Souls)
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfVoteFesta(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfVoteFesta(s *Session, p mhfpacket.MHFPacket) {
@@ -476,7 +475,7 @@ func handleMsgMhfVoteFesta(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec(`UPDATE guild_characters SET trial_vote=$1 WHERE character_id=$2`, pkt.TrialID, s.CharID) database.Exec(`UPDATE guild_characters SET trial_vote=$1 WHERE character_id=$2`, pkt.TrialID, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfEntryFesta(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEntryFesta(s *Session, p mhfpacket.MHFPacket) {
@@ -487,7 +486,7 @@ func handleMsgMhfEntryFesta(s *Session, p mhfpacket.MHFPacket) {
} }
guild, err := GetGuildInfoByCharacterId(s, s.CharID) guild, err := GetGuildInfoByCharacterId(s, s.CharID)
if err != nil || guild == nil { if err != nil || guild == nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
team := uint32(token.RNG.Intn(2)) team := uint32(token.RNG.Intn(2))
@@ -499,7 +498,7 @@ func handleMsgMhfEntryFesta(s *Session, p mhfpacket.MHFPacket) {
} }
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(team) bf.WriteUint32(team)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfChargeFesta(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfChargeFesta(s *Session, p mhfpacket.MHFPacket) {
@@ -516,7 +515,7 @@ func handleMsgMhfChargeFesta(s *Session, p mhfpacket.MHFPacket) {
_, _ = tx.Exec(`INSERT INTO festa_submissions VALUES ($1, $2, $3, $4, now())`, s.CharID, pkt.GuildID, i, pkt.Souls[i]) _, _ = tx.Exec(`INSERT INTO festa_submissions VALUES ($1, $2, $3, $4, now())`, s.CharID, pkt.GuildID, i, pkt.Souls[i])
} }
_ = tx.Commit() _ = tx.Commit()
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfAcquireFesta(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAcquireFesta(s *Session, p mhfpacket.MHFPacket) {
@@ -526,7 +525,7 @@ func handleMsgMhfAcquireFesta(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec("INSERT INTO public.festa_prizes_accepted VALUES (0, $1)", s.CharID) database.Exec("INSERT INTO public.festa_prizes_accepted VALUES (0, $1)", s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfAcquireFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAcquireFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) {
@@ -536,7 +535,7 @@ func handleMsgMhfAcquireFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec("INSERT INTO public.festa_prizes_accepted VALUES ($1, $2)", pkt.PrizeID, s.CharID) database.Exec("INSERT INTO public.festa_prizes_accepted VALUES ($1, $2)", pkt.PrizeID, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfAcquireFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAcquireFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) {
@@ -546,7 +545,7 @@ func handleMsgMhfAcquireFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec("INSERT INTO public.festa_prizes_accepted VALUES ($1, $2)", pkt.PrizeID, s.CharID) database.Exec("INSERT INTO public.festa_prizes_accepted VALUES ($1, $2)", pkt.PrizeID, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
type Prize struct { type Prize struct {
@@ -585,7 +584,7 @@ func handleMsgMhfEnumerateFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(count) bf.WriteUint32(count)
bf.WriteBytes(prizeData.Data()) bf.WriteBytes(prizeData.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfEnumerateFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEnumerateFestaIntermediatePrize(s *Session, p mhfpacket.MHFPacket) {
@@ -615,5 +614,5 @@ func handleMsgMhfEnumerateFestaIntermediatePrize(s *Session, p mhfpacket.MHFPack
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(count) bf.WriteUint32(count)
bf.WriteBytes(prizeData.Data()) bf.WriteBytes(prizeData.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }

View File

@@ -6,7 +6,6 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
"erupe-ce/utils/mhfitem" "erupe-ce/utils/mhfitem"
@@ -684,7 +683,7 @@ func HandleMsgMhfCreateGuild(s *Session, p mhfpacket.MHFPacket) {
// style message, it's better than nothing for now. // style message, it's better than nothing for now.
bf.WriteUint32(0x01010101) bf.WriteUint32(0x01010101)
broadcast.DoAckSimpleFail(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleFail(pkt.AckHandle, bf.Data())
return return
} }
@@ -692,7 +691,7 @@ func HandleMsgMhfCreateGuild(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(uint32(guildId)) bf.WriteUint32(uint32(guildId))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
@@ -701,7 +700,7 @@ func HandleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
guild, err := GetGuildInfoByID(s, pkt.GuildID) guild, err := GetGuildInfoByID(s, pkt.GuildID)
characterGuildInfo, err := GetCharacterGuildData(s, s.CharID) characterGuildInfo, err := GetCharacterGuildData(s, s.CharID)
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
database, err := db.GetDB() database, err := db.GetDB()
@@ -780,14 +779,14 @@ func HandleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
handleAvoidLeadershipUpdate(s, pkt, false) handleAvoidLeadershipUpdate(s, pkt, false)
case mhfpacket.OperateGuildUpdateComment: case mhfpacket.OperateGuildUpdateComment:
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() { if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
guild.Comment = stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes()) guild.Comment = stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
guild.Save(s) guild.Save(s)
case mhfpacket.OperateGuildUpdateMotto: case mhfpacket.OperateGuildUpdateMotto:
if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() { if !characterGuildInfo.IsLeader && !characterGuildInfo.IsSubLeader() {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
_ = pkt.Data1.ReadUint16() _ = pkt.Data1.ReadUint16()
@@ -827,9 +826,9 @@ func HandleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
} }
if len(bf.Data()) > 0 { if len(bf.Data()) > 0 {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} else { } else {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
} }
@@ -903,7 +902,7 @@ func handleAvoidLeadershipUpdate(s *Session, pkt *mhfpacket.MsgMhfOperateGuild,
characterGuildData, err := GetCharacterGuildData(s, s.CharID) characterGuildData, err := GetCharacterGuildData(s, s.CharID)
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -912,11 +911,11 @@ func handleAvoidLeadershipUpdate(s *Session, pkt *mhfpacket.MsgMhfOperateGuild,
err = characterGuildData.Save(s) err = characterGuildData.Save(s)
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) {
@@ -925,14 +924,14 @@ func HandleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) {
guild, err := GetGuildInfoByCharacterId(s, pkt.CharID) guild, err := GetGuildInfoByCharacterId(s, pkt.CharID)
if err != nil || guild == nil { if err != nil || guild == nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
actorCharacter, err := GetCharacterGuildData(s, s.CharID) actorCharacter, err := GetCharacterGuildData(s, s.CharID)
if err != nil || (!actorCharacter.IsSubLeader() && guild.LeaderCharID != s.CharID) { if err != nil || (!actorCharacter.IsSubLeader() && guild.LeaderCharID != s.CharID) {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -963,12 +962,12 @@ func HandleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) {
IsSystemMessage: true, IsSystemMessage: true,
} }
default: default:
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
s.Logger.Warn(fmt.Sprintf("unhandled operateGuildMember action '%d'", pkt.Action)) s.Logger.Warn(fmt.Sprintf("unhandled operateGuildMember action '%d'", pkt.Action))
} }
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} else { } else {
mail.Send(s, nil) mail.Send(s, nil)
for _, channel := range s.Server.Channels { for _, channel := range s.Server.Channels {
@@ -978,7 +977,7 @@ func HandleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) {
} }
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
} }
@@ -1013,7 +1012,7 @@ func HandleMsgMhfInfoGuild(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(0) // Count resp.WriteUint32(0) // Count
resp.WriteUint8(0) // Unk, read if count == 0. resp.WriteUint8(0) // Unk, read if count == 0.
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
return return
} }
@@ -1221,9 +1220,9 @@ func HandleMsgMhfInfoGuild(s *Session, p mhfpacket.MHFPacket) {
} }
bf.WriteUint8(0) // Unk bf.WriteUint8(0) // Unk
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 5)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 5))
} }
} }
@@ -1430,7 +1429,7 @@ func HandleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) {
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfArrangeGuildMember(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfArrangeGuildMember(s *Session, p mhfpacket.MHFPacket) {
@@ -1465,7 +1464,7 @@ func HandleMsgMhfArrangeGuildMember(s *Session, p mhfpacket.MHFPacket) {
return return
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) {
@@ -1483,7 +1482,7 @@ func HandleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) {
if guild != nil { if guild != nil {
isApplicant, _ := guild.HasApplicationForCharID(s, s.CharID) isApplicant, _ := guild.HasApplicationForCharID(s, s.CharID)
if isApplicant { if isApplicant {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 2)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 2))
return return
} }
} }
@@ -1494,10 +1493,10 @@ func HandleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Warn("failed to retrieve guild sending no result message") s.Logger.Warn("failed to retrieve guild sending no result message")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 2)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 2))
return return
} else if guild == nil { } else if guild == nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 2)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 2))
return return
} }
@@ -1586,7 +1585,7 @@ func HandleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(member.RPYesterday) bf.WriteUint16(member.RPYesterday)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfGetGuildManageRight(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGetGuildManageRight(s *Session, p mhfpacket.MHFPacket) {
@@ -1597,7 +1596,7 @@ func HandleMsgMhfGetGuildManageRight(s *Session, p mhfpacket.MHFPacket) {
guild, err = GetGuildInfoByID(s, s.prevGuildID) guild, err = GetGuildInfoByID(s, s.prevGuildID)
s.prevGuildID = 0 s.prevGuildID = 0
if guild == nil || err != nil { if guild == nil || err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
} }
@@ -1610,12 +1609,12 @@ func HandleMsgMhfGetGuildManageRight(s *Session, p mhfpacket.MHFPacket) {
bf.WriteBool(member.Recruiter) bf.WriteBool(member.Recruiter)
bf.WriteBytes(make([]byte, 3)) bf.WriteBytes(make([]byte, 3))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfGetUdGuildMapInfo(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGetUdGuildMapInfo(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdGuildMapInfo) pkt := p.(*mhfpacket.MsgMhfGetUdGuildMapInfo)
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfGetGuildTargetMemberNum(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGetGuildTargetMemberNum(s *Session, p mhfpacket.MHFPacket) {
@@ -1631,7 +1630,7 @@ func HandleMsgMhfGetGuildTargetMemberNum(s *Session, p mhfpacket.MHFPacket) {
} }
if err != nil || guild == nil { if err != nil || guild == nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x02}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x02})
return return
} }
@@ -1640,7 +1639,7 @@ func HandleMsgMhfGetGuildTargetMemberNum(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(0x0) bf.WriteUint16(0x0)
bf.WriteUint16(guild.MemberCount - 1) bf.WriteUint16(guild.MemberCount - 1)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func guildGetItems(s *Session, guildID uint32) []mhfitem.MHFItemStack { func guildGetItems(s *Session, guildID uint32) []mhfitem.MHFItemStack {
@@ -1667,7 +1666,7 @@ func HandleMsgMhfEnumerateGuildItem(s *Session, p mhfpacket.MHFPacket) {
items := guildGetItems(s, pkt.GuildID) items := guildGetItems(s, pkt.GuildID)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteBytes(mhfitem.SerializeWarehouseItems(items)) bf.WriteBytes(mhfitem.SerializeWarehouseItems(items))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfUpdateGuildItem(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfUpdateGuildItem(s *Session, p mhfpacket.MHFPacket) {
@@ -1678,7 +1677,7 @@ func HandleMsgMhfUpdateGuildItem(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec(`UPDATE guilds SET item_box=$1 WHERE id=$2`, mhfitem.SerializeWarehouseItems(newStacks), pkt.GuildID) database.Exec(`UPDATE guilds SET item_box=$1 WHERE id=$2`, mhfitem.SerializeWarehouseItems(newStacks), pkt.GuildID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfUpdateGuildIcon(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfUpdateGuildIcon(s *Session, p mhfpacket.MHFPacket) {
@@ -1702,7 +1701,7 @@ func HandleMsgMhfUpdateGuildIcon(s *Session, p mhfpacket.MHFPacket) {
zap.Uint32("guildID", guild.ID), zap.Uint32("guildID", guild.ID),
zap.Uint32("charID", s.CharID), zap.Uint32("charID", s.CharID),
) )
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -1730,11 +1729,11 @@ func HandleMsgMhfUpdateGuildIcon(s *Session, p mhfpacket.MHFPacket) {
err = guild.Save(s) err = guild.Save(s)
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfReadGuildcard(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfReadGuildcard(s *Session, p mhfpacket.MHFPacket) {
@@ -1750,7 +1749,7 @@ func HandleMsgMhfReadGuildcard(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(0) resp.WriteUint32(0)
resp.WriteUint32(0) resp.WriteUint32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
type GuildMission struct { type GuildMission struct {
@@ -1797,29 +1796,29 @@ func HandleMsgMhfGetGuildMissionList(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(mission.RewardLevel) bf.WriteUint16(mission.RewardLevel)
bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix())) bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix()))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfGetGuildMissionRecord(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGetGuildMissionRecord(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetGuildMissionRecord) pkt := p.(*mhfpacket.MsgMhfGetGuildMissionRecord)
// No guild mission records = 0x190 empty bytes // No guild mission records = 0x190 empty bytes
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 0x190)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 0x190))
} }
func HandleMsgMhfAddGuildMissionCount(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfAddGuildMissionCount(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAddGuildMissionCount) pkt := p.(*mhfpacket.MsgMhfAddGuildMissionCount)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfSetGuildMissionTarget(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfSetGuildMissionTarget(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSetGuildMissionTarget) pkt := p.(*mhfpacket.MsgMhfSetGuildMissionTarget)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfCancelGuildMissionTarget(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfCancelGuildMissionTarget(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfCancelGuildMissionTarget) pkt := p.(*mhfpacket.MsgMhfCancelGuildMissionTarget)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
type GuildMeal struct { type GuildMeal struct {
@@ -1839,7 +1838,7 @@ func HandleMsgMhfLoadGuildCooking(s *Session, p mhfpacket.MHFPacket) {
data, err := database.Queryx("SELECT id, meal_id, level, created_at FROM guild_meals WHERE guild_id = $1", guild.ID) data, err := database.Queryx("SELECT id, meal_id, level, created_at FROM guild_meals WHERE guild_id = $1", guild.ID)
if err != nil { if err != nil {
s.Logger.Error("Failed to get guild meals from db", zap.Error(err)) s.Logger.Error("Failed to get guild meals from db", zap.Error(err))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 2)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 2))
return return
} }
var meals []GuildMeal var meals []GuildMeal
@@ -1861,7 +1860,7 @@ func HandleMsgMhfLoadGuildCooking(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(meal.Level) bf.WriteUint32(meal.Level)
bf.WriteUint32(uint32(meal.CreatedAt.Unix())) bf.WriteUint32(uint32(meal.CreatedAt.Unix()))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfRegistGuildCooking(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfRegistGuildCooking(s *Session, p mhfpacket.MHFPacket) {
@@ -1883,14 +1882,14 @@ func HandleMsgMhfRegistGuildCooking(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(uint32(pkt.MealID)) bf.WriteUint32(uint32(pkt.MealID))
bf.WriteUint32(uint32(pkt.Success)) bf.WriteUint32(uint32(pkt.Success))
bf.WriteUint32(uint32(startTime.Unix())) bf.WriteUint32(uint32(startTime.Unix()))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfGetGuildWeeklyBonusMaster(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGetGuildWeeklyBonusMaster(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetGuildWeeklyBonusMaster) pkt := p.(*mhfpacket.MsgMhfGetGuildWeeklyBonusMaster)
// Values taken from brand new guild capture // Values taken from brand new guild capture
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 40)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 40))
} }
func HandleMsgMhfGetGuildWeeklyBonusActiveCount(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGetGuildWeeklyBonusActiveCount(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetGuildWeeklyBonusActiveCount) pkt := p.(*mhfpacket.MsgMhfGetGuildWeeklyBonusActiveCount)
@@ -1898,7 +1897,7 @@ func HandleMsgMhfGetGuildWeeklyBonusActiveCount(s *Session, p mhfpacket.MHFPacke
bf.WriteUint8(60) // Active count bf.WriteUint8(60) // Active count
bf.WriteUint8(60) // Current active count bf.WriteUint8(60) // Current active count
bf.WriteUint8(0) // New active count bf.WriteUint8(0) // New active count
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfGuildHuntdata(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGuildHuntdata(s *Session, p mhfpacket.MHFPacket) {
@@ -1956,7 +1955,7 @@ func HandleMsgMhfGuildHuntdata(s *Session, p mhfpacket.MHFPacket) {
bf.WriteBool(false) bf.WriteBool(false)
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
type MessageBoardPost struct { type MessageBoardPost struct {
@@ -1982,7 +1981,7 @@ func HandleMsgMhfEnumerateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
msgs, err := database.Queryx("SELECT id, stamp_id, title, body, author_id, created_at, liked_by FROM guild_posts WHERE guild_id = $1 AND post_type = $2 ORDER BY created_at DESC", guild.ID, int(pkt.BoardType)) msgs, err := database.Queryx("SELECT id, stamp_id, title, body, author_id, created_at, liked_by FROM guild_posts WHERE guild_id = $1 AND post_type = $2 ORDER BY created_at DESC", guild.ID, int(pkt.BoardType))
if err != nil { if err != nil {
s.Logger.Error("Failed to get guild messages from db", zap.Error(err)) s.Logger.Error("Failed to get guild messages from db", zap.Error(err))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
database.Exec("UPDATE characters SET guild_post_checked = now() WHERE id = $1", s.CharID) database.Exec("UPDATE characters SET guild_post_checked = now() WHERE id = $1", s.CharID)
@@ -2008,7 +2007,7 @@ func HandleMsgMhfEnumerateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
data := byteframe.NewByteFrame() data := byteframe.NewByteFrame()
data.WriteUint32(postCount) data.WriteUint32(postCount)
data.WriteBytes(bf.Data()) data.WriteBytes(bf.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data.Data()) s.DoAckBufSucceed(pkt.AckHandle, data.Data())
} }
func HandleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
@@ -2023,7 +2022,7 @@ func HandleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
applicant, _ = guild.HasApplicationForCharID(s, s.CharID) applicant, _ = guild.HasApplicationForCharID(s, s.CharID)
} }
if err != nil || guild == nil || applicant { if err != nil || guild == nil || applicant {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
switch pkt.MessageOp { switch pkt.MessageOp {
@@ -2057,17 +2056,17 @@ func HandleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
if err == nil { if err == nil {
database.QueryRow("SELECT COUNT(*) FROM guild_posts WHERE guild_id = $1 AND (EXTRACT(epoch FROM created_at)::int) > $2", guild.ID, timeChecked.Unix()).Scan(&newPosts) database.QueryRow("SELECT COUNT(*) FROM guild_posts WHERE guild_id = $1 AND (EXTRACT(epoch FROM created_at)::int) > $2", guild.ID, timeChecked.Unix()).Scan(&newPosts)
if newPosts > 0 { if newPosts > 0 {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
return return
} }
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfEntryRookieGuild(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfEntryRookieGuild(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfEntryRookieGuild) pkt := p.(*mhfpacket.MsgMhfEntryRookieGuild)
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfUpdateForceGuildRank(s *Session, p mhfpacket.MHFPacket) {} func HandleMsgMhfUpdateForceGuildRank(s *Session, p mhfpacket.MHFPacket) {}
@@ -2076,12 +2075,12 @@ func HandleMsgMhfAddGuildWeeklyBonusExceptionalUser(s *Session, p mhfpacket.MHFP
pkt := p.(*mhfpacket.MsgMhfAddGuildWeeklyBonusExceptionalUser) pkt := p.(*mhfpacket.MsgMhfAddGuildWeeklyBonusExceptionalUser)
// TODO: record pkt.NumUsers to DB // TODO: record pkt.NumUsers to DB
// must use addition // must use addition
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func HandleMsgMhfGenerateUdGuildMap(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGenerateUdGuildMap(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGenerateUdGuildMap) pkt := p.(*mhfpacket.MsgMhfGenerateUdGuildMap)
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfUpdateGuild(s *Session, p mhfpacket.MHFPacket) {} func HandleMsgMhfUpdateGuild(s *Session, p mhfpacket.MHFPacket) {}
@@ -2093,19 +2092,19 @@ func HandleMsgMhfSetGuildManageRight(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec("UPDATE guild_characters SET recruiter=$1 WHERE character_id=$2", pkt.Allowed, pkt.CharID) database.Exec("UPDATE guild_characters SET recruiter=$1 WHERE character_id=$2", pkt.Allowed, pkt.CharID)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfCheckMonthlyItem(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfCheckMonthlyItem(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfCheckMonthlyItem) pkt := p.(*mhfpacket.MsgMhfCheckMonthlyItem)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
// TODO: Implement month-by-month tracker, 0 = Not claimed, 1 = Claimed // TODO: Implement month-by-month tracker, 0 = Not claimed, 1 = Claimed
// Also handles HLC and EXC items, IDs = 064D, 076B // Also handles HLC and EXC items, IDs = 064D, 076B
} }
func HandleMsgMhfAcquireMonthlyItem(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfAcquireMonthlyItem(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAcquireMonthlyItem) pkt := p.(*mhfpacket.MsgMhfAcquireMonthlyItem)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfEnumerateInvGuild(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfEnumerateInvGuild(s *Session, p mhfpacket.MHFPacket) {
@@ -2115,7 +2114,7 @@ func HandleMsgMhfEnumerateInvGuild(s *Session, p mhfpacket.MHFPacket) {
func HandleMsgMhfOperationInvGuild(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfOperationInvGuild(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfOperationInvGuild) pkt := p.(*mhfpacket.MsgMhfOperationInvGuild)
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfUpdateGuildcard(s *Session, p mhfpacket.MHFPacket) {} func HandleMsgMhfUpdateGuildcard(s *Session, p mhfpacket.MHFPacket) {}

View File

@@ -5,7 +5,6 @@ import (
"time" "time"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
@@ -33,7 +32,7 @@ func HandleMsgMhfLoadGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
data, err := database.Queryx("SELECT id, destination, charge, depart, return, collected_by FROM guild_adventures WHERE guild_id = $1", guild.ID) data, err := database.Queryx("SELECT id, destination, charge, depart, return, collected_by FROM guild_adventures WHERE guild_id = $1", guild.ID)
if err != nil { if err != nil {
s.Logger.Error("Failed to get guild adventures from db", zap.Error(err)) s.Logger.Error("Failed to get guild adventures from db", zap.Error(err))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
temp := byteframe.NewByteFrame() temp := byteframe.NewByteFrame()
@@ -55,7 +54,7 @@ func HandleMsgMhfLoadGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint8(uint8(count)) bf.WriteUint8(uint8(count))
bf.WriteBytes(temp.Data()) bf.WriteBytes(temp.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfRegistGuildAdventure(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfRegistGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
@@ -69,7 +68,7 @@ func HandleMsgMhfRegistGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to register guild adventure", zap.Error(err)) s.Logger.Error("Failed to register guild adventure", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfAcquireGuildAdventure(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfAcquireGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
@@ -89,7 +88,7 @@ func HandleMsgMhfAcquireGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to collect adventure in db", zap.Error(err)) s.Logger.Error("Failed to collect adventure in db", zap.Error(err))
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfChargeGuildAdventure(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfChargeGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
@@ -102,7 +101,7 @@ func HandleMsgMhfChargeGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to charge guild adventure", zap.Error(err)) s.Logger.Error("Failed to charge guild adventure", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfRegistGuildAdventureDiva(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfRegistGuildAdventureDiva(s *Session, p mhfpacket.MHFPacket) {
@@ -116,5 +115,5 @@ func HandleMsgMhfRegistGuildAdventureDiva(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to register guild adventure", zap.Error(err)) s.Logger.Error("Failed to register guild adventure", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -1,7 +1,6 @@
package channelserver package channelserver
import ( import (
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
ps "erupe-ce/utils/pascalstring" ps "erupe-ce/utils/pascalstring"
@@ -122,7 +121,7 @@ func HandleMsgMhfCreateJoint(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to create guild alliance in db", zap.Error(err)) s.Logger.Error("Failed to create guild alliance in db", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x01, 0x01, 0x01, 0x01}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x01, 0x01, 0x01, 0x01})
} }
func HandleMsgMhfOperateJoint(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfOperateJoint(s *Session, p mhfpacket.MHFPacket) {
@@ -147,14 +146,14 @@ func HandleMsgMhfOperateJoint(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to disband alliance", zap.Error(err)) s.Logger.Error("Failed to disband alliance", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} else { } else {
s.Logger.Warn( s.Logger.Warn(
"Non-owner of alliance attempted disband", "Non-owner of alliance attempted disband",
zap.Uint32("CharID", s.CharID), zap.Uint32("CharID", s.CharID),
zap.Uint32("AllyID", alliance.ID), zap.Uint32("AllyID", alliance.ID),
) )
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
case mhfpacket.OPERATE_JOINT_LEAVE: case mhfpacket.OPERATE_JOINT_LEAVE:
if guild.LeaderCharID == s.CharID { if guild.LeaderCharID == s.CharID {
@@ -166,13 +165,13 @@ func HandleMsgMhfOperateJoint(s *Session, p mhfpacket.MHFPacket) {
database.Exec(`UPDATE guild_alliances SET sub2_id = NULL WHERE id = $1`, alliance.ID) database.Exec(`UPDATE guild_alliances SET sub2_id = NULL WHERE id = $1`, alliance.ID)
} }
// TODO: Handle deleting Alliance applications // TODO: Handle deleting Alliance applications
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} else { } else {
s.Logger.Warn( s.Logger.Warn(
"Non-owner of guild attempted alliance leave", "Non-owner of guild attempted alliance leave",
zap.Uint32("CharID", s.CharID), zap.Uint32("CharID", s.CharID),
) )
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
case mhfpacket.OPERATE_JOINT_KICK: case mhfpacket.OPERATE_JOINT_KICK:
if alliance.ParentGuild.LeaderCharID == s.CharID { if alliance.ParentGuild.LeaderCharID == s.CharID {
@@ -184,17 +183,17 @@ func HandleMsgMhfOperateJoint(s *Session, p mhfpacket.MHFPacket) {
} else { } else {
database.Exec(`UPDATE guild_alliances SET sub2_id = NULL WHERE id = $1`, alliance.ID) database.Exec(`UPDATE guild_alliances SET sub2_id = NULL WHERE id = $1`, alliance.ID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} else { } else {
s.Logger.Warn( s.Logger.Warn(
"Non-owner of alliance attempted kick", "Non-owner of alliance attempted kick",
zap.Uint32("CharID", s.CharID), zap.Uint32("CharID", s.CharID),
zap.Uint32("AllyID", alliance.ID), zap.Uint32("AllyID", alliance.ID),
) )
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
default: default:
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
panic(fmt.Sprintf("Unhandled operate joint action '%d'", pkt.Action)) panic(fmt.Sprintf("Unhandled operate joint action '%d'", pkt.Action))
} }
} }
@@ -204,7 +203,7 @@ func HandleMsgMhfInfoJoint(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
alliance, err := GetAllianceData(s, pkt.AllianceID) alliance, err := GetAllianceData(s, pkt.AllianceID)
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} else { } else {
bf.WriteUint32(alliance.ID) bf.WriteUint32(alliance.ID)
bf.WriteUint32(uint32(alliance.CreatedAt.Unix())) bf.WriteUint32(uint32(alliance.CreatedAt.Unix()))
@@ -242,6 +241,6 @@ func HandleMsgMhfInfoJoint(s *Session, p mhfpacket.MHFPacket) {
ps.Uint16(bf, alliance.SubGuild2.Name, true) ps.Uint16(bf, alliance.SubGuild2.Name, true)
ps.Uint16(bf, alliance.SubGuild2.LeaderName, true) ps.Uint16(bf, alliance.SubGuild2.LeaderName, true)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
} }

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
@@ -19,31 +18,31 @@ func HandleMsgMhfPostGuildScout(s *Session, p mhfpacket.MHFPacket) {
actorCharGuildData, err := GetCharacterGuildData(s, s.CharID) actorCharGuildData, err := GetCharacterGuildData(s, s.CharID)
if err != nil { if err != nil {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
panic(err) panic(err)
} }
if actorCharGuildData == nil || !actorCharGuildData.CanRecruit() { if actorCharGuildData == nil || !actorCharGuildData.CanRecruit() {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
return return
} }
guildInfo, err := GetGuildInfoByID(s, actorCharGuildData.GuildID) guildInfo, err := GetGuildInfoByID(s, actorCharGuildData.GuildID)
if err != nil { if err != nil {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
panic(err) panic(err)
} }
hasApplication, err := guildInfo.HasApplicationForCharID(s, pkt.CharID) hasApplication, err := guildInfo.HasApplicationForCharID(s, pkt.CharID)
if err != nil { if err != nil {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
panic(err) panic(err)
} }
if hasApplication { if hasApplication {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x04}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x04})
return return
} }
database, err := db.GetDB() database, err := db.GetDB()
@@ -60,7 +59,7 @@ func HandleMsgMhfPostGuildScout(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
rollbackTransaction(s, transaction) rollbackTransaction(s, transaction)
broadcast.DoAckBufFail(s, pkt.AckHandle, nil) s.DoAckBufFail(pkt.AckHandle, nil)
panic(err) panic(err)
} }
@@ -79,18 +78,18 @@ func HandleMsgMhfPostGuildScout(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
rollbackTransaction(s, transaction) rollbackTransaction(s, transaction)
broadcast.DoAckBufFail(s, pkt.AckHandle, nil) s.DoAckBufFail(pkt.AckHandle, nil)
return return
} }
err = transaction.Commit() err = transaction.Commit()
if err != nil { if err != nil {
broadcast.DoAckBufFail(s, pkt.AckHandle, nil) s.DoAckBufFail(pkt.AckHandle, nil)
panic(err) panic(err)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func HandleMsgMhfCancelGuildScout(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfCancelGuildScout(s *Session, p mhfpacket.MHFPacket) {
@@ -103,25 +102,25 @@ func HandleMsgMhfCancelGuildScout(s *Session, p mhfpacket.MHFPacket) {
} }
if guildCharData == nil || !guildCharData.CanRecruit() { if guildCharData == nil || !guildCharData.CanRecruit() {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
return return
} }
guild, err := GetGuildInfoByID(s, guildCharData.GuildID) guild, err := GetGuildInfoByID(s, guildCharData.GuildID)
if err != nil { if err != nil {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
return return
} }
err = guild.CancelInvitation(s, pkt.InvitationID) err = guild.CancelInvitation(s, pkt.InvitationID)
if err != nil { if err != nil {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
return return
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfAnswerGuildScout(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfAnswerGuildScout(s *Session, p mhfpacket.MHFPacket) {
@@ -144,7 +143,7 @@ func HandleMsgMhfAnswerGuildScout(s *Session, p mhfpacket.MHFPacket) {
) )
bf.WriteUint32(7) bf.WriteUint32(7)
bf.WriteUint32(guild.ID) bf.WriteUint32(guild.ID)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
return return
} }
@@ -183,11 +182,11 @@ func HandleMsgMhfAnswerGuildScout(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
bf.WriteUint32(7) bf.WriteUint32(7)
bf.WriteUint32(guild.ID) bf.WriteUint32(guild.ID)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} else { } else {
bf.WriteUint32(0) bf.WriteUint32(0)
bf.WriteUint32(guild.ID) bf.WriteUint32(guild.ID)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
for _, m := range mail { for _, m := range mail {
m.Send(s, nil) m.Send(s, nil)
} }
@@ -200,12 +199,12 @@ func HandleMsgMhfGetGuildScoutList(s *Session, p mhfpacket.MHFPacket) {
guildInfo, err := GetGuildInfoByCharacterId(s, s.CharID) guildInfo, err := GetGuildInfoByCharacterId(s, s.CharID)
if guildInfo == nil && s.prevGuildID == 0 { if guildInfo == nil && s.prevGuildID == 0 {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} else { } else {
guildInfo, err = GetGuildInfoByID(s, s.prevGuildID) guildInfo, err = GetGuildInfoByID(s, s.prevGuildID)
if guildInfo == nil || err != nil { if guildInfo == nil || err != nil {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
} }
@@ -222,7 +221,7 @@ func HandleMsgMhfGetGuildScoutList(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("failed to retrieve scouted characters", zap.Error(err)) s.Logger.Error("failed to retrieve scouted characters", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -245,7 +244,7 @@ func HandleMsgMhfGetGuildScoutList(s *Session, p mhfpacket.MHFPacket) {
err = rows.Scan(&charID, &charName, &HR, &GR, &actorID) err = rows.Scan(&charID, &charName, &HR, &GR, &actorID)
if err != nil { if err != nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, nil) s.DoAckSimpleFail(pkt.AckHandle, nil)
continue continue
} }
@@ -270,7 +269,7 @@ func HandleMsgMhfGetGuildScoutList(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(count) bf.WriteUint32(count)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfGetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfGetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) {
@@ -291,7 +290,7 @@ func HandleMsgMhfGetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) {
zap.Error(err), zap.Error(err),
zap.Uint32("charID", s.CharID), zap.Uint32("charID", s.CharID),
) )
broadcast.DoAckSimpleFail(s, pkt.AckHandle, nil) s.DoAckSimpleFail(pkt.AckHandle, nil)
return return
} }
@@ -301,7 +300,7 @@ func HandleMsgMhfGetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) {
response = 0x01 response = 0x01
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, response}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, response})
} }
func HandleMsgMhfSetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfSetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) {
@@ -318,9 +317,9 @@ func HandleMsgMhfSetRejectGuildScout(s *Session, p mhfpacket.MHFPacket) {
zap.Error(err), zap.Error(err),
zap.Uint32("charID", s.CharID), zap.Uint32("charID", s.CharID),
) )
broadcast.DoAckSimpleFail(s, pkt.AckHandle, nil) s.DoAckSimpleFail(pkt.AckHandle, nil)
return return
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, nil) s.DoAckSimpleSucceed(pkt.AckHandle, nil)
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
@@ -29,7 +28,7 @@ func HandleMsgMhfEnumerateGuildTresure(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfEnumerateGuildTresure) pkt := p.(*mhfpacket.MsgMhfEnumerateGuildTresure)
guild, err := GetGuildInfoByCharacterId(s, s.CharID) guild, err := GetGuildInfoByCharacterId(s, s.CharID)
if err != nil || guild == nil { if err != nil || guild == nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
var hunts []TreasureHunt var hunts []TreasureHunt
@@ -57,7 +56,7 @@ func HandleMsgMhfEnumerateGuildTresure(s *Session, p mhfpacket.MHFPacket) {
`, s.CharID, guild.ID) `, s.CharID, guild.ID)
if err != nil { if err != nil {
rows.Close() rows.Close()
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} else { } else {
for rows.Next() { for rows.Next() {
@@ -84,7 +83,7 @@ func HandleMsgMhfEnumerateGuildTresure(s *Session, p mhfpacket.MHFPacket) {
bf.WriteBool(h.Claimed) bf.WriteBool(h.Claimed)
bf.WriteBytes(h.HuntData) bf.WriteBytes(h.HuntData)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfRegistGuildTresure(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfRegistGuildTresure(s *Session, p mhfpacket.MHFPacket) {
@@ -93,7 +92,7 @@ func HandleMsgMhfRegistGuildTresure(s *Session, p mhfpacket.MHFPacket) {
huntData := byteframe.NewByteFrame() huntData := byteframe.NewByteFrame()
guild, err := GetGuildInfoByCharacterId(s, s.CharID) guild, err := GetGuildInfoByCharacterId(s, s.CharID)
if err != nil || guild == nil { if err != nil || guild == nil {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
guildCats := getGuildAirouList(s) guildCats := getGuildAirouList(s)
@@ -122,7 +121,7 @@ func HandleMsgMhfRegistGuildTresure(s *Session, p mhfpacket.MHFPacket) {
} }
database.Exec(`INSERT INTO guild_hunts (guild_id, host_id, destination, level, hunt_data, cats_used) VALUES ($1, $2, $3, $4, $5, $6) database.Exec(`INSERT INTO guild_hunts (guild_id, host_id, destination, level, hunt_data, cats_used) VALUES ($1, $2, $3, $4, $5, $6)
`, guild.ID, s.CharID, destination, level, huntData.Data(), catsUsed) `, guild.ID, s.CharID, destination, level, huntData.Data(), catsUsed)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfAcquireGuildTresure(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfAcquireGuildTresure(s *Session, p mhfpacket.MHFPacket) {
@@ -132,7 +131,7 @@ func HandleMsgMhfAcquireGuildTresure(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec(`UPDATE guild_hunts SET acquired=true WHERE id=$1`, pkt.HuntID) database.Exec(`UPDATE guild_hunts SET acquired=true WHERE id=$1`, pkt.HuntID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func HandleMsgMhfOperateGuildTresureReport(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfOperateGuildTresureReport(s *Session, p mhfpacket.MHFPacket) {
@@ -150,7 +149,7 @@ func HandleMsgMhfOperateGuildTresureReport(s *Session, p mhfpacket.MHFPacket) {
case 2: // Claim treasure case 2: // Claim treasure
database.Exec(`INSERT INTO guild_hunts_claimed VALUES ($1, $2)`, pkt.HuntID, s.CharID) database.Exec(`INSERT INTO guild_hunts_claimed VALUES ($1, $2)`, pkt.HuntID, s.CharID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
type TreasureSouvenir struct { type TreasureSouvenir struct {
@@ -168,10 +167,10 @@ func HandleMsgMhfGetGuildTresureSouvenir(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(souvenir.Destination) bf.WriteUint32(souvenir.Destination)
bf.WriteUint32(souvenir.Quantity) bf.WriteUint32(souvenir.Quantity)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func HandleMsgMhfAcquireGuildTresureSouvenir(s *Session, p mhfpacket.MHFPacket) { func HandleMsgMhfAcquireGuildTresureSouvenir(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAcquireGuildTresureSouvenir) pkt := p.(*mhfpacket.MsgMhfAcquireGuildTresureSouvenir)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/mhfitem" "erupe-ce/utils/mhfitem"
@@ -49,7 +48,7 @@ func handleMsgMhfUpdateInterior(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec(`UPDATE user_binary SET house_furniture=$1 WHERE id=$2`, pkt.InteriorData, s.CharID) database.Exec(`UPDATE user_binary SET house_furniture=$1 WHERE id=$2`, pkt.InteriorData, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
type HouseData struct { type HouseData struct {
@@ -139,7 +138,7 @@ func handleMsgMhfEnumerateHouse(s *Session, p mhfpacket.MHFPacket) {
} }
bf.Seek(0, 0) bf.Seek(0, 0)
bf.WriteUint16(uint16(len(houses))) bf.WriteUint16(uint16(len(houses)))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfUpdateHouse(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateHouse(s *Session, p mhfpacket.MHFPacket) {
@@ -154,7 +153,7 @@ func handleMsgMhfUpdateHouse(s *Session, p mhfpacket.MHFPacket) {
// 04 = open guild // 04 = open guild
// 05 = open friends+guild // 05 = open friends+guild
database.Exec(`UPDATE user_binary SET house_state=$1, house_password=$2 WHERE id=$3`, pkt.State, pkt.Password, s.CharID) database.Exec(`UPDATE user_binary SET house_state=$1, house_password=$2 WHERE id=$3`, pkt.State, pkt.Password, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfLoadHouse(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadHouse(s *Session, p mhfpacket.MHFPacket) {
@@ -172,7 +171,7 @@ func handleMsgMhfLoadHouse(s *Session, p mhfpacket.MHFPacket) {
if pkt.Destination != 9 && len(pkt.Password) > 0 && pkt.CheckPass { if pkt.Destination != 9 && len(pkt.Password) > 0 && pkt.CheckPass {
if pkt.Password != password { if pkt.Password != password {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
} }
@@ -208,7 +207,7 @@ func handleMsgMhfLoadHouse(s *Session, p mhfpacket.MHFPacket) {
} }
if !allowed { if !allowed {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
} }
@@ -244,9 +243,9 @@ func handleMsgMhfLoadHouse(s *Session, p mhfpacket.MHFPacket) {
} }
} }
if len(bf.Data()) == 0 { if len(bf.Data()) == 0 {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
} }
@@ -259,9 +258,9 @@ func handleMsgMhfGetMyhouseInfo(s *Session, p mhfpacket.MHFPacket) {
var data []byte var data []byte
database.QueryRow(`SELECT mission FROM user_binary WHERE id=$1`, s.CharID).Scan(&data) database.QueryRow(`SELECT mission FROM user_binary WHERE id=$1`, s.CharID).Scan(&data)
if len(data) > 0 { if len(data) > 0 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 9)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 9))
} }
} }
@@ -272,7 +271,7 @@ func handleMsgMhfUpdateMyhouseInfo(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec("UPDATE user_binary SET mission=$1 WHERE id=$2", pkt.Data, s.CharID) database.Exec("UPDATE user_binary SET mission=$1 WHERE id=$2", pkt.Data, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfLoadDecoMyset(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadDecoMyset(s *Session, p mhfpacket.MHFPacket) {
@@ -293,7 +292,7 @@ func handleMsgMhfLoadDecoMyset(s *Session, p mhfpacket.MHFPacket) {
data = []byte{0x00, 0x00} data = []byte{0x00, 0x00}
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSaveDecoMyset(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSaveDecoMyset(s *Session, p mhfpacket.MHFPacket) {
@@ -306,7 +305,7 @@ func handleMsgMhfSaveDecoMyset(s *Session, p mhfpacket.MHFPacket) {
err = database.QueryRow("SELECT decomyset FROM characters WHERE id = $1", s.CharID).Scan(&temp) err = database.QueryRow("SELECT decomyset FROM characters WHERE id = $1", s.CharID).Scan(&temp)
if err != nil { if err != nil {
s.Logger.Error("Failed to load decomyset", zap.Error(err)) s.Logger.Error("Failed to load decomyset", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -350,7 +349,7 @@ func handleMsgMhfSaveDecoMyset(s *Session, p mhfpacket.MHFPacket) {
dumpSaveData(s, bf.Data(), "decomyset") dumpSaveData(s, bf.Data(), "decomyset")
database.Exec("UPDATE characters SET decomyset=$1 WHERE id=$2", bf.Data(), s.CharID) database.Exec("UPDATE characters SET decomyset=$1 WHERE id=$2", bf.Data(), s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
type Title struct { type Title struct {
@@ -371,7 +370,7 @@ func handleMsgMhfEnumerateTitle(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
rows, err := database.Queryx("SELECT id, unlocked_at, updated_at FROM titles WHERE char_id=$1", s.CharID) rows, err := database.Queryx("SELECT id, unlocked_at, updated_at FROM titles WHERE char_id=$1", s.CharID)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
return return
} }
for rows.Next() { for rows.Next() {
@@ -388,7 +387,7 @@ func handleMsgMhfEnumerateTitle(s *Session, p mhfpacket.MHFPacket) {
} }
bf.Seek(0, io.SeekStart) bf.Seek(0, io.SeekStart)
bf.WriteUint16(count) bf.WriteUint16(count)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfAcquireTitle(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfAcquireTitle(s *Session, p mhfpacket.MHFPacket) {
@@ -406,7 +405,7 @@ func handleMsgMhfAcquireTitle(s *Session, p mhfpacket.MHFPacket) {
database.Exec(`UPDATE titles SET updated_at=now() WHERE id=$1 AND char_id=$2`, title, s.CharID) database.Exec(`UPDATE titles SET updated_at=now() WHERE id=$1 AND char_id=$2`, title, s.CharID)
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfResetTitle(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfResetTitle(s *Session, p mhfpacket.MHFPacket) {}
@@ -484,7 +483,7 @@ func handleMsgMhfOperateWarehouse(s *Session, p mhfpacket.MHFPacket) {
// 2 = Rename // 2 = Rename
// 3 = Get usage limit // 3 = Get usage limit
// 4 = Get gift box names (doesn't do anything?) // 4 = Get gift box names (doesn't do anything?)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func addWarehouseItem(s *Session, item mhfitem.MHFItemStack) { func addWarehouseItem(s *Session, item mhfitem.MHFItemStack) {
@@ -560,9 +559,9 @@ func handleMsgMhfEnumerateWarehouse(s *Session, p mhfpacket.MHFPacket) {
bf.WriteBytes(mhfitem.SerializeWarehouseEquipment(equipment)) bf.WriteBytes(mhfitem.SerializeWarehouseEquipment(equipment))
} }
if bf.Index() > 0 { if bf.Index() > 0 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
} }
} }
@@ -601,5 +600,5 @@ func handleMsgMhfUpdateWarehouse(s *Session, p mhfpacket.MHFPacket) {
} }
database.Exec(fmt.Sprintf(`UPDATE warehouse SET equip%d=$1 WHERE character_id=$2`, pkt.BoxIndex), mhfitem.SerializeWarehouseEquipment(fEquip), s.CharID) database.Exec(fmt.Sprintf(`UPDATE warehouse SET equip%d=$1 WHERE character_id=$2`, pkt.BoxIndex), mhfitem.SerializeWarehouseEquipment(fEquip), s.CharID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"fmt" "fmt"
@@ -24,7 +23,7 @@ func handleMsgMhfAddKouryouPoint(s *Session, p mhfpacket.MHFPacket) {
} }
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(uint32(points)) resp.WriteUint32(uint32(points))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfGetKouryouPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetKouryouPoint(s *Session, p mhfpacket.MHFPacket) {
@@ -40,7 +39,7 @@ func handleMsgMhfGetKouryouPoint(s *Session, p mhfpacket.MHFPacket) {
} }
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(uint32(points)) resp.WriteUint32(uint32(points))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfExchangeKouryouPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfExchangeKouryouPoint(s *Session, p mhfpacket.MHFPacket) {
@@ -57,5 +56,5 @@ func handleMsgMhfExchangeKouryouPoint(s *Session, p mhfpacket.MHFPacket) {
} }
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(uint32(points)) resp.WriteUint32(uint32(points))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"database/sql" "database/sql"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
"fmt" "fmt"
@@ -231,13 +230,13 @@ func handleMsgMhfReadMail(s *Session, p mhfpacket.MHFPacket) {
} }
mailId := s.mailList[pkt.AccIndex] mailId := s.mailList[pkt.AccIndex]
if mailId == 0 { if mailId == 0 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0})
return return
} }
mail, err := GetMailByID(s, mailId) mail, err := GetMailByID(s, mailId)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0})
return return
} }
@@ -245,7 +244,7 @@ func handleMsgMhfReadMail(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
body := stringsupport.UTF8ToSJIS(mail.Body) body := stringsupport.UTF8ToSJIS(mail.Body)
bf.WriteNullTerminatedBytes(body) bf.WriteNullTerminatedBytes(body)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfListMail(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfListMail(s *Session, p mhfpacket.MHFPacket) {
@@ -253,7 +252,7 @@ func handleMsgMhfListMail(s *Session, p mhfpacket.MHFPacket) {
mail, err := GetMailListForCharacter(s, s.CharID) mail, err := GetMailListForCharacter(s, s.CharID)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0})
return return
} }
@@ -314,7 +313,7 @@ func handleMsgMhfListMail(s *Session, p mhfpacket.MHFPacket) {
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, msg.Data()) s.DoAckBufSucceed(pkt.AckHandle, msg.Data())
} }
func handleMsgMhfOprtMail(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfOprtMail(s *Session, p mhfpacket.MHFPacket) {
@@ -325,7 +324,7 @@ func handleMsgMhfOprtMail(s *Session, p mhfpacket.MHFPacket) {
} }
mail, err := GetMailByID(s, s.mailList[pkt.AccIndex]) mail, err := GetMailByID(s, s.mailList[pkt.AccIndex])
if err != nil { if err != nil {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
@@ -339,7 +338,7 @@ func handleMsgMhfOprtMail(s *Session, p mhfpacket.MHFPacket) {
case mhfpacket.OperateMailAcquireItem: case mhfpacket.OperateMailAcquireItem:
database.Exec(`UPDATE mail SET attached_item_received = TRUE WHERE id = $1`, mail.ID) database.Exec(`UPDATE mail SET attached_item_received = TRUE WHERE id = $1`, mail.ID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfSendMail(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSendMail(s *Session, p mhfpacket.MHFPacket) {
@@ -357,20 +356,20 @@ func handleMsgMhfSendMail(s *Session, p mhfpacket.MHFPacket) {
g, err := GetGuildInfoByCharacterId(s, s.CharID) g, err := GetGuildInfoByCharacterId(s, s.CharID)
if err != nil { if err != nil {
s.Logger.Error("Failed to get guild info for mail") s.Logger.Error("Failed to get guild info for mail")
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
gm, err := GetGuildMembers(s, g.ID, false) gm, err := GetGuildMembers(s, g.ID, false)
if err != nil { if err != nil {
s.Logger.Error("Failed to get guild members for mail") s.Logger.Error("Failed to get guild members for mail")
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
for i := 0; i < len(gm); i++ { for i := 0; i < len(gm); i++ {
_, err := database.Exec(query, s.CharID, gm[i].CharID, pkt.Subject, pkt.Body, 0, 0, false) _, err := database.Exec(query, s.CharID, gm[i].CharID, pkt.Subject, pkt.Body, 0, 0, false)
if err != nil { if err != nil {
s.Logger.Error("Failed to send mail") s.Logger.Error("Failed to send mail")
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
} }
@@ -380,5 +379,5 @@ func handleMsgMhfSendMail(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to send mail") s.Logger.Error("Failed to send mail")
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -6,7 +6,6 @@ import (
"erupe-ce/server/channelserver/compression/deltacomp" "erupe-ce/server/channelserver/compression/deltacomp"
"erupe-ce/server/channelserver/compression/nullcomp" "erupe-ce/server/channelserver/compression/nullcomp"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
@@ -30,7 +29,7 @@ func handleMsgMhfLoadPartner(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to load partner", zap.Error(err)) s.Logger.Error("Failed to load partner", zap.Error(err))
data = make([]byte, 9) data = make([]byte, 9)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSavePartner(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSavePartner(s *Session, p mhfpacket.MHFPacket) {
@@ -44,7 +43,7 @@ func handleMsgMhfSavePartner(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to save partner", zap.Error(err)) s.Logger.Error("Failed to save partner", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfLoadLegendDispatch(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadLegendDispatch(s *Session, p mhfpacket.MHFPacket) {
@@ -63,7 +62,7 @@ func handleMsgMhfLoadLegendDispatch(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(dispatch.Unk) bf.WriteUint32(dispatch.Unk)
bf.WriteUint32(dispatch.Timestamp) bf.WriteUint32(dispatch.Timestamp)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfLoadHunterNavi(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadHunterNavi(s *Session, p mhfpacket.MHFPacket) {
@@ -82,7 +81,7 @@ func handleMsgMhfLoadHunterNavi(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to load hunternavi", zap.Error(err)) s.Logger.Error("Failed to load hunternavi", zap.Error(err))
data = make([]byte, naviLength) data = make([]byte, naviLength)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSaveHunterNavi(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSaveHunterNavi(s *Session, p mhfpacket.MHFPacket) {
@@ -125,7 +124,7 @@ func handleMsgMhfSaveHunterNavi(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to save hunternavi", zap.Error(err)) s.Logger.Error("Failed to save hunternavi", zap.Error(err))
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfMercenaryHuntdata(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfMercenaryHuntdata(s *Session, p mhfpacket.MHFPacket) {
@@ -136,9 +135,9 @@ func handleMsgMhfMercenaryHuntdata(s *Session, p mhfpacket.MHFPacket) {
// struct Hunt // struct Hunt
// uint32 HuntID // uint32 HuntID
// uint32 MonID // uint32 MonID
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 0)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 0))
} }
} }
@@ -152,7 +151,7 @@ func handleMsgMhfEnumerateMercenaryLog(s *Session, p mhfpacket.MHFPacket) {
// []byte Name (len 18) // []byte Name (len 18)
// uint8 Unk // uint8 Unk
// uint8 Unk // uint8 Unk
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfCreateMercenary(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfCreateMercenary(s *Session, p mhfpacket.MHFPacket) {
@@ -166,7 +165,7 @@ func handleMsgMhfCreateMercenary(s *Session, p mhfpacket.MHFPacket) {
_ = database.QueryRow("SELECT nextval('rasta_id_seq')").Scan(&nextID) _ = database.QueryRow("SELECT nextval('rasta_id_seq')").Scan(&nextID)
database.Exec("UPDATE characters SET rasta_id=$1 WHERE id=$2", nextID, s.CharID) database.Exec("UPDATE characters SET rasta_id=$1 WHERE id=$2", nextID, s.CharID)
bf.WriteUint32(nextID) bf.WriteUint32(nextID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfSaveMercenary(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSaveMercenary(s *Session, p mhfpacket.MHFPacket) {
@@ -181,7 +180,7 @@ func handleMsgMhfSaveMercenary(s *Session, p mhfpacket.MHFPacket) {
database.Exec("UPDATE characters SET savemercenary=$1, rasta_id=$2 WHERE id=$3", pkt.MercData, temp.ReadUint32(), s.CharID) database.Exec("UPDATE characters SET savemercenary=$1, rasta_id=$2 WHERE id=$3", pkt.MercData, temp.ReadUint32(), s.CharID)
} }
database.Exec("UPDATE characters SET gcp=$1, pact_id=$2 WHERE id=$3", pkt.GCP, pkt.PactMercID, s.CharID) database.Exec("UPDATE characters SET gcp=$1, pact_id=$2 WHERE id=$3", pkt.GCP, pkt.PactMercID, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfReadMercenaryW(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReadMercenaryW(s *Session, p mhfpacket.MHFPacket) {
@@ -243,7 +242,7 @@ func handleMsgMhfReadMercenaryW(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(gcp) bf.WriteUint32(gcp)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfReadMercenaryM(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReadMercenaryM(s *Session, p mhfpacket.MHFPacket) {
@@ -260,7 +259,7 @@ func handleMsgMhfReadMercenaryM(s *Session, p mhfpacket.MHFPacket) {
} else { } else {
resp.WriteBytes(data) resp.WriteBytes(data)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfContractMercenary(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfContractMercenary(s *Session, p mhfpacket.MHFPacket) {
@@ -277,7 +276,7 @@ func handleMsgMhfContractMercenary(s *Session, p mhfpacket.MHFPacket) {
case 2: // Cancel loan case 2: // Cancel loan
database.Exec("UPDATE characters SET pact_id=0 WHERE id=$1", pkt.CID) database.Exec("UPDATE characters SET pact_id=0 WHERE id=$1", pkt.CID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfLoadOtomoAirou(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadOtomoAirou(s *Session, p mhfpacket.MHFPacket) {
@@ -292,7 +291,7 @@ func handleMsgMhfLoadOtomoAirou(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to load otomoairou", zap.Error(err)) s.Logger.Error("Failed to load otomoairou", zap.Error(err))
data = make([]byte, 10) data = make([]byte, 10)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSaveOtomoAirou(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSaveOtomoAirou(s *Session, p mhfpacket.MHFPacket) {
@@ -305,7 +304,7 @@ func handleMsgMhfSaveOtomoAirou(s *Session, p mhfpacket.MHFPacket) {
decomp, err := nullcomp.Decompress(pkt.RawDataPayload[1:]) decomp, err := nullcomp.Decompress(pkt.RawDataPayload[1:])
if err != nil { if err != nil {
s.Logger.Error("Failed to decompress airou", zap.Error(err)) s.Logger.Error("Failed to decompress airou", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
bf := byteframe.NewByteFrameFromBytes(decomp) bf := byteframe.NewByteFrameFromBytes(decomp)
@@ -340,7 +339,7 @@ func handleMsgMhfSaveOtomoAirou(s *Session, p mhfpacket.MHFPacket) {
comp = append([]byte{0x01}, comp...) comp = append([]byte{0x01}, comp...)
database.Exec("UPDATE characters SET otomoairou=$1 WHERE id=$2", comp, s.CharID) database.Exec("UPDATE characters SET otomoairou=$1 WHERE id=$2", comp, s.CharID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfEnumerateAiroulist(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEnumerateAiroulist(s *Session, p mhfpacket.MHFPacket) {
@@ -359,7 +358,7 @@ func handleMsgMhfEnumerateAiroulist(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint16(cat.WeaponID) resp.WriteUint16(cat.WeaponID)
resp.WriteUint32(0) // 32 bit unix timestamp, either time at which the cat stops being fatigued or the time at which it started resp.WriteUint32(0) // 32 bit unix timestamp, either time at which the cat stops being fatigued or the time at which it started
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
type Airou struct { type Airou struct {

View File

@@ -5,7 +5,6 @@ import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
) )
@@ -26,7 +25,7 @@ func handleMsgSysCreateObject(s *Session, p mhfpacket.MHFPacket) {
// Response to our requesting client. // Response to our requesting client.
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(newObj.id) // New local obj handle. resp.WriteUint32(newObj.id) // New local obj handle.
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, resp.Data())
// Duplicate the object creation to all sessions in the same stage. // Duplicate the object creation to all sessions in the same stage.
dupObjUpdate := &mhfpacket.MsgSysDuplicateObject{ dupObjUpdate := &mhfpacket.MsgSysDuplicateObject{
ObjID: newObj.id, ObjID: newObj.id,

View File

@@ -4,7 +4,6 @@ import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/server/channelserver/compression/deltacomp" "erupe-ce/server/channelserver/compression/deltacomp"
"erupe-ce/server/channelserver/compression/nullcomp" "erupe-ce/server/channelserver/compression/nullcomp"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"fmt" "fmt"
@@ -22,7 +21,7 @@ func handleMsgMhfLoadPlateData(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to load platedata", zap.Error(err)) s.Logger.Error("Failed to load platedata", zap.Error(err))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSavePlateData(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSavePlateData(s *Session, p mhfpacket.MHFPacket) {
@@ -38,7 +37,7 @@ func handleMsgMhfSavePlateData(s *Session, p mhfpacket.MHFPacket) {
err := database.QueryRow("SELECT platedata FROM characters WHERE id = $1", s.CharID).Scan(&data) err := database.QueryRow("SELECT platedata FROM characters WHERE id = $1", s.CharID).Scan(&data)
if err != nil { if err != nil {
s.Logger.Error("Failed to load platedata", zap.Error(err)) s.Logger.Error("Failed to load platedata", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
@@ -48,7 +47,7 @@ func handleMsgMhfSavePlateData(s *Session, p mhfpacket.MHFPacket) {
data, err = nullcomp.Decompress(data) data, err = nullcomp.Decompress(data)
if err != nil { if err != nil {
s.Logger.Error("Failed to decompress platedata", zap.Error(err)) s.Logger.Error("Failed to decompress platedata", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
} else { } else {
@@ -61,14 +60,14 @@ func handleMsgMhfSavePlateData(s *Session, p mhfpacket.MHFPacket) {
saveOutput, err := nullcomp.Compress(deltacomp.ApplyDataDiff(pkt.RawDataPayload, data)) saveOutput, err := nullcomp.Compress(deltacomp.ApplyDataDiff(pkt.RawDataPayload, data))
if err != nil { if err != nil {
s.Logger.Error("Failed to diff and compress platedata", zap.Error(err)) s.Logger.Error("Failed to diff and compress platedata", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
_, err = database.Exec("UPDATE characters SET platedata=$1 WHERE id=$2", saveOutput, s.CharID) _, err = database.Exec("UPDATE characters SET platedata=$1 WHERE id=$2", saveOutput, s.CharID)
if err != nil { if err != nil {
s.Logger.Error("Failed to save platedata", zap.Error(err)) s.Logger.Error("Failed to save platedata", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
@@ -82,7 +81,7 @@ func handleMsgMhfSavePlateData(s *Session, p mhfpacket.MHFPacket) {
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfLoadPlateBox(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadPlateBox(s *Session, p mhfpacket.MHFPacket) {
@@ -96,7 +95,7 @@ func handleMsgMhfLoadPlateBox(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to load platebox", zap.Error(err)) s.Logger.Error("Failed to load platebox", zap.Error(err))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSavePlateBox(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSavePlateBox(s *Session, p mhfpacket.MHFPacket) {
@@ -112,7 +111,7 @@ func handleMsgMhfSavePlateBox(s *Session, p mhfpacket.MHFPacket) {
err := database.QueryRow("SELECT platebox FROM characters WHERE id = $1", s.CharID).Scan(&data) err := database.QueryRow("SELECT platebox FROM characters WHERE id = $1", s.CharID).Scan(&data)
if err != nil { if err != nil {
s.Logger.Error("Failed to load platebox", zap.Error(err)) s.Logger.Error("Failed to load platebox", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
@@ -123,7 +122,7 @@ func handleMsgMhfSavePlateBox(s *Session, p mhfpacket.MHFPacket) {
data, err = nullcomp.Decompress(data) data, err = nullcomp.Decompress(data)
if err != nil { if err != nil {
s.Logger.Error("Failed to decompress platebox", zap.Error(err)) s.Logger.Error("Failed to decompress platebox", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
} else { } else {
@@ -136,14 +135,14 @@ func handleMsgMhfSavePlateBox(s *Session, p mhfpacket.MHFPacket) {
saveOutput, err := nullcomp.Compress(deltacomp.ApplyDataDiff(pkt.RawDataPayload, data)) saveOutput, err := nullcomp.Compress(deltacomp.ApplyDataDiff(pkt.RawDataPayload, data))
if err != nil { if err != nil {
s.Logger.Error("Failed to diff and compress platebox", zap.Error(err)) s.Logger.Error("Failed to diff and compress platebox", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
_, err = database.Exec("UPDATE characters SET platebox=$1 WHERE id=$2", saveOutput, s.CharID) _, err = database.Exec("UPDATE characters SET platebox=$1 WHERE id=$2", saveOutput, s.CharID)
if err != nil { if err != nil {
s.Logger.Error("Failed to save platebox", zap.Error(err)) s.Logger.Error("Failed to save platebox", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
return return
} }
@@ -156,7 +155,7 @@ func handleMsgMhfSavePlateBox(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to save platebox", zap.Error(err)) s.Logger.Error("Failed to save platebox", zap.Error(err))
} }
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfLoadPlateMyset(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadPlateMyset(s *Session, p mhfpacket.MHFPacket) {
@@ -171,7 +170,7 @@ func handleMsgMhfLoadPlateMyset(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to load platemyset", zap.Error(err)) s.Logger.Error("Failed to load platemyset", zap.Error(err))
data = make([]byte, 1920) data = make([]byte, 1920)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfSavePlateMyset(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfSavePlateMyset(s *Session, p mhfpacket.MHFPacket) {
@@ -186,5 +185,5 @@ func handleMsgMhfSavePlateMyset(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error("Failed to save platemyset", zap.Error(err)) s.Logger.Error("Failed to save platemyset", zap.Error(err))
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"database/sql" "database/sql"
"encoding/binary" "encoding/binary"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/decryption" "erupe-ce/utils/decryption"
@@ -111,10 +110,10 @@ func handleMsgSysGetFile(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error(fmt.Sprintf("Failed to open file: %s/scenarios/%s.bin", config.GetConfig().BinPath, filename)) s.Logger.Error(fmt.Sprintf("Failed to open file: %s/scenarios/%s.bin", config.GetConfig().BinPath, filename))
// This will crash the game. // This will crash the game.
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
return return
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} else { } else {
if config.GetConfig().DebugOptions.QuestTools { if config.GetConfig().DebugOptions.QuestTools {
s.Logger.Debug( s.Logger.Debug(
@@ -131,13 +130,13 @@ func handleMsgSysGetFile(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.Logger.Error(fmt.Sprintf("Failed to open file: %s/quests/%s.bin", config.GetConfig().BinPath, pkt.Filename)) s.Logger.Error(fmt.Sprintf("Failed to open file: %s/quests/%s.bin", config.GetConfig().BinPath, pkt.Filename))
// This will crash the game. // This will crash the game.
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
return return
} }
if config.GetConfig().ClientID <= config.Z1 && config.GetConfig().DebugOptions.AutoQuestBackport { if config.GetConfig().ClientID <= config.Z1 && config.GetConfig().DebugOptions.AutoQuestBackport {
data = BackportQuest(decryption.UnpackSimple(data)) data = BackportQuest(decryption.UnpackSimple(data))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
} }
@@ -177,9 +176,9 @@ func handleMsgMhfLoadFavoriteQuest(s *Session, p mhfpacket.MHFPacket) {
} }
err = database.QueryRow("SELECT savefavoritequest FROM characters WHERE id = $1", s.CharID).Scan(&data) err = database.QueryRow("SELECT savefavoritequest FROM characters WHERE id = $1", s.CharID).Scan(&data)
if err == nil && len(data) > 0 { if err == nil && len(data) > 0 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
} }
} }
@@ -191,7 +190,7 @@ func handleMsgMhfSaveFavoriteQuest(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec("UPDATE characters SET savefavoritequest=$1 WHERE id=$2", pkt.Data, s.CharID) database.Exec("UPDATE characters SET savefavoritequest=$1 WHERE id=$2", pkt.Data, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func loadQuestFile(s *Session, questId int) []byte { func loadQuestFile(s *Session, questId int) []byte {
@@ -657,7 +656,7 @@ func handleMsgMhfEnumerateQuest(s *Session, p mhfpacket.MHFPacket) {
bf.Seek(0, io.SeekStart) bf.Seek(0, io.SeekStart)
bf.WriteUint16(returnedCount) bf.WriteUint16(returnedCount)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func getTuneValueRange(start uint16, value uint16) []tuneValue { func getTuneValueRange(start uint16, value uint16) []tuneValue {
@@ -695,5 +694,5 @@ func handleMsgMhfGetUdBonusQuestInfo(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint8(q.Unk6) resp.WriteUint8(q.Unk6)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"strings" "strings"
) )
@@ -13,13 +12,13 @@ func handleMsgMhfRegisterEvent(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
// Some kind of check if there's already a session // Some kind of check if there's already a session
if pkt.Unk1 && s.Server.getRaviSemaphore() == nil { if pkt.Unk1 && s.Server.getRaviSemaphore() == nil {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
bf.WriteUint8(uint8(pkt.WorldID)) bf.WriteUint8(uint8(pkt.WorldID))
bf.WriteUint8(uint8(pkt.LandID)) bf.WriteUint8(uint8(pkt.LandID))
bf.WriteUint16(s.Server.raviente.id) bf.WriteUint16(s.Server.raviente.id)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfReleaseEvent(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReleaseEvent(s *Session, p mhfpacket.MHFPacket) {
@@ -87,7 +86,7 @@ func handleMsgSysOperateRegister(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(_new) bf.WriteUint32(_new)
} }
s.Server.raviente.Unlock() s.Server.raviente.Unlock()
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
if config.GetConfig().GameplayOptions.LowLatencyRaviente { if config.GetConfig().GameplayOptions.LowLatencyRaviente {
s.notifyRavi() s.notifyRavi()
@@ -109,7 +108,7 @@ func handleMsgSysLoadRegister(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(s.Server.raviente.register[i]) bf.WriteUint32(s.Server.raviente.register[i])
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func (s *Session) notifyRavi() { func (s *Session) notifyRavi() {

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
ps "erupe-ce/utils/pascalstring" ps "erupe-ce/utils/pascalstring"
"fmt" "fmt"
@@ -29,7 +28,7 @@ func handleMsgMhfSaveRengokuData(s *Session, p mhfpacket.MHFPacket) {
_, err = database.Exec("UPDATE characters SET rengokudata=$1 WHERE id=$2", pkt.RawDataPayload, s.CharID) _, err = database.Exec("UPDATE characters SET rengokudata=$1 WHERE id=$2", pkt.RawDataPayload, s.CharID)
if err != nil { if err != nil {
s.Logger.Error("Failed to save rengokudata", zap.Error(err)) s.Logger.Error("Failed to save rengokudata", zap.Error(err))
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
bf := byteframe.NewByteFrameFromBytes(pkt.RawDataPayload) bf := byteframe.NewByteFrameFromBytes(pkt.RawDataPayload)
@@ -45,7 +44,7 @@ func handleMsgMhfSaveRengokuData(s *Session, p mhfpacket.MHFPacket) {
database.Exec("INSERT INTO rengoku_score (character_id) VALUES ($1)", s.CharID) database.Exec("INSERT INTO rengoku_score (character_id) VALUES ($1)", s.CharID)
} }
database.Exec("UPDATE rengoku_score SET max_stages_mp=$1, max_points_mp=$2, max_stages_sp=$3, max_points_sp=$4 WHERE character_id=$5", maxStageMp, maxScoreMp, maxStageSp, maxScoreSp, s.CharID) database.Exec("UPDATE rengoku_score SET max_stages_mp=$1, max_points_mp=$2, max_stages_sp=$3, max_points_sp=$4 WHERE character_id=$5", maxStageMp, maxScoreMp, maxStageSp, maxScoreSp, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfLoadRengokuData(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfLoadRengokuData(s *Session, p mhfpacket.MHFPacket) {
@@ -60,7 +59,7 @@ func handleMsgMhfLoadRengokuData(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Error("Failed to load rengokudata", zap.Error(err)) s.Logger.Error("Failed to load rengokudata", zap.Error(err))
} }
if len(data) > 0 { if len(data) > 0 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} else { } else {
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(0) resp.WriteUint32(0)
@@ -98,7 +97,7 @@ func handleMsgMhfLoadRengokuData(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(0) resp.WriteUint32(0)
resp.WriteUint32(0) resp.WriteUint32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
} }
@@ -109,7 +108,7 @@ func handleMsgMhfGetRengokuBinary(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
const rengokuScoreQuery = `, c.name FROM rengoku_score rs const rengokuScoreQuery = `, c.name FROM rengoku_score rs
@@ -132,7 +131,7 @@ func handleMsgMhfEnumerateRengokuRanking(s *Session, p mhfpacket.MHFPacket) {
if pkt.Leaderboard == 2 || pkt.Leaderboard == 3 || pkt.Leaderboard == 6 || pkt.Leaderboard == 7 { if pkt.Leaderboard == 2 || pkt.Leaderboard == 3 || pkt.Leaderboard == 6 || pkt.Leaderboard == 7 {
if guild == nil { if guild == nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 11)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 11))
return return
} }
} }
@@ -191,7 +190,7 @@ func handleMsgMhfEnumerateRengokuRanking(s *Session, p mhfpacket.MHFPacket) {
} }
bf.WriteUint8(uint8(i) - 1) bf.WriteUint8(uint8(i) - 1)
bf.WriteBytes(scoreData.Data()) bf.WriteBytes(scoreData.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetRengokuRankingRank(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetRengokuRankingRank(s *Session, p mhfpacket.MHFPacket) {
@@ -200,5 +199,5 @@ func handleMsgMhfGetRengokuRankingRank(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(0) // Max stage overall MP rank bf.WriteUint32(0) // Max stage overall MP rank
bf.WriteUint32(0) // Max RdP overall MP rank bf.WriteUint32(0) // Max RdP overall MP rank
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }

View File

@@ -2,21 +2,20 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
) )
func handleMsgSysReserve188(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysReserve188(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysReserve188) pkt := p.(*mhfpacket.MsgSysReserve188)
// Left as raw bytes because I couldn't easily find the request or resp parser function in the binary. // Left as raw bytes because I couldn't easily find the request or resp parser function in the binary.
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgSysReserve18B(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysReserve18B(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysReserve18B) pkt := p.(*mhfpacket.MsgSysReserve18B)
// Left as raw bytes because I couldn't easily find the request or resp parser function in the binary. // Left as raw bytes because I couldn't easily find the request or resp parser function in the binary.
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x3C}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x3C})
} }
func handleMsgSysReserve55(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysReserve55(s *Session, p mhfpacket.MHFPacket) {}

View File

@@ -4,7 +4,6 @@ import (
"encoding/hex" "encoding/hex"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
) )
@@ -13,21 +12,21 @@ func handleMsgMhfGetAdditionalBeatReward(s *Session, p mhfpacket.MHFPacket) {
// Actual response in packet captures are all just giant batches of null bytes // Actual response in packet captures are all just giant batches of null bytes
// I'm assuming this is because it used to be tied to an actual event and // I'm assuming this is because it used to be tied to an actual event and
// they never bothered killing off the packet when they made it static // they never bothered killing off the packet when they made it static
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 0x104)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 0x104))
} }
func handleMsgMhfGetUdRankingRewardList(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetUdRankingRewardList(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdRankingRewardList) pkt := p.(*mhfpacket.MsgMhfGetUdRankingRewardList)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000") data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfGetRewardSong(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetRewardSong(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetRewardSong) pkt := p.(*mhfpacket.MsgMhfGetRewardSong)
// Temporary canned response // Temporary canned response
data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000") data, _ := hex.DecodeString("0100001600000A5397DF00000000000000000000000000000000")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfUseRewardSong(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfUseRewardSong(s *Session, p mhfpacket.MHFPacket) {}
@@ -40,7 +39,7 @@ func handleMsgMhfAcquireMonthlyReward(s *Session, p mhfpacket.MHFPacket) {
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint32(0) resp.WriteUint32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfAcceptReadReward(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfAcceptReadReward(s *Session, p mhfpacket.MHFPacket) {}

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
) )
@@ -13,7 +12,7 @@ func handleMsgMhfGetBreakSeibatuLevelReward(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
type WeeklySeibatuRankingReward struct { type WeeklySeibatuRankingReward struct {
@@ -41,7 +40,7 @@ func handleMsgMhfGetWeeklySeibatuRankingReward(s *Session, p mhfpacket.MHFPacket
bf.WriteInt32(reward.Unk5) bf.WriteInt32(reward.Unk5)
data = append(data, bf) data = append(data, bf)
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfGetFixedSeibatuRankingTable(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetFixedSeibatuRankingTable(s *Session, p mhfpacket.MHFPacket) {
@@ -50,7 +49,7 @@ func handleMsgMhfGetFixedSeibatuRankingTable(s *Session, p mhfpacket.MHFPacket)
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteBytes(make([]byte, 32)) bf.WriteBytes(make([]byte, 32))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfReadBeatLevel(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReadBeatLevel(s *Session, p mhfpacket.MHFPacket) {
@@ -66,7 +65,7 @@ func handleMsgMhfReadBeatLevel(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(1) resp.WriteUint32(1)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfReadLastWeekBeatRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReadLastWeekBeatRanking(s *Session, p mhfpacket.MHFPacket) {
@@ -76,13 +75,13 @@ func handleMsgMhfReadLastWeekBeatRanking(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfUpdateBeatLevel(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateBeatLevel(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfUpdateBeatLevel) pkt := p.(*mhfpacket.MsgMhfUpdateBeatLevel)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfReadBeatLevelAllRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReadBeatLevelAllRanking(s *Session, p mhfpacket.MHFPacket) {
@@ -97,11 +96,11 @@ func handleMsgMhfReadBeatLevelAllRanking(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(0) bf.WriteUint32(0)
bf.WriteBytes(make([]byte, 32)) bf.WriteBytes(make([]byte, 32))
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfReadBeatLevelMyRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReadBeatLevelMyRanking(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfReadBeatLevelMyRanking) pkt := p.(*mhfpacket.MsgMhfReadBeatLevelMyRanking)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }

View File

@@ -1,7 +1,6 @@
package channelserver package channelserver
import ( import (
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"strconv" "strconv"
"strings" "strings"
@@ -23,7 +22,7 @@ func removeSessionFromSemaphore(s *Session) {
func handleMsgSysCreateSemaphore(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysCreateSemaphore(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysCreateSemaphore) pkt := p.(*mhfpacket.MsgSysCreateSemaphore)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x03, 0x00, 0x0d}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x03, 0x00, 0x0d})
} }
func destructEmptySemaphores(s *Session) { func destructEmptySemaphores(s *Session) {
@@ -108,7 +107,7 @@ func handleMsgSysCreateAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) {
} else { } else {
bf.WriteUint32(0) bf.WriteUint32(0)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgSysAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) {
@@ -117,9 +116,9 @@ func handleMsgSysAcquireSemaphore(s *Session, p mhfpacket.MHFPacket) {
sema.host = s sema.host = s
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(sema.id) bf.WriteUint32(sema.id)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} else { } else {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
} }
@@ -135,5 +134,5 @@ func handleMsgSysCheckSemaphore(s *Session, p mhfpacket.MHFPacket) {
resp = []byte{0x00, 0x00, 0x00, 0x01} resp = []byte{0x00, 0x00, 0x00, 0x01}
} }
s.Server.semaphoreLock.Unlock() s.Server.semaphoreLock.Unlock()
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, resp) s.DoAckSimpleSucceed(pkt.AckHandle, resp)
} }

View File

@@ -3,7 +3,6 @@ package channelserver
import ( import (
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
@@ -135,13 +134,13 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
case 1: // Running gachas case 1: // Running gachas
// Fundamentally, gacha works completely differently, just hide it for now. // Fundamentally, gacha works completely differently, just hide it for now.
if config.GetConfig().ClientID <= config.G7 { if config.GetConfig().ClientID <= config.G7 {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
rows, err := database.Queryx("SELECT id, min_gr, min_hr, name, url_banner, url_feature, url_thumbnail, wide, recommended, gacha_type, hidden FROM gacha_shop") rows, err := database.Queryx("SELECT id, min_gr, min_hr, name, url_banner, url_feature, url_thumbnail, wide, recommended, gacha_type, hidden FROM gacha_shop")
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
@@ -181,7 +180,7 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
bf.WriteBool(g.Hidden) bf.WriteBool(g.Hidden)
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
case 2: // Actual gacha case 2: // Actual gacha
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(pkt.ShopID) bf.WriteUint32(pkt.ShopID)
@@ -189,7 +188,7 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
database.QueryRow(`SELECT gacha_type FROM gacha_shop WHERE id = $1`, pkt.ShopID).Scan(&gachaType) database.QueryRow(`SELECT gacha_type FROM gacha_shop WHERE id = $1`, pkt.ShopID).Scan(&gachaType)
rows, err := database.Queryx(`SELECT entry_type, id, item_type, item_number, item_quantity, weight, rarity, rolls, daily_limit, frontier_points, COALESCE(name, '') AS name FROM gacha_entries WHERE gacha_id = $1 ORDER BY weight DESC`, pkt.ShopID) rows, err := database.Queryx(`SELECT entry_type, id, item_type, item_number, item_quantity, weight, rarity, rolls, daily_limit, frontier_points, COALESCE(name, '') AS name FROM gacha_entries WHERE gacha_id = $1 ORDER BY weight DESC`, pkt.ShopID)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 4))
return return
} }
var divisor float64 var divisor float64
@@ -246,7 +245,7 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(gi.Quantity) bf.WriteUint16(gi.Quantity)
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
case 3: // Hunting Festival Exchange case 3: // Hunting Festival Exchange
fallthrough fallthrough
case 4: // N Points, 0-6 case 4: // N Points, 0-6
@@ -268,7 +267,7 @@ func handleMsgMhfEnumerateShop(s *Session, p mhfpacket.MHFPacket) {
items = items[:pkt.Limit] items = items[:pkt.Limit]
} }
writeShopItems(bf, items) writeShopItems(bf, items)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
} }
@@ -292,14 +291,14 @@ func handleMsgMhfAcquireExchangeShop(s *Session, p mhfpacket.MHFPacket) {
WHERE EXCLUDED.character_id=$1 AND EXCLUDED.shop_item_id=$2 WHERE EXCLUDED.character_id=$1 AND EXCLUDED.shop_item_id=$2
`, s.CharID, itemHash, buyCount) `, s.CharID, itemHash, buyCount)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
func handleMsgMhfGetGachaPlayHistory(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetGachaPlayHistory(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetGachaPlayHistory) pkt := p.(*mhfpacket.MsgMhfGetGachaPlayHistory)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint8(1) bf.WriteUint8(1)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetGachaPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetGachaPoint(s *Session, p mhfpacket.MHFPacket) {
@@ -314,7 +313,7 @@ func handleMsgMhfGetGachaPoint(s *Session, p mhfpacket.MHFPacket) {
resp.WriteUint32(gp) resp.WriteUint32(gp)
resp.WriteUint32(gt) resp.WriteUint32(gt)
resp.WriteUint32(fp) resp.WriteUint32(fp)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} }
func handleMsgMhfUseGachaPoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUseGachaPoint(s *Session, p mhfpacket.MHFPacket) {
@@ -329,7 +328,7 @@ func handleMsgMhfUseGachaPoint(s *Session, p mhfpacket.MHFPacket) {
if pkt.PremiumCoins > 0 { if pkt.PremiumCoins > 0 {
database.Exec(`UPDATE users u SET gacha_premium=gacha_premium-$1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2)`, pkt.PremiumCoins, s.CharID) database.Exec(`UPDATE users u SET gacha_premium=gacha_premium-$1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2)`, pkt.PremiumCoins, s.CharID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func spendGachaCoin(s *Session, quantity uint16) { func spendGachaCoin(s *Session, quantity uint16) {
@@ -472,9 +471,9 @@ func handleMsgMhfReceiveGachaItem(s *Session, p mhfpacket.MHFPacket) {
resp := byteframe.NewByteFrame() resp := byteframe.NewByteFrame()
resp.WriteUint8(36) resp.WriteUint8(36)
resp.WriteBytes(data[1:181]) resp.WriteBytes(data[1:181])
broadcast.DoAckBufSucceed(s, pkt.AckHandle, resp.Data()) s.DoAckBufSucceed(pkt.AckHandle, resp.Data())
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
if !pkt.Freeze { if !pkt.Freeze {
@@ -502,13 +501,13 @@ func handleMsgMhfPlayNormalGacha(s *Session, p mhfpacket.MHFPacket) {
} }
err, rolls := transactGacha(s, pkt.GachaID, pkt.RollType) err, rolls := transactGacha(s, pkt.GachaID, pkt.RollType)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
rows, err := database.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID) rows, err := database.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
for rows.Next() { for rows.Next() {
@@ -541,7 +540,7 @@ func handleMsgMhfPlayNormalGacha(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint8(uint8(len(rewards))) bf.WriteUint8(uint8(len(rewards)))
bf.WriteBytes(temp.Data()) bf.WriteBytes(temp.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
addGachaItem(s, rewards) addGachaItem(s, rewards)
} }
@@ -554,7 +553,7 @@ func handleMsgMhfPlayStepupGacha(s *Session, p mhfpacket.MHFPacket) {
var reward GachaItem var reward GachaItem
err, rolls := transactGacha(s, pkt.GachaID, pkt.RollType) err, rolls := transactGacha(s, pkt.GachaID, pkt.RollType)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
database, err := db.GetDB() database, err := db.GetDB()
@@ -567,7 +566,7 @@ func handleMsgMhfPlayStepupGacha(s *Session, p mhfpacket.MHFPacket) {
rows, err := database.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID) rows, err := database.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
for rows.Next() { for rows.Next() {
@@ -608,7 +607,7 @@ func handleMsgMhfPlayStepupGacha(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint8(0) bf.WriteUint8(0)
} }
bf.WriteBytes(temp.Data()) bf.WriteBytes(temp.Data())
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
addGachaItem(s, rewards) addGachaItem(s, rewards)
addGachaItem(s, guaranteedItems) addGachaItem(s, guaranteedItems)
} }
@@ -631,7 +630,7 @@ func handleMsgMhfGetStepupStatus(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint8(step) bf.WriteUint8(step)
bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix())) bf.WriteUint32(uint32(gametime.TimeAdjusted().Unix()))
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfGetBoxGachaInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetBoxGachaInfo(s *Session, p mhfpacket.MHFPacket) {
@@ -642,7 +641,7 @@ func handleMsgMhfGetBoxGachaInfo(s *Session, p mhfpacket.MHFPacket) {
} }
entries, err := database.Queryx(`SELECT entry_id FROM gacha_box WHERE gacha_id = $1 AND character_id = $2`, pkt.GachaID, s.CharID) entries, err := database.Queryx(`SELECT entry_id FROM gacha_box WHERE gacha_id = $1 AND character_id = $2`, pkt.GachaID, s.CharID)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
var entryIDs []uint32 var entryIDs []uint32
@@ -657,7 +656,7 @@ func handleMsgMhfGetBoxGachaInfo(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(entryIDs[i]) bf.WriteUint32(entryIDs[i])
bf.WriteBool(true) bf.WriteBool(true)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfPlayBoxGacha(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPlayBoxGacha(s *Session, p mhfpacket.MHFPacket) {
@@ -669,7 +668,7 @@ func handleMsgMhfPlayBoxGacha(s *Session, p mhfpacket.MHFPacket) {
var reward GachaItem var reward GachaItem
err, rolls := transactGacha(s, pkt.GachaID, pkt.RollType) err, rolls := transactGacha(s, pkt.GachaID, pkt.RollType)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
database, err := db.GetDB() database, err := db.GetDB()
@@ -678,7 +677,7 @@ func handleMsgMhfPlayBoxGacha(s *Session, p mhfpacket.MHFPacket) {
} }
rows, err := database.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID) rows, err := database.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID)
if err != nil { if err != nil {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) s.DoAckBufSucceed(pkt.AckHandle, make([]byte, 1))
return return
} }
for rows.Next() { for rows.Next() {
@@ -708,7 +707,7 @@ func handleMsgMhfPlayBoxGacha(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(r.Quantity) bf.WriteUint16(r.Quantity)
bf.WriteUint8(0) bf.WriteUint8(0)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
addGachaItem(s, rewards) addGachaItem(s, rewards)
} }
@@ -719,7 +718,7 @@ func handleMsgMhfResetBoxGachaInfo(s *Session, p mhfpacket.MHFPacket) {
s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err)) s.Logger.Fatal(fmt.Sprintf("Failed to get database instance: %s", err))
} }
database.Exec("DELETE FROM gacha_box WHERE gacha_id = $1 AND character_id = $2", pkt.GachaID, s.CharID) database.Exec("DELETE FROM gacha_box WHERE gacha_id = $1 AND character_id = $2", pkt.GachaID, s.CharID)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfExchangeFpoint2Item(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfExchangeFpoint2Item(s *Session, p mhfpacket.MHFPacket) {
@@ -735,7 +734,7 @@ func handleMsgMhfExchangeFpoint2Item(s *Session, p mhfpacket.MHFPacket) {
database.QueryRow("UPDATE users u SET frontier_points=frontier_points::int - $1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2) RETURNING frontier_points", cost, s.CharID).Scan(&balance) database.QueryRow("UPDATE users u SET frontier_points=frontier_points::int - $1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2) RETURNING frontier_points", cost, s.CharID).Scan(&balance)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(balance) bf.WriteUint32(balance)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfExchangeItem2Fpoint(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfExchangeItem2Fpoint(s *Session, p mhfpacket.MHFPacket) {
@@ -751,7 +750,7 @@ func handleMsgMhfExchangeItem2Fpoint(s *Session, p mhfpacket.MHFPacket) {
database.QueryRow("UPDATE users u SET frontier_points=COALESCE(frontier_points::int + $1, $1) WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2) RETURNING frontier_points", cost, s.CharID).Scan(&balance) database.QueryRow("UPDATE users u SET frontier_points=COALESCE(frontier_points::int + $1, $1) WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2) RETURNING frontier_points", cost, s.CharID).Scan(&balance)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(balance) bf.WriteUint32(balance)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }
type FPointExchange struct { type FPointExchange struct {
@@ -805,12 +804,12 @@ func handleMsgMhfGetFpointExchangeList(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(e.FPoints) bf.WriteUint16(e.FPoints)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfPlayFreeGacha(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPlayFreeGacha(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPlayFreeGacha) pkt := p.(*mhfpacket.MsgMhfPlayFreeGacha)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint32(1) bf.WriteUint32(1)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} }

View File

@@ -6,7 +6,6 @@ import (
"time" "time"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
ps "erupe-ce/utils/pascalstring" ps "erupe-ce/utils/pascalstring"
@@ -18,13 +17,13 @@ func handleMsgSysCreateStage(s *Session, p mhfpacket.MHFPacket) {
s.Server.Lock() s.Server.Lock()
defer s.Server.Unlock() defer s.Server.Unlock()
if _, exists := s.Server.stages[pkt.StageID]; exists { if _, exists := s.Server.stages[pkt.StageID]; exists {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleFail(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} else { } else {
stage := NewStage(pkt.StageID) stage := NewStage(pkt.StageID)
stage.host = s stage.host = s
stage.maxPlayers = uint16(pkt.PlayerCount) stage.maxPlayers = uint16(pkt.PlayerCount)
s.Server.stages[stage.id] = stage s.Server.stages[stage.id] = stage
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
} }
} }
@@ -64,7 +63,7 @@ func doStageTransfer(s *Session, ackHandle uint32, stageID string) {
s.QueueSendMHF(&mhfpacket.MsgSysCleanupObject{}) s.QueueSendMHF(&mhfpacket.MsgSysCleanupObject{})
// Confirm the stage entry. // Confirm the stage entry.
broadcast.DoAckSimpleSucceed(s, ackHandle, []byte{0x00, 0x00, 0x00, 0x00}) s.DoAckSimpleSucceed(ackHandle, []byte{0x00, 0x00, 0x00, 0x00})
var temp mhfpacket.MHFPacket var temp mhfpacket.MHFPacket
@@ -154,7 +153,7 @@ func handleMsgSysEnterStage(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysEnterStage) pkt := p.(*mhfpacket.MsgSysEnterStage)
if isStageFull(s, pkt.StageID) { if isStageFull(s, pkt.StageID) {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01}) s.DoAckSimpleFail(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
return return
} }
@@ -184,7 +183,7 @@ func handleMsgSysBackStage(s *Session, p mhfpacket.MHFPacket) {
if isStageFull(s, backStage) { if isStageFull(s, backStage) {
s.stageMoveStack.Push(backStage) s.stageMoveStack.Push(backStage)
broadcast.DoAckSimpleFail(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01}) s.DoAckSimpleFail(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
return return
} }
@@ -203,7 +202,7 @@ func handleMsgSysMoveStage(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysMoveStage) pkt := p.(*mhfpacket.MsgSysMoveStage)
if isStageFull(s, pkt.StageID) { if isStageFull(s, pkt.StageID) {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01}) s.DoAckSimpleFail(pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01})
return return
} }
@@ -219,7 +218,7 @@ func handleMsgSysLockStage(s *Session, p mhfpacket.MHFPacket) {
stage.locked = true stage.locked = true
stage.Unlock() stage.Unlock()
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgSysUnlockStage(s *Session, p mhfpacket.MHFPacket) { func handleMsgSysUnlockStage(s *Session, p mhfpacket.MHFPacket) {
@@ -252,15 +251,15 @@ func handleMsgSysReserveStage(s *Session, p mhfpacket.MHFPacket) {
case 17: // 0x11 case 17: // 0x11
stage.reservedClientSlots[s.CharID] = true stage.reservedClientSlots[s.CharID] = true
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} else if uint16(len(stage.reservedClientSlots)) < stage.maxPlayers { } else if uint16(len(stage.reservedClientSlots)) < stage.maxPlayers {
if stage.locked { if stage.locked {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
if len(stage.password) > 0 { if len(stage.password) > 0 {
if stage.password != s.stagePass { if stage.password != s.stagePass {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
return return
} }
} }
@@ -269,13 +268,13 @@ func handleMsgSysReserveStage(s *Session, p mhfpacket.MHFPacket) {
s.Lock() s.Lock()
s.reservationStage = stage s.reservationStage = stage
s.Unlock() s.Unlock()
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} else { } else {
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
} else { } else {
s.Logger.Error("Failed to get stage", zap.String("StageID", pkt.StageID)) s.Logger.Error("Failed to get stage", zap.String("StageID", pkt.StageID))
broadcast.DoAckSimpleFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleFail(pkt.AckHandle, make([]byte, 4))
} }
} }
@@ -329,15 +328,15 @@ func handleMsgSysGetStageBinary(s *Session, p mhfpacket.MHFPacket) {
if stage, exists := s.Server.stages[pkt.StageID]; exists { if stage, exists := s.Server.stages[pkt.StageID]; exists {
stage.Lock() stage.Lock()
if binaryData, exists := stage.rawBinaryData[stageBinaryKey{pkt.BinaryType0, pkt.BinaryType1}]; exists { if binaryData, exists := stage.rawBinaryData[stageBinaryKey{pkt.BinaryType0, pkt.BinaryType1}]; exists {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, binaryData) s.DoAckBufSucceed(pkt.AckHandle, binaryData)
} else if pkt.BinaryType1 == 4 { } else if pkt.BinaryType1 == 4 {
// Unknown binary type that is supposedly generated server side // Unknown binary type that is supposedly generated server side
// Temporary response // Temporary response
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{}) s.DoAckBufSucceed(pkt.AckHandle, []byte{})
} else { } else {
s.Logger.Warn("Failed to get stage binary", zap.Uint8("BinaryType0", pkt.BinaryType0), zap.Uint8("pkt.BinaryType1", pkt.BinaryType1)) s.Logger.Warn("Failed to get stage binary", zap.Uint8("BinaryType0", pkt.BinaryType0), zap.Uint8("pkt.BinaryType1", pkt.BinaryType1))
s.Logger.Warn("Sending blank stage binary") s.Logger.Warn("Sending blank stage binary")
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{}) s.DoAckBufSucceed(pkt.AckHandle, []byte{})
} }
stage.Unlock() stage.Unlock()
} else { } else {
@@ -351,7 +350,7 @@ func handleMsgSysWaitStageBinary(s *Session, p mhfpacket.MHFPacket) {
if stage, exists := s.Server.stages[pkt.StageID]; exists { if stage, exists := s.Server.stages[pkt.StageID]; exists {
if pkt.BinaryType0 == 1 && pkt.BinaryType1 == 12 { if pkt.BinaryType0 == 1 && pkt.BinaryType1 == 12 {
// This might contain the hunter count, or max player count? // This might contain the hunter count, or max player count?
broadcast.DoAckBufSucceed(s, pkt.AckHandle, []byte{0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) s.DoAckBufSucceed(pkt.AckHandle, []byte{0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
return return
} }
for { for {
@@ -361,7 +360,7 @@ func handleMsgSysWaitStageBinary(s *Session, p mhfpacket.MHFPacket) {
stage.Unlock() stage.Unlock()
s.Logger.Debug("MsgSysWaitStageBinary after lock and get stage") s.Logger.Debug("MsgSysWaitStageBinary after lock and get stage")
if gotBinary { if gotBinary {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, stageBinary) s.DoAckBufSucceed(pkt.AckHandle, stageBinary)
break break
} else { } else {
s.Logger.Debug("Waiting stage binary", zap.Uint8("BinaryType0", pkt.BinaryType0), zap.Uint8("pkt.BinaryType1", pkt.BinaryType1)) s.Logger.Debug("Waiting stage binary", zap.Uint8("BinaryType0", pkt.BinaryType0), zap.Uint8("pkt.BinaryType1", pkt.BinaryType1))
@@ -421,5 +420,5 @@ func handleMsgSysEnumerateStage(s *Session, p mhfpacket.MHFPacket) {
bf.Seek(0, 0) bf.Seek(0, 0)
bf.WriteUint16(joinable) bf.WriteUint16(joinable)
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }

File diff suppressed because one or more lines are too long

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/gametime" "erupe-ce/utils/gametime"
ps "erupe-ce/utils/pascalstring" ps "erupe-ce/utils/pascalstring"
@@ -104,12 +103,12 @@ func handleMsgMhfInfoTournament(s *Session, p mhfpacket.MHFPacket) {
} }
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }
func handleMsgMhfEntryTournament(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfEntryTournament(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfEntryTournament) pkt := p.(*mhfpacket.MsgMhfEntryTournament)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
type TournamentReward struct { type TournamentReward struct {
@@ -128,5 +127,5 @@ func handleMsgMhfAcquireTournament(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint16(reward.Unk1) bf.WriteUint16(reward.Unk1)
bf.WriteUint16(reward.Unk2) bf.WriteUint16(reward.Unk2)
} }
broadcast.DoAckBufSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckBufSucceed(pkt.AckHandle, bf.Data())
} }

View File

@@ -9,7 +9,6 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/byteframe" "erupe-ce/utils/byteframe"
"erupe-ce/utils/db" "erupe-ce/utils/db"
"erupe-ce/utils/stringsupport" "erupe-ce/utils/stringsupport"
@@ -118,7 +117,7 @@ func handleMsgMhfGetTowerInfo(s *Session, p mhfpacket.MHFPacket) {
data = append(data, bf) data = append(data, bf)
} }
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfPostTowerInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostTowerInfo(s *Session, p mhfpacket.MHFPacket) {
@@ -152,7 +151,7 @@ func handleMsgMhfPostTowerInfo(s *Session, p mhfpacket.MHFPacket) {
// This might give too much TSP? No idea what the rate is supposed to be // This might give too much TSP? No idea what the rate is supposed to be
database.Exec(`UPDATE tower SET tr=$1, trp=COALESCE(trp, 0)+$2, tsp=COALESCE(tsp, 0)+$3, block1=COALESCE(block1, 0)+$4 WHERE char_id=$5`, pkt.TR, pkt.TRP, pkt.Cost, pkt.Block1, s.CharID) database.Exec(`UPDATE tower SET tr=$1, trp=COALESCE(trp, 0)+$2, tsp=COALESCE(tsp, 0)+$3, block1=COALESCE(block1, 0)+$4 WHERE char_id=$5`, pkt.TR, pkt.TRP, pkt.Cost, pkt.Block1, s.CharID)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
// Default missions // Default missions
@@ -347,7 +346,7 @@ func handleMsgMhfGetTenrouirai(s *Session, p mhfpacket.MHFPacket) {
} }
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfPostTenrouirai(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostTenrouirai(s *Session, p mhfpacket.MHFPacket) {
@@ -397,9 +396,9 @@ func handleMsgMhfPostTenrouirai(s *Session, p mhfpacket.MHFPacket) {
bf.WriteUint32(0) bf.WriteUint32(0)
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, bf.Data()) s.DoAckSimpleSucceed(pkt.AckHandle, bf.Data())
} else { } else {
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
} }
@@ -419,7 +418,7 @@ func handleMsgMhfPresentBox(s *Session, p mhfpacket.MHFPacket) {
bf.WriteInt32(0) bf.WriteInt32(0)
bf.WriteInt32(0) bf.WriteInt32(0)
*/ */
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
type GemInfo struct { type GemInfo struct {
@@ -467,7 +466,7 @@ func handleMsgMhfGetGemInfo(s *Session, p mhfpacket.MHFPacket) {
data = append(data, bf) data = append(data, bf)
} }
} }
broadcast.DoAckEarthSucceed(s, pkt.AckHandle, data) s.DoAckEarthSucceed(pkt.AckHandle, data)
} }
func handleMsgMhfPostGemInfo(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostGemInfo(s *Session, p mhfpacket.MHFPacket) {
@@ -498,15 +497,15 @@ func handleMsgMhfPostGemInfo(s *Session, p mhfpacket.MHFPacket) {
case 2: // Transfer gem case 2: // Transfer gem
// no way im doing this for now // no way im doing this for now
} }
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfGetNotice(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfGetNotice(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetNotice) pkt := p.(*mhfpacket.MsgMhfGetNotice)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }
func handleMsgMhfPostNotice(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostNotice(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPostNotice) pkt := p.(*mhfpacket.MsgMhfPostNotice)
broadcast.DoAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) s.DoAckSimpleSucceed(pkt.AckHandle, make([]byte, 4))
} }

View File

@@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/utils/broadcast"
"erupe-ce/utils/db" "erupe-ce/utils/db"
) )
@@ -52,12 +51,12 @@ func handleMsgSysGetUserBinary(s *Session, p mhfpacket.MHFPacket) {
if !ok { if !ok {
err = database.QueryRow(fmt.Sprintf("SELECT type%d FROM user_binary WHERE id=$1", pkt.BinaryType), pkt.CharID).Scan(&data) err = database.QueryRow(fmt.Sprintf("SELECT type%d FROM user_binary WHERE id=$1", pkt.BinaryType), pkt.CharID).Scan(&data)
if err != nil { if err != nil {
broadcast.DoAckBufFail(s, pkt.AckHandle, make([]byte, 4)) s.DoAckBufFail(pkt.AckHandle, make([]byte, 4))
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
} else { } else {
broadcast.DoAckBufSucceed(s, pkt.AckHandle, data) s.DoAckBufSucceed(pkt.AckHandle, data)
} }
} }

View File

@@ -317,3 +317,51 @@ func (s *Session) isOp() bool {
} }
return false return false
} }
func (s *Session) DoAckEarthSucceed(ackHandle uint32, data []*byteframe.ByteFrame) {
bf := byteframe.NewByteFrame()
bf.WriteUint32(uint32(config.GetConfig().EarthID))
bf.WriteUint32(0)
bf.WriteUint32(0)
bf.WriteUint32(uint32(len(data)))
for i := range data {
bf.WriteBytes(data[i].Data())
}
s.DoAckBufSucceed(ackHandle, bf.Data())
}
func (s *Session) DoAckBufSucceed(ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: true,
ErrorCode: 0,
AckData: data,
})
}
func (s *Session) DoAckBufFail(ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: true,
ErrorCode: 1,
AckData: data,
})
}
func (s *Session) DoAckSimpleSucceed(ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: false,
ErrorCode: 0,
AckData: data,
})
}
func (s *Session) DoAckSimpleFail(ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: false,
ErrorCode: 1,
AckData: data,
})
}

View File

@@ -1,59 +0,0 @@
package broadcast
import (
"erupe-ce/config"
"erupe-ce/network/mhfpacket"
"erupe-ce/utils/byteframe"
)
type AckSession interface {
QueueSendMHF(packet mhfpacket.MHFPacket)
}
func DoAckEarthSucceed(s AckSession, ackHandle uint32, data []*byteframe.ByteFrame) {
bf := byteframe.NewByteFrame()
bf.WriteUint32(uint32(config.GetConfig().EarthID))
bf.WriteUint32(0)
bf.WriteUint32(0)
bf.WriteUint32(uint32(len(data)))
for i := range data {
bf.WriteBytes(data[i].Data())
}
DoAckBufSucceed(s, ackHandle, bf.Data())
}
func DoAckBufSucceed(s AckSession, ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: true,
ErrorCode: 0,
AckData: data,
})
}
func DoAckBufFail(s AckSession, ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: true,
ErrorCode: 1,
AckData: data,
})
}
func DoAckSimpleSucceed(s AckSession, ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: false,
ErrorCode: 0,
AckData: data,
})
}
func DoAckSimpleFail(s AckSession, ackHandle uint32, data []byte) {
s.QueueSendMHF(&mhfpacket.MsgSysAck{
AckHandle: ackHandle,
IsBufferResponse: false,
ErrorCode: 1,
AckData: data,
})
}