From 843b6a9dff99b12d83f07bb33c020f10f3d4bbe4 Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 17 Mar 2024 16:39:06 +1100 Subject: [PATCH 1/3] fix quest stampcard --- network/mhfpacket/msg_mhf_stampcard_stamp.go | 2 +- server/channelserver/handlers.go | 85 +++++++++++++++----- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/network/mhfpacket/msg_mhf_stampcard_stamp.go b/network/mhfpacket/msg_mhf_stampcard_stamp.go index a783b3e91..521e42221 100644 --- a/network/mhfpacket/msg_mhf_stampcard_stamp.go +++ b/network/mhfpacket/msg_mhf_stampcard_stamp.go @@ -37,7 +37,7 @@ func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli } m.Stamps = bf.ReadUint16() bf.ReadUint16() // Zeroed - if _config.ErupeConfig.RealClientMode > _config.Z1 { + if _config.ErupeConfig.RealClientMode >= _config.Z2 { m.Reward1 = uint16(bf.ReadUint32()) m.Reward2 = uint16(bf.ReadUint32()) m.Item1 = uint16(bf.ReadUint32()) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 7188d8bab..d188faba5 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1045,34 +1045,81 @@ func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) { doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } +func getStampcardReward(secondStamp bool, HR uint16, GR uint16) mhfitem.MHFItemStack { + if GR > 0 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 4} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} + } + } else { + if HR >= 300 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 3} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} + } + } else if HR >= 100 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} + } + } else if HR >= 50 { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} + } + } else { + if secondStamp { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} + } else { + return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 1} + } + } + } +} + func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfStampcardStamp) bf := byteframe.NewByteFrame() bf.WriteUint16(pkt.HR) - var stamps uint16 - _ = s.server.db.QueryRow(`SELECT stampcard FROM characters WHERE id = $1`, s.charID).Scan(&stamps) if _config.ErupeConfig.RealClientMode >= _config.G1 { bf.WriteUint16(pkt.GR) } + var stamps, rewardTier, rewardUnk uint16 + reward := mhfitem.MHFItemStack{Item: mhfitem.MHFItem{}} + s.server.db.QueryRow(`UPDATE characters SET stampcard = stampcard + $1 WHERE id = $2 RETURNING stampcard`, pkt.Stamps, s.charID).Scan(&stamps) + bf.WriteUint16(stamps - pkt.Stamps) bf.WriteUint16(stamps) - stamps += pkt.Stamps - bf.WriteUint16(stamps) - s.server.db.Exec(`UPDATE characters SET stampcard = $1 WHERE id = $2`, stamps, s.charID) - if stamps%30 == 0 { - bf.WriteUint16(2) - bf.WriteUint16(pkt.Reward2) - bf.WriteUint16(pkt.Item2) - bf.WriteUint16(pkt.Quantity2) - addWarehouseItem(s, mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2}) - } else if stamps%15 == 0 { - bf.WriteUint16(1) - bf.WriteUint16(pkt.Reward1) - bf.WriteUint16(pkt.Item1) - bf.WriteUint16(pkt.Quantity1) - addWarehouseItem(s, mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1}) - } else { - bf.WriteBytes(make([]byte, 8)) + + if stamps/30 > (stamps-pkt.Stamps)/30 { + rewardTier = 2 + if _config.ErupeConfig.RealClientMode < _config.Z2 { + rewardUnk = 10 + reward = getStampcardReward(true, pkt.HR, pkt.GR) + } else { + rewardUnk = pkt.Reward2 + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} + } + addWarehouseItem(s, reward) + } else if stamps/15 > (stamps-pkt.Stamps)/15 { + rewardTier = 1 + if _config.ErupeConfig.RealClientMode < _config.Z2 { + rewardUnk = 10 + reward = getStampcardReward(false, pkt.HR, pkt.GR) + } else { + rewardUnk = pkt.Reward1 + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} + } + addWarehouseItem(s, reward) } + + bf.WriteUint16(rewardTier) + bf.WriteUint16(rewardUnk) + bf.WriteUint16(reward.Item.ItemID) + bf.WriteUint16(reward.Quantity) doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } From f545576fc9ad0b9480d1b396f567ede1767c8038 Mon Sep 17 00:00:00 2001 From: wish Date: Wed, 24 Jul 2024 23:33:04 +1000 Subject: [PATCH 2/3] merge changes --- server/channelserver/handlers.go | 42 ++------------------------------ 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 52ce7ed7c..cf182dfb5 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1049,42 +1049,6 @@ func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) { doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } -func getStampcardReward(secondStamp bool, HR uint16, GR uint16) mhfitem.MHFItemStack { - if GR > 0 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 4} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} - } - } else { - if HR >= 300 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 3} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} - } - } else if HR >= 100 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 5392}, Quantity: 1} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} - } - } else if HR >= 50 { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 3} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} - } - } else { - if secondStamp { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 2} - } else { - return mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: 6164}, Quantity: 1} - } - } - } -} - func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfStampcardStamp) @@ -1127,21 +1091,19 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { rewardTier = 2 if _config.ErupeConfig.RealClientMode < _config.Z2 { rewardUnk = 10 - reward = getStampcardReward(true, pkt.HR, pkt.GR) } else { rewardUnk = pkt.Reward2 - reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} } + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} addWarehouseItem(s, reward) } else if stamps/15 > (stamps-pkt.Stamps)/15 { rewardTier = 1 if _config.ErupeConfig.RealClientMode < _config.Z2 { rewardUnk = 10 - reward = getStampcardReward(false, pkt.HR, pkt.GR) } else { rewardUnk = pkt.Reward1 - reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} } + reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} addWarehouseItem(s, reward) } From 459f382dd75ff481a81016aa983acc9349975448 Mon Sep 17 00:00:00 2001 From: wish Date: Wed, 24 Jul 2024 23:41:05 +1000 Subject: [PATCH 3/3] simplify --- network/mhfpacket/msg_mhf_stampcard_stamp.go | 3 +++ server/channelserver/handlers.go | 12 ++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/network/mhfpacket/msg_mhf_stampcard_stamp.go b/network/mhfpacket/msg_mhf_stampcard_stamp.go index 521e42221..281134c9d 100644 --- a/network/mhfpacket/msg_mhf_stampcard_stamp.go +++ b/network/mhfpacket/msg_mhf_stampcard_stamp.go @@ -44,6 +44,9 @@ func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli m.Item2 = uint16(bf.ReadUint32()) m.Quantity1 = uint16(bf.ReadUint32()) m.Quantity2 = uint16(bf.ReadUint32()) + } else { + m.Reward1 = 10 + m.Reward2 = 10 } return nil } diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index cf182dfb5..4f8e89e7c 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1089,20 +1089,12 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { if stamps/30 > (stamps-pkt.Stamps)/30 { rewardTier = 2 - if _config.ErupeConfig.RealClientMode < _config.Z2 { - rewardUnk = 10 - } else { - rewardUnk = pkt.Reward2 - } + rewardUnk = pkt.Reward2 reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2} addWarehouseItem(s, reward) } else if stamps/15 > (stamps-pkt.Stamps)/15 { rewardTier = 1 - if _config.ErupeConfig.RealClientMode < _config.Z2 { - rewardUnk = 10 - } else { - rewardUnk = pkt.Reward1 - } + rewardUnk = pkt.Reward1 reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1} addWarehouseItem(s, reward) }