init
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
--回收元宝
|
||||
--回收 19-6
|
||||
-- 获取玩家的 recover 数据
|
||||
local function getYbActorData(pActor)
|
||||
if Actor.getEntityType(pActor) ~= enActor then
|
||||
assert(false)
|
||||
end
|
||||
local var = Actor.getStaticVar(pActor);
|
||||
if var.YBRecoverData == nil then
|
||||
var.YBRecoverData = {}
|
||||
end
|
||||
|
||||
return var.YBRecoverData
|
||||
end
|
||||
|
||||
function getUseTimeData(pActor, nIdx, nType)
|
||||
local data = getYbActorData(pActor);
|
||||
if data.daily == nil then
|
||||
data.daily = {}
|
||||
end
|
||||
if data.forever == nil then
|
||||
data.forever = {}
|
||||
end
|
||||
if nType == 1 then
|
||||
return data.daily[nIdx] or 0
|
||||
else
|
||||
return data.forever[nIdx] or 0
|
||||
end
|
||||
end
|
||||
|
||||
function AddUsetimeData(pActor, nIdx, nType)
|
||||
local data = getYbActorData(pActor);
|
||||
if data.daily == nil then
|
||||
data.daily = {}
|
||||
end
|
||||
if data.forever == nil then
|
||||
data.forever = {}
|
||||
end
|
||||
if nType == 1 then
|
||||
data.daily[nIdx] = (data.daily[nIdx] or 0) + 1
|
||||
else
|
||||
data.forever[nIdx] = (data.forever[nIdx] or 0) + 1
|
||||
end
|
||||
end
|
||||
|
||||
function HandleRecoverItem(pActor, packet)
|
||||
if Actor.getEntityType(pActor) ~= enActor then
|
||||
return
|
||||
end
|
||||
local nId = DataPack.readInt(packet)
|
||||
local errorcode = 0;
|
||||
local nOpenDay = System.getDaysSinceOpenServer();
|
||||
local recoverCfg = YBrecoverConfig[nId];
|
||||
local nLeftTime = 0;
|
||||
while(true)
|
||||
do
|
||||
if recoverCfg == nil then
|
||||
errorcode = 1;
|
||||
break;
|
||||
end
|
||||
if recoverCfg.recoverlimit then
|
||||
if Actor.checkActorLevel(pActor, recoverCfg.recoverlimit.level or 0, recoverCfg.recoverlimit.zsLevel or 0) ~= true then
|
||||
errorcode = 2;
|
||||
break;
|
||||
end
|
||||
|
||||
if nOpenDay < recoverCfg.recoverlimit.openDay then
|
||||
errorcode = 3;
|
||||
break;
|
||||
end
|
||||
if recoverCfg.daylimit > 0 then
|
||||
if nOpenDay > (recoverCfg.recoverlimit.openDay + recoverCfg.daylimit - 1) then
|
||||
errorcode = 4;
|
||||
break;
|
||||
end
|
||||
end
|
||||
if recoverCfg.timeslimit > 0 then
|
||||
if recoverCfg.timeslimit <= getUseTimeData(pActor, recoverCfg.id, recoverCfg.dayclear or 0) then
|
||||
errorcode = 5;
|
||||
break;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local nActorRight = Actor.GetMaxColorCardLevel(pActor);
|
||||
if nActorRight < recoverCfg.privilegelimit then
|
||||
errorcode = 6;
|
||||
break;
|
||||
end
|
||||
local item = recoverCfg.item
|
||||
if item and CommonFunc.Consumes.CheckActorSources(pActor, item,tstUI) ~= true then
|
||||
errorcode = 7;
|
||||
break
|
||||
end
|
||||
if item and CommonFunc.Consumes.Remove(pActor, item, GameLog.Log_YBRecover, "回收给元宝") ~= true then
|
||||
errorcode = 8
|
||||
break
|
||||
end
|
||||
local nAward = recoverCfg.privilegeaward[nActorRight]
|
||||
if nAward then
|
||||
if CommonFunc.Awards.Give(pActor, nAward, GameLog.Log_YBRecover, "回收给元宝") ~= true then
|
||||
errorcode = 9
|
||||
break
|
||||
end
|
||||
end
|
||||
nLeftTime = recoverCfg.timeslimit
|
||||
if recoverCfg.timeslimit > 0 then
|
||||
AddUsetimeData(pActor, recoverCfg.id, (recoverCfg.dayclear or 0));
|
||||
nLeftTime = recoverCfg.timeslimit - getUseTimeData(pActor, recoverCfg.id, (recoverCfg.dayclear or 0));
|
||||
end
|
||||
break;
|
||||
end
|
||||
-- 回复使用结果
|
||||
local npack = DataPack.allocPacket(pActor, enBasicFunctionsSystemID, enYBRecoverResult)
|
||||
if npack then
|
||||
-- print("errorcode"..errorcode)
|
||||
DataPack.writeByte(npack, errorcode)
|
||||
DataPack.writeInt(npack, nId)
|
||||
DataPack.writeInt(npack, nLeftTime)
|
||||
DataPack.flush(npack)
|
||||
end
|
||||
end
|
||||
|
||||
--列表 19-7
|
||||
function ClientGetData(pActor, packet)
|
||||
local nCount = 0;
|
||||
|
||||
local recoverCfg = YBrecoverConfig;
|
||||
local nOpenDay = System.getDaysSinceOpenServer();
|
||||
|
||||
if recoverCfg then
|
||||
for _, cfg in ipairs(recoverCfg) do
|
||||
if cfg.timeslimit > 0 or cfg.daylimit > 0 then
|
||||
DataPack.writeInt(packet, cfg.id);
|
||||
local nLeftTime = cfg.daylimit
|
||||
if cfg.daylimit > 0 then
|
||||
local nLeftDay = cfg.recoverlimit.openDay + cfg.daylimit - nOpenDay;
|
||||
local todaytime = System.getToday() + nLeftDay*24*3600;
|
||||
local nNowTime = System.getRealtimeMiniTime();
|
||||
nLeftTime = todaytime - nNowTime;
|
||||
if nLeftTime < 0 then
|
||||
nLeftTime = 0
|
||||
end
|
||||
-- print("openday.."..cfg.recoverlimit.openDay.."..cfg.daylimit.."..cfg.daylimit.."oop.."..nOpenDay)
|
||||
end
|
||||
|
||||
DataPack.writeInt(packet, nLeftTime);
|
||||
local nLeftTimes = cfg.timeslimit
|
||||
if cfg.timeslimit > 0 then
|
||||
local nUseCount = getUseTimeData(pActor, cfg.id, (cfg.dayclear or 0));
|
||||
nLeftTimes = cfg.timeslimit - nUseCount;
|
||||
end
|
||||
|
||||
DataPack.writeShort(packet, nLeftTimes);
|
||||
nCount = nCount + 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
return nCount;
|
||||
end
|
||||
function OnNewDayArrive(pActor)
|
||||
local ybData = getYbActorData(pActor);
|
||||
if ybData == nil then
|
||||
return
|
||||
end
|
||||
if ybData.daily == nil then
|
||||
return
|
||||
end
|
||||
|
||||
ybData.daily = nil
|
||||
end
|
||||
|
||||
NetmsgDispatcher.Reg(enBasicFunctionsSystemID, enYBRecover, HandleRecoverItem)
|
||||
ActorEventDispatcher.Reg(aeNewDayArrive, OnNewDayArrive, "YBRecover.lua")
|
||||
Reference in New Issue
Block a user