Blame view

src/actions/ActivityAction.lua 4.07 KB
d763fb14   zhouhaihai   签到 九宫格
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
  local ipairs = ipairs
  local table = table
  local math = math
  local string = string
  local redisproxy = redisproxy
  local MsgPack = MsgPack
  local string_format = string.format
  local tonumber = tonumber
  local table_insert = table.insert
  local table_unpack = table.unpack
  local table_find = table.find
  local table_nums = table.nums
  local math_random = math.randomInt
  
  
  local _M = {}
  
  
  function _M.sudokuRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
  
  	local sudoku = role:getProperty("sudoku")
  	local phase = sudoku[-1] or 1
  	local curData = (csvdb["guide_sudokuCsv"][phase] or {})[id]
  	if phase == -1 or not curData then return 1 end
  
  	sudoku.task = sudoku.task or {}
  	sudoku.task[phase] = sudoku.task[phase] or {}
  
  	if (sudoku.task[phase][id] or 0) < curData.con1 then return 2 end
  
  	sudoku.task[phase][id] = -1
  	local task = role:award(curData.reward, {log = {desc = "sudoku", int1 = id, int2 = phase}}) -- 任务奖励
  
  	local reward = {}
  	local rId = {}
  	for pid, pdata in pairs(csvdb["guide_sudoku_rewardCsv"][phase] or {}) do
  		local pos = pdata.pos:toArray(true, "=")
  		local ok, is = true, false
  		for _, one in pairs(pos) do
  			if one == id then
  				is = true
  			end
  			if sudoku.task[phase][one] ~= -1 then
  				ok = false
  				break
  			end
  		end
  
  		if ok and is then
  			for itemId, count in pairs(pdata.reward:toNumMap()) do
  				reward[itemId] = (reward[itemId] or 0) + count
  			end
  			table.insert(rId, pid)
  		end
  	end
  
  	if not next(reward) then
  		reward = nil
  	else
  		reward = role:award(reward, {log = {desc = "sudokuR", int1 = id, int2 = phase}})
  	end
  
  	role:updateProperty({field = "sudoku", value = sudoku})
  
  	role:log("act_action", {desc = "sudoku", int1 = id, int2 = phase})
  
  	SendPacket(actionCodes.Activity_sudokuRpc, MsgPack.pack({task = task, reward = reward, rId = rId}))
  	return true
  end
  
  function _M.sudokuRewardRpc(agent, data)
  	local role = agent.role
  
  
  	local sudoku = role:getProperty("sudoku")
  	local phase = sudoku[-1] or 1
  
  	local curData = csvdb["guide_sudokuCsv"][phase]
  	if not curData then return end
  	if not globalCsv.guide_sudoku_reward[phase] then return end
  
  	local curTask = (sudoku.task or {})[phase] or {}
  
  	for id, _ in pairs(curData) do
  		if curTask[id] ~= -1 then
  			return
  		end
  	end
  
  	local reward = role:award(globalCsv.guide_sudoku_reward[phase], {log = {desc = "sudokuRP", int1 = phase}})
  
  	sudoku[-1] = phase + 1
  	sudoku.task[phase] = nil
  	if not csvdb["guide_sudokuCsv"][sudoku[-1]] then
  		sudoku[-1] = -1
  		sudoku.task = nil
  	end
  	role:updateProperty({field = "sudoku", value = sudoku})
  
  	SendPacket(actionCodes.Activity_sudokuRewardRpc, MsgPack.pack(reward))
  	return true
  end
  
  
  function _M.signRpc(agent, data)
  	local role = agent.role
  
  	local serverT = skynet.timex()
  	local tm = os.date("*t", serverT)
  
  	local curDay = tm.day
  	
  	local yearMonth = tm.year * 100 + tm.month
  	local monthData = csvdb["daily_signInCsv"][yearMonth]
  	if not monthData or not monthData[curDay] then
  		return 1
  	end
  
  	local signs = role:getProperty("sign")
  	if signs[curDay] == yearMonth then  -- 未重置的还可以签到正常(本月已经签到)
  		return 2
  	end
  	signs[curDay] = yearMonth
  
ea40710f   zhouhaihai   活动
128
  	local reward = role:award(monthData[curDay].item, {log = {desc = "sign", int1 = yearMonth, int2 = curDay}})
d763fb14   zhouhaihai   签到 九宫格
129
130
  	role:changeUpdates({{type = "sign", field = curDay, value = yearMonth}})
  
ea40710f   zhouhaihai   活动
131
  	SendPacket(actionCodes.Activity_signRpc, MsgPack.pack(reward))
d763fb14   zhouhaihai   签到 九宫格
132
133
134
135
  	return true
  end
  
  
ea40710f   zhouhaihai   活动
136
137
  function _M.actSignRpc(agent, data)
  	local role = agent.role
be4e8031   zhouhaihai   活动 拾荒
138
  	if not role.activity:isOpen("Sign") then return 1 end
ea40710f   zhouhaihai   活动
139
140
141
  
  	local curData = role.activity:getActData("Sign")
  	local reward = {}
be4e8031   zhouhaihai   活动 拾荒
142
  	for day, csvData in ipairs(csvdb["new_signInCsv"]) do
ea40710f   zhouhaihai   活动
143
144
145
146
147
148
149
150
151
152
153
154
155
  		if day <= (curData[0] or 0) then
  			if not curData[day] then
  				curData[day] = -1
  				-- 奖励
  				for itemId, count in pairs(csvData.reward:toNumMap()) do
  					reward[itemId] = (reward[itemId] or 0) + count
  				end
  			end
  		else
  			break
  		end
  	end
  	if next(reward) then
be4e8031   zhouhaihai   活动 拾荒
156
157
  		role.activity:updateActData("Sign", curData)
  		reward = role:award(reward, {log = {desc = "actSign"}})
ea40710f   zhouhaihai   活动
158
159
160
161
162
  	end
  	SendPacket(actionCodes.Activity_actSignRpc, MsgPack.pack(reward))
  	return true
  end
  
d763fb14   zhouhaihai   签到 九宫格
163
164
165
  
  
  return _M