HomeServer/Server/Common/Common.lua
2024-11-20 15:41:37 +08:00

899 lines
26 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local skynet = require "skynet"
local oo = require "Class"
local log = require "Log"
local crypt = require "skynet.crypt"
local redisKeyUrl = require "RedisKeyUrl"
local Common = oo.class()
local pb = require "pb"
Common.word ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Common.wordNoIAndL ="abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ"
Common.number = "0123456789"
Common.numberExceptZero = "123456789"
Common.web = "192.168.50.215:8080"
Common.redeemUrl = "/web/api/redeemCode/use"
Common.getMailUrl = "/web/api/mail/getMail"
Common.useMailUrl = "/web/api/mail/useMail"
Common.findMailUrl = "/web/api/mail/findMailByMailId" --新增根据mailId查询对应邮件接口
Common.getAnnouncementUrl = "/web/api/announcement/getAnnouncement"
Common.addAnnouncementUrl = "/web/api/announcement/gameServerAddAnnouncement"
Common.addQuestionnaireUrl = "/web/api/questionnaire/add"
--Common.specialChar = "`!@#$%^&*()_+~-=;'?\\/." --特殊字符
--夏鸣星\\(≧▽
Common.specialChar = {}
table.insert( Common.specialChar, "`" )
table.insert( Common.specialChar, "!" )
table.insert( Common.specialChar, "@" )
table.insert( Common.specialChar, "#" )
table.insert( Common.specialChar, "$" )
table.insert( Common.specialChar, "%" )
table.insert( Common.specialChar, "^" )
table.insert( Common.specialChar, "&" )
table.insert( Common.specialChar, "*" )
table.insert( Common.specialChar, "(" )
table.insert( Common.specialChar, ")" )
table.insert( Common.specialChar, "_" )
table.insert( Common.specialChar, "+" )
table.insert( Common.specialChar, "~" )
table.insert( Common.specialChar, "-" )
table.insert( Common.specialChar, "=" )
table.insert( Common.specialChar, ";" )
table.insert( Common.specialChar, "'" )
table.insert( Common.specialChar, "\\" )
table.insert( Common.specialChar, "/" )
table.insert( Common.specialChar, "." )
table.insert( Common.specialChar, "'" )
--打印表
function Common:TableToString(t)
local sp = " ";
local list = {};
local function addline(str)
table.insert(list, str);
end
local function do_tostring(tt, l, ln)
local tp = type(tt);
if (tp == "table") then
l = l + 1;
if (l - 1 == 0) then
addline("{");
end
for k, v in pairs(tt) do
local pp = type(v);
if (pp == "table") then
addline(string.format("%"..l.."s[%s]={",sp,k));
do_tostring(v, l + 1);
addline(string.format("%"..l.."s},",sp));
else
addline(string.format("%"..l.."s[%s]=%s,",sp,k,tostring(v)));
end
end
if (l - 1 == 0) then
addline("}");
end
else
addline(string.format("%"..l.."s=%s,",sp,k,tostring(tt)));
end
end
do_tostring(t, 0);
return table.concat(list, "\n");
end
function Common:Split(input, delimiter)
input = tostring(input)
delimiter = tostring(delimiter)
if (delimiter=='') then
return false
end
local pos,arr = 0, {}
for st,sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(input, pos))
return arr
end
--是否为同一天
function Common:IsSameDay(time1 , time2)
if os.date("*t", time1).year == os.date("*t", time2).year and
os.date("*t", time1).month == os.date("*t", time2).month and
os.date("*t", time1).day == os.date("*t", time2).day then
return true
end
return false
end
--是否为连续的一天
function Common:IsSeriesDay(time1 , time2)
local t1 = os.date("*t",time1)
local t2 = os.date("*t",time2)
if t1.yday == t2.yday + 1 then
return true
elseif t2.yday == t1.yday + 1 then
return true
end
return false
end
--随机数字ID
function Common:RandNumberID( maxCount )
local rand = 0
local name = ""
for i = 1, maxCount do
local temp = nil
if 1 == i then
rand = math.random(1,#self.numberExceptZero)
temp = string.sub(self.numberExceptZero,rand,rand)
name = name .. temp
else
rand = math.random(1,#self.number)
temp = string.sub(self.number,rand,rand)
name = name .. temp
end
end
return name
end
--随机ID
function Common:RandID( maxCount )
local rand = 0
local name = ""
for i = 1, maxCount do
rand = math.random(1,52)
local temp = string.sub(self.word,rand,rand)
name = name .. temp
end
return name
end
--随机ID没有I和L
function Common:RandIDNoIAndL( maxCount )
local rand = 0
local name = ""
for i = 1, maxCount do
rand = math.random(1,48)
local temp = string.sub(self.wordNoIAndL,rand,rand)
name = name .. temp
end
return name
end
--随机name
function Common:RandName()
local rand = 0
local name = ""
for i = 1, 10 do
rand = math.random(1,52)
local temp = string.sub(self.word,rand,rand)
name = name .. temp
end
return name
end
--随机token
function Common:RandToken()
local rand = 0
local token = ""
for i = 1, 8 do
rand = math.random(1,52)
local temp = string.sub(self.word,rand,rand)
token = token .. temp
end
--token = "1234567890"
return token
end
--随机兑换码
function Common:RandRedeemCode()
local rand = 0
local name = ""
for i = 1, 20 do
rand = math.random(1,52)
local temp = string.sub(self.word,rand,rand)
name = name .. temp
end
return name
end
--获取主服ID
function Common:GetMainServerID(serverId)
local mainServerId = nil
mainServerId = string.sub(serverId,1,1)
if 0 == #mainServerId then
mainServerId = nil
end
return mainServerId
end
--获取主服ID
function Common:GetClusterConfig(serverId)
serverId = tonumber(serverId)
for k, v in pairs(skynet.server.gameConfig.ClusterServerConfig) do
if serverId == v.serverId then
return v
end
end
return nil
end
function Common:Utf8FormString(t)
local bytearr = {}
for _, v in ipairs(t) do
local utf8byte = v < 0 and (0xff + v + 1) or v
table.insert(bytearr, string.char(utf8byte))
end
return table.concat(bytearr)
end
--解析参数
function Common:ParseUrlParam( url )
local newUrl = nil
local param = nil
local post = string.find(url,"?")
newUrl = string.sub(url,1, post -1)
param = string.sub(url,post + 1, #url)
return newUrl,param
end
--是否为URL编码
function Common:IsUrlEncode(s)
if string.find(s, "%%") then
return true
else
return false
end
end
--URL编码
function Common:UrlEncode(s)
s = string.gsub(s, "([^%w%.%- ])", function(c)
return string.format("%%%02X", string.byte(c)) end)
return string.gsub(s, " ", "+")
end
--URL解码
function Common:UrlDecode(s)
s = string.gsub(s, '%%(%x%x)', function(h)
return string.char(tonumber(h, 16)) end)
return s
end
--获取字符串时间 2022-02-22 22:22:22
function Common:GetStrTime( time )
return os.date("%Y-%m-%d %H:%M:%S",time)
end
--获取字符串日期 2022-02-22
function Common:GetStrDate( time )
return os.date("%Y-%m-%d",time)
end
--将字符串时间 2022-02-22 22:22:22 转为时间戳
function Common:GetTime( date )
local _, _, y, m, d, _hour, _min, _sec = string.find(date, "(%d+)-(%d+)-(%d+)%s*(%d+):(%d+):(%d+)");
return os.time({year=y, month = m, day = d, hour = _hour, min = _min, sec = _sec});
end
--获取一年几月有多少天
function Common:GetDayCount( year , month )
local temp ={31,28,31,30,31,30,31,31,30,31,30,31}
--判断是否是闰年如果为闰年改变2月是29否则改变2月是28
if (( year%4==0 and year%100 ~= 0 ) or year%400==0 ) then
temp[2] = 29
else
temp[2] = 28
end
return temp[ month ];
end
--获取表结构时间
function Common:GetTableTime()
local now = skynet.GetTime()
local curr_time = {}
curr_time.year = tonumber(os.date("%Y", now))
curr_time.month = tonumber(os.date("%m", now))
curr_time.day = tonumber(os.date("%d", now))
curr_time.hour = tonumber(os.date("%H", now))
curr_time.min = tonumber(os.date("%M", now))
curr_time.sec = tonumber(os.date("%S", now))
return curr_time
end
--获取之前的某一天的起始和结束时间戳
function Common:GetPreSomeDay( count )
local now = skynet.GetTime()
local curr_time = {}
curr_time.year = os.date("%Y", now)
curr_time.month = os.date("%m", now)
curr_time.day = os.date("%d", now)
local startTime = os.time({year=curr_time.year, month=curr_time.month, day=curr_time.day - count, hour=0,min=0,sec=0})
local endTime = os.time({year=curr_time.year, month=curr_time.month, day=curr_time.day - count, hour=23,min=59,sec=59})
--startTime = os.date("%Y-%m-%d %H:%M:%S",startTime)
--endTime = os.date("%Y-%m-%d %H:%M:%S",endTime)
return startTime,endTime
end
--获取之后的某一天的起始和结束时间戳
function Common:GetAfterSomeDay( count )
local now = skynet.GetTime()
local curr_time = {}
curr_time.year = os.date("%Y", now)
curr_time.month = os.date("%m", now)
curr_time.day = os.date("%d", now)
local startTime = os.time({year=curr_time.year, month=curr_time.month, day=curr_time.day + count, hour=0,min=0,sec=0})
return startTime
end
--获取给定时间的之后某天的起始时间
function Common:GetTimeAfterSomeDay( time , count )
local curr_time = {}
curr_time.year = os.date("%Y", time)
curr_time.month = os.date("%m", time)
curr_time.day = os.date("%d", time)
local startTime = os.time({year=curr_time.year, month=curr_time.month, day=curr_time.day + count, hour=0,min=0,sec=0})
--local startTime = os.date("%Y-%m-%d %H:%M:%S",startTime)
return startTime
end
--获取给定时间的之后某天的起始时间并且保留精确时间
function Common:GetTimeAfterSomeDayHMS( time , count )
local curr_time = {}
curr_time.year = os.date("%Y", time)
curr_time.month = os.date("%m", time)
curr_time.day = os.date("%d", time)
curr_time.hour = os.date("%H", time)
curr_time.min = os.date("%M", time)
curr_time.sec = os.date("%S", time)
local startTime = os.time({year=curr_time.year, month=curr_time.month, day=curr_time.day + count, hour=curr_time.hour,min=curr_time.min,sec=curr_time.sec})
--local startTime = os.date("%Y-%m-%d %H:%M:%S",startTime)
return startTime
end
--获取之后的某一天的时间戳
function Common:GetAfterSomeDayTime( count , hour , min , sec )
hour = hour or 0
min = min or 0
sec = sec or 0
local now = skynet.GetTime()
local curr_time = {}
curr_time.year = os.date("%Y", now)
curr_time.month = os.date("%m", now)
curr_time.day = os.date("%d", now)
local startTime = os.time({year=curr_time.year, month=curr_time.month, day=curr_time.day + count, hour= hour ,min= min ,sec= sec})
return startTime
end
--获取之后的某个小时的时间戳
function Common:GetAfterSomeHour( count )
local now = skynet.GetTime()
local curr_time = {}
curr_time.year = os.date("%Y", now)
curr_time.month = os.date("%m", now)
curr_time.day = os.date("%d", now)
curr_time.hour = os.date("%H", now)
curr_time.min = os.date("%M", now)
curr_time.sec = os.date("%S", now)
--向下取整 获取应该增加的天数
local day = math.floor(count/24)
--获取应该增加的小时
local hour = count - 24*day
local time = os.time({year=curr_time.year, month=curr_time.month, day=curr_time.day + day, hour=curr_time.hour+hour ,min=curr_time.min ,sec=curr_time.sec})
--local startTime = os.date("%Y-%m-%d %H:%M:%S",startTime)
return time
end
--获取年月天
function Common:GetYearMonthDay()
local now = skynet.GetTime()
local curTime = {}
curTime.year = os.date("%Y", now)
curTime.month = os.date("%m", now)
curTime.day = os.date("%d", now)
return tonumber( curTime.year ) , tonumber( curTime.month ) , tonumber( curTime.day )
end
--获取某一天的前后多少天 count可以为正负
function Common:GetSomeDayTime( modifyTime , count )
local curTime = {}
curTime.year = os.date("%Y", modifyTime)
curTime.month = os.date("%m", modifyTime)
curTime.day = os.date("%d", modifyTime)
curTime.hour = os.date("%H", modifyTime)
curTime.min = os.date("%M", modifyTime)
curTime.sec = os.date("%S", modifyTime)
local newTime = os.time({year=curTime.year, month=curTime.month, day=curTime.day + count, hour=curTime.hour,min=curTime.min ,sec=curTime.sec})
return newTime
end
--首字母小写
function Common:FirstAlphabetToLower(str)
return (str:gsub("^%u",string.lower))
end
--随机不重复的数据
function Common:RandNoRepeatItem( needCount , allItem )
if not allItem then
return {}
end
local maxCircCount = 0 --最大循环数据
local data = {}
local cfgCount = #allItem
if 0 == cfgCount then
return {}
end
while true do
local index = math.random(1,cfgCount)
local id = allItem[ index ]
local isExist = false
--检查商品列表是否有重复
for k, v in pairs( data ) do
if v == id then
isExist = true
break
end
end
if not isExist then
--不存在就插入数据
table.insert( data , id )
--超过就退出
if #data >= needCount then
break
end
end
maxCircCount = maxCircCount + 1
if maxCircCount >= 2000 then
--防止死循环计算2000次就强制退出
break
end
end
return data
end
--随机不重复的配置
function Common:RandNoRepeatItemForCfg( needCount , cfg )
if not cfg then
return nil
end
local maxCircCount = 0 --最大循环数据
local data = {}
local cfgCount = #cfg
while true do
local index = math.random(1,cfgCount)
local id = cfg[ index ].id
local isExist = false
--检查商品列表是否有重复
for k, v in pairs( data ) do
if v == id then
isExist = true
break
end
end
if not isExist then
--不存在就插入数据
table.insert( data , id )
--最大6个商品超过就退出
if #data >= needCount then
break
end
end
maxCircCount = maxCircCount + 1
if maxCircCount >= 5000 then
--防止死循环计算5000次就强制退出
break
end
end
return data
end
--获取两点的距离
function Common:Distance(x1,y1,x2,y2)
x1,y1,x2,y2 = string.format("%.2f", x1),string.format("%.2f", y1),string.format("%.2f", x2),string.format("%.2f", y2) --由于精度问题客户端可能发来0.12345645646e+14的数据所以这里保留2位就行。
return math.sqrt((y2-y1) * (y2-y1)+(x2-x1) * (x2-x1))
end
--转换到染色家具ID
function Common:TransferColorFurniture( id )
local curFurniture = skynet.server.gameConfig.Furniture[ id ]
if not curFurniture then
log.info("获取家具配置错误 ID ",id)
else
if 2 == #curFurniture.dyeFurTrans and 0 == math.floor( curFurniture.id /1000000 ) then
return curFurniture.dyeFurTrans[2] * 100000 + curFurniture.dyeFurTrans[1];
else
return id
end
end
end
--获取星期几
function Common:GetDayInWeek()
local t = os.date("*t", skynet.GetTime())
if 1 == t.wday then
return 7
else
t.wday = t.wday - 1
return t.wday
end
end
--获取给定时间是星期几
function Common:GetDayInWeekByTime(y,m,d)
if m == 1 or m == 2 then
m = m + 12
y = y - 1
end
local m1,_ = math.modf(3 * (m + 1) / 5)
local m2,_ = math.modf(y / 4)
local m3,_ = math.modf(y / 100)
local m4,_ = math.modf(y / 400)
local iWeek = (d + 2 * m + m1 + y + m2 - m3 + m4 ) % 7
local weekTab = {
["0"] = 1,
["1"] = 2,
["2"] = 3,
["3"] = 4,
["4"] = 5,
["5"] = 6,
["6"] = 7,
}
return weekTab[tostring(iWeek)]
end
--是否为润年
function Common:IsLeapYear(year)
if year % 4 == 0 then
if year % 100 ~= 0 or year % 400 == 0 then
return true -- 能被4整除并且不能同时被100或者400整除则为闰年
else
return false
end
else
return false
end
end
--是否为新的一周
function Common:IsNewWeek(time1)
local t1 = os.date("*t",time1) --小时间
local t2 = os.date("*t",skynet.GetTime()) --当前时间
local year1 = t1.year
local day1 = t1.yday
local wday1 = (t1.wday-1 == 0) and 7 or t1.wday-1
local year2 = t2.year
local day2 = t2.yday
local wday2 = (t2.wday-1 == 0) and 7 or t2.wday-1
--判断是不是同一年
if(year1 == year2) then
--如果t1的星期几大于t2的星期几 则肯定是新的一周
if(wday1 > wday2) then
return true
else
--如果两个时间的天数差大于7 则肯定是新的一周
if(day2 - day1 >= 7) then
return true
end
end
else
--如果t1的星期几大于t2的星期几 则肯定是新的一周
if(wday1 >= wday2) then
return true
else
--如果 小的时间到当年结束的天数 加上 大的时间到当年开始的天数 大于等于7 则肯定是新的一周
local count = 365
if ((year1%4 == 0 and year1%100 ~= 0) or year1%400 == 0) then
count = 366
end
if((count - day1 + day2) >= 7 )then
return true
end
end
end
return false
end
--是否间隔一周
function Common:IsIntervalWeek( time1 )
local t1 = os.date("*t",time1)
local t2 = os.date("*t",skynet.GetTime())
if t1.yday + 7== t2.yday then
return true
end
return false
end
--奖励类型 str 转为 int
function Common:AwardTypeStrToInt( type )
local goodsType = nil
if "NumericalValue" == type then
goodsType = 0
elseif "Furniture" == type then
goodsType = pb.enum("EnumGoodsType" , "Furniture")
elseif "Decorate" == type or "Decoration" == type then
goodsType = pb.enum("EnumGoodsType" , "Decorate")
elseif "Flowerpot" == type then
goodsType = pb.enum("EnumGoodsType" , "Flowerpot")
elseif "Seed" == type then
goodsType = pb.enum("EnumGoodsType" , "Seed")
elseif "Plant" == type then
goodsType = pb.enum("EnumGoodsType" , "Plant")
elseif "Clothes" == type then
goodsType = pb.enum("EnumGoodsType" , "Clothes")
elseif "PetClothes" == type then
goodsType = pb.enum("EnumGoodsType" , "PetClothes")
elseif "Fertilizer" == type then
goodsType = pb.enum("EnumGoodsType" , "Fertilizer")
elseif "Ticket" == type then
goodsType = pb.enum("EnumGoodsType" , "Prop")
elseif "FishType" == type then
goodsType = pb.enum("EnumGoodsType" , "Fish")
elseif "CuisineMaterial" == type then
goodsType = pb.enum("EnumGoodsType" , "CuisineMaterial")
elseif "CuisineMenu" == type then
goodsType = pb.enum("EnumGoodsType" , "CuisineMenu")
elseif "CoffeeType" == type then
goodsType = pb.enum("EnumGoodsType" , "Coffee")
elseif "Garden" == type then
goodsType = pb.enum("EnumGoodsType" , "Garden")
elseif "Reward" == type then
goodsType = pb.enum("EnumGoodsType" , "RewardId")
elseif "Points" == type then
goodsType = pb.enum("EnumGoodsType" , "Points")
elseif "Suit" == type then
goodsType = pb.enum("EnumGoodsType" , "Suit")
elseif "ClothesSuit" == type then
goodsType = pb.enum("EnumGoodsType" , "ClothesSuit")
end
return goodsType
end
--十六进制转字符串
function Common:HexToStr(hex)
--判断输入类型
if (type(hex)~="string") then
return nil,"hex2str invalid input type"
end
--拼接字符串
local index=1
local ret=""
for index=1,hex:len() do
ret=ret..string.format("%02X",hex:sub(index):byte())
end
return ret
end
--将字符串按格式转为16进制串
function Common:StrToHex(str)
--判断输入类型
if (type(str)~="string") then
return nil,"str2hex invalid input type"
end
--滤掉分隔符
str=str:gsub("[%s%p]",""):upper()
--检查内容是否合法
if(str:find("[^0-9A-Fa-f]")~=nil) then
return nil,"str2hex invalid input content"
end
--检查字符串长度
if(str:len()%2~=0) then
return nil,"str2hex invalid input lenth"
end
--拼接字符串
local index=1
local ret=""
for index=1,str:len(),2 do
ret=ret..string.char(tonumber(str:sub(index,index+1),16))
end
return ret
end
--获取当前进程ID
function Common:GetProcessID( serverId )
local processIds = {} --获取到的进程ID
local fp = io.popen( string.format("ps -ef | grep skynet | grep -v grep | grep config_%d | awk '{print $2}'" , serverId))
for pId in fp:lines() do
table.insert( processIds , pId)
end
return processIds
end
--是否存在
function Common:IsExist( id , allData )
for k, v in pairs( allData ) do
if v == id then
return true
end
end
return false
end
--是否存在
function Common:IsExistForID( id , allData )
for k, v in pairs( allData ) do
if id == v.id then
return true
end
end
return false
end
--存在就加
function Common:AddForID( id , allData )
for k, v in pairs( allData ) do
if v.id == id then
return true
end
end
return false
end
--复制表
function Common:DeepCopy(tb)
if tb == nil then
return nil -- 参见注1
end
local copy = {}
for k, v in pairs(tb) do
if type(v) == 'table' then
copy[k] = self:DeepCopy(v)
else
copy[k] = v
end
end
-- local meta = table.deepCopy(getmetatable(tb))
setmetatable(copy, self:DeepCopy(getmetatable(tb)))
return copy
end
--获取当前时间是给的时间的差距多少天
function Common:GetTimeGap( time )
local count = 0
if time then
local now = os.date("*t", skynet.GetTime())
local next = os.date("*t", time)
if now and next then
local num1 = os.time({ year = now.year, month=now.month, day=now.day })
local num2 = os.time({ year = next.year, month=next.month, day=next.day })
if num1 and num2 then
count = math.abs(num1 - num2) / (3600*24)
end
end
end
return count
end
--是否为新的一月
function Common:IsNewMonth( time1 )
local t1 = os.date("%m",time1)
local t2 = os.date("%m",skynet.GetTime())
if t1 ~= t2 then
return true
end
return false
end
--通过数字分割字符串
function Common:SplitByNumber( input )
local result = {}
string.gsub(input , '[^'.. 0123456789 ..']+' , function(value)
table.insert(result , value)
end)
return result
end
--DES加密
function Common:DesEncode( key, text )
local c = crypt.desencode(key, text, crypt.padding[ "pkcs7" ])
return crypt.base64encode(c)
end
--DES解密
function Common:DesDecode( key, text )
text = crypt.base64decode(text)
return crypt.desdecode(key, text, crypt.padding[ "pkcs7" ])
end
--读取二进制文件
function Common:ReadBinaryFileData( filePath )
local file = io.open(filePath, "rb")
if not file then return nil end
local content = file:read "*all" -- *all reads the whole file
file:close()
return content
end
--写入二进制文件
function Common:WriteBinaryFileData( filePath ,data )
os.execute("touch "..filePath)
local file = io.open( filePath, "wb")
if not file then return nil end
file:write(data)
file:close()
end
--是否存在特殊字符
function Common:IsExistSpecialChar( text )
if string.find(text, "'") or string.find(text, "\\") or string.find(text, "\n") or string.find(text, "\t") or string.find(text, "\r") or
string.find(text, "\v") or string.find(text, "\b") or string.find(text, "?") or string.find(text, "\0") or string.find(text, "\a") or
string.find(text, "\f") then
return true
else
return false
end
--[[
for k, v in pairs( self.specialChar ) do
log.info("11111111111",text,v)
if string.find(text, v) then
return true
end
end
return false
]]
end
--是否存在文件夹
function Common:IsExistFolder( folderPath )
local folderExists = false
local dir, err = io.open(folderPath, "r")
if dir then
dir:close()
folderExists = true
end
return folderExists
end
--是否为屏蔽词
function Common:IsMaskWords( mask )
local pos1,pos2 = nil,nil
for k, v in pairs( skynet.server.gameConfig.MaskWords ) do
pos1,pos2 = string.find( mask , v )
if pos1 and pos2 and pos1 ~= pos2 and "" ~= v then
return true
end
end
return false
end
--打包数据
function Common:PackData( packBeforeData )
--[[
packBeforeData 的数据格式如下
packBeforeData = {}
packBeforeData["key1"] = "value1"
packBeforeData["key2"] = "value2"
]]
local packAfterData = {}
local packIndex = 1
for k, v in pairs( packBeforeData ) do
packAfterData[ packIndex ] = k
packIndex = packIndex + 1
packAfterData[ packIndex ] = v
packIndex = packIndex + 1
end
return packAfterData
end
skynet.server.common = Common
return Common