314bc5df
zhengshouren
提交服务器初始代码
|
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
|
local skynet = require "skynet"
local cjson = require "shared.json"
local md5 = require("md5")
local httpc = require("http.httpc")
local servId = tonumber(skynet.getenv("servId"))
function getRandomName()
local nameCsv = csvdb["name_combCsv"]
local part1 = nameCsv[1][math.random(1, #nameCsv[1])].name
local part2 = nameCsv[2][math.random(1, #nameCsv[2])].name
local part3 = nameCsv[3][math.random(1, #nameCsv[3])].name
return table.concat({part1, part2, part3})
end
function getActionCode(role)
if not role.uniqueCount then
role.uniqueCount = 0
end
local action = {role:getProperty("id"), skynet.timex(), role.uniqueCount}
role.uniqueCount = role.uniqueCount + 1
return table.concat(action, "_")
end
-- begin 数据库自增字段
function getNextRoleId()
local roleId = redisproxy:hget("autoincrement_set", "role")
if roleId - servId * MAX_ROLE_NUM >= MAX_ROLE_NUM - 1 then
return
end
return redisproxy:hincrby("autoincrement_set", "role", 1)
end
function getNextTradeId()
return redisproxy:hincrby("autoincrement_set", "trade", 1)
end
-- end 数据库自增字段
-- 查找上限
-- [10, 20, 30, 40] 查找15, 返回指向10的元素
function lowerBoundSeach(data, searchKey)
-- 先排序
local lastKey = nil
local keys = table.keys(data)
table.sort(keys)
for _, key in ipairs(keys) do
if key > searchKey then
break
end
lastKey = key
end
return lastKey and data[lastKey] or nil
end
-- 将201402021800或者20140202的格式转化成unixtime
function toUnixtime(timeStr)
local strLength = string.len(timeStr)
if strLength ~= 8 and strLength ~= 10 then return end
local year = string.sub(timeStr, 1, 4)
local month = string.sub(timeStr, 5, 6)
local day = string.sub(timeStr, 7, 8)
local hour, minute = 0, 0
if strLength == 10 then
hour = string.sub(timeStr, 9, 10)
--minute = string.sub(timeStr, 11, 12)
end
return os.time{year=year, month=month, day=day, hour=hour, min=minute, sec=0}
end
-- 判断时间点是不是当天
function isToday(curTimestamp)
local curTm = os.date("*t", curTimestamp)
local nowTm = os.date("*t", skynet.timex())
return curTm.year == nowTm.year and curTm.month == nowTm.month and curTm.day == nowTm.day
end
function withTimeHead(value, now)
now = now or skynet.timex()
return (2000000000-now) .. "." .. value
end
function cutTimeHead(value)
return tonumber(value:match("%d+%.(%d+)"))
end
-- 判断是不是同一个星期
function isCrossWeek(target, now)
now = now or skynet.timex()
return specMonday(target) ~= specMonday(now - RESET_TIME * 3600)
end
-- 两个时间相隔多少星期
function crossWeek(target, now)
now = now or skynet.timex()
return math.floor((specMonday(target)-specMonday(now))/604800)
end
-- 判断是不是同一个月
function isCrossMonth(target, now)
now = now or skynet.timex()
|
a27e74bf
zhouhaihai
月重置
|
103
|
local tarTm = os.date("*t", target - RESET_TIME * 3600)
|
314bc5df
zhengshouren
提交服务器初始代码
|
104
105
106
107
108
109
110
111
|
local nowTm = os.date("*t", now - RESET_TIME * 3600)
if tarTm.year == nowTm.year and tarTm.month == nowTm.month then
return false
else
return true
end
end
|
59835765
zhouhaihai
排行榜
|
112
113
|
function isCrossDay(lastTime, now, resetTime)
resetTime = resetTime or RESET_TIME
|
314bc5df
zhengshouren
提交服务器初始代码
|
114
115
|
if lastTime == 0 then return true end
now = now or skynet.timex()
|
59835765
zhouhaihai
排行榜
|
116
117
|
local todayResetH = specTime({hour = resetTime}, now - resetTime * 3600)
return lastTime < todayResetH and now >= todayResetH
|
314bc5df
zhengshouren
提交服务器初始代码
|
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
end
function crossDay(target, now)
now = now or skynet.timex()
local tarTime = specTime({hour = RESET_TIME}, target)
--local nowTime = specTime({hour = RESET_TIME}, now) --当前时间有没有过一天而不是当前天四点
return math.floor((now - tarTime)/ 86400)
end
function crossWeekFromOpen(now)
now = now or skynet.timex()
local openTime = os.time{
year = tonum(SERV_OPEN:sub(1,4)),
month = tonum(SERV_OPEN:sub(5,6)),
day = tonum(SERV_OPEN:sub(7,8)),
}
return crossWeek(openTime, now)
end
function crossDayFromOpen(now)
now = now or skynet.timex()
local openTime = os.time{
year = tonum(SERV_OPEN:sub(1,4)),
month = tonum(SERV_OPEN:sub(5,6)),
day = tonum(SERV_OPEN:sub(7,8)),
hour = RESET_TIME,
}
return crossDay(openTime, now)
end
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
149
150
151
152
153
154
155
156
157
|
function diffFromOpen()
now = now or skynet.timex()
local openTime = os.time{
year = tonum(SERV_OPEN:sub(1,4)),
month = tonum(SERV_OPEN:sub(5,6)),
day = tonum(SERV_OPEN:sub(7,8)),
hour = RESET_TIME,
}
if now < openTime then
|
accf94c4
liuzujun
活动以类型标识,修改双倍活动bug
|
158
|
return -1
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
159
160
161
162
163
|
end
return math.floor((now - openTime) / DAY_SEC)
end
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
164
165
166
167
168
169
|
function diffFromTs(ts)
local now = skynet.timex()
local tm = os.date("*t", ts)
local time = os.time({year = tm.year, month = tm.month, day = tm.day, hour = RESET_TIME})
if now < time then
|
b1644d3b
liuzujun
付费签到天数bug
|
170
|
return 0
|
460afa6e
liuzujun
付费签到改为主动领取,战斗关卡不一...
|
171
172
173
174
175
|
end
return math.floor((now - time) / DAY_SEC)
end
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
176
177
178
179
180
181
182
183
184
185
|
function getServerOpenTs()
local openTime = os.time{
year = tonum(SERV_OPEN:sub(1,4)),
month = tonum(SERV_OPEN:sub(5,6)),
day = tonum(SERV_OPEN:sub(7,8)),
hour = RESET_TIME,
}
return openTime
end
|
314bc5df
zhengshouren
提交服务器初始代码
|
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
-- 30*86400 = 2592000
function monthLater(now)
now = now or skynet.timex()
now = now - RESET_TIME * 3600 -- 排除0-4点钟 影响
return specTime({hour = RESET_TIME}, now) + 2592000
end
-- 一天以后
function dayLater(now)
now = now or skynet.timex()
now = now - RESET_TIME * 3600 -- 排除0-4点钟 影响
return specTime({hour = RESET_TIME}, now) + 86400
end
-- 到下一个时间点的秒数差和下一个时间点的unixtime
function diffTime(params)
params = params or {}
local currentTime = skynet.timex()
local curTm = os.date("*t", currentTime)
local nextYear = params.year or curTm.year
local nextMonth = params.month or curTm.month
local nextDay = params.day or curTm.day + 1
local nextHour = params.hour or 0
local nextMinute = params.min or 0
local nextSecond = params.sec or 0
local nextUnixTime = os.time({ year = nextYear, month = nextMonth, day = nextDay, hour = nextHour, min = nextMinute, sec = nextSecond})
return os.difftime(nextUnixTime, currentTime), nextUnixTime
end
-- 取今天特殊时刻时间戳
function specTime(pms, now)
now = now or skynet.timex()
local tm = os.date("*t", now)
local year = pms.year or tm.year
local month = pms.month or tm.month
local day = pms.day or tm.day
local hour = pms.hour or 0
local min = pms.min or 0
local sec = pms.sec or 0
return os.time({year = year, month = month, day = day, hour = hour, min = min, sec = sec})
end
function specMonday(now)
now = now or skynet.timex()
local tm = os.date("*t", now)
local wday = (tm.wday + 6) % 7
if wday == 0 then wday = 7 end
|
8a57b603
zhouhaihai
初始化冒险重置时间
|
234
|
local time = os.time({year = tm.year, month = tm.month, day = tm.day, hour = RESET_TIME})
|
314bc5df
zhengshouren
提交服务器初始代码
|
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
|
return time - (wday - 1) * 86400
end
function isSpecTime(startHour, endHour, specday)
local tm = os.date("*t", skynet.timex())
if specday then
local day = (tm.wday+6)%7
if day == 0 then day = 7 end
return specday == day and tm.hour >= startHour and tm.hour < endHour
end
return tm.hour >= startHour and tm.hour < endHour
end
function getSecond(timeStr)
timeStr = timeStr or "0000"
local hour = tonumber(string.sub(timeStr, 1, 2))
local min = tonumber(string.sub(timeStr, 3, 4))
return hour * 3600 + min * 60
end
function urlencode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w ])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end
function isnan(value)
return value ~= value
end
-- 推送通知
local serverid = skynet.getenv "serverid"
local secretKey = "467C2221D3A20FE69D23A33E8940C2C5"
-- 推送该服务器的所有用户
-- tag都是交集处理
function notifyClients(msg, otherTags)
local tags = { serverid }
for _, tag in ipairs(otherTags or {}) do
table.insert(tags, tag)
end
local content = {
["appid"] = "1000013239",
["audience"] = {
[otherTags and "tag_and" or "tag"] = tags,
},
-- ["audience"] = "all",
["notification"] = {
["alert"] = msg,
},
["options"] = {
["ttl"] = 60 * 120
}
}
local contentJson = cjson.encode(content)
local header = {
["content-type"] = "application/x-www-form-urlencoded",
["X-MJPUSH-SIGNATURE"] = md5.sumhexa(urlencode(contentJson .. "&" .. secretKey))
}
local status, body = httpc.request("POST", "push.mjyun.com", "/api/push", {}, header, contentJson)
if tonumber(status) ~= 200 then
skynet.error(status, body)
end
end
-- { uid, msg, scheduleTime}
function notifyClient(params)
params = params or {}
params.key = "zhaolugame20170831"
local status, body = httpc.get(skynet.getenv("codeurl"),
|
072db127
zhouhaihai
推送
|
313
|
"/push/notify_user?" .. httpGetFormatData(params), {}, {})
|
314bc5df
zhengshouren
提交服务器初始代码
|
314
315
316
317
318
319
320
321
322
323
324
325
326
327
|
if tonumber(status) ~= 200 then
skynet.error(status, body)
return
end
return body
end
-- { uid, msgId}
function deleteNotify(params)
params = params or {}
params.key = "zhaolugame20170831"
local status, body = httpc.get(skynet.getenv("codeurl"),
|
072db127
zhouhaihai
推送
|
328
|
"/push/delete_notify?" .. httpGetFormatData(params), {}, {})
|
314bc5df
zhengshouren
提交服务器初始代码
|
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
|
if tonumber(status) ~= 200 then
skynet.error(status, body)
return
end
return body
end
--http get数据
function httpGetFormatData(params)
local function escape(s)
return (string.gsub(s, "([^A-Za-z0-9_])", function(c)
return string.format("%%%02X", string.byte(c))
end))
end
local body = {}
for k, v in pairs(params) do
table.insert(body, string.format("%s=%s", escape(k), escape(v)))
end
return table.concat(body, "&")
end
|