From e2fedd7c6d8a093ee349d5585edc963d7fb97392 Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 19 Feb 2023 22:44:22 +1100 Subject: [PATCH] convert interception rewards to db table --- bundled-schema/DivaDefaults.sql | 254 +++++++++++++++++++++++ server/channelserver/handlers_tactics.go | 52 ++++- 2 files changed, 302 insertions(+), 4 deletions(-) create mode 100644 bundled-schema/DivaDefaults.sql diff --git a/bundled-schema/DivaDefaults.sql b/bundled-schema/DivaDefaults.sql new file mode 100644 index 000000000..b6e4a8f20 --- /dev/null +++ b/bundled-schema/DivaDefaults.sql @@ -0,0 +1,254 @@ +BEGIN; + +-- Ripped prizes +INSERT INTO public.diva_prizes +(type, points_req, item_type, item_id, quantity, gr, repeatable) +VALUES + ('personal', 1, 7, 13021, 1, false, false), + ('personal', 1, 7, 13021, 1, true, false), + ('personal', 200, 7, 1472, 5, false, false), + ('personal', 200, 7, 7976, 5, true, false), + ('personal', 400, 26, 0, 500, false, false), + ('personal', 400, 26, 0, 500, true, false), + ('personal', 600, 7, 1472, 5, false, false), + ('personal', 600, 7, 7976, 5, true, false), + ('personal', 800, 26, 0, 1000, false, false), + ('personal', 800, 26, 0, 1000, true, false), + ('personal', 1000, 26, 0, 1200, false, false), + ('personal', 1000, 26, 0, 1200, true, false), + ('personal', 1200, 26, 0, 1500, false, false), + ('personal', 1200, 26, 0, 1500, true, false), + ('personal', 1400, 26, 0, 2300, false, false), + ('personal', 1400, 26, 0, 2300, true, false), + ('personal', 1600, 26, 0, 2500, false, false), + ('personal', 1600, 26, 0, 2500, true, false), + ('personal', 1800, 26, 0, 3000, false, false), + ('personal', 1800, 26, 0, 3000, true, false), + ('personal', 2000, 7, 9722, 1, false, false), + ('personal', 2000, 7, 9723, 1, false, false), + ('personal', 2000, 7, 9724, 1, false, false), + ('personal', 2000, 26, 0, 3300, false, false), + ('personal', 2000, 7, 9722, 1, true, false), + ('personal', 2000, 7, 9723, 1, true, false), + ('personal', 2000, 7, 9724, 1, true, false), + ('personal', 2000, 26, 0, 3300, true, false), + ('personal', 3000, 7, 1472, 5, false, false), + ('personal', 3000, 7, 7976, 5, true, false), + ('personal', 4000, 26, 0, 3500, false, false), + ('personal', 4000, 26, 0, 3500, true, false), + ('personal', 5000, 7, 1472, 5, false, false), + ('personal', 5000, 7, 7976, 5, true, false), + ('personal', 6000, 7, 9725, 1, false, false), + ('personal', 6000, 7, 9726, 1, false, false), + ('personal', 6000, 7, 9727, 1, false, false), + ('personal', 6000, 7, 9725, 1, true, false), + ('personal', 6000, 7, 9726, 1, true, false), + ('personal', 6000, 7, 9727, 1, true, false), + ('personal', 7000, 26, 0, 3700, false, false), + ('personal', 7000, 26, 0, 3700, true, false), + ('personal', 8000, 7, 10192, 5, false, false), + ('personal', 8000, 7, 10192, 5, true, false), + ('personal', 9000, 26, 0, 4000, false, false), + ('personal', 9000, 26, 0, 4000, true, false), + ('personal', 10000, 7, 14063, 1, false, false), + ('personal', 10000, 7, 14063, 1, false, false), + ('personal', 10000, 7, 14063, 1, true, false), + ('personal', 10000, 7, 13974, 1, true, false), + ('personal', 12000, 7, 10193, 5, false, false), + ('personal', 12000, 7, 10193, 5, true, false), + ('personal', 14000, 29, 0, 1, false, false), + ('personal', 14000, 29, 0, 1, true, false), + ('personal', 15000, 7, 14063, 1, false, false), + ('personal', 15000, 7, 14299, 1, true, false), + ('personal', 18000, 7, 9702, 1, false, false), + ('personal', 18000, 7, 9702, 1, true, false), + ('personal', 20000, 7, 14063, 1, false, false), + ('personal', 20000, 7, 14537, 1, true, false), + ('personal', 22000, 26, 0, 4200, false, false), + ('personal', 22000, 26, 0, 4200, true, false), + ('personal', 25000, 7, 14063, 1, false, false), + ('personal', 25000, 7, 14758, 1, true, false), + ('personal', 26000, 7, 10194, 5, false, false), + ('personal', 26000, 7, 10194, 5, true, false), + ('personal', 30000, 7, 14063, 1, false, false), + ('personal', 30000, 7, 14063, 1, false, false), + ('personal', 30000, 7, 14063, 1, true, false), + ('personal', 30000, 7, 14854, 1, true, false), + ('personal', 34000, 29, 0, 2, false, false), + ('personal', 34000, 29, 0, 2, true, false), + ('personal', 40000, 7, 10195, 5, false, false), + ('personal', 40000, 7, 10195, 5, true, false), + ('personal', 46000, 26, 0, 4500, false, false), + ('personal', 46000, 26, 0, 4500, true, false), + ('personal', 50000, 7, 10196, 5, false, false), + ('personal', 50000, 7, 10196, 5, true, false), + ('personal', 54000, 29, 0, 3, false, false), + ('personal', 54000, 29, 0, 3, true, false), + ('personal', 60000, 7, 14063, 1, false, false), + ('personal', 60000, 7, 14063, 1, true, false), + ('personal', 63000, 26, 0, 4700, false, false), + ('personal', 63000, 26, 0, 4700, true, false), + ('personal', 70000, 7, 10197, 5, false, false), + ('personal', 70000, 7, 10197, 5, true, false), + ('personal', 72000, 7, 10198, 5, false, false), + ('personal', 72000, 7, 10198, 5, true, false), + ('personal', 74000, 29, 0, 4, false, false), + ('personal', 74000, 29, 0, 4, true, false), + ('personal', 78000, 26, 0, 5000, false, false), + ('personal', 78000, 26, 0, 5000, true, false), + ('personal', 82000, 7, 10199, 5, false, false), + ('personal', 82000, 7, 10199, 5, true, false), + ('personal', 84000, 29, 0, 5, false, false), + ('personal', 84000, 29, 0, 5, true, false), + ('personal', 86000, 26, 0, 5300, false, false), + ('personal', 86000, 26, 0, 5300, true, false), + ('personal', 90000, 7, 14063, 1, false, false), + ('personal', 90000, 7, 14063, 1, true, false), + ('personal', 92000, 7, 10730, 5, false, false), + ('personal', 92000, 7, 10730, 5, true, false), + ('personal', 94000, 29, 0, 6, false, false), + ('personal', 94000, 29, 0, 6, true, false), + ('personal', 98000, 7, 10731, 5, false, false), + ('personal', 98000, 7, 10731, 5, true, false), + ('personal', 102000, 26, 0, 5500, false, false), + ('personal', 102000, 26, 0, 5500, true, false), + ('personal', 104000, 29, 0, 7, false, false), + ('personal', 104000, 29, 0, 7, true, false), + ('personal', 106000, 7, 10732, 5, false, false), + ('personal', 106000, 7, 10732, 5, true, false), + ('personal', 110000, 7, 10189, 1, false, false), + ('personal', 110000, 7, 10189, 1, true, false), + ('personal', 114000, 29, 0, 8, false, false), + ('personal', 114000, 29, 0, 8, true, false), + ('personal', 118000, 26, 0, 5700, false, false), + ('personal', 118000, 26, 0, 5700, true, false), + ('personal', 124000, 29, 0, 9, false, false), + ('personal', 124000, 29, 0, 9, true, false), + ('personal', 126000, 7, 10188, 1, false, false), + ('personal', 126000, 7, 10188, 1, true, false), + ('personal', 134000, 29, 0, 10, false, false), + ('personal', 134000, 29, 0, 10, true, false), + ('personal', 146000, 26, 0, 5900, false, false), + ('personal', 146000, 26, 0, 5900, true, false), + ('personal', 150000, 7, 14063, 1, false, false), + ('personal', 150000, 7, 14063, 1, true, false), + ('personal', 160000, 26, 0, 6100, false, false), + ('personal', 160000, 26, 0, 6100, true, false), + ('personal', 174000, 26, 0, 6300, false, false), + ('personal', 174000, 26, 0, 6300, true, false), + ('personal', 180000, 7, 14063, 1, false, false), + ('personal', 180000, 7, 14063, 1, true, false), + ('personal', 186000, 26, 0, 6500, false, false), + ('personal', 186000, 26, 0, 6500, true, false), + ('personal', 200000, 7, 10187, 1, false, false), + ('personal', 200000, 7, 10187, 1, true, false), + ('personal', 214000, 26, 0, 6700, false, false), + ('personal', 214000, 26, 0, 6700, true, false), + ('personal', 226000, 7, 11440, 15, false, false), + ('personal', 226000, 7, 11440, 15, true, false), + ('personal', 240000, 26, 0, 7100, false, false), + ('personal', 240000, 26, 0, 7100, true, false), + ('personal', 260000, 26, 0, 1000, false, true), + ('personal', 260000, 26, 0, 1000, true, true), + ('personal', 280000, 26, 0, 1000, false, true), + ('personal', 280000, 26, 0, 1000, true, true); + +INSERT INTO public.diva_prizes +(type, points_req, item_type, item_id, quantity, gr, repeatable) +VALUES + ('guild', 2, 7, 1026, 5, false, false), + ('guild', 2, 7, 1026, 5, true, false), + ('guild', 3, 7, 1026, 20, false, false), + ('guild', 3, 7, 1026, 20, true, false), + ('guild', 5, 7, 7456, 3, false, false), + ('guild', 5, 7, 7456, 3, true, false), + ('guild', 6, 7, 1026, 20, false, false), + ('guild', 6, 7, 1026, 20, true, false), + ('guild', 8, 7, 7457, 3, false, false), + ('guild', 8, 7, 7457, 3, true, false), + ('guild', 10, 7, 1026, 20, false, false), + ('guild', 10, 7, 1026, 20, true, false), + ('guild', 12, 7, 8940, 5, false, false), + ('guild', 12, 7, 8941, 5, false, false), + ('guild', 12, 7, 8943, 5, false, false), + ('guild', 12, 7, 8946, 5, false, false), + ('guild', 12, 7, 8940, 5, true, false), + ('guild', 12, 7, 8941, 5, true, false), + ('guild', 12, 7, 8943, 5, true, false), + ('guild', 12, 7, 8946, 5, true, false), + ('guild', 13, 26, 0, 1000, false, false), + ('guild', 13, 26, 0, 1000, true, false), + ('guild', 15, 7, 13692, 5, false, false), + ('guild', 15, 7, 13693, 5, false, false), + ('guild', 15, 7, 13692, 5, true, false), + ('guild', 15, 7, 13693, 5, true, false), + ('guild', 17, 26, 0, 2000, false, false), + ('guild', 17, 26, 0, 2000, true, false), + ('guild', 20, 28, 0, 1, false, false), + ('guild', 20, 7, 7458, 5, false, false), + ('guild', 20, 28, 0, 1, true, false), + ('guild', 20, 7, 7458, 5, true, false), + ('guild', 22, 7, 1026, 40, false, false), + ('guild', 22, 7, 13692, 7, false, false), + ('guild', 22, 7, 13693, 7, false, false), + ('guild', 22, 7, 1026, 40, true, false), + ('guild', 22, 7, 13692, 7, true, false), + ('guild', 22, 7, 13693, 7, true, false), + ('guild', 24, 7, 7463, 3, false, false), + ('guild', 24, 7, 7463, 3, true, false), + ('guild', 26, 26, 0, 3000, false, false), + ('guild', 26, 26, 0, 3000, true, false), + ('guild', 28, 7, 1026, 40, false, false), + ('guild', 28, 7, 13692, 7, false, false), + ('guild', 28, 7, 13693, 7, false, false), + ('guild', 28, 7, 1026, 40, true, false), + ('guild', 28, 7, 13692, 7, true, false), + ('guild', 28, 7, 13693, 7, true, false), + ('guild', 30, 7, 1026, 60, false, false), + ('guild', 30, 7, 1026, 60, true, false), + ('guild', 32, 7, 7462, 3, false, false), + ('guild', 32, 7, 13692, 7, false, false), + ('guild', 32, 7, 13693, 7, false, false), + ('guild', 32, 7, 7462, 3, true, false), + ('guild', 32, 7, 13692, 7, true, false), + ('guild', 32, 7, 13693, 7, true, false), + ('guild', 35, 7, 7464, 3, false, false), + ('guild', 35, 7, 7464, 3, true, false), + ('guild', 42, 7, 1026, 60, false, false), + ('guild', 42, 7, 1026, 60, true, false), + ('guild', 44, 7, 9710, 1, false, false), + ('guild', 44, 7, 9710, 1, true, false), + ('guild', 46, 7, 1026, 80, false, false), + ('guild', 46, 7, 13692, 10, false, false), + ('guild', 46, 7, 13693, 10, false, false), + ('guild', 46, 7, 1026, 80, true, false), + ('guild', 46, 7, 13692, 10, true, false), + ('guild', 46, 7, 13693, 10, true, false), + ('guild', 48, 7, 9709, 1, false, false), + ('guild', 48, 7, 9709, 1, true, false), + ('guild', 50, 7, 7456, 3, false, false), + ('guild', 50, 7, 7456, 3, true, false), + ('guild', 52, 7, 11387, 1, false, false), + ('guild', 52, 7, 11387, 1, true, false), + ('guild', 55, 7, 7457, 3, false, false), + ('guild', 55, 7, 7457, 3, true, false), + ('guild', 60, 7, 8945, 10, false, false), + ('guild', 60, 7, 8945, 10, true, false), + ('guild', 65, 7, 1026, 80, false, false), + ('guild', 65, 7, 1026, 80, true, false), + ('guild', 70, 7, 7458, 3, false, false), + ('guild', 70, 7, 7458, 3, true, false), + ('guild', 75, 7, 7463, 3, false, false), + ('guild', 75, 7, 7463, 3, true, false), + ('guild', 80, 7, 8945, 15, false, false), + ('guild', 80, 7, 8945, 15, true, false), + ('guild', 85, 7, 1026, 80, false, false), + ('guild', 85, 7, 1026, 80, true, false), + ('guild', 90, 7, 7462, 3, false, false), + ('guild', 90, 7, 7462, 3, true, false), + ('guild', 95, 7, 7464, 3, false, false), + ('guild', 95, 7, 7464, 3, true, false), + ('guild', 100, 26, 0, 50000, false, false), + ('guild', 100, 26, 0, 50000, true, false); + +END; \ No newline at end of file diff --git a/server/channelserver/handlers_tactics.go b/server/channelserver/handlers_tactics.go index 143a5def9..30ed4a67d 100644 --- a/server/channelserver/handlers_tactics.go +++ b/server/channelserver/handlers_tactics.go @@ -74,12 +74,56 @@ func handleMsgMhfAddUdTacticsPoint(s *Session, p mhfpacket.MHFPacket) { doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } +type DivaReward struct { + Points uint32 `db:"points_req"` + ItemType uint8 `db:"item_type"` + ItemID uint16 `db:"item_id"` + Quantity uint16 `db:"quantity"` + GR bool `db:"gr"` + Repeatable bool `db:"repeatable"` +} + func handleMsgMhfGetUdTacticsRewardList(s *Session, p mhfpacket.MHFPacket) { - // Diva defense interception pkt := p.(*mhfpacket.MsgMhfGetUdTacticsRewardList) - // Temporary canned response - data, _ := hex.DecodeString("000094000000010732DD00010000000000010732DD00010100000000C8071F2800050100000000C80705C000050000000001901A000001F40000000001901A000001F40100000002580705C00005000000000258071F2800050100000003201A000003E80100000003201A000003E80000000003E81A000004B00100000003E81A000004B00000000004B01A000005DC0100000004B01A000005DC0000000005781A000008FC0100000005781A000008FC0000000006401A000009C40000000006401A000009C40100000007081A00000BB80100000007081A00000BB80000000007D00725FA00010000000007D01A00000CE40000000007D00725FC00010100000007D00725FB00010100000007D00725FA00010100000007D01A00000CE40100000007D00725FC00010000000007D00725FB0001000000000BB80705C00005000000000BB8071F280005010000000FA01A00000DAC000000000FA01A00000DAC0100000013880705C00005000000001388071F2800050100000017700725FE00010100000017700725FD00010100000017700725FF00010100000017700725FD00010000000017700725FE00010000000017700725FF0001000000001B581A00000E74000000001B581A00000E74010000001F400727D00005010000001F400727D000050000000023281A00000FA00000000023281A00000FA00100000027100736EF000100000000271007369600010100000027100736EF00010100000027100736EF0001000000002EE00727D10005010000002EE00727D100050000000036B01D000000010100000036B01D00000001000000003A980737DB0001010000003A980736EF00010000000046500725E600010100000046500725E60001000000004E200738C90001010000004E200736EF00010000000055F01A000010680100000055F01A000010680000000061A80736EF00010000000061A80739A600010100000065900727D200050000000065900727D20005010000007530073A0600010100000075300736EF00010000000075300736EF00010000000075300736EF00010100000084D01D000000020000000084D01D00000002010000009C400727D30005010000009C400727D3000500000000B3B01A0000119400000000B3B01A0000119401000000C3500727D4000500000000C3500727D4000501000000D2F01D0000000300000000D2F01D0000000301000000EA600736EF000100000000EA600736EF000101000000F6181A0000125C00000000F6181A0000125C0100000111700727D500050000000111700727D500050100000119400727D600050100000119400727D600050000000121101D000000040000000121101D000000040100000130B01A000013880000000130B01A000013880100000140500727D700050000000140500727D700050100000148201D000000050000000148201D00000005010000014FF01A000014B4000000014FF01A000014B4010000015F900736EF0001000000015F900736EF00010100000167600729EA00050000000167600729EA0005010000016F301D00000006010000016F301D00000006000000017ED00729EB0005000000017ED00729EB0005010000018E701A0000157C010000018E701A0000157C0000000196401D000000070000000196401D00000007010000019E100729EC0005000000019E100729EC000501000001ADB00727CD000100000001ADB00727CD000101000001BD501D0000000800000001BD501D0000000801000001CCF01A0000164401000001CCF01A0000164400000001E4601D0000000901000001E4601D0000000900000001EC300727CC000101000001EC300727CC0001000000020B701D0000000A000000020B701D0000000A010000023A501A0000170C010000023A501A0000170C0000000249F00736EF00010100000249F00736EF00010000000271001A000017D40100000271001A000017D400000002A7B01A0000189C01000002A7B01A0000189C00000002BF200736EF000100000002BF200736EF000101000002D6901A0000196401000002D6901A00001964000000030D400727CB0001000000030D400727CB00010100000343F01A00001A2C0100000343F01A00001A2C0000000372D0072CB0000F0000000372D0072CB0000F01000003A9801A00001BBC00000003A9801A00001BBC01000003F7A01A000003E800010003F7A01A000003E80101000445C01A000003E80101000445C01A000003E80001005E000000020704020005010000000002070402000500000000000307040200140000000000030704020014010000000005071D200003010000000005071D20000300000000000607040200140100000000060704020014000000000008071D210003010000000008071D21000300000000000A070402001401000000000A070402001400000000000C0722EC000501000000000C0722ED000500000000000C0722F2000500000000000C0722EC000500000000000C0722EF000500000000000C0722ED000501000000000C0722F2000501000000000C0722EF000501000000000D1A000003E801000000000D1A000003E800000000000F07357C000501000000000F07357D000501000000000F07357C000500000000000F07357D00050000000000111A000007D00000000000111A000007D00100000000141C00000001000000000014071D2200030000000000141C00000001010000000014071D22000301000000001607357D000701000000001607357C00070000000000160704020028000000000016070402002801000000001607357C000701000000001607357D0007000000000018071D270003000000000018071D27000301000000001A1A00000BB800000000001A1A00000BB801000000001C07357D000701000000001C070402002801000000001C07357D000700000000001C07357C000700000000001C070402002800000000001C07357C000701000000001E070402003C01000000001E070402003C000000000020071D26000301000000002007357C000700000000002007357D000700000000002007357C000701000000002007357D0007010000000020071D260003000000000023071D280003010000000023071D28000300000000002A070402003C00000000002A070402003C01000000002C0725EE000100000000002C0725EE000101000000002E070402005001000000002E07357D000A01000000002E070402005000000000002E07357C000A00000000002E07357D000A00000000002E07357C000A0100000000300725ED00010000000000300725ED0001010000000032071D200003010000000032071D200003000000000034072C7B0001000000000034072C7B0001010000000037071D210003000000000037071D21000301000000003C0722F1000A00000000003C0722F1000A01000000004107040200500000000000410704020050010000000046071D220003010000000046071D22000300000000004B071D27000301000000004B071D2700030000000000500722F1000F0100000000500722F1000F0000000000550704020050010000000055070402005000000000005A071D26000301000000005A071D26000300000000005F071D28000300000000005F071D2800030100000000641A0000C3500100000000641A0000C3500000002607000E00C8000000010000000307000F0032000000010000000307001000320000000100000003070011003200000001000000030700120032000000010000000307000E0096000000040000000A07000F0028000000040000000A0700100028000000040000000A0700110028000000040000000A0700120028000000040000000A07000E00640000000B0000001907000F001E0000000B00000019070010001E0000000B00000019070011001E0000000B00000019070012001E0000000B0000001907000E00320000001A0000002807000F00140000001A0000002807001000140000001A0000002807001100140000001A0000002807001200140000001A0000002807000E001E000000290000004607000F000A0000002900000046070010000A000000290000004607001100010000002900000046070012000A000000290000004607000E0019000000470000006407000F0008000000470000006407001000080000004700000064070011000100000047000000640700120008000000470000006407000E000F000000650000009607000F0006000000650000009607001000010000006500000096070011000600000065000000960700120006000000650000009607000E000500000097000001F407000F000500000097000001F4070010000500000097000001F4") - doAckBufSucceed(s, pkt.AckHandle, data) + bf := byteframe.NewByteFrame() + bf.WriteUint8(0) + var personalRewards, guildRewards []DivaReward + var tempReward DivaReward + rows, err := s.server.db.Queryx(`SELECT points_req, item_type, item_id, quantity, gr, repeatable FROM diva_prizes WHERE type='personal'`) + if err == nil { + for rows.Next() { + rows.StructScan(&tempReward) + personalRewards = append(personalRewards, tempReward) + } + } + rows, err = s.server.db.Queryx(`SELECT points_req, item_type, item_id, quantity, gr, repeatable FROM diva_prizes WHERE type='guild'`) + if err == nil { + for rows.Next() { + rows.StructScan(&tempReward) + guildRewards = append(guildRewards, tempReward) + } + } + bf.WriteUint16(uint16(len(personalRewards))) + for _, reward := range personalRewards { + bf.WriteUint32(reward.Points) + bf.WriteUint8(reward.ItemType) + bf.WriteUint16(reward.ItemID) + bf.WriteUint16(reward.Quantity) + bf.WriteBool(reward.GR) + bf.WriteBool(reward.Repeatable) + } + bf.WriteUint16(uint16(len(guildRewards))) + for _, reward := range guildRewards { + bf.WriteUint32(reward.Points) + bf.WriteUint8(reward.ItemType) + bf.WriteUint16(reward.ItemID) + bf.WriteUint16(reward.Quantity) + bf.WriteBool(reward.GR) + bf.WriteBool(reward.Repeatable) + } + data, _ := hex.DecodeString("002607000E00C8000000010000000307000F0032000000010000000307001000320000000100000003070011003200000001000000030700120032000000010000000307000E0096000000040000000A07000F0028000000040000000A0700100028000000040000000A0700110028000000040000000A0700120028000000040000000A07000E00640000000B0000001907000F001E0000000B00000019070010001E0000000B00000019070011001E0000000B00000019070012001E0000000B0000001907000E00320000001A0000002807000F00140000001A0000002807001000140000001A0000002807001100140000001A0000002807001200140000001A0000002807000E001E000000290000004607000F000A0000002900000046070010000A000000290000004607001100010000002900000046070012000A000000290000004607000E0019000000470000006407000F0008000000470000006407001000080000004700000064070011000100000047000000640700120008000000470000006407000E000F000000650000009607000F0006000000650000009607001000010000006500000096070011000600000065000000960700120006000000650000009607000E000500000097000001F407000F000500000097000001F4070010000500000097000001F4") + bf.WriteBytes(data) + doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } func handleMsgMhfGetUdTacticsFollower(s *Session, p mhfpacket.MHFPacket) {