StoreAction.lua
4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
local _M = {}
local serverId = tonumber(skynet.getenv("servId"))
function _M.rechargeRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local dataSet = csvdb["shop_rechargeCsv"][id]
local roleId = role:getProperty("id")
if not dataSet then return end
--创建订单号
local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId)
local orderKey = string.format("order:%d:%d", roleId, orderId)
redisproxy:del(orderKey)
local order = require("models.Order").new({ key = orderKey, order = partnerOrderId, rechargeId = dataSet.id })
order:create()
redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId)
-- 暂时忽略心跳检查
role.ignoreHeartbeat = true
SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId }))
return true
end
function _M.purchaseOrderResult(agent, data)
local role = agent.role
local roleId = role:getProperty("id")
local msg = MsgPack.unpack(data)
role.ignoreHeartbeat = false
local partnerOrderStr = msg.order
local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")
local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) })
if not orderObject:load() then
-- 订单不存在
skynet.error("cancelPurchaseRpc", string.format("order %s not exist", partnerOrderStr))
return true
end
if msg.status == "success" then
orderObject:setProperty("transactionId", msg.platformOrder or "")
return true
end
if orderObject:getProperty("finishTime") > 0 then
return true
end
orderObject:setProperty("status", msg.status)
redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr)
return true
end
function _M.dailyBuyRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local count = msg.count or 1
local dataSet = csvdb["shop_diamondCsv"][id]
if not dataSet then return 1 end
local dailySDC = role.dailyData:getProperty("dailySDC")
if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (dailySDC[id] or 0))) then return 1 end
local cost = dataSet.cost
local dailySDD = role.dailyData:getProperty("dailySDD")
if dailySDD[id] then -- 折扣
cost = math.ceil(cost * (1 - dataSet.disount / 100))
end
if not role:costDiamond({count = cost * count, log = {desc = "dailyShop", int1 = id, int2 = count}}) then
return 4
end
if dataSet.limit ~= 0 then
dailySDC[id] = (dailySDC[id] or 0) + count
role.dailyData:updateProperty({field = "dailySDC", value = dailySDC})
end
local gift = {}
for itemId, count_ in pairs(dataSet.gift:toNumMap()) do
gift[itemId] = count_ * count
end
local reward = role:award(gift, {log = {desc = "dailyShop", int1 = id, int2 = count}})
role:log("role_action", {desc = "dailyShop", int1 = id, int2 = count})
SendPacket(actionCodes.Store_dailyBuyRpc, MsgPack.pack({reward = reward}))
return true
end
function _M.dinerBuyRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local count = msg.count or 1
local dataSet = csvdb["shop_dinerCsv"][id]
if not dataSet then return end
local dinerS = role:getProperty("dinerS")
if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (dinerS[id] or 0))) then return 1 end
local cost = {[ItemId.DinerCoin] = dataSet.cost}
if not role:checkItemEnough(cost) then return end
if dataSet.limit ~= 0 then
dinerS[id] = (dinerS[id] or 0) + count
role:updateProperty({field = "dinerS", value = dinerS})
end
role:costItems(cost, {log = {desc = "dinerShop", int1 = id, int2 = count}})
local gift = {}
for _id, _count in pairs(dataSet.gift:toNumMap()) do
gift[_id] = _count * count
end
local reward = role:award(gift, {log = {desc = "dinerShop", int1 = id, int2 = count}})
role:log("role_action", {desc = "dinerShop", int1 = id, int2 = count})
SendPacket(actionCodes.Store_dinerBuyRpc, MsgPack.pack({reward = reward}))
return true
end
return _M