function ZcBase(_CONST_PAR) local m_public = {} local m_protected = {} m_protected.data = {} m_protected.data.CONST_PAR = _CONST_PAR or { T_GROUP_PLAYER_MAX = 1, T_GROUP_MAX = 1, SU_S = {0, 0}, SU_E = {0, 0}, ET_S = {0, 0}, ET_E = {0, 0}, LM = 0, } m_protected.data.tGropu1 = {} m_protected.data.tGropu2 = {} m_protected.data.tGropu3 = {} m_protected.data.tHadPlayer = {} m_protected.data.lasterError = "UnKnow" --初始化 function m_public.Init(_data) myPrint("初始化未实现",1) end --是否可报名时间段 function m_public.i_CanSignUp() --时间检验 local curTime = d_getCurrentDayTime() local st = T2I(m_protected.data.CONST_PAR.SU_S[1], m_protected.data.CONST_PAR.SU_S[2], 0) local et = T2I(m_protected.data.CONST_PAR.SU_E[1], m_protected.data.CONST_PAR.SU_E[2], 0) if curTime < st then return -1 elseif curTime > et then return 1 end return 0 end --是否可进场时间段 function m_public.i_CanEnter() --时间检验 local curTime = d_getCurrentDayTime() local st = T2I(m_protected.data.CONST_PAR.ET_S[1], m_protected.data.CONST_PAR.ET_S[2], 0) local et = T2I(m_protected.data.CONST_PAR.ET_E[1], m_protected.data.CONST_PAR.ET_E[2], 0) myPrint(curTime .. ":" .. st .. ":" .. et, 1) if curTime < st then return -1 elseif curTime > et then return 1 end return 0 end --报名 function m_public.SetGroupID(_from, _playerID, _ChooseID) myPrint("报名未实现",1) end --进入 function m_public.SetPlayer(_from, _playerID) myPrint("进场未实现",1) end --获得最新的错误 function m_public.GetError(_playerID) return m_protected.data.lasterError end --获得数据 function m_public.GetData() return m_protected.data end return m_public, m_protected end function API_MultiBroadcast(_Key, _Context, _CallBack) if nil == _Context then return _CallBack() end local dLen = table.getn(_Context) if 0 == dLen then return _CallBack() elseif 1 == dLen then return _CallBack(_Context[1]) elseif 2 == dLen then return _CallBack(_Context[1], _Context[2]) elseif 3 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3]) elseif 4 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4]) elseif 5 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5]) elseif 6 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6]) elseif 7 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6], _Context[7]) elseif 8 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6], _Context[7], _Context[8]) elseif 9 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6], _Context[7], _Context[8], _Context[9]) elseif 10 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6], _Context[7], _Context[8], _Context[9], _Context[10]) elseif 11 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6], _Context[7], _Context[8], _Context[9], _Context[10], _Context[11]) elseif 12 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6], _Context[7], _Context[8], _Context[9], _Context[10], _Context[11], _Context[12]) elseif 13 == dLen then return _CallBack(_Context[1], _Context[2], _Context[3], _Context[4], _Context[5], _Context[6], _Context[7], _Context[8], _Context[9], _Context[10], _Context[11], _Context[12], _Context[13]) else myPrint("API_MultiBroadcast",1) -------------------------------------------------------- return true end end G_ZcMediumData = nil t_G_ZcClientData_S = {} function ZcMediumData(_CONST_PAR) local m_public, m_protected = ZcBase(_CONST_PAR) --刷新 function m_public.UpdataDate() local dLen = table.getn(t_G_ZcClientData_S) for i=1, dLen do API_MultiBroadcast(0, {m_protected.data}, t_G_ZcClientData_S[i].Init) end end --报名 function m_public.SetGroupID(_pClient, _playerID, _ChooseID) --myPrint("服务器报名" .. _playerID .."->" .. _ChooseID,1) --帮会归属检验 local GroupID = d_getPlayerFaction(_playerID) if GroupID <= 0 then return false end --时间检验 local iRet = m_public.i_CanSignUp() if 0 ~= iRet then if iRet < 0 then m_protected.data.lasterError = "未到报名时间" else m_protected.data.lasterError = "已超过报名时间" end API_MultiBroadcast(0, {m_protected.data}, _pClient.Ret_CallBack) return end --报名检验 local tG = {m_protected.data.tGropu1, m_protected.data.tGropu2, m_protected.data.tGropu3} for j=1, 3 do local dLen = table.getn(tG[j]) for i=1, dLen do if tG[j][i] == GroupID then m_protected.data.lasterError = "玩家所处帮会已报过名" API_MultiBroadcast(0, {m_protected.data}, _pClient.Ret_CallBack) return end end end --选择检验 if _ChooseID >= 1 and _ChooseID <= 3 then tG[_ChooseID][table.getn(tG[_ChooseID]) + 1] = GroupID m_protected.data.lasterError = "OK" API_MultiBroadcast(0, {m_protected.data}, _pClient.Ret_CallBack) m_public.UpdataDate() else m_protected.data.lasterError = "不存在玩家要报名的副本" API_MultiBroadcast(0, {m_protected.data}, _pClient.Ret_CallBack) end end --进入 function m_public.SetPlayer(_pClient, _playerID) --myPrint("服务器进场" .. _playerID,1) --帮会归属检验 local GroupID = d_getPlayerFaction(_playerID) if GroupID <= 0 then return false end --报名检验 local choose = nil local tG = {m_protected.data.tGropu1, m_protected.data.tGropu2, m_protected.data.tGropu3} for j=1, 3 do local dLen = table.getn(tG[j]) for i=1, dLen do if tG[j][i] == GroupID then choose = j break end end if nil ~= choose then break end end if nil == choose then m_protected.data.lasterError = "玩家所属帮会未报过名" API_MultiBroadcast(0, {m_protected.data}, _pClient.Ret_CallBack) return end --时间检验 local iRet = m_public.i_CanEnter() if 0 ~= iRet then if iRet < 0 then m_protected.data.lasterError = "未到入场时间" else m_protected.data.lasterError = "已超过入场时间" end API_MultiBroadcast(0, {m_protected.data}, _pClient.Ret_CallBack) return end --入场检验 local dLen = table.getn(m_protected.data.tHadPlayer) for i=1, dLen do if _playerID == m_protected.data.tHadPlayer[i] then m_protected.data.lasterError = "玩家已进入过本次副本" API_MultiBroadcast(0, {m_protected.data}, _pClient.Ret_CallBack) return end end m_protected.data.tHadPlayer[table.getn(m_protected.data.tHadPlayer) + 1] = _playerID m_protected.data.lasterError = "OK" _pClient.Ret_CallBack(m_protected.data) m_public.UpdataDate() end return m_public end function ZcClientData() local m_public, m_protected = ZcBase() --结果回调函数 function m_public.Ret_CallBack(_data) m_protected.data = _data myPrint(m_protected.data.lasterError, 1) end --初始数据 function m_public.Init(_data) m_protected.data = _data myPrint("客户端初始化数据",1) end --读本地数据 function m_public.Read() myPrint("客户端读数据",1) end --报名 function m_public.SetGroupID(_from, _playerID, _ChooseID) --服务器报名 API_MultiBroadcast(0, {m_public, _playerID, _ChooseID}, G_ZcMediumData.SetGroupID) end --进入 function m_public.SetPlayer(_from, _playerID) --服务器进场 API_MultiBroadcast(0, {m_public, _playerID}, G_ZcMediumData.SetPlayer) end return m_public end SERVER_CONST_PAR = { T_GROUP_PLAYER_MAX = 1, T_GROUP_MAX = 1, SU_S = {15, 0}, SU_E = {16, 0}, ET_S = {16, 0}, ET_E = {17, 0}, LM = 0, } SERVER_CONST_PAR1 = { T_GROUP_PLAYER_MAX = 1, T_GROUP_MAX = 1, SU_S = {18, 0}, SU_E = {20, 0}, ET_S = {20, 0}, ET_E = {21, 0}, LM = 0, } function UpdataDate_ZcMediumData() G_ZcMediumData = ZcMediumData(SERVER_CONST_PAR) t_G_ZcClientData_S[1] = ZcClientData() G_ZcMediumData.UpdataDate() end UpdataDate_ZcMediumData() function UpdataDate_ZcClientData(_pClient) if 0 ~= _pClient.i_CanSignUp() then myPrint(" false == _pClient.CanSignUp() ", 1) G_ZcMediumData = ZcMediumData(SERVER_CONST_PAR1) G_ZcMediumData.UpdataDate() end end function GetCurrentClientData() return t_G_ZcClientData_S[1] end API_AddLUAReqFunc("SsYgZc_Choose") function SsYgZc_Choose(_dRole, _NPCID, _TaskID) local lNpcFastID = API_VarDataGetNumber(_dRole, 0, 32712) LuaPack_API_GetNpcAllTask(lNpcFastID, _dRole) local curClient = GetCurrentClientData() UpdataDate_ZcClientData(curClient) if 0 ~= curClient.i_CanSignUp() then API_ResponseWrite('<a size="13" color="175,216,242" >' .. "目前时间段无副本开放" ..'</a><br>') else local data = curClient.GetData() API_ResponseWrite('<a size="13" color="175,216,242" >' .. "报名时间["..data.CONST_PAR.SU_S[1] .. ":" .. data.CONST_PAR.SU_S[2] .. "->" .. data.CONST_PAR.SU_E[1] .. ":" .. data.CONST_PAR.SU_E[2] .."]" ..'</a><br>') API_ResponseWrite('<a size="13" color="175,216,242" >' .. "入场时间["..data.CONST_PAR.ET_S[1] .. ":" .. data.CONST_PAR.ET_S[2] .. "->" .. data.CONST_PAR.ET_E[1] .. ":" .. data.CONST_PAR.ET_E[2] .."]" ..'</a><br>') local tG = {data.tGropu1, data.tGropu2, data.tGropu3} for i=1, 3 do local szGroupID = "{" local dLen = table.getn(tG[i]) for j=1, dLen do szGroupID = szGroupID .. tG[i][j] if j ~= dLen then szGroupID = szGroupID .. "|" end end szGroupID = szGroupID .. "}" API_ResponseWrite(ChuanSongStr..'<a size="13" color="175,216,242" href="SsYgZc_SignUp?1='.._dRole..'&2='.._NPCID..'&3='.. i ..'">' .. '击杀Boss' .. i .. szGroupID .. '</a><br>') end end end API_AddLUAReqFunc("SsYgZc_SignUp") function SsYgZc_SignUp() local dRoleID = API_RequestGetNumber(1) local dNPCID = API_RequestGetNumber(2) local dTaskID = API_RequestGetNumber(3) local curClient = GetCurrentClientData() curClient.SetGroupID(nil, dRoleID, dTaskID) end API_AddLUAReqFunc("SsYgZc_Enter") function SsYgZc_Enter(_dRole, _NPCID, _TaskID) local curClient = GetCurrentClientData() UpdataDate_ZcClientData(curClient) local data = curClient.GetData() API_ResponseWrite('<a size="13" color="175,216,242" >' .. "报名时间["..data.CONST_PAR.SU_S[1] .. ":" .. data.CONST_PAR.SU_S[2] .. "->" .. data.CONST_PAR.SU_E[1] .. ":" .. data.CONST_PAR.SU_E[2] .."]" ..'</a><br>') API_ResponseWrite('<a size="13" color="175,216,242" >' .. "入场时间["..data.CONST_PAR.ET_S[1] .. ":" .. data.CONST_PAR.ET_S[2] .. "->" .. data.CONST_PAR.ET_E[1] .. ":" .. data.CONST_PAR.ET_E[2] .."]" ..'</a><br>') local lNpcFastID = API_VarDataGetNumber(_dRole, 0, 32712) LuaPack_API_GetNpcAllTask(lNpcFastID, _dRole) if 0 ~= curClient.i_CanEnter() then API_ResponseWrite('<a size="13" color="175,216,242" >' .. "目前时间段无副本可进场" ..'</a><br>') else API_ResponseWrite(ChuanSongStr..'<a size="13" color="175,216,242" href="SsYgZc_Enter_Choose?1='.._dRole..'&2='.._NPCID..'&3='.. 0 ..'">进场</a><br>') end end API_AddLUAReqFunc("SsYgZc_Enter_Choose") function SsYgZc_Enter_Choose() local dRoleID = API_RequestGetNumber(1) local dNPCID = API_RequestGetNumber(2) local dTaskID = API_RequestGetNumber(3) local curClient = GetCurrentClientData() curClient.SetPlayer(nil, dRoleID) end