2025-06-04 05:02:57 +08:00

397 lines
11 KiB
Plaintext

ACTIVITYTYPE = {
EACTIVITYTYPE_BCAT = 1,
EACTIVITYTYPE_CRAZYGHOST = 2,
}
Custom_ActivityConfig = {
-- B格貓
[ACTIVITYTYPE.EACTIVITYTYPE_BCAT] = {
TraceInfo = {
traceTitle = ZhString.ActivityData_BCAT_TraceTitle,
icon = "bigcat_icon_06",
stateStyle = {
[ActivityCmd_pb.EACTPROGRESS_1] = { thumbBg = nil, thumb = "bigcat_icon_01", traceInfo = ZhString.ActivityData_BCAT_EACTPROGRESS_1 },
[ActivityCmd_pb.EACTPROGRESS_2] = { thumbBg = "bigcat_icon_03", thumb = "bigcat_icon_02", traceInfo = ZhString.ActivityData_BCAT_EACTPROGRESS_2 },
[ActivityCmd_pb.EACTPROGRESS_3] = { thumbBg = "bigcat_icon_03", thumb = nil, traceInfo = ZhString.ActivityData_BCAT_EACTPROGRESS_3 },
[ActivityCmd_pb.EACTPROGRESS_SUCCESS] = { thumbBg = "bigcat_icon_03", thumb = "bigcat_icon_04", traceInfo = ZhString.ActivityData_BCAT_EACTPROGRESS_SUCCESS, process = 1 },
[ActivityCmd_pb.EACTPROGRESS_FAIL] = { thumbBg = "bigcat_icon_03", thumb = "bigcat_icon_05", traceInfo = ZhString.ActivityData_BCAT_EACTPROGRESS_FAIL, process = 1 },
},
},
MapSymbol = {
SpriteName = "bigcat_icon_06",
Size = {42, 40},
},
MapInfo = {
icon = "bigcat_icon_06",
label = ZhString.ActivityData_BCAT_MapInfo,
iconScale = 0.8,
},
EndStay = 600,
},
-- 白幽靈
[ACTIVITYTYPE.EACTIVITYTYPE_CRAZYGHOST] = {
TraceInfo = {
traceTitle = ZhString.ActivityData_CRAZYGHOST_TraceTitle,
icon = "bigcat_icon_08",
stateStyle = {
[ActivityCmd_pb.EACTPROGRESS_1] = { thumbBg = nil, thumb = "bigcat_icon_01", traceInfo = ZhString.ActivityData_CRAZYGHOST_EACTPROGRESS_1 },
[ActivityCmd_pb.EACTPROGRESS_2] = { thumbBg = "bigcat_icon_07", thumb = nil, traceInfo = ZhString.ActivityData_CRAZYGHOST_EACTPROGRESS_2 },
[ActivityCmd_pb.EACTPROGRESS_SUCCESS] = { thumbBg = "bigcat_icon_07", thumb = "bigcat_icon_04", traceInfo = ActivityData_CRAZYGHOST_EACTPROGRESS_SUCCESS, process = 1 },
[ActivityCmd_pb.EACTPROGRESS_FAIL] = { thumbBg = "bigcat_icon_07", thumb = "bigcat_icon_05", traceInfo = ZhString.ActivityData_CRAZYGHOST_EACTPROGRESS_FAIL, process = 1 },
},
},
MapSymbol = {
SpriteName = "bigcat_icon_08",
Size = {37, 40},
},
MapInfo = {
icon = "bigcat_icon_08",
text = ZhString.ActivityData_CRAZYGHOST_MapInfo,
iconScale = 0.7,
},
EndStay = 600,
},
}
local _sCurServerTime;
local _GetNowServerTime = function ()
if(_sCurServerTime == nil)then
_sCurServerTime = ServerTime.CurServerTime;
end
return _sCurServerTime()/1000;
end
ActivityData = class("ActivityData");
local tempPos = LuaVector3();
function ActivityData.CreateIdByType(type)
if(type)then
return "Activity_"..tostring(type);
end
end
function ActivityData.GetTraceQuestDataType(type)
if(Custom_ActivityConfig[type])then
return QuestDataType.QuestDataType_INVADE;
end
return QuestDataType.QuestDataType_ACTIVITY_TRACEINFO;
end
function ActivityData:ctor(type, mapid, whole_starttime, whole_endtime)
if(type == nil)then
return;
end
self.type = type;
self.id = ActivityData.CreateIdByType(type);
self:SetState(0);
self:UpdateInfo(mapid, whole_starttime, whole_endtime);
self.customConfig = Custom_ActivityConfig[type];
if(self.customConfig)then
self.traceInfo_update = true;
self.endStaySec = self.customConfig.EndStay ~= nil and self.customConfig.EndStay or 0;
else
self.endStaySec = 0;
end
self.showConfig = Table_OperationActivity[self.type];
self.traceData = {};
self.state_timemap = {};
end
function ActivityData:UpdateInfo(mapid, whole_starttime, whole_endtime)
self.mapid = mapid;
self.whole_starttime = whole_starttime;
self.whole_endtime = whole_endtime;
end
function ActivityData:SetState(state, state_starttime, state_endtime)
self.state = state;
local traceConfigId = self.type * 10000 + state;
self.configData = Table_ActivityStepShow[traceConfigId];
if(state_starttime and state_endtime and state_starttime~=0 and state_endtime~=0)then
local state_timecache = self.state_timemap[state];
if(state_timecache == nil)then
state_timecache = {};
self.state_timemap[state] = state_timecache;
end
state_timecache[1] = state_starttime;
state_timecache[2] = state_endtime;
end
end
function ActivityData:GetDuringTime()
local state_timecache = self.state and self.state_timemap[self.state] or nil;
local starttime, endtime;
if(state_timecache)then
starttime = state_timecache[1];
endtime = state_timecache[2];
elseif(self.whole_endtime and self.whole_starttime)then
starttime = self.whole_starttime;
endtime = self.whole_endtime;
end
return starttime, endtime;
end
-- 1. 開始時間==結束時間 true
-- 2. 沒有開始時間和結束時間 true
-- 3. 僅有開始時間 目前時間>開始時間 true
-- 4. 僅有結束時間 目前時間<結束時間 true
function ActivityData:InRunningTime(ignoreEndStay)
local st, et = self:GetDuringTime();
if(st == et and st ~= nil)then
redlog("activity no start and end time", self.type);
return true;
end
local nt = _GetNowServerTime();
if(st ~= nil and nt < st)then
return false;
end
if(et ~= nil)then
if(ignoreEndStay)then
if(nt > et)then
return false;
end
else
if(nt > et + self.endStaySec)then
return false;
end
end
end
return true;
end
function ActivityData:IsShowInMenu()
if(self.showConfig)then
return self.showConfig.Type == 1;
end
return false;
end
function ActivityData:IsTraceInfo_NeedUpdate()
return self.traceInfo_update == true;
end
function ActivityData:GetProgress()
local starttime, endtime = self:GetDuringTime();
local curServerTime = ServerTime.CurServerTime()/1000;
if(endtime == nil)then
return;
end
if(curServerTime > endtime)then
return 1;
end
local timepct = (curServerTime - starttime)/(endtime - starttime);
local pctage = self.configData and self.configData.Percentage;
if(pctage == nil or pctage == _EmptyTable)then
return timepct;
end
timepct = timepct * 100;
local realPct = nil;
for i=1,#pctage do
local curPctage = pctage[i];
if(timepct <= curPctage[2])then
local prePctage = pctage[i-1];
if(prePctage == nil)then
prePctage = {0, 0};
end
local leftPct = timepct - prePctage[2];
local pct = 0;
if(curPctage[2] ~= prePctage[2])then
pct = (curPctage[1] - prePctage[1])/(curPctage[2] - prePctage[2]);
end
leftPct = leftPct * pct;
if(realPct == nil)then
realPct = leftPct;
else
realPct = realPct + leftPct;
end
break;
else
realPct = curPctage[1];
end
end
return math.floor(realPct)/100;
end
function ActivityData:IsNeedTrace(nowMapId)
if(self.customConfig == nil and self.configData == nil)then
return false;
end
if(self.mapid == nil)then
return true;
end
return self.mapid == nowMapId;
end
function ActivityData:GetTraceInfo(nowMapId)
if(not self:IsNeedTrace(nowMapId))then
return nil;
end
local traceInfo = self:GetConfigTraceInfo(nowMapId);
if(traceInfo ~= nil)then
return traceInfo;
end
return self:GetCustomTraceInfo(nowMapId);
end
function ActivityData:GetCustomTraceInfo(nowMapId)
local traceInfo = self.customConfig and self.customConfig.TraceInfo;
if(not traceInfo)then
return nil;
end
local traceData = self.traceData;
TableUtility.TableClear(traceData);
traceData.type = ActivityData.GetTraceQuestDataType(self.type);
traceData.questDataStepType = QuestDataStepType.QuestDataStepType_INVADE;
traceData.id = ActivityData.CreateIdByType(self.type);
traceData.traceTitle = traceInfo.traceTitle;
traceData.icon = traceInfo.icon;
local starttime1 = os.clock();
local state = self.state or 1;
local stateConfig = traceInfo.stateStyle and traceInfo.stateStyle[state];
if(stateConfig)then
traceData.traceInfo = stateConfig.traceInfo;
traceData.thumbBg = stateConfig.thumbBg;
traceData.thumb = stateConfig.thumb;
traceData.process = stateConfig.process or self:GetProgress();
starttime2 = os.clock();
else
errorLog(string.format("State:%s not config", state));
end
return traceData;
end
function ActivityData:GetConfigTraceInfo(nowMapId)
local configData = self.configData;
if(configData == nil)then
return;
end
if(nowMapId and configData.UnShowMaps ~= _EmptyTable)then
if(TableUtility.ArrayFindIndex(configData.UnShowMaps, nowMapId) ~= 0)then
return;
end
end
if(configData.LimitLevel)then
local rolelv = MyselfProxy.Instance:RoleLevel();
if(rolelv < configData.LimitLevel)then
return;
end
end
local traceData = self.traceData;
TableUtility.TableClear(traceData);
traceData.type = ActivityData.GetTraceQuestDataType(self.type);
traceData.questDataStepType = QuestDataStepType.QuestDataStepType_WAIT;
traceData.id = ActivityData.CreateIdByType(self.type);
traceData.traceTitle = configData.Trace_Title;
traceData.icon = configData.Trace_Icon;
traceData.titleBg = true;
local trace_Text = configData.Trace_Text or "";
if(string.find(trace_Text, "%[HappyValue%]"))then
traceData.traceInfo = string.gsub(trace_Text or "", "%[HappyValue%]" , ActivityData.GetHappyValue());
self.traceInfo_update = true;
else
traceData.traceInfo = trace_Text;
end
if(configData.TraceId)then
self.traceId = configData.TraceId;
local shortCutData = Table_ShortcutPower[configData.TraceId];
if(shortCutData)then
local mapid = shortCutData.Event.mapid;
if(configData.HideMapName ~= 1)then
local mapName = Table_Map[mapid] and Table_Map[mapid].CallZh or "";
if(mapName)then
traceData.traceInfo = traceData.traceInfo .. "\n" .. ZhString.ActivityData_PositionTip .. mapName;
end
end
traceData.map = mapid;
traceData.questDataStepType = QuestDataStepType.QuestDataStepType_MOVE;
local pos = shortCutData.Event.pos;
if(shortCutData.Event.npcid)then
traceData.questDataStepType = QuestDataStepType.QuestDataStepType_VISIT;
traceData.params = {};
traceData.params.npc = shortCutData.Event.npcid;
traceData.params.uniqueid = shortCutData.Event.uniqueid;
elseif(pos)then
tempPos:Set(pos[1], pos[2], pos[3]);
traceData.pos = tempPos;
end
end
end
local cfg_progress = configData.Trace_Progress;
if(cfg_progress ~= _EmptyTable and cfg_progress.show == 1)then
traceData.process = self:GetProgress();
traceData.thumb = cfg_progress.thumb;
traceData.thumbBg = cfg_progress.thumbBg;
traceData.foreBg = cfg_progress.foreBg;
traceData.progressBg = cfg_progress.progressBg;
self.traceInfo_update = true;
end
return traceData;
end
function ActivityData.GetHappyValue()
return Game.Myself.data.userdata:Get(UDEnum.JOY) or "";
end
function ActivityData:GetMapSymbol()
return self.customConfig and self.customConfig.MapSymbol;
end
function ActivityData:GetMapInfo()
return self.customConfig and self.customConfig.MapInfo;
end
function ActivityData:GetEndStaySec()
return self.endStaySec;
end
function ActivityData:GetEndTime()
return self.whole_endtime
end
function ActivityData:Destroy()
self.traceData = nil;
self.mapInfo = nil;
end