1
1
package bhandler
2
2
3
3
import (
4
+ "strconv"
5
+
4
6
"github.com/liuguangw/billing_go/common"
5
7
"github.com/liuguangw/billing_go/models"
6
8
"github.com/liuguangw/billing_go/services"
@@ -30,7 +32,10 @@ func (*PrizeHandler) GetType() byte {
30
32
func (h * PrizeHandler ) GetResponse (request * common.BillingPacket ) * common.BillingPacket {
31
33
response := request .PrepareResponse ()
32
34
packetReader := services .NewPacketDataReader (request .OpData )
33
- prizeType := packetReader .ReadByteValue ()
35
+ var prizeType byte
36
+ if h .BillType == common .BillTypeHuaiJiu {
37
+ prizeType = packetReader .ReadByteValue ()
38
+ }
34
39
//用户名
35
40
usernameLength := packetReader .ReadByteValue ()
36
41
tmpLength := int (usernameLength )
@@ -53,23 +58,65 @@ func (h *PrizeHandler) GetResponse(request *common.BillingPacket) *common.Billin
53
58
CharName : string (charName ),
54
59
}
55
60
markOnline (h .Resource .LoginUsers , h .Resource .OnlineUsers , h .Resource .MacCounters , string (username ), clientInfo )
56
- //世界id
57
- worldId := packetReader .ReadLeUint16 ()
58
- //角色id
59
- charguid := packetReader .ReadLeInt ()
60
- if prizeType == prizeTypeCheck {
61
- h .processCheck (username , worldId , charguid , response )
62
- } else if prizeType == prizeTypeFetch {
63
- //领取类型
64
- fetchType := packetReader .ReadByteValue ()
65
- h .processFetch (fetchType , charName , username , worldId , charguid , response )
61
+ if h .BillType == common .BillTypeHuaiJiu {
62
+ //世界id
63
+ worldId := packetReader .ReadLeUint16 ()
64
+ //角色id
65
+ charguid := packetReader .ReadLeInt ()
66
+ if prizeType == prizeTypeCheck {
67
+ h .processCheck (username , worldId , charguid , response )
68
+ } else if prizeType == prizeTypeFetch {
69
+ //领取类型
70
+ fetchType := packetReader .ReadByteValue ()
71
+ h .processFetch (fetchType , charName , username , worldId , charguid , response )
72
+ }
73
+ } else {
74
+ h .processCheck1 (username , response )
66
75
}
67
- //debug
68
- //h.Resource.Logger.Info("dump response\n" + response.String())
69
76
return response
70
77
}
71
78
72
- // processCheck 处理查询奖励
79
+ // processCheck1 处理查询奖励(经典端)
80
+ func (h * PrizeHandler ) processCheck1 (username []byte , response * common.BillingPacket ) {
81
+ var checkResult byte
82
+ prizeList , err := models .FindAccountPrizeList (h .Resource .Db , string (username ), 0 , 0 , 30 )
83
+ if err != nil {
84
+ checkResult = 3
85
+ h .Resource .Logger .Error ("FindAccountPrizeList failed: " + err .Error ())
86
+ }
87
+ //记录条数
88
+ prizeCount := len (prizeList )
89
+ if prizeCount == 0 {
90
+ //没有奖励可以领取
91
+ checkResult = 5
92
+ }
93
+ usernameLength := len (username )
94
+ opDataLength := usernameLength + 2
95
+ if checkResult == 0 {
96
+ opDataLength += (21 * prizeCount + 1 )
97
+ }
98
+ //Packets::LBLNewCheckPrize
99
+ opData := make ([]byte , 0 , opDataLength )
100
+ opData = append (opData , byte (usernameLength ))
101
+ opData = append (opData , username ... )
102
+ opData = append (opData , checkResult )
103
+ if checkResult == 0 {
104
+ opData = append (opData , byte (prizeCount ))
105
+ for _ , prizeItem := range prizeList {
106
+ //itemid
107
+ itemIdData := make ([]byte , 20 )
108
+ itemIdStrData := []byte ("item " + strconv .Itoa (prizeItem .ItemID ))
109
+ copy (itemIdData , itemIdStrData )
110
+ opData = append (opData , itemIdData ... )
111
+ //itemNum
112
+ itemNum := prizeItem .ItemNum
113
+ opData = append (opData , byte (itemNum & 0xFF ))
114
+ }
115
+ }
116
+ response .OpData = opData
117
+ }
118
+
119
+ // processCheck 处理怀旧端查询奖励
73
120
func (h * PrizeHandler ) processCheck (username []byte , worldId uint16 , charguid int , response * common.BillingPacket ) {
74
121
usernameLength := len (username )
75
122
opData := make ([]byte , 0 , usernameLength + 15 )
@@ -102,7 +149,7 @@ func (h *PrizeHandler) processCheck(username []byte, worldId uint16, charguid in
102
149
response .OpData = opData
103
150
}
104
151
105
- // processFetch 处理领取奖励
152
+ // processFetch 处理怀旧端领取奖励
106
153
func (h * PrizeHandler ) processFetch (fetchType byte , charName , username []byte , worldId uint16 , charguid int , response * common.BillingPacket ) {
107
154
inputWorldId := 0
108
155
inputCharguid := 0
@@ -128,7 +175,7 @@ func (h *PrizeHandler) processFetch(fetchType byte, charName, username []byte, w
128
175
if prizeCount > 0 {
129
176
opDataLength += (22 * prizeCount + 1 )
130
177
}
131
- opData := make ([]byte , 0 , usernameLength + 3 )
178
+ opData := make ([]byte , 0 , opDataLength )
132
179
opData = append (opData , prizeTypeFetchRet , byte (usernameLength ))
133
180
opData = append (opData , username ... )
134
181
var fetchResult byte
0 commit comments