| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593 |
- local ModuleChooseLayer = class("ModuleChooseLayer", function ()
- return cc.Layer:create()
- end)
- local cjson = require("cjson")
- local tinsert = table.insert
- local tremove = table.remove
- local fixBtnPos = cc.p(950, 310)
- local hasRoleGroup = -99
- ModuleChooseLayer.CountOfPage = 200
- ModuleChooseLayer.path = "res_launcher/private/server/"
- ModuleChooseLayer.publicPath = "res_launcher/public/"
- ModuleChooseLayer.DownloadFlag =
- {
- Logo = 1,
- AgeTips = 2,
- LogoMini = 3,
- LogoMini2 = 4,
- }
- local function TextCreateRichText(parent, str)
- parent:setString("")
- parent:removeAllChildren()
- local visibleSize = global.Director:getVisibleSize()
- local RichTextHelp = requireLauncher( "init/RichTextHelp" )
- local colorRGB = parent:getTextColor()
- local color = string.format("#%02x%02x%02x", colorRGB.r, colorRGB.g, colorRGB.b)
- local maxWidth = global.IS_PORTRAIT and visibleSize.width or 2000
- local richText = RichTextHelp:CreateRichTextWithXML(str, maxWidth, parent:getFontSize() or 18, color)
- richText:setName("RICH_TEXT_")
- richText:formatText()
- richText:setAnchorPoint({x=0.5, y=0})
- parent:addChild(richText)
- if global.IS_PORTRAIT then
- local pSize = parent:getContentSize()
- richText:setPosition(pSize.width / 2, 0)
- end
- richText:setOpenUrlHandler( function(sender, url)
- cc.Application:getInstance():openURL(url)
- end )
- end
- local function drawButtonColorStyle(sender, config)
- local labelRenderer = sender:getTitleRenderer()
- -- button
- sender:setTitleFontSize(config.fontSize)
- -- 字体大小
- local lastTTFConfig = labelRenderer:getTTFConfig()
- lastTTFConfig.fontSize = config.fontSize
- labelRenderer:setTTFConfig( lastTTFConfig )
- -- 字体颜色
- labelRenderer:setTextColor(config.color)
- -- 描边颜色和大小
- if config.outlineColor and config.outlineSize then
- labelRenderer:enableOutline(config.outlineColor, config.outlineSize)
- end
- end
- local function drawTextColorStyle(sender, config)
- local labelRenderer = sender:getVirtualRenderer()
- sender:setFontSize(config.fontSize)
- -- 字体大小
- local lastTTFConfig = labelRenderer:getTTFConfig()
- lastTTFConfig.fontSize = config.fontSize
- labelRenderer:setTTFConfig( lastTTFConfig )
- -- 字体颜色
- labelRenderer:setTextColor(config.color)
- -- 描边颜色和大小
- if config.outlineColor and config.outlineSize then
- labelRenderer:enableOutline(config.outlineColor, config.outlineSize)
- end
- end
- --哈希表转成按数组
- local function HashToSortArray(hashTab, sortFunc)
- if hashTab == nil or type(hashTab) ~= "table" then
- return nil
- end
- local sortTable = {}
- for _, v in pairs(hashTab) do
- tinsert(sortTable, v)
- end
- if sortFunc then
- table.sort(sortTable, sortFunc)
- end
- return sortTable
- end
- local function createQuickCell(data)
- local wid = data.wid
- local hei = data.hei
- local callback = data.callback
- local widget = ccui.Widget:create()
- widget:setContentSize({width=wid, height=hei})
- widget:setAnchorPoint({x=0, y=0})
- local quickCell = {}
- quickCell.widget = widget
- quickCell.callback = callback
- quickCell.actived = false
- local visibleSize = cc.Director:getInstance():getVisibleSize()
- local function refresh()
- local worldPos = widget:getWorldPosition()
- local active = (worldPos.y <= visibleSize.height + hei and worldPos.y >= -hei )
- if active then
- if not quickCell.actived then
- quickCell.actived= active
- local cell = quickCell.callback()
- cell:setAnchorPoint({x=0.5, y=0.5})
- cell:setPosition({x=wid/2, y=hei/2})
- widget:removeAllChildren()
- widget:addChild(cell)
- end
- else
- if quickCell.actived then
- quickCell.actived= active
- widget:removeAllChildren()
- end
- end
- end
- quickCell.exit = function()
- quickCell.actived = false
- refresh()
- end
- local delay = cc.DelayTime:create(0.02)
- local sequence = cc.Sequence:create(delay, cc.CallFunc:create(refresh))
- local action = cc.RepeatForever:create(sequence)
- widget:runAction(action)
- return quickCell
- end
- local function getAgreementState()
- local launcherModID = global.L_ModuleManager:GetLauncherModuleID()
- local channelID = tostring(global.L_GameEnvManager:GetChannelID())
- local userData = UserData:new(launcherModID .. channelID .. "_data")
- local agreement = userData:getIntegerForKey("agreement", 0)
- return tonumber(agreement) or 0
- end
- local function isAutoLaunchEnable()
- -- windows平台生效
- if cc.Application:getInstance():getTargetPlatform() ~= cc.PLATFORM_OS_WINDOWS then
- return false
- end
- -- 是否有字段启动的字段
- -- 给qq大厅自动启动
- local autoBoot = global.L_GameEnvManager:GetEnvDataByKey("isAutoBoot")
- if not autoBoot then
- return false
- end
- return true
- end
- function ModuleChooseLayer:ctor()
- self._subModCells = {} -- module
- self._currentModule = nil -- 当前module
- self._currentSubMod = nil -- 当前subMod
- self._group = -1 -- 当前选择组
- self._gservers = {} -- 服务器,根据组分开的
- self._groupCells = {} -- 组条目
- self._serverCells = {} -- 服务器条目
- self._loginedCells = {} -- 已登录条目
- self._serverCache = {} -- 缓存池
- self._announceUI = nil
- self._agreementUI = nil
- self._existLastMod = false -- 是否有上次选择模块,用以区分新老用户
- self._releaseFlag = false
- self._srvlistCount = 0
- self._customCount = 0
- self._launchTimerID = nil
- self._srvlistTimerID = nil
- self._srvlistTime = 10*60
- end
- function ModuleChooseLayer.create()
- local layer = ModuleChooseLayer.new()
- if layer:Init() then
- return layer
- end
- return nil
- end
- function ModuleChooseLayer:Init()
- local visibleSize = cc.Director:getInstance():getVisibleSize()
- if global.IS_PORTRAIT then
- self._isPortrait = true
- self._root = CreateExport_launcher("server/all_modules_portrait")
- else
- self._root = CreateExport_launcher("server/all_modules")
- end
- if not self._root then
- return false
- end
- self:addChild(self._root)
- self.ui = ui_delegate(self._root)
-
- self.ui.Image_login_bg:setContentSize(visibleSize)
- self.ui.Panel_bg:setVisible(false)
- self:InitCustomUI()
- self:InitCode()
- self:InitLaunch()
- self:InitServers()
- self:InitAllModules()
- self:InitLauncherVersion()
- self:SelectDefaultModule()
- self:ShowLaunch()
- self:HideServers()
- self:UpdateSelected()
- self.ui.Image_icon:setVisible(false)
- self.ui.Panel_agreement:setVisible(false)
- self.ui.Image_age_tips:setVisible(false)
- self.ui.Text_auth_tips:setVisible(false)
-
- self.ui.Panel_launch:setSwallowTouches(false)
- -- logo mini
- self._imageLogoMini = ccui.ImageView:create()
- self.ui.Panel_launch:addChild(self._imageLogoMini)
- self._imageLogoMini:setAnchorPoint(0.5, 0)
- local logoPos = cc.p(330, 460)
- if self._isPortrait then
- logoPos = cc.p(296,650)
- end
- self._imageLogoMini:setPosition(logoPos)
- self._imageLogoMini:setVisible(false)
- -- logo mini2
- local posx, posy = self.ui.Button_logout:getPosition()
- self._imageLogoMini2 = ccui.ImageView:create()
- self._imageLogoMini2:loadTexture( imgPath )
- self._imageLogoMini2:setAnchorPoint( 0.5, 0.5 )
- self._imageLogoMini2:setPosition( posx + 50, posy + 60 )
- self.ui.Panel_bg:addChild( self._imageLogoMini2,-1 )
- self._imageLogoMini2:setVisible(false)
-
- if self._isPortrait then
- fixBtnPos = cc.p(554,710)
- end
- local showResolution = global.L_GameEnvManager:GetEnvDataByKey("showResolution")
- local otherResolution = global.L_GameEnvManager:GetEnvDataByKey("otherResolution")
- if global.isDebugMode or global.isGMMode or showResolution then
- local buttonPlatform = ccui.Button:create()
- self.ui.Panel_launch:addChild(buttonPlatform)
- local platformOffsetY = 140
- if self._isPortrait then
- platformOffsetY = 350
- end
- buttonPlatform:setPosition(cc.p(fixBtnPos.x, fixBtnPos.y - platformOffsetY))
- buttonPlatform:loadTextureNormal(self.path .. "btn_jryx_02.png",0)
- buttonPlatform:loadTexturePressed(self.path .. "btn_jryx_02_1.png",0)
- buttonPlatform:setTitleFontName("fonts/font.ttf")
- buttonPlatform:setTitleFontSize(18)
- local btnTextStr = global.CURRENT_OPERMODE == global.OPERMODE_WINDOWS and "电脑端" or "手机端"
- btnTextStr = fixNewLanguageString( btnTextStr )
- buttonPlatform:setTitleText(btnTextStr)
- buttonPlatform:setTouchEnabled(true)
- buttonPlatform:addClickEventListener(function()
- global.CURRENT_OPERMODE = (global.CURRENT_OPERMODE == global.OPERMODE_WINDOWS and global.OPERMODE_MOBILE or global.OPERMODE_WINDOWS)
- buttonPlatform:setTitleText(btnTextStr)
- --
- local resolution = (global.CURRENT_OPERMODE == global.OPERMODE_WINDOWS) and "1024x768" or "1136x640"
- global.L_GameEnvManager:SetGameEnvDataByKey("resolution", resolution)
- global.L_GameEnvManager:SetGameEnvDataByKey("oper_mode", global.CURRENT_OPERMODE)
- global.L_GameEnvManager:RestartGame()
- end)
- drawButtonColorStyle(buttonPlatform, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- if showResolution then
- buttonPlatform:setVisible(false)
- end
- --
- if global.CURRENT_OPERMODE == global.OPERMODE_WINDOWS then
- local buttonResolution = ccui.Button:create()
- self.ui.Panel_launch:addChild(buttonResolution)
- buttonResolution:setPosition(cc.p(fixBtnPos.x-100, fixBtnPos.y - platformOffsetY))
- buttonResolution:loadTextureNormal(self.path .. "btn_jryx_02.png",0)
- buttonResolution:loadTexturePressed(self.path .. "btn_jryx_02_1.png",0)
- buttonResolution:setTitleFontName("fonts/font.ttf")
- buttonResolution:setTitleFontSize(18)
- buttonResolution:setTitleText(string.format("%s x %s", global.DesignSize_Win.width, global.DesignSize_Win.height))
- buttonResolution:setTouchEnabled(true)
- buttonResolution:addClickEventListener(function()
- local resolutions =
- {
- {width = 1136, height = 640},
- }
- if otherResolution and string.len( otherResolution ) > 0 then
- local data = string.split( otherResolution, "|" )
- for _, v in ipairs(data) do
- if v and v ~= "" then
- local size = string.split( v, "x" )
- if size and tonumber(size[1]) and tonumber(size[2]) then
- table.insert( resolutions,{width = tonumber(size[1]), height = tonumber(size[2]) } )
- end
- end
- end
- end
- local newresolution = resolutions[1]
- for k, v in pairs(resolutions) do
- if v.width == global.DesignSize_Win.width and v.height == global.DesignSize_Win.height then
- local index = (k == #resolutions and 1 or k+1)
- newresolution = resolutions[index]
- break
- end
- end
- global.L_GameEnvManager:SetGameEnvDataByKey("resolution", string.format("%sx%s", newresolution.width, newresolution.height))
- global.L_GameEnvManager:SetGamePreEnvDataByKey("resolution", string.format("%sx%s", newresolution.width, newresolution.height))
- global.L_GameEnvManager:RestartGame()
- end)
- drawButtonColorStyle(buttonResolution, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- end
- end
- -- 监听window size change
- if global.isWindows and not global.isBoxLogin then
- self._windowResizedListener = cc.EventListenerCustom:create("glview_window_resized", handler( self, self.onWindowResized ))
- global.Director:getEventDispatcher():addEventListenerWithFixedPriority(self._windowResizedListener, 1)
- end
- -- 10min,执行退出SDK/返回盒子
- self.ui.Panel_launch:runAction(cc.Sequence:create(cc.DelayTime:create(10*60), cc.CallFunc:create(function()
- if global.isBoxLogin and global.L_NativeBridgeManager.GN_finishGame and not global.isWindows then
- global.L_NativeBridgeManager:GN_finishGame()
- return
- end
- if tonumber(global.L_GameEnvManager:GetEnvDataByKey("isBoxLogin")) == 1 and global.L_GameEnvManager:GetEnvDataByKey("isCloudLogin") then
- return
- end
- global.L_NativeBridgeManager:GN_accountLogout()
- global.L_GameEnvManager:RestartGame()
- end)))
- self:InitGameList()
- return true
- end
- function ModuleChooseLayer:InitGameList()
- self.ui.Panel_webview:setVisible(false)
-
- local winSize = global.Director:getWinSize()
- self.ui.Panel_webview:setContentSize(winSize.width, winSize.height)
- self.ui.Panel_webview_tips:setPosition(winSize.width / 2 , winSize.height / 2)
- self.ui.Panel_webview_tips:setVisible(false)
- self.ui.Panel_webview:addClickEventListener(function ()
- -- self:HideGameList()
- end)
- self.ui.Button_exit_wait:addClickEventListener(function ()
- self:HideGameList()
- end)
- self.ui.Image_web_wait:runAction(cc.RepeatForever:create(cc.RotateBy:create(1.5, 360)))
- end
- function ModuleChooseLayer:HideGameList()
- self.ui.Panel_webview:setVisible(false)
- self.ui.Panel_webview_tips:setVisible(false)
- if self._webView then
- self._webView:removeFromParent()
- self._webView = nil
- end
- end
- function ModuleChooseLayer:onWindowResized( eventCustom )
- global.L_GameEnvManager:RestartGame()
- end
- function ModuleChooseLayer:InitCustomUI()
- local lastBtnPosX,lastBtnPosY = nil,nil
- if self.ui.Button_fix then
- lastBtnPosX,lastBtnPosY = self.ui.Button_fix:getPosition()
- end
- local Button_delete_account = ccui.Button:create()
- self.ui.Panel_launch:addChild(Button_delete_account)
- Button_delete_account:setPosition(cc.p(lastBtnPosX or fixBtnPos.x, lastBtnPosY and (lastBtnPosY-70) or fixBtnPos.y))
- Button_delete_account:loadTextureNormal(self.path .. "btn_jryx_02.png",0)
- Button_delete_account:loadTexturePressed(self.path .. "btn_jryx_02_1.png",0)
- Button_delete_account:setTitleFontName("fonts/font.ttf")
- Button_delete_account:setTitleFontSize(18)
- local btnTextStr = fixNewLanguageString( "注销账号" )
- Button_delete_account:setTitleText(btnTextStr)
- Button_delete_account:setTouchEnabled(true)
- Button_delete_account:setVisible(false)
- self.ui.Button_delete_account = Button_delete_account
- end
- function ModuleChooseLayer:LaunchModule()
- releasePrint("++++++++++++++++++++++++++++launch module")
- --
- ShowLoadingBar(1)
- self.ui.Button_launch:setTouchEnabled(false)
- self.ui.Button_launch:runAction(cc.Sequence:create(
- cc.DelayTime:create(3),
- cc.CallFunc:create(function() self.ui.Button_launch:setTouchEnabled(true) end))
- )
- -- 未勾选用户协议
- if not self.BoxAutoEnterGame and self.ui.CheckBox_agreement and not self.ui.CheckBox_agreement:isSelected() then
- global.L_SystemTipsManager:ShowTips("请仔细阅读下方协议并勾选")
- -- 弹出用户协议提示 上报自定义事件
- local dataParam = {
- event={time=os.time(),name = "openNotice_agreement",type = "track"}
- }
- local userId = global.L_GameEnvManager:GetEnvDataByKey("user_id") or global.L_GameEnvManager:GetEnvDataByKey("uid")
- if userId and userId ~= "" then
- dataParam.user = {id = userId}
- end
- global.L_DataRePort:SendRePortData( dataParam )
- return
- end
-
- -- 未曾登录
- if not self.BoxAutoEnterGame and global.isMobile and (1 ~= global.L_NativeBridgeManager:GetLoginState()) then
- global.L_NativeBridgeManager:GN_accountLogin()
- return
- end
- if not self._currentModule or not self._currentSubMod then
- global.L_SystemTipsManager:ShowTips("未选择游戏模块!")
- return
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local serverData = modGameEnv:GetServerData()
- local selectedServer = modGameEnv:GetSelectedServer()
- if modGameEnv:IsNewServerlist() and not modGameEnv:GetCustomIsLoaded() then
- releasePrint("custom还未获取!")
- return
- end
- -- 未选择服务器
- if not selectedServer then
- global.L_SystemTipsManager:ShowTips("请选择服务器!")
- return nil
- end
- -- 维护且不是白名单
- if selectedServer.state == 4 and (not modGameEnv:IsWhitelist()) then
- global.L_SystemTipsManager:ShowTips("服务器正在维护中,请选择其它服务器!")
- return
- end
- -- 登录数据
- local username = global.L_NativeBridgeManager:GetUsername()
- local password = global.L_NativeBridgeManager:GetPassword()
- modGameEnv:SetLoginData({username = username, password = password})
- -- 选择的服务器存储到本地
- modGameEnv:SaveLastServers()
- -- 上次选择模块存储本地
- local launcherModID = global.L_ModuleManager:GetLauncherModuleID()
- local channelID = tostring(global.L_GameEnvManager:GetChannelID())
- local userData = UserData:new(launcherModID .. channelID .. "_data")
- userData:setStringForKey("last_module", self._currentModule:GetID())
- userData:setStringForKey("last_submod", self._currentSubMod:GetID())
- userData:writeMapDataToFile()
- -- 发起一个请求, 请求启动游戏
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local serverData = modGameEnv:GetServerData()
- local selectedServer = modGameEnv:GetSelectedServer()
- local server_id = selectedServer.serverId
- local server_name = selectedServer.serverName
- -- 进入游戏, 上报自定义事件
- local dataParam = {
- event = {
- time = os.time(), name = "clickButton_enter", type = "track"
- },
- properities = {
- servid = tostring(server_id), server_name = tostring(server_name)
- }
- }
- local main_servid = selectedServer and selectedServer.mainServerId
- local main_server_name = selectedServer and selectedServer.mainServerName
-
- dataParam.properities.main_servid = main_servid and tostring(main_servid) or tostring(server_id)
- dataParam.properities.main_server_name = main_server_name and tostring(main_server_name) or tostring(server_name)
- local userId = global.L_GameEnvManager:GetEnvDataByKey("user_id") or global.L_GameEnvManager:GetEnvDataByKey("uid")
- if userId and userId ~= "" then
- dataParam.user = {id = userId}
- end
- global.L_DataRePort:SendRePortData( dataParam )
- local jData = {}
- jData.gameid = self._currentSubMod:GetOperID()
- jData.id = self._currentSubMod:GetID()
- jData.name = self._currentSubMod:GetName()
- jData.channelID = tostring(global.L_GameEnvManager:GetChannelID())
- jData.server_id = server_id
- jData.server_name = server_name
- jData.userId = global.L_GameEnvManager:GetEnvDataByKey("user_id") or ""
- global.L_NativeBridgeManager:GN_requestAllowLaunch(jData)
- -- run game
- if self._launchTimerID then
- UnSchedule(self._launchTimerID)
- self._launchTimerID = nil
- end
- local function scheduleCB()
- -- 不允许进入
- if not global.L_NativeBridgeManager:CheckAllowLaunch() then
- return false
- end
-
- -- 未选择模块
- if not self._currentModule or not self._currentSubMod then
- return false
- end
- -- 停止定时器
- if self._launchTimerID then
- UnSchedule(self._launchTimerID)
- self._launchTimerID = nil
- end
- -- 停止srvlist自动刷新定时器
- if self._srvlistTimerID then
- UnSchedule(self._srvlistTimerID)
- self._srvlistTimerID = nil
- end
- -- 数据上报
- local jData = {}
- jData.gameid = self._currentSubMod:GetOperID()
- jData.id = self._currentSubMod:GetID()
- jData.name = self._currentSubMod:GetName()
- jData.subModID = self._currentSubMod:GetID()
- jData.moduleID = self._currentModule:GetID()
- jData.version = self._currentModule:GetVersion()
- jData.originVersion = self._currentModule:GetOriginVersion()
- jData.cacheVersion = self._currentModule:GetCacheVersion()
- jData.channelID = tostring(global.L_GameEnvManager:GetChannelID())
- jData.server_id = selectedServer.serverId
- jData.server_name = selectedServer.serverName
- global.L_NativeBridgeManager:GN_selectGameMod(jData)
- if self._windowResizedListener then
- global.Director:getEventDispatcher():removeEventListener( self._windowResizedListener )
- self._windowResizedListener = nil
- end
- -- 进入了
- self._currentModule:RegisterSubMod(self._currentSubMod:GetID())
- global.L_ModuleManager:RegisterModuleByID(self._currentModule:GetID())
- global.L_ModuleManager:CheckModuleLocalStorage()
- end
- self._launchTimerID = Schedule(scheduleCB, 0.1)
- -- 停止定时器,目的是为了停止自动执行退出游戏操作
- self.ui.Panel_launch:stopAllActions()
- end
- function ModuleChooseLayer:checkAutoLaunchGameMod()
- if not isAutoLaunchEnable() then
- return
- end
- if tonumber(global.L_GameEnvManager:GetEnvDataByKey("auto_agreement_select")) == 1 then
- self.ui.CheckBox_agreement:setSelected(true)
- end
- -- 倒计时3s自动登录 新玩家1s 老玩家6s
- local newPlayerDelay = tonumber(global.L_GameEnvManager:GetEnvDataByKey("auto_new_player_delay")) or 1
- local oldPlayerDelay = tonumber(global.L_GameEnvManager:GetEnvDataByKey("auto_old_player_delay")) or 6
- local isNewPlayer = self._existLastMod == false
- local delay = isNewPlayer and newPlayerDelay or oldPlayerDelay
- local function callback()
- self.ui.Button_launch:setTitleText(string.format("进入游戏(%s)", delay))
- delay = delay - 1
- if delay == 0 then
- self:LaunchModule()
- end
- end
- local action = self.ui.Button_launch.ctdownAction
- self.ui.Button_launch:stopAction( action )
- local sequence = cc.Sequence:create(cc.DelayTime:create(1), cc.CallFunc:create(callback))
- action = cc.RepeatForever:create(sequence)
- self.ui.Button_launch:runAction(action)
- self.ui.Button_launch.ctdownAction = action
- callback()
- self:touchTerminateAutoButton()
- end
- function ModuleChooseLayer:terminateAutoLaunchGameMod()
- if not isAutoLaunchEnable() then
- return
- end
- local action = self.ui.Button_launch.ctdownAction
- if action then
- self.ui.Button_launch:stopAction( action )
- action = nil
- end
- self.ui.Button_launch:setTitleText("进入游戏")
- end
- -- 创建触摸层 用来停止自动按钮
- function ModuleChooseLayer:touchTerminateAutoButton()
- if self._tochAutoPanel then
- return
- end
- local panel = ccui.Layout:create()
- panel:setContentSize( global.Director:getVisibleSize() )
- panel:setTouchEnabled( true )
- panel:setSwallowTouches( false )
- self:addChild( panel,999 )
- self._tochAutoPanel = panel
- panel:addClickEventListener( function()
- self:terminateAutoLaunchGameMod()
- end)
- end
- function ModuleChooseLayer:InitCode()
- local items = {
- ["1212"] = function()
- -- 开启帧率
- global.Director:setDisplayStats(true)
- end,
- ["333333333"] = function()
- -- 开启远程测试
- local console = global.Director:getConsole()
- console:listenOnTCP( 9999 )
- end,
- ["222222"] = function()
- local ipurl = "https://sdkv2.dhsf.xqhuyu.com/api/data/client_ip"
- if self._currentSubMod then
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local customData = modGameEnv:GetCustomDataByKey("clientIPUrl")
- if customData and string.len(customData) > 0 then
- ipurl = customData
- end
- end
- if ipurl and string.len(ipurl) > 0 then
- HTTPRequest(ipurl, function(success, response)
- if success then
- HideLoadingBar()
- local modGameEnv = self._currentSubMod:GetGameEnv()
- modGameEnv:SetSelfip(response)
- global.L_SystemTipsManager:ShowTips(response)
- end
- end)
- end
- ShowLoadingBar()
- end,
- ["4444"] = function()
- global.L_GameEnvManager:RestartGame()
- end
- }
- local input = ""
- local viewSize = global.Director:getVisibleSize()
- local width = viewSize.width
- local height = viewSize.height
- local pos = {cc.p(25, height - 25), cc.p(width - 25, height - 25), cc.p(25, 25), cc.p(width - 25, 25)}
- for index = 1, 4 do
- local layout = ccui.Layout:create()
- self:addChild(layout)
- layout:setTouchEnabled(true)
-
- layout:setContentSize(50, 50)
- layout:setAnchorPoint(cc.p(0.5, 0.5))
- layout:setPosition(pos[index])
- layout:addClickEventListener(
- function()
- input = input .. tostring(index)
- for k, callback in pairs(items) do
- if string.find(input, k) then
- global.L_SystemTipsManager:ShowTips(k)
- input = ""
- callback()
- break
- end
- end
- end
- )
- end
- end
- function ModuleChooseLayer:InitLaunch()
- -------------------------------------------------------------
- local isBoxLogin = global.L_GameEnvManager:GetEnvDataByKey("isBoxLogin")
- global.isBoxLogin = isBoxLogin == 1
- local isUgc = global.L_GameEnvManager:GetEnvDataByKey("isUgc")
- global.isUgc = isUgc == 1
- self:updateBoxUI()
- -- 切换账号按钮文本可替换
- local buttonName = global.L_GameEnvManager:GetEnvDataByKey("logoutName")
- if buttonName and buttonName ~= "" then
- local btnTextStr = fixNewLanguageString( buttonName )
- self.ui.Button_logout:setTitleText(btnTextStr)
- end
- ----------------------------------------------------------------
- -- 进入游戏
- self.ui.Button_launch:addClickEventListener(function()
- -- 迅雷检测游戏实名
- if global.L_NativeBridgeManager:PCCheckMedthodName("GN_checkRealName") then
- local envMgr = global.L_GameEnvManager
- local env_uid = envMgr:GetEnvDataByKey("user_id") or ""
- local data = {
- userId = tostring( env_uid )
- }
- global.L_NativeBridgeManager:PCNoticeRequest("GN_checkRealName",data)
- return
- end
- self:LaunchModule()
- end)
-
- local shiwan = global.L_GameEnvManager:GetEnvDataByKey("shiwan")
- if shiwan and tonumber(shiwan) == 1 then
- self.ui.Button_select:setTouchEnabled(false)
- end
- -- 上次区服
- self.ui.Button_select:addClickEventListener(function()
- self:HideLaunch()
- self:ShowServers()
- self:UpdateServers()
- end)
- -- 切换账号/返回盒子
- if not global.isBoxLogin then
- self.ui.Button_logout:setVisible(false)
- end
- self.ui.Button_logout:addClickEventListener(function()
- if (global.isBoxLogin or global.isUgc) and global.L_NativeBridgeManager.GN_finishGame and not global.isWindows then
- global.L_NativeBridgeManager:GN_finishGame()
- return
- end
- global.L_NativeBridgeManager:GN_accountLogout()
- global.L_GameEnvManager:RestartGame()
- end)
- -- 游戏大厅(盒子)
- self.ui.Button_game_list:addClickEventListener(function()
- if global.isBoxLogin and self._supportGameList then
- --游戏大厅
- self:ShowGameList()
- end
- end)
- -- 游戏公告
- self.ui.Button_announce:addClickEventListener(function()
- self:ShowModuleAnnounce()
- end)
- -- 注销账号
- if self.ui.Button_delete_account then
- self.ui.Button_delete_account:setVisible(false)
- self.ui.Button_delete_account:addClickEventListener(function()
- if global.L_NativeBridgeManager.GN_deleteAccount then
- global.L_NativeBridgeManager:GN_deleteAccount()
- end
- end)
- end
- -- 游戏修复
- self.ui.Button_fix:addClickEventListener(function()
- local function callback( aType, custom )
- if aType == 1 then
- -- cleanup
- local fileUtil = cc.FileUtils:getInstance()
- local writePath = fileUtil:getWritablePath()
- fileUtil:removeDirectory( writePath )
- fileUtil:purgeCachedEntries()
- releasePrint("+++++++++++++++++++++++++++++isBoxLogin, isCloudLogin ", global.L_GameEnvManager:GetEnvDataByKey("isBoxLogin"), global.L_GameEnvManager:GetEnvDataByKey("isCloudLogin"))
- local mode = nil
- if global.L_GameEnvManager:GetEnvDataByKey("isBoxLogin") and global.L_GameEnvManager:GetEnvDataByKey("isCloudLogin") then
- mode = "cold"
- end
- global.L_NativeBridgeManager:GN_accountLogout()
- global.L_GameEnvManager:RestartGame(mode)
- end
- end
- local tipsData = {}
- tipsData.str = "当补丁缺失或其他显示异常问题,可尝试在此进行\n修复。(此操作会清理本地补丁并重新下载,请在\n良好的网络环境下进行)"
- tipsData.btnType = 2
- tipsData.callback = callback
- global.L_CommonTipsManager:OpenLayer(tipsData)
- end)
- -- 分享游戏
- self.ui.Button_share:setVisible(false)
- self.ui.Button_share:addClickEventListener(function()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- local shareUrl = modGameEnv:GetCustomDataByKey("shareUrl")
- local isShowShare = shareUrl and shareUrl ~= ""
- if not isShowShare then
- return nil
- end
- cc.Application:getInstance():openURL(shareUrl)
- end)
- -- 用户协议
- self.ui.Button_agreement:setVisible(false)
- self.ui.Button_agreement:addClickEventListener(function()
- self:ShowAgreement()
- end)
- -- 用户协议复选框
- self.ui.CheckBox_agreement:addEventListener(function(sender)
- local isSelected = sender:isSelected()
- local userData = UserData:new("agreement_data")
- userData:setIntegerForKey("select", isSelected and 1 or 0)
- userData:writeMapDataToFile()
- -- 用户协议复选框点击 上报自定义事件
- local dataParam = {
- event={time=os.time(),name = "tickNotice_agreement",type = "track"}
- }
- local userId = global.L_GameEnvManager:GetEnvDataByKey("user_id") or global.L_GameEnvManager:GetEnvDataByKey("uid")
- if userId and userId ~= "" then
- dataParam.user = {id = userId}
- end
- global.L_DataRePort:SendRePortData( dataParam )
- end)
- -- 版号
- local copyright1 = ""
- local copyright2 = ""
- self.ui.Text_copyright:setString(copyright1 .. "\n" .. copyright2)
- self.ui.Text_copyright:setVisible(false)
- -- 健康游戏
- self.ui.Text_health:setVisible(false)
- self.ui.Text_health_tips:setVisible(false)
- -- logo
- self.ui.Image_icon:setVisible(false)
- -- 版本号
- local visibleSize = global.Director:getVisibleSize()
- if self._isPortrait then
- local y = self.ui.ListView_modules:getPositionY()
- self.ui.Text_ver_launcher:setPositionY(y + 30)
- else
- self.ui.Text_ver_launcher:setPositionY(640-5)
- end
-
- self.ui.Text_ver_launcher:setFontSize(16)
- self.ui.Text_ver_launcher:setVisible(false)
- self.ui.Text_ver_module:setVisible(false)
- drawButtonColorStyle(self.ui.Button_launch, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_logout, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_announce, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_fix, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_share, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_agreement, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_game_list, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_select, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self.ui.Button_game, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
-
- if self.ui.Button_delete_account then
- drawButtonColorStyle(self.ui.Button_delete_account, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- end
- end
- function ModuleChooseLayer:ShowLaunch()
- self.ui.Panel_launch:setVisible(true)
- end
- function ModuleChooseLayer:HideLaunch()
- self.ui.Panel_launch:setVisible(false)
- end
- function ModuleChooseLayer:InitAllModules()
- self.ui.ListView_modules:removeAllItems()
- local allSubMods = {}
- local allModules = global.L_ModuleManager:GetAllModules()
- for _, module in ipairs(allModules) do
- for _, subMod in ipairs(module:GetSubMods()) do
- table.insert(allSubMods, {module = module, subMod = subMod})
- end
- end
- for k, v in ipairs(allSubMods) do
- local key = string.format("%s_%s", v.module:GetID(), v.subMod:GetID())
- local cell = self:CreateModuleCell(v)
- self._subModCells[key] = cell
- self.ui.ListView_modules:pushBackCustomItem(cell.nativeUI)
- end
- self.ui.ListView_modules:setVisible(#allSubMods > 1)
- -- 审核服,隐藏多版本
- if global.L_GameEnvManager:IsReview() then
- self.ui.ListView_modules:setVisible(false)
- end
- end
- function ModuleChooseLayer:CreateModuleCell(data)
- local root = CreateExport_launcher("server/module_cell")
- local layout = root:getChildByName("Panel_1")
- layout:removeFromParent()
- local module = data.module
- local subMod = data.subMod
- local cell = ui_delegate(layout)
- cell.Button_1:setTitleText(subMod.name)
- cell.Button_1:addClickEventListener(function()
- self:OnSelectModule(module, subMod)
- end)
- drawButtonColorStyle(cell.Button_1, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- return cell
- end
- function ModuleChooseLayer:SelectDefaultModule()
- local defaultModule = nil
- -- 存储文件
- local launcherModID = global.L_ModuleManager:GetLauncherModuleID()
- local channelID = tostring(global.L_GameEnvManager:GetChannelID())
- local userData = UserData:new(launcherModID .. channelID .. "_data")
- -- env 传入
- if not defaultModule then
- local envModID = global.L_GameEnvManager:GetEnvDataByKey("modID")
- if envModID and string.len(envModID) > 0 then
- defaultModule = global.L_ModuleManager:GetModuleByID(envModID)
- end
- end
- -- 上次
- if not defaultModule then
- local lastModuleID = userData:getStringForKey("last_module", nil)
- if lastModuleID and string.len(lastModuleID) > 0 then
- defaultModule = global.L_ModuleManager:GetModuleByID(lastModuleID)
- self._existLastMod = true
- end
- end
- -- 推荐
- if not defaultModule then
- local referModuleID = global.L_ModuleManager:GetReferModuleID()
- if referModuleID and string.len(referModuleID) > 0 then
- defaultModule = global.L_ModuleManager:GetModuleByID(referModuleID)
- end
- end
- -- 第一个
- if not defaultModule then
- local allModule = global.L_ModuleManager:GetAllModules()
- defaultModule = allModule[1]
- end
- -- 子模块
- local defaultSubMod = nil
- -- env 传入
- if defaultModule and not defaultSubMod then
- local subModID = global.L_GameEnvManager:GetEnvDataByKey("subModID", nil)
- if subModID and string.len(subModID) > 0 then
- defaultSubMod = defaultModule:GetSubModByID(subModID)
- end
- end
- -- 盒子启动的
- local boxConfig = global.L_GameEnvManager:GetEnvDataByKey("boxConfig")
- if not defaultSubMod and boxConfig and boxConfig ~= "" then
- local isJson = false
- local findS, findE = string.find(boxConfig, "^{(.-)}$")
- if findS and findE and findE > findS then
- isJson = true
- end
- local jsonData = isJson and cjson.decode(boxConfig)
- if jsonData and jsonData.gameId then
- local allModules = global.L_ModuleManager:GetAllModules()
- for _, module in ipairs(allModules) do
- for _, subMod in ipairs(module:GetSubMods()) do
- if subMod:GetOperID() == jsonData.gameId then
- defaultSubMod = subMod
- break
- end
- end
- if defaultSubMod then
- break
- end
- end
- end
- end
- -- 上次
- if defaultModule and not defaultSubMod then
- local lastSubModID = userData:getStringForKey("last_submod", nil)
- if lastSubModID and string.len(lastSubModID) > 0 then
- defaultSubMod = defaultModule:GetSubModByID(lastSubModID)
- end
- end
- -- 推荐
- if defaultModule and not defaultSubMod then
- local referModuleID = defaultModule:GetRefer()
- if referModuleID and string.len(referModuleID) > 0 then
- defaultSubMod = defaultModule:GetSubModByID(referModuleID)
- end
- end
- -- 第一个
- if defaultModule and not defaultSubMod then
- local subMods = defaultModule:GetSubMods()
- defaultSubMod = subMods[1]
- end
- -- 选择
- if defaultModule and defaultSubMod then
- self:OnSelectModule(defaultModule, defaultSubMod)
- end
- end
- function ModuleChooseLayer:GetServerTime()
- GetModListServerTime(true, self._currentSubMod)
- end
- function ModuleChooseLayer:OnSelectModule(module, subMod)
- self._currentModule = module
- self._currentSubMod = subMod
- self:GetServerTime()
-
- -- 检测modeInfoURL合法性
- global.L_DataRePort:RequestModeInfoCheck(subMod)
- self:UpdateCurrentModule()
- self:checkAutoLaunchGameMod()
- for k, v in pairs(self._subModCells) do
- local moduleCell = self._subModCells[k]
- local key = string.format("%s_%s", module:GetID(), subMod:GetID())
- local able = (k == key)
- local path = string.format(self.path .. "%s.png", able and "btn_jryx_03" or "btn_jryx_03_1")
- moduleCell.Button_1:loadTextureNormal(path)
- moduleCell.Button_1:setTouchEnabled(not able)
- end
- -- request server data
- local modGameEnv = subMod:GetGameEnv()
- if not modGameEnv:GetServerData() then
- self:RequestModSrvlist(true)
- else
- self:UpdateServers()
- self:UpdateSelected()
- if modGameEnv:GetCustomIsLoaded() then
- self:OnCustomData(false)
- end
- end
- -- 通知native,当前选择的模块发生改变(注意!!进游戏第一次选择也会通知,比accountLogin更早)
- local jsonData = {}
- jsonData.channelId = tostring(global.L_GameEnvManager:GetChannelID())
- jsonData.gameid = self._currentSubMod:GetOperID()
- jsonData.id = self._currentSubMod:GetID()
- jsonData.name = self._currentSubMod:GetName()
- jsonData.subModID = self._currentSubMod:GetID()
- jsonData.moduleID = self._currentModule:GetID()
- jsonData.gameidlist = global.L_ModuleManager:GetAllGameID()
- global.L_NativeBridgeManager:GN_SendGameInfo(jsonData)
- -- 获取新app数据通知native
- global.L_MultiVersionData:GetNewAppData( subMod )
- -- 设备登录 上报自定义事件
- global.L_DataRePort:UpDeviceLogin(self._currentSubMod)
- end
- function ModuleChooseLayer:UpdateCurrentModule()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local channelID = tostring(global.L_GameEnvManager:GetChannelID())
- local launcherMod = global.L_ModuleManager:GetLauncherModule()
- local lOringinVersion = launcherMod:GetOriginVersion()
- local lRemoteVersion = launcherMod:GetRemoteVersion()
- local originVersion = self._currentModule:GetOriginVersion()
- local cacheVersion = self._currentModule:GetCacheVersion()
- local versionStr = string.format("%s (%s/%s) (%s/%s)", channelID, lOringinVersion, lRemoteVersion, originVersion, cacheVersion)
- self.ui.Text_ver_launcher:setString(versionStr)
- -- logo
- self:UpdateLogo()
- local subModInfo = self._currentSubMod:GetSubModInfo()
- local logoInfo = subModInfo.logo
- local downloadFlag = self.DownloadFlag.Logo
- if logoInfo and logoInfo.name and logoInfo.name ~= "" and logoInfo.url and logoInfo.url ~= "" then
- global.L_GameEnvManager:downloadResEasy(logoInfo.url, logoInfo.name, function(isOK, filename)
- if global.L_GameLayerManager._uiNode then
- global.L_ModuleChooseManager:OnDownloadResCB(isOK, filename, downloadFlag)
- end
- end)
- end
- -- logo mini
- local logoInfoMini = subModInfo.logo_mini
- -- local isBoxLogin = global.L_GameEnvManager:GetEnvDataByKey("isBoxLogin")
- -- if isBoxLogin == 1 then --盒子登录 取对应平台的版号logo
- -- if global.isWindows then
- -- logoInfoMini = subModInfo.logo_mini_box_pc
- -- else
- -- logoInfoMini = subModInfo.logo_mini_box
- -- end
- -- end
- local downloadFlag = self.DownloadFlag.LogoMini
- if logoInfoMini and logoInfoMini.name and logoInfoMini.name ~= "" and logoInfoMini.url and logoInfoMini.url ~= "" then
- global.L_GameEnvManager:downloadResEasy(logoInfoMini.url, logoInfoMini.name, function(isOK, filename)
- if global.L_GameLayerManager._uiNode then
- global.L_ModuleChooseManager:OnDownloadResCB(isOK, filename, downloadFlag)
- end
- end)
- end
- -- logo mini2
- local logoInfoMini2 = subModInfo.logo_mini2
- local downloadFlag = self.DownloadFlag.LogoMini2
- if logoInfoMini2 and logoInfoMini2.name and logoInfoMini2.name ~= "" and logoInfoMini2.url and logoInfoMini2.url ~= "" then
- global.L_GameEnvManager:downloadResEasy(logoInfoMini2.url, logoInfoMini2.name, function(isOK, filename)
- if global.L_GameLayerManager._uiNode then
- global.L_ModuleChooseManager:OnDownloadResCB(isOK, filename, downloadFlag)
- end
- end)
- end
- --current module
- -- self.ui.Panel_game:setVisible(false)
- if global.isBoxLogin or global.isUgc then
- self.ui.Button_game:setTitleText(subModInfo.name or "")
- else
- local modName = ""
- if global.isWindows then
- modName = global.L_GameEnvManager:GetEnvDataByKey("subModName") or ""
- else
- modName = global.L_GameEnvManager:GetAPKPackageShowName() or ""
- end
- if string.len(modName) == 0 then
- self.ui.Panel_game:setVisible(false)
- else
- self.ui.Button_game:setTitleText(modName)
- end
- end
- end
- function ModuleChooseLayer:decodeBase64(response)
- local Base64 = require("lockbox.util.base64")
- response = Base64.toString(response)
- return response
- end
- function ModuleChooseLayer:decodeSrvlistXXTEA(response)
- local fileUtil = cc.FileUtils:getInstance()
- local filePath = fileUtil:getWritablePath() .. "temp_decode"
- if fileUtil:isFileExist(filePath) then
- fileUtil:removeFile(filePath)
- end
- fileUtil:writeStringToFile(response, filePath)
- response = fileUtil:getDataFromFileEx(filePath)
- return response
- end
- function ModuleChooseLayer:decodeSrvlist(response)
- local needDecode = self._currentSubMod:GetIsSign()
- if needDecode then
- response = self:DecodeServerList(response)
- end
- local jsonData = cjson.decode(response)
- return jsonData
- end
- function ModuleChooseLayer:AddSrvlistCacheNamePrefix(cacheName)
- if not self._currentModule or not self._currentSubMod then
- return string.format("%s_%s", cacheName, global.L_GameEnvManager:GetChannelID())
- end
- return string.format("%s_%s", cacheName, self._currentSubMod:GetOperID())
- end
- function ModuleChooseLayer:GetSrvlistCachePath()
- local fileUtil = cc.FileUtils:getInstance()
- local filename = self:AddSrvlistCacheNamePrefix("ResServerlist.txt")
- local filePath = fileUtil:getWritablePath() .. filename
- return filePath
- end
- function ModuleChooseLayer:CleanupLocalSrvlist()
- local fileUtil = cc.FileUtils:getInstance()
- local filePath = self:GetSrvlistCachePath()
- if fileUtil:isFileExist(filePath) then
- fileUtil:removeFile(filePath)
- end
- end
- function ModuleChooseLayer:GetLocalRuntime()
- local fileUtil = cc.FileUtils:getInstance()
- local filePath = self:GetSrvlistCachePath()
- if not fileUtil:isFileExist(filePath) then
- return ""
- end
- local response = fileUtil:getDataFromFileEx(filePath)
- local jsonData = self:decodeSrvlist(response)
- if not jsonData then
- return ""
- end
- if not jsonData.runtime then
- return ""
- end
- return "runtime=" .. jsonData.runtime
- end
- function ModuleChooseLayer:RequestModSrvlist(showAnnounce)
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local mmin = math.min
- local mmax = math.max
- ----------------------------------------
- local function reportError(str, callback)
- local tipsData = {
- btnType = 1,
- str = str,
- callback = callback
- }
- global.L_CommonTipsManager:OpenLayer( tipsData )
- end
- ----------------------------------------
- local function httpCB(success, response, url, code)
- HideLoadingBar()
- self._srvlistCount = self._srvlistCount + 1
- local function callback()
- self:RequestModSrvlist(showAnnounce)
- end
- -- 拉取失败,网络原因
- if not success then
- if self._srvlistCount >= 3 then
- reportError("[srvlist][0]网络不给力哦!点“确认”重试。", callback)
- -- 上报至服务器
- global.L_DataRePort:ReportErrorModlistURL("SRVLIST_INFO_REQUEST_FAILED", "-3000", "Request srvlist INFO ERROR, CODE ERROR", url, code)
- else
- callback()
- end
- return nil
- end
- -- 拉取失败,内容空
- if not response then
- if self._srvlistCount >= 3 then
- reportError("[srvlist][1]网络不给力哦!点“确认”重试。", callback)
- -- 上报至服务器
- global.L_DataRePort:ReportErrorModlistURL("SRVLIST_INFO_REQUEST_FAILED", "-3001", "Request srvlist INFO ERROR, RESPONSE ERROR", url, code)
- else
- callback()
- end
- return nil
- end
- local isXXTEAEncrypt = global.L_GameEnvManager:GetModlistCustomDataByKey("isEncrypt")
- if not string.find(response, "latestData") and isXXTEAEncrypt and isXXTEAEncrypt == 1 then
- response = self:decodeBase64(response)
- end
- -- xxtea 解密
- response = self:decodeSrvlistXXTEA(response)
- -- json解析,检测是否解析成功
- local jsonData = self:decodeSrvlist(response)
- if not jsonData then
- self:CleanupLocalSrvlist()
- reportError("[srvlist][2]远端服务器配置格式异常", callback)
- -- 上报至服务器
- global.L_DataRePort:ReportErrorModlistURL("SRVLIST_INFO_REQUEST_FAILED", "-3002", "Request srvlist INFO ERROR, JSON ERROR", url, code)
- return nil
- end
- local fileUtil = cc.FileUtils:getInstance()
- local filePath = ""
- if jsonData.latestData then
- -- 本地是否是最新的
- -- 读取本地
- filePath = self:GetSrvlistCachePath()
- response = fileUtil:getDataFromFileEx(filePath)
- jsonData = self:decodeSrvlist(response)
- else
- -- 不是最新,保存内容至本地,无需再次解析json
- filePath = self:GetSrvlistCachePath()
- if fileUtil:isFileExist(filePath) then
- fileUtil:removeFile(filePath)
- end
- fileUtil:writeStringToFile(response, filePath)
- end
- -- json解析,检测是否解析成功
- if not jsonData then
- self:CleanupLocalSrvlist()
- reportError("[srvlist][3]远端服务器配置格式异常", callback)
- -- 上报至服务器
- global.L_DataRePort:ReportErrorModlistURL("SRVLIST_INFO_REQUEST_FAILED", "-3003", "Request srvlist INFO ERROR, JSON ERROR", url, code)
- return nil
- end
- self._srvlistCount = 0
- global.L_ModuleChooseManager:RespModSrvlist(jsonData, showAnnounce)
- end
- local signKey = global.L_GameEnvManager:GetModlistSignKey()
- local modInfo = self._currentSubMod:GetSubModInfo()
- local srvlist = modInfo.srvlist
- if global.L_GameEnvManager:IsReview() and modInfo.srvlistReview and string.len(modInfo.srvlistReview) > 0 then
- srvlist = modInfo.srvlistReview
- end
- local srvlistURL = string.format(srvlist, global.L_GameEnvManager:GetChannelID())
- local srvlistData = srvlistURL
- srvlistData = string.gsub(srvlistData, "http://", "")
- srvlistData = string.gsub(srvlistData, "https://", "")
- srvlistData = string.gsub(srvlistData, "/gsl/auth/server_list_auth", "")
- srvlistData = string.gsub(srvlistData, "/gsl/main", "")
- local s = string.find(srvlistData, "/")
- srvlistData = string.sub(srvlistData, s+1, string.len(srvlistData))
- local timestamp = os.time()
- local sign = get_str_MD5("data=" .. srvlistData .. "&key=" .. signKey .. "&time="..timestamp)
- srvlistURL = srvlistURL .. "?" .. self:GetLocalRuntime()
- srvlistURL = srvlistURL .. string.format("&time=%s&sign=%s", timestamp, sign)
- -- debug
- releasePrint( "mod srvlist URL:", srvlistURL )
- if srvlistURL and string.len(srvlistURL) > 0 then
- ShowLoadingBar()
- HTTPRequest(srvlistURL, httpCB)
- end
- end
- function ModuleChooseLayer:RespModSrvlist(jsonData, showAnnounce)
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local mmin = math.min
- local mmax = math.max
- -- clean
- modGameEnv:Cleanup()
- ------------------------------------------
- local serverData = {}
- serverData.source = jsonData
- -- 推荐服
- local referArrAble = false
- local refer = jsonData.refer
- local referArr = jsonData.referArr
- local referOnlyOne = jsonData.referOnlyOne
- if referArr and next(referArr) then
- referArrAble = true
- local randIndex = math.random(1, #referArr)
- refer = referArr[randIndex]
- end
- modGameEnv:SetRefer(refer)
- -- 服务器组
- serverData.srvgroup = jsonData.serverGroup
- ------------------------------------------
- local function parseSrvitem(data, srvRoot)
- if not data then
- return nil
- end
- local function fixSrvip(srvid, srvRoot)
- if srvRoot then
- return string.format("s%s-%s", srvid, srvRoot)
- end
- return ""
- end
- -- 拼接服务器ip
- local srvid = data.srvid
- local srvip = fixSrvip(srvid, srvRoot)
- local mainsrvid = data.mainsrvid
- if mainsrvid and string.len(mainsrvid) > 0 and tonumber(mainsrvid) then
- srvip = fixSrvip(mainsrvid, srvRoot)
- end
- srvip = data.srvip or srvip
- -- srvitem
- local srvitem = {}
- srvitem.serverId = srvid -- 服务器id
- srvitem.ip = srvip -- 服务器ip
- srvitem.port = tonumber(data.port) -- 端口
- srvitem.stab = data.beta == "1" and "beta" or "stab" -- 先行服
- srvitem.state = mmax(mmin(tonumber(data.state), 5), 1) -- 状态 1新服,2畅通,3爆满,4维护,5隐藏
- srvitem.serverName = data.srvname or srvid -- 服务器名
- srvitem.urlSuffix = data.urlsuffix -- 资源URL 后缀
- srvitem.mainServerId = mainsrvid -- 主服id,拼接ip
- srvitem.tag = data.tag -- 所属服务器组tag
- srvitem.gmurlsuffix = data.gmurlsuffix -- 先行服版本号
- srvitem.proxyport = data.proxyport -- 代理端口
- srvitem.oriState = srvitem.state
- srvitem.bg = data.bg -- 冠名
- return srvitem
- end
- ------------------------------------------
-
- -- 服务器列表
- local function isValid(v)
- if v.srvid == 0 or v.port == nil then
- return false
- end
- return true
- end
- local isReview = global.L_GameEnvManager:IsReview()
- local srvData = isReview and jsonData.serverDataReview or jsonData.serverData or {}
- local srvRoot = isReview and jsonData.srvRootReview or jsonData.srvRoot
- serverData.srvlist = {}
- local mainServerNameData = {}
- for _, v in ipairs(srvData) do
- --精简
- v.srvid = v.d or v.srvid
- v.port = v.p or v.port
- v.state = v.s or v.state
- v.urlsuffix = v.u or v.urlsuffix
- v.mainsrvid = v.m or v.mainsrvid
- v.tag = v.t or v.tag
- v.srvname = v.n or v.srvname
- v.gmurlsuffix = v.g or v.gmurlsuffix
- v.srvip = v.i or v.srvip
- v.proxyport = v.x or v.proxyport
- v.beta = v.b or v.beta
- if isValid(v) then
- local srvitem = parseSrvitem(v, srvRoot)
- tinsert(serverData.srvlist, srvitem)
- mainServerNameData[srvitem.serverId] = srvitem.serverName
- end
- end
- -- 加载主服名字 区服列表那精简不好再加字段了
- for i,v in ipairs(serverData.srvlist) do
- v.mainServerName = mainServerNameData[v.mainServerId] --主服名
- end
- --
- -- 安卓/ios 分平台读取
- local resURL = jsonData.resURL
- local resURL_win = jsonData.resURL_win
- local resURL_ios = jsonData.resURL_ios
- local resURL_ad = jsonData.resURL_ad
- local gmResURL = jsonData.gmResURL
- local gmResURL_win = jsonData.gmResURL_win
- local gmResURL_ad = jsonData.gmResURL_ad
- local gmResURL_ios = jsonData.gmResURL_ios
- resURL_ios = (resURL_ios and resURL_ios ~= "") and resURL_ios or resURL
- resURL_ad = (resURL_ad and resURL_ad ~= "") and resURL_ad or resURL
- resURL_win = (resURL_win and resURL_win ~= "") and resURL_win or resURL_ad
- gmResURL_ad = (gmResURL_ad and gmResURL_ad ~= "") and gmResURL_ad or gmResURL
- gmResURL_ios = (gmResURL_ios and gmResURL_ios ~= "") and gmResURL_ios or gmResURL
- gmResURL_win = (gmResURL_win and gmResURL_win ~= "") and gmResURL_win or gmResURL_ad
- --备份cdn
- local resURL2 = jsonData.resURL2
- local resURL_win2 = jsonData.resURL_win2
- local resURL_ios2 = jsonData.resURL_ios2
- local resURL_ad2 = jsonData.resURL_ad2
- local gmResURL2 = jsonData.gmResURL2
- local gmResURL_win2 = jsonData.gmResURL_win2
- local gmResURL_ad2 = jsonData.gmResURL_ad2
- local gmResURL_ios2 = jsonData.gmResURL_ios2
- resURL_ios2 = (resURL_ios2 and resURL_ios2 ~= "") and resURL_ios2 or resURL2
- resURL_ad2 = (resURL_ad2 and resURL_ad2 ~= "") and resURL_ad2 or resURL2
- resURL_win2 = (resURL_win2 and resURL_win2 ~= "") and resURL_win2 or resURL_ad2
- gmResURL_ad2 = (gmResURL_ad2 and gmResURL_ad2 ~= "") and gmResURL_ad2 or gmResURL2
- gmResURL_ios2 = (gmResURL_ios2 and gmResURL_ios2 ~= "") and gmResURL_ios2 or gmResURL2
- gmResURL_win2 = (gmResURL_win2 and gmResURL_win2 ~= "") and gmResURL_win2 or gmResURL_ad2
- if global.isWindows then
- resURL = resURL_win
- resURL2 = resURL_win2
- gmResURL = gmResURL_win
- gmResURL2 = gmResURL_win2
- elseif global.isAndroid or global.isOHOS then
- resURL = resURL_ad
- resURL2 = resURL_ad2
- gmResURL = gmResURL_ad
- gmResURL2 = gmResURL_ad2
- elseif global.isIOS then
- resURL = resURL_ios
- resURL2 = resURL_ios2
- gmResURL = gmResURL_ios
- gmResURL2 = gmResURL_ios2
- end
- serverData.resURL = resURL
- serverData.resURL2 = resURL2
- serverData.whitelist = jsonData.whitelist
- serverData.resVer = jsonData.resVer
- serverData.sceneURL = jsonData.sceneURL
- serverData.sceneResVer = jsonData.sceneResVer
- serverData.gmResVer = jsonData.gmResVer
- serverData.gmResURL = gmResURL
- serverData.gmResURL2 = gmResURL2
- serverData.gmInitResVer = jsonData.gmInitResVer
- serverData.gmInitResURL = jsonData.gmInitResURL
- serverData.gmInitResURL2 = jsonData.gmInitResURL2
- serverData.gmWebResURL = jsonData.gmWebResURL
- serverData.gmWebResURL2 = jsonData.gmWebResURL2
- serverData.gmWebResVer = jsonData.gmWebResVer
- serverData.uidWhiteList = jsonData.uidWhiteList
- -- custom
- local customURL = jsonData.custom and jsonData.custom.custom_url
- local newServerList = false
- modGameEnv:SetCustomData(jsonData.custom or {})
- if customURL and string.len(customURL) > 0 then
- newServerList = true
- modGameEnv:SetCustomUrl(customURL)
- modGameEnv:SetIsNewServerlist(true)
- self:RequestCustomURL(customURL)
- end
- modGameEnv:SetServerData(serverData)
- --新用户 推荐服等设置
- self:ParseShowHideSrvitem()
- modGameEnv:ReadLastServers()
- --------------------
- -- 自动弹出用户协议
- local agreement = modGameEnv:GetCustomDataByKey("agreement")
- local autoAgreement = getAgreementState() == 0 and agreement and string.len(agreement) > 0
-
- -- 请求公告
- -- 非审核服状态生效
- if not isReview then
- local announceURL = jsonData.custom and jsonData.custom.announceUrl
- if announceURL and string.len(announceURL) > 0 then
- releasePrint("announceURL", announceURL)
- HTTPRequest(announceURL, function(success, response)
- if success then
- local jsonData = cjson.decode(response)
- if jsonData and next(jsonData) then
- serverData.announce = jsonData
-
- -- find announce
- if showAnnounce and not autoAgreement then
- global.L_ModuleChooseManager:ShowAnnounce()
- end
- end
- end
- end)
- end
- end
-
- self:UpdateServers()
- self:UpdateSelected()
- -- 显示用户协议
- if not isReview then
- if autoAgreement then
- self:ShowAgreement()
- end
- end
- if not newServerList then
- self:OnCustomData(true)
- end
- end
- function ModuleChooseLayer:OnCustomData(isCheckAutoEnterGame)
- self:CheckLoadRoleinfo()
- self:UpdateShareBtn()
- self:UpdateCopyright()
- self:UpdateHealthGame()
- self:UpdateLicense()
- self:UpdateLogo()
- self:UpdateAgreementBtn()
- self:UpdateAgreementTips()
- self:UpdateVersion()
- self:UpdateAgeTipsImage()
- self:UpdateAuthTips()
- self:UpdateDeleteAccountBtn()
- self:UpdateChangeAccountBtn()
- if isCheckAutoEnterGame then
- self:checkAutoLaunchGameMod()
- self:CheckAutoEnterGame()
- self:CheckShiWanAutoEnterGame()
- end
- end
- function ModuleChooseLayer:InitLauncherVersion()
- local channelID = tostring(global.L_GameEnvManager:GetChannelID())
- local module = global.L_ModuleManager:GetLauncherModule()
- local originVersion = module:GetOriginVersion()
- local remoteVersion = module:GetRemoteVersion()
- self.ui.Text_ver_launcher:setString(string.format("%s (%s/%s)", channelID, originVersion, remoteVersion))
- end
- function ModuleChooseLayer:UpdateSelected()
- local btnTextStr = fixNewLanguageString("未选择线路")
- if not self._currentModule or not self._currentSubMod then
- self.ui.Button_select:setTitleText(btnTextStr)
- self.ui.Image_select_state:setVisible(false)
- self.ui.Image_select_new:setVisible(false)
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local serverData = modGameEnv:GetServerData()
- if not serverData then
- self.ui.Button_select:setTitleText(btnTextStr)
- self.ui.Image_select_state:setVisible(false)
- self.ui.Image_select_new:setVisible(false)
- return nil
- end
- local selectedServer = modGameEnv:GetSelectedServer()
- if not selectedServer then
- self.ui.Button_select:setTitleText(btnTextStr)
- self.ui.Image_select_state:setVisible(false)
- self.ui.Image_select_new:setVisible(false)
- return nil
- end
- -- 服务器名
- local statePath = self.path .. "fuguchuanqi.apk_000870.png"
- if selectedServer.state == 1 then
- -- 新服 绿色
- statePath = self.path .. "fuguchuanqi.apk_000870.png"
- elseif selectedServer.state == 2 then
- -- 普通 绿色
- statePath = self.path .. "fuguchuanqi.apk_000870.png"
- elseif selectedServer.state == 3 then
- -- 爆满
- statePath = self.path .. "fuguchuanqi.apk_000872.png"
- elseif selectedServer.state == 4 then
- -- 维护
- statePath = self.path .. "fuguchuanqi.apk_000873.png"
- elseif selectedServer.state == 5 then
- -- 隐藏服 隐藏字
- statePath = self.path .. "fuguchuanqi.apk_000873.png"
- end
- -- 任务活动
- -- 是否开启活动
- local boxScene = tonumber(global.L_GameEnvManager:GetEnvDataByKey("scene"))
- if boxScene == 9 then
- local isShowActivityIcon = false
- local activitySevId = global.L_GameEnvManager:GetEnvDataByKey("serverId")
- activitySevId = activitySevId and tostring(activitySevId)
- if activitySevId and tostring(selectedServer.serverId) == activitySevId then
- isShowActivityIcon = true
- if not self.ui.activityIcon then
- -- 显示活动icon
- local bttonSizeW = self.ui.Button_select:getContentSize().width
- local activityIcon = ccui.ImageView:create()
- activityIcon:loadTexture(self.path .. "box_activity_icon.png")
- activityIcon:setAnchorPoint(1, 0.5)
- activityIcon:setPosition(bttonSizeW-18, 37)
- self.ui.Button_select:addChild(activityIcon)
- self.ui.activityIcon = activityIcon
- end
- end
- if self.ui.activityIcon then
- self.ui.activityIcon:setVisible(isShowActivityIcon)
- end
- end
- local suffix = ""
- if selectedServer.state == 1 then
- suffix = ""
- elseif selectedServer.state == 3 then
- suffix = ""
- elseif selectedServer.state == 5 then
- suffix = "(隐)"
- end
- self.ui.Button_select:setTitleText(selectedServer.serverName .. suffix)
- self.ui.Image_select_new:setVisible(selectedServer.state == 1)
- self.ui.Image_select_state:setVisible(true)
- self.ui.Image_select_state:loadTexture(statePath)
- end
- function ModuleChooseLayer:CheckShiWanAutoEnterGame()
- --试玩直接启动游戏
- local shiwan = global.L_GameEnvManager:GetEnvDataByKey("shiwan")
- if shiwan and tonumber(shiwan) == 1 then
- if global.L_NativeBridgeManager:PCCheckMedthodName("GN_checkRealName") then
- local envMgr = global.L_GameEnvManager
- local env_uid = envMgr:GetEnvDataByKey("user_id") or ""
- local data = {
- userId = tostring( env_uid )
- }
- global.L_NativeBridgeManager:PCNoticeRequest("GN_checkRealName",data)
- return
- end
- self:LaunchModule()
- end
- end
- function ModuleChooseLayer:UpdateLogo()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local directoryPath = global.FileUtilCtl:getWritablePath()
- local modInfo = self._currentSubMod:GetSubModInfo()
- local logoInfo = modInfo.logo
- local showlogo = modInfo.showlogo
- local logoInfoMini = modInfo.logo_mini
- local logoInfoMini2 = modInfo.logo_mini2
-
- if logoInfo and logoInfo.name and logoInfo.name ~= "" and logoInfo.url and logoInfo.url ~= "" then
- local filePath = directoryPath .. logoInfo.name
- if cc.FileUtils:getInstance():isFileExist(filePath) then
- self.ui.Image_icon:setVisible(true)
- self.ui.Image_icon:loadTexture(filePath)
- self.ui.Image_icon:ignoreContentAdaptWithSize(true)
- else
- self.ui.Image_icon:setVisible(false)
- end
- elseif showlogo and tonumber(showlogo) == 1 then
- self.ui.Image_icon:setVisible(true)
- self.ui.Image_icon:loadTexture(self.path .. "logo_1.png")
- self.ui.Image_icon:ignoreContentAdaptWithSize(true)
- else
- self.ui.Image_icon:setVisible(false)
- end
- -- local isBoxLogin = global.L_GameEnvManager:GetEnvDataByKey("isBoxLogin")
- -- if isBoxLogin == 1 then --盒子登录 取对应平台的版号logo
- -- if global.isWindows then
- -- logoInfoMini = modInfo.logo_mini_box_pc
- -- else
- -- logoInfoMini = modInfo.logo_mini_box
- -- end
- -- end
- -- logo mini
- if logoInfoMini and logoInfoMini.name and logoInfoMini.name ~= "" and logoInfoMini.url and logoInfoMini.url ~= "" then
- local filePath = directoryPath .. logoInfoMini.name
- if cc.FileUtils:getInstance():isFileExist(filePath) then
- self._imageLogoMini:setVisible(true)
- self._imageLogoMini:loadTexture(filePath)
- self._imageLogoMini:ignoreContentAdaptWithSize(true)
- else
- self._imageLogoMini:setVisible(false)
- end
- else
- self._imageLogoMini:setVisible(false)
- end
- if logoInfoMini2 and logoInfoMini2.name and logoInfoMini2.name ~= "" and logoInfoMini2.url and logoInfoMini2.url ~= "" then
- local filePath = directoryPath .. logoInfoMini2.name
- if cc.FileUtils:getInstance():isFileExist(filePath) then
- self._imageLogoMini2:setVisible(true)
- self._imageLogoMini2:loadTexture(filePath)
- self._imageLogoMini2:ignoreContentAdaptWithSize(true)
- else
- self._imageLogoMini2:setVisible(false)
- end
- else
- self._imageLogoMini2:setVisible(false)
- end
- end
- function ModuleChooseLayer:UpdateShareBtn()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- -- 分享游戏
- local shareUrl = modGameEnv:GetCustomDataByKey("shareUrl")
- local isShowShare = shareUrl and shareUrl ~= ""
- self.ui.Button_share:setVisible(isShowShare)
- end
- function ModuleChooseLayer:UpdateCopyright()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- -- 版号
- local hideCopyright = (tonumber(modGameEnv:GetCustomDataByKey("hideCopyright")) == 1)
- self.ui.Text_copyright:setVisible(hideCopyright == false)
- local copyright1 = modGameEnv:GetCustomDataByKey("copyright1")
- local copyright2 = modGameEnv:GetCustomDataByKey("copyright2")
- local copyrightStr = nil
- if copyright1 and copyright2 and string.len(copyright1) > 0 and string.len(copyright2) > 0 then
- TextCreateRichText(self.ui.Text_copyright, copyright1 .. "\n" .. copyright2)
- end
-
- -- 特殊处理PC端的版号问题
- if global.isWindows then
- local copyright1_pc = modGameEnv:GetCustomDataByKey("copyright1_pc")
- local copyright2_pc = modGameEnv:GetCustomDataByKey("copyright2_pc")
- if copyright1_pc and copyright2_pc and string.len(copyright1_pc) > 0 and string.len(copyright2_pc) > 0 then
- TextCreateRichText(self.ui.Text_copyright, copyright1_pc .. "\n" .. copyright2_pc)
- end
- end
- self:UpdateCopyright360()
- end
- -- 360过白版号
- function ModuleChooseLayer:UpdateCopyright360()
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- local isSwithch = tonumber(modGameEnv:GetCustomDataByKey("cprh")) == 1
- local whiteFileName = "CHxAY7FThcchFK2dmR2j.txt"
- local fileUtil = cc.FileUtils:getInstance()
- if fileUtil:isFileExist(whiteFileName) or isSwithch then
- local filename = "cright.txt"
- local isExist = fileUtil:isFileExist(filename)
- if not fileUtil:isFileExist(filename) then
- return nil
- end
- local fileData = fileUtil:getDataFromFileEx(filename)
- local dataArray = string.split(fileData or "", "\n")
- local copyright1_pc = dataArray[1]
- local copyright2_pc = dataArray[2]
- if copyright1_pc and copyright2_pc and string.len(copyright1_pc) > 0 and string.len(copyright2_pc) > 0 then
- TextCreateRichText(self.ui.Text_copyright, copyright1_pc .. "\n" .. copyright2_pc)
- end
- end
- end
- function ModuleChooseLayer:UpdateHealthGame()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- self.ui.Text_health:setVisible(true)
- self.ui.Text_health_tips:setVisible(true)
- -- 健康游戏内容
- local customData = modGameEnv:GetCustomDataByKey("healthtips")
- if customData then
- TextCreateRichText(self.ui.Text_health, customData)
- end
- -- 适龄提醒
- local customData = modGameEnv:GetCustomDataByKey("agetips")
- if customData then
- TextCreateRichText(self.ui.Text_health_tips, customData)
- end
- end
- function ModuleChooseLayer:UpdateAgeTipsImage()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- self.ui.Image_age_tips:setVisible(false)
- self.ui.Image_age_tips:setTouchEnabled(false)
- -- 适龄提醒
- local customData = modGameEnv:GetCustomDataByKey("agetipsImage")
- if customData then
- -- 显示
- if tostring(customData.visible) == "1" then
- self.ui.Image_age_tips:setVisible(true)
- end
-
- -- 图标
- if customData.name and customData.url then
- self.ui.Image_age_tips:setVisible(false)
- local directoryPath = global.FileUtilCtl:getWritablePath()
- local filePath = directoryPath .. string.format("%s", customData.name)
- if cc.FileUtils:getInstance():isFileExist(filePath) then
- self.ui.Image_age_tips:setVisible(true)
- self.ui.Image_age_tips:loadTexture(filePath)
- self.ui.Image_age_tips:ignoreContentAdaptWithSize(true)
- else
- local downloadFlag = self.DownloadFlag.AgeTips
- global.L_GameEnvManager:downloadResEasy(customData.url, customData.name, function(isOK, filename)
- if global.L_GameLayerManager._uiNode then
- global.L_ModuleChooseManager:OnDownloadResCB(isOK, filename, downloadFlag)
- end
- end)
- end
- end
- if customData.hyperlink and customData.hyperlink ~= "" then
- -- 跳转链接
- self.ui.Image_age_tips:setTouchEnabled(true)
- self.ui.Image_age_tips:addClickEventListener(function()
- cc.Application:getInstance():openURL(customData.hyperlink)
- end)
- elseif customData.clickTips and customData.clickTips ~= "" then
- -- 跳转提醒框
- self.ui.Image_age_tips:setTouchEnabled(true)
- self.ui.Image_age_tips:addClickEventListener(function()
- local visibleSize = global.Director:getVisibleSize()
- local layout = ccui.Layout:create()
- self._root:addChild(layout)
- layout:setContentSize(visibleSize)
- layout:setTouchEnabled(true)
- layout:setBackGroundColor(cc.c3b(0, 0, 0))
- layout:setBackGroundColorType(1)
- layout:setBackGroundColorOpacity(80)
-
- local csize = {width=600, height=400}
- -- 背景图
- local imageBG = ccui.ImageView:create()
- layout:addChild(imageBG)
- imageBG:setPosition({x=visibleSize.width/2, y=visibleSize.height/2})
- imageBG:loadTexture(self.publicPath .. "1900000600.png")
- local x = 30
- local y = 30
- local width = 452-60
- local height = 179-60
- imageBG:setScale9Enabled(true)
- imageBG:setCapInsets({x = x, y = y, width = width, height = height})
- imageBG:setContentSize(csize)
- -- 确认按钮
- local buttonConfirm = ccui.Button:create()
- imageBG:addChild(buttonConfirm)
- buttonConfirm:setPosition({x=csize.width/2, y=40})
- buttonConfirm:loadTextureNormal(self.publicPath .. "1900001022.png")
- buttonConfirm:loadTexturePressed(self.publicPath .. "1900001022.png")
- buttonConfirm:setTouchEnabled(true)
- buttonConfirm:setTitleFontName("fonts/font.ttf")
- buttonConfirm:setTitleFontSize(18)
- buttonConfirm:setTitleText("确 认")
- buttonConfirm:addClickEventListener(function()
- layout:removeFromParent()
- end)
- -- 内容
- local scrollview = ccui.ScrollView:create()
- imageBG:addChild(scrollview)
- scrollview:setContentSize({width=550, height=300})
- scrollview:setInnerContainerSize({width = 500, height = 300})
- scrollview:ignoreContentAdaptWithSize(false)
- scrollview:setClippingEnabled(true)
- scrollview:setAnchorPoint({x=0.5, y=1})
- scrollview:setPosition({x=csize.width/2, y=380})
- scrollview:setTouchEnabled(true)
- local RichTextHelp = requireLauncher( "init/RichTextHelp" )
- local innerSize = scrollview:getInnerContainerSize()
- local richText = RichTextHelp:CreateRichTextWithXML(customData.clickTips, innerSize.width, 18, "#c9b39c")
- scrollview:addChild( richText )
- richText:formatText()
- richText:setAnchorPoint({x=0.5, y=1})
- richText:setPosition({x=innerSize.width/2, y=300})
- richText:setOpenUrlHandler( function(sender, str)
- cc.Application:getInstance():openURL(str)
- end )
-
- local textContentSize = richText:getContentSize()
- local scrollContentSize = scrollview:getContentSize()
- local newContentSize = {width=textContentSize.width, height=math.min(scrollContentSize.height, textContentSize.height)}
- local newInnerSize = {width=textContentSize.width, height=math.max(newContentSize.height, textContentSize.height)}
- newInnerSize.width = math.max(550, newInnerSize.width)
- newInnerSize.height = math.max(300, newInnerSize.height)
- scrollview:setInnerContainerSize( newInnerSize )
- richText:setPosition({x=newInnerSize.width/2, y=newInnerSize.height})
- end)
- end
- end
- end
- function ModuleChooseLayer:UpdateAuthTips()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- self.ui.Text_auth_tips:setVisible(true)
- -- 账号安全提醒
- local customData = modGameEnv:GetCustomDataByKey("authtips")
- if customData then
- TextCreateRichText(self.ui.Text_auth_tips, customData)
- end
- end
- function ModuleChooseLayer:UpdateLicense()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- -- 正版
- local hideLicense = (tonumber(modGameEnv:GetCustomDataByKey("hideLicense")) == 1)
- end
- function ModuleChooseLayer:UpdateAgreementBtn()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- -- 用户协议
- local isShowBtn = (modGameEnv:GetCustomDataByKey("agreement") and string.len(modGameEnv:GetCustomDataByKey("agreement")) > 0)
- self.ui.Button_agreement:setVisible(isShowBtn)
- end
- function ModuleChooseLayer:UpdateChangeAccountBtn()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- --盒子登录显示的是返回盒子不要隐藏
- if global.isBoxLogin then
- return
- end
- -- 切换账号
- local isHideBtn = tonumber(modGameEnv:GetCustomDataByKey("hideChangeAccountBtn")) == 1
- self.ui.Button_logout:setVisible(not isHideBtn)
- end
- function ModuleChooseLayer:UpdateDeleteAccountBtn()
- local module = self._currentSubMod
- if not module then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
-
- if not self.ui.Button_delete_account then
- return nil
- end
- -- 注销账号
- local isShowBtn = tonumber(modGameEnv:GetCustomDataByKey("showDeleteAccount")) == 1
- self.ui.Button_delete_account:setVisible(isShowBtn)
- end
- function ModuleChooseLayer:UpdateAgreementTips()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- if not self.ui.Panel_agreement then
- return nil
- end
- local discardAgreementBSwitch = modGameEnv:GetCustomDataByKey("discardAgreementBSwitch") == 1
- -- 用户协议
- local agreementB = (modGameEnv:GetCustomDataByKey("agreementB"))
- if not agreementB or agreementB == "" then
- self.ui.Panel_agreement:setVisible(false)
- self.ui.CheckBox_agreement:setSelected(true)
- return nil
- end
- self.ui.Panel_agreement:setVisible(true)
- self.ui.CheckBox_agreement:setSelected(true)
- -- 默认状态
- local userData = UserData:new("agreement_data")
- local localData = discardAgreementBSwitch and 0 or userData:getIntegerForKey("select", 0)
- local selectStatus = localData == 1
- self.ui.CheckBox_agreement:setSelected(selectStatus)
- local isInsideShow = tonumber(modGameEnv:GetCustomDataByKey("showInside")) == 1
- local RichTextHelp = requireLauncher( "init/RichTextHelp" )
- local richText = RichTextHelp:CreateRichTextWithXML( agreementB, 2000, 18, "#ffffff" )
- self.ui.Node_agreement:removeAllChildren()
- self.ui.Node_agreement:addChild( richText )
- richText:formatText()
- richText:setOpenUrlHandler( function(sender, str)
- if isInsideShow then
- local httpRequest = cc.XMLHttpRequest:new()
- httpRequest.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON
- httpRequest.timeout = 100000 -- 10 s
- httpRequest:open("GET", str)
- httpRequest:registerScriptHandler(function()
- local code = httpRequest.status
- local success = code >= 200 and code < 300
- local response = httpRequest.response
- self:InsideShowNoticeContent( response )
- end)
- httpRequest:send()
- return
- end
- cc.Application:getInstance():openURL(str)
- end )
- local contentSize = richText:getContentSize()
- local width = contentSize.width + 50
- self.ui.Panel_agreement:setContentSize({width=width, height=35})
- self.ui.Node_agreement:setPositionX(width / 2 + 15)
- self.ui.CheckBox_agreement:setPositionX(20)
- end
- function ModuleChooseLayer:UpdateVersion()
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
-
- -- 自定义版本号显示
- self.ui.Text_ver_launcher:setVisible(true)
- local launcherVer = modGameEnv:GetCustomDataByKey("launcherVer")
- local moduleVer = modGameEnv:GetCustomDataByKey("moduleVer")
- if launcherVer and moduleVer then
- self.ui.Text_ver_launcher:setString(launcherVer)
- end
- end
- function ModuleChooseLayer:InitServers()
- local visibleSize = cc.Director:getInstance():getVisibleSize()
- self.ui.Panel_hide:setContentSize(visibleSize)
- self.ui.Panel_hide:addClickEventListener(function()
- self:ShowLaunch()
- self:HideServers()
- end)
-
- self.ui.ListView_groups:setBounceEnabled(true)
- self.ui.ListView_servers:setBounceEnabled(true)
- self.ui.Button_more:addClickEventListener(function()
- self:SelectSGroup(hasRoleGroup)
- end)
- end
- function ModuleChooseLayer:ShowServers()
- self.ui.Panel_servers:setVisible(true)
- end
- function ModuleChooseLayer:HideServers()
- self.ui.Panel_servers:setVisible(false)
- end
- function ModuleChooseLayer:UpdateServers()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local srvData = modGameEnv:GetServerData()
- if not srvData then
- return false
- end
- if not self.ui.Panel_servers:isVisible() then
- return false
- end
- self.ui.ListView_groups:removeAllItems()
- self.ui.ListView_servers:removeAllItems()
- self.ui.ListView_logined:removeAllItems()
- self._group = -1
- self._gservers = {}
- self._groupCells = {}
- self._serverCells = {}
- self._loginedCells = {}
- -- 筛选服务器
- local function filterServers()
- local tservers = {}
- local srvlist = clone(modGameEnv:GetSrvlist())
-
- -- 组
- -- 先tag为key,方便快速存储,再使用table.sort
- -- 服务器列表倒序遍历
- -- 问题1,没配置tag
- -- 问题2,配置tag但是不存在该tag组
- -- normalsrvlist 剩余正常列表
- -- hash
- local groupSrvlist = {}
- if srvData.srvgroup and type(srvData.srvgroup) == "table" then
- for i, v in ipairs(srvData.srvgroup) do
- groupSrvlist[v.tag] = {index = i, name = v.name, tag = v.tag, items = {}}
- end
- end
- -- 筛选出组列表和普通列表
- local normalsrvlist = {}
- for i, v in ipairs(srvlist) do
- local srvitem = v
- if srvitem.tag and groupSrvlist[srvitem.tag] then
- tinsert(groupSrvlist[srvitem.tag].items, srvitem)
- else
- tinsert(normalsrvlist, srvitem)
- end
- end
- -- 排序
- groupSrvlist = HashToSortArray(groupSrvlist, function(a, b)
- return a.index < b.index
- end)
- for i, v in ipairs(groupSrvlist) do
- if #v.items > 0 then
- local item = {}
- item.index = #tservers+1
- item.name = v.name
- item.items = v.items
- tinsert(tservers, item)
- end
- end
- -- 正常区服
- local pageCount = math.ceil(#normalsrvlist / self.CountOfPage)
- local function calcServersByPage(page)
- local begin = (page - 1) * self.CountOfPage + 1
- local ended = begin + self.CountOfPage - 1
-
- local servers = {}
- for i = begin, ended do
- tinsert(servers, normalsrvlist[i])
- end
- return servers
- end
- for page = pageCount, 1, -1 do
- local items = calcServersByPage(page)
-
- local item = {}
- item.index = #tservers+1
- item.name = string.format("%s-%s区", (page - 1) * self.CountOfPage + 1, (page - 1) * self.CountOfPage + #items)
- item.items = items
- tinsert(tservers, item)
- end
- return tservers
- end
- -- 组
- self._gservers = filterServers()
- for _, v in ipairs(self._gservers) do
- local cell = self:CreateSGroupCell(v)
- self._groupCells[v.index] = cell
- self.ui.ListView_groups:pushBackCustomItem(cell.nativeUI)
- end
- -- 已经登录的
- local lastervers = modGameEnv:GetLastservers()
- for i, v in ipairs(lastervers) do
- local server = modGameEnv:GetServerByID(v)
- if server then
- local cell = self:CreateServerCell(server)
- self.ui.ListView_logined:pushBackCustomItem(cell.nativeUI)
- self._loginedCells[server.serverId] = cell
- end
- end
- self:SelectSGroup(1)
- end
- function ModuleChooseLayer:SelectSGroup(g)
- self._group = g
- for k, cell in pairs(self._groupCells) do
- if self._group == k then
- cell.Button_group:loadTextureNormal(self.path .. "fuguchuanqi.apk_000858.png")
- else
- cell.Button_group:loadTextureNormal(self.path .. "fuguchuanqi.apk_000857.png")
- end
- end
- self._serverCells = {}
- self.ui.ListView_servers:removeAllItems()
- self.ui.ListView_servers:jumpToTop()
- local servers = {}
- if self._group == hasRoleGroup then --玩过的区服
- servers = self:GetHasRoleSrvItems()
- else
- local gservers = self._gservers[self._group]
- if not gservers then
- return nil
- end
- servers = clone(gservers.items)
- end
- if not servers then
- return nil
- end
- print("count ", #servers)
- while next(servers) do
- local batchServers = {}
- tinsert(batchServers, servers[#servers])
- tremove(servers, #servers)
- if next(servers) then
- tinsert(batchServers, servers[#servers])
- tremove(servers, #servers)
- end
- local cell = self:CreateBatchServerCell(batchServers)
- self.ui.ListView_servers:pushBackCustomItem(cell)
- end
- end
- function ModuleChooseLayer:GetHasRoleSrvItems()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- local items = modGameEnv:GetHasRoleSrvItems()
- return items
- end
- function ModuleChooseLayer:CreateSGroupCell(data)
- local root = CreateExport_launcher("server/group_cell")
- local layout = root:getChildByName("Panel_bg")
- layout:removeFromParent()
- local cell = ui_delegate(layout)
- cell.Button_group:setTitleText(data.name)
- drawButtonColorStyle(cell.Button_group, {fontSize=20, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- -- 选择
- local function callback()
- self:SelectSGroup(data.index)
- end
- cell.Button_group:addClickEventListener(callback)
- cell.nativeUI:addClickEventListener(callback)
- return cell
- end
- function ModuleChooseLayer:CreateBatchServerCell(data)
- local widget = ccui.Widget:create()
- widget:setContentSize({width = 264*2, height = 49})
- if data[1] then
- local cell_data = {}
- cell_data.wid = 264
- cell_data.hei = 49
- cell_data.callback = function()
- local cell = self:CreateServerCell(data[1])
- return cell.nativeUI
- end
- local quickCell = createQuickCell(cell_data)
- widget:addChild(quickCell.widget)
- quickCell.widget:setPositionX(0)
- self._serverCells[data[1].serverId] = quickCell
- end
- if data[2] then
- local cell_data = {}
- cell_data.wid = 264
- cell_data.hei = 49
- cell_data.callback = function()
- local cell = self:CreateServerCell(data[2])
- return cell.nativeUI
- end
- local quickCell = createQuickCell(cell_data)
- widget:addChild(quickCell.widget)
- quickCell.widget:setPositionX(264)
- self._serverCells[data[2].serverId] = quickCell
- end
- return widget
- end
- function ModuleChooseLayer:CreateServerCell(data)
- local cell = self:GetServerCache()
- -- 选服
- local function callback()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local serverData = modGameEnv:GetServerData()
- -- 维护,且不是白名单
- if data.state == 4 and (not modGameEnv:IsWhitelist()) then
- global.L_SystemTipsManager:ShowTips("服务器正在维护中,请选择其它服务器!")
- return nil
- end
- -- 隐藏服给提醒
- if data.state == 5 then
- global.L_SystemTipsManager:ShowTips("正在进入隐藏服!")
- end
- modGameEnv:SetSelectedServer(data)
- -- 选择的服务器存储到本地
- modGameEnv:SaveLastServers()
- self:ShowLaunch()
- self:HideServers()
- self:UpdateSelected()
- end
- cell.nativeUI:addClickEventListener(callback)
- cell.Button_server:addClickEventListener(callback)
- cell.Button_server:setZoomScale(0.05)
- -- 服务器名
- local suffix = ""
- if data.state == 1 then
- suffix = ""
- elseif data.state == 3 then
- suffix = ""
- elseif data.state == 5 then
- suffix = "(隐)"
- end
- -- 白名单显示服务器id
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if modGameEnv:IsWhitelist() then
- suffix = suffix .. string.format("(%s)", data.serverId)
- end
- cell.Button_server:setTitleText(data.serverName .. suffix)
- cell.Image_new:setVisible(data.state == 1)
- drawButtonColorStyle(cell.Button_server, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- -- 服务器状态
- if data.state == 1 then
- -- 新服 绿色
- cell.Image_state:loadTexture(self.path .. "fuguchuanqi.apk_000870.png")
- elseif data.state == 2 then
- -- 普通 绿色
- cell.Image_state:loadTexture(self.path .. "fuguchuanqi.apk_000870.png")
- elseif data.state == 3 then
- -- 爆满
- cell.Image_state:loadTexture(self.path .. "fuguchuanqi.apk_000872.png")
- elseif data.state == 4 then
- -- 维护
- cell.Image_state:loadTexture(self.path .. "fuguchuanqi.apk_000873.png")
- cell.Button_server:setTitleColor(cc.c3b(0xbf, 0xbf, 0xbf))
- elseif data.state == 5 then
- -- 隐藏服 隐藏字
- cell.Image_state:loadTexture(self.path .. "fuguchuanqi.apk_000873.png")
- end
- -- 冠名
- local titleBgPath = self.path .. "fuguchuanqi.apk_000853.png"
- if data.bg and tonumber(data.bg) then
- local bgPath = self.path .. "title/" .. data.bg .. ".png"
- if cc.FileUtils:getInstance():isFileExist(bgPath) then
- titleBgPath = bgPath
- end
- end
- cell.Button_server:loadTextureNormal(titleBgPath)
- -- 服务器是否有角色
- local module = self._currentSubMod
- local modGameEnv = module:GetGameEnv()
- local roleCount = modGameEnv:GetRoleInfoByServerID(data.serverId)
- cell.Image_role:setVisible(roleCount and roleCount > 0)
- -- 任务活动
- -- 是否开启活动
- local boxScene = tonumber(global.L_GameEnvManager:GetEnvDataByKey("scene"))
- if boxScene == 9 then
- local isShowActivityIcon = false
- local activitySevId = global.L_GameEnvManager:GetEnvDataByKey("serverId")
- activitySevId = activitySevId and tostring(activitySevId)
- if activitySevId and tostring(data.serverId) == activitySevId then
- isShowActivityIcon = true
- if not cell.activityIcon then
- -- 显示活动icon
- local offX = -24
- if roleCount and roleCount > 0 then
- offX = -40
- end
- local bttonSizeW = cell.Button_server:getContentSize().width
- local activityIcon = ccui.ImageView:create()
- activityIcon:loadTexture(self.path .. "box_activity_icon.png")
- activityIcon:setAnchorPoint(1, 0.5)
- activityIcon:setPosition(bttonSizeW+offX, 26)
- cell.Button_server:addChild(activityIcon)
- cell.activityIcon = activityIcon
- end
- end
- if cell.activityIcon then
- cell.activityIcon:setVisible(isShowActivityIcon)
- end
- end
- return cell
- end
- function ModuleChooseLayer:GetServerCache()
- if #self._serverCache > 0 then
- local cache = tremove(self._serverCache)
- cache.nativeUI:autorelease()
- return cache
- end
- local root = CreateExport_launcher("server/server_cell")
- local layout = root:getChildByName("Panel_bg")
- layout:removeFromParent()
- local cell = ui_delegate(layout)
- layout:registerScriptHandler( function(state)
- if state == "exit" then
- if false == self._releaseFlag then
- self:AddServerCache(cell)
- end
- end
- end )
- return cell
- end
- function ModuleChooseLayer:AddServerCache(cache)
- cache.nativeUI:retain()
- tinsert(self._serverCache, cache)
- end
- function ModuleChooseLayer:ReleaseServerCache()
- for k, v in pairs(self._serverCache) do
- v.nativeUI:autorelease()
- end
- if self._windowResizedListener then
- global.Director:getEventDispatcher():removeEventListener( self._windowResizedListener )
- self._windowResizedListener = nil
- end
- self._serverCache = {}
- self._releaseFlag = true
- end
- function ModuleChooseLayer:OnLoginSuccessResp()
- self:CheckLoadRoleinfo()
- --强更
- self:CheckApkUpdate()
- end
- --强更 因为996sdk 有一部分包去掉权限了 得通过登录之后的NG_SDKLoginCB sdkver和 NG_recvData code_java来判断是不是没权限的包
- --存在sdkver和code_java 并且code_java<=10000的为没权限的包
- function ModuleChooseLayer:CheckApkUpdate()
- if not global.isAndroid then
- return
- end
- if global.isBoxLogin then
- return
- end
- if global.L_GameEnvManager:GetEnvDataByKey("isCloudLogin") then
- return
- end
- local hasPermission = true
- local sdkInfo = global.L_NativeBridgeManager:GetLoginDataByKey("sdkInfo")
- local sdkver = nil
- if sdkInfo then
- local sdkInfoT = cjson.decode(sdkInfo)
- if sdkInfoT and sdkInfoT.sdkver then
- sdkver = sdkInfoT.sdkver
- end
- end
- local javaVersion = global.L_GameEnvManager:GetJavaVersionCode()
- javaVersion = tonumber(javaVersion)
- if sdkver and javaVersion and javaVersion <=10000 then
- hasPermission = false
- end
- global.L_GameEnvManager:SetHasInstallPermission(hasPermission)
-
- local apkUpdateInfoUrl = global.L_GameEnvManager:GetAPKUpdateInfoUrl()
- if not apkUpdateInfoUrl then
- releasePrint("not apkUpdateUrl")
- return
- end
- HTTPRequest(apkUpdateInfoUrl, function (success, response)
- if not success then
- releasePrint("get apkInfo fail!")
- return
- end
- if not response then
- releasePrint("get apkInfo empty fail!")
- end
- local jsonData = cjson.decode(response)
- local versionCode = jsonData.update_ver_code
- global.L_GameEnvManager:SetAPKUpdateInfo(jsonData)
- local userData = UserData:new("update_ver_code")
- local lastCode = userData:getStringForKey("lastCode", "-1")
- if versionCode and lastCode ~= tostring(versionCode) then
- if hasPermission then
- userData:setStringForKey("lastCode", tostring(versionCode))
- userData:writeMapDataToFile()
- local urlInfo = {}
- urlInfo.apkVerUrl = apkUpdateInfoUrl
- global.L_NativeBridgeManager:GN_checkApkUpdate(urlInfo)
- end
- end
- end)
- end
- function ModuleChooseLayer:CheckLoadRoleinfo()
- if nil == self._currentModule or not self._currentSubMod then
- return false
- end
-
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local exist = modGameEnv:GetRoleinfo()
- if not exist then
- modGameEnv:RequestRoleInfo(function(jsonData)
- if not (global.L_ModuleChooseManager and global.L_ModuleChooseManager._layer) then
- return
- end
- if jsonData then
- modGameEnv:SetRoleinfo(jsonData)
- -- 保存至本地
- modGameEnv:savelocalRoleinfo()
- modGameEnv:SetSelectedServer(nil)
- global.L_ModuleChooseManager:UpdateServersWhenRoleInfoGet()
- global.L_ModuleChooseManager:OnServerRoleInfoResp()
- else
- -- 本地读取
- modGameEnv:readLocalRoleinfo()
- end
- end)
- end
- end
- function ModuleChooseLayer:UpdateServerRoleInfo()
- if not self._currentModule or not self._currentSubMod then
- return false
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- for serverId, cell in pairs(self._serverCells) do
- cell.exit()
- end
- for serverId, cell in pairs(self._loginedCells) do
- local roleCount = modGameEnv:GetRoleInfoByServerID(serverId)
- cell.Image_role:setVisible(roleCount and roleCount > 0)
- end
- modGameEnv:ReadLastServers()
- self:UpdateSelected()
- end
- function ModuleChooseLayer:OnAlreadyUpToDate()
- self.ui.Panel_bg:setVisible(true)
- self:InitAllModules()
- self:InitLauncherVersion()
- self:SelectDefaultModule()
- self:ShowLaunch()
- self:HideServers()
- self:UpdateSelected()
- -- 为防止界面等太久导致的服务器列表有问题,30分钟刷一次
- if self._srvlistTimerID then
- UnSchedule(self._srvlistTimerID)
- self._srvlistTimerID = nil
- end
- self._srvlistTimerID = Schedule(function()
- self:RequestModSrvlist(false)
- end, self._srvlistTime)
- end
- function ModuleChooseLayer:ShowModuleAnnounce()
- if self.BoxAutoEnterGame then
- return
- end
- if self._announceUI then
- self._announceUI.nativeUI:removeFromParent()
- self._announceUI = nil
- end
- self._announceGroupCells = {}
- if nil == self._currentModule or not self._currentSubMod then
- return
- end
- local root = nil
- if self._isPortrait then
- root = CreateExport_launcher("server/module_announce_portrait")
- else
- root = CreateExport_launcher("server/module_announce")
- end
-
- self:addChild(root)
- self._announceUI = ui_delegate(root)
- -- close
- local function closeCB()
- self._announceUI.nativeUI:removeFromParent()
- self._announceUI = nil
- -- 公告关闭 上报自定义事件
- local dataParam = {
- event={time=os.time(),name = "closeNotice",type = "track"}
- }
- local userId = global.L_GameEnvManager:GetEnvDataByKey("user_id") or global.L_GameEnvManager:GetEnvDataByKey("uid")
- if userId and userId ~= "" then
- dataParam.user = {id = userId}
- end
- global.L_DataRePort:SendRePortData( dataParam )
- end
- self._announceUI.Panel_1:addClickEventListener(closeCB)
- self._announceUI.Button_sure:addClickEventListener(closeCB)
- self._announceUI.Button_close:addClickEventListener(closeCB)
- drawButtonColorStyle(self._announceUI.Button_sure, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=2, outlineColor=cc.c3b(0x11,0x11,0x11)})
- -- desc
- local function showDesc(data)
- for k, v in pairs(self._announceGroupCells) do
- if k == data.index then
- v.Button_group:loadTextureNormal(self.path .. "announce/1900000662.png")
- v.Button_group:loadTexturePressed(self.path .. "announce/1900000662.png")
- v.Button_group:setTouchEnabled(false)
- drawButtonColorStyle(v.Button_group, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=2, outlineColor=cc.c3b(0x11,0x11,0x11)})
- else
- v.Button_group:loadTextureNormal(self.path .. "announce/1900000663.png")
- v.Button_group:loadTexturePressed(self.path .. "announce/1900000662.png")
- v.Button_group:setTouchEnabled(true)
- drawButtonColorStyle(v.Button_group, {fontSize=18, color=cc.c3b(0x80, 0x72, 0x56), outlineSize=2, outlineColor=cc.c3b(0x11,0x11,0x11)})
- end
- end
- local RichTextHelp = requireLauncher( "init/RichTextHelp" )
- -- 公告标题
- local textTitle = RichTextHelp:CreateRichTextWithXML(data.title, 500, 18, "#43d849" )
- self._announceUI.Node_title:removeAllChildren()
- self._announceUI.Node_title:addChild(textTitle)
- -- 公告内容
- local scrollview = self._announceUI.ScrollView_content
- scrollview:setContentSize({width=500, height=220})
- scrollview:setInnerContainerSize({width=500, height=220})
- scrollview:removeAllChildren()
- local textAnnounce = RichTextHelp:CreateRichTextWithXML( data.desc, scrollview:getContentSize().width, 18, "#c9b39c" )
- scrollview:addChild( textAnnounce )
- textAnnounce:formatText()
- textAnnounce:setAnchorPoint({x=0.5, y=1})
- local textContentSize = textAnnounce:getContentSize()
- local scrollContentSize = scrollview:getContentSize()
- local newContentSize = {width=textContentSize.width, height=math.min(scrollContentSize.height, textContentSize.height)}
- local newInnerSize = {width=textContentSize.width, height=math.max(newContentSize.height, textContentSize.height)}
- scrollview:setContentSize( newContentSize )
- scrollview:setInnerContainerSize( newInnerSize )
- textAnnounce:setPosition({x=newContentSize.width/2, y=textContentSize.height})
- end
- -- group cell
- local function createGroup(data)
- local root = CreateExport_launcher("server/module_announce_cell")
- local layout = root:getChildByName("Panel_1")
- layout:removeFromParent()
- local ui = ui_delegate(layout)
-
- -- 特性
- local trait = tonumber(data.typename) or 1
- ui.Image_trait:loadTexture(string.format(self.path .. "announce/word_hefubq_0%s.png", trait))
- -- 查看
- ui.Button_group:setTitleText(data.name)
- ui.Button_group:addClickEventListener( function()
- showDesc(data)
- end )
- return ui
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local serverData = modGameEnv:GetServerData()
- if nil == serverData then
- return
- end
- local announce = serverData.announce
- if nil == announce then
- return
- end
- -- filter
- local items = {}
- for i, v in ipairs(announce) do
- if v.type and tonumber(v.type) == 1 then
- tinsert(items, 1, v)
- else
- tinsert(items, v)
- end
- end
- for i, v in ipairs(items) do
- v.index = i
- local cell = createGroup(v)
- self._announceUI.ListView_group:pushBackCustomItem(cell.nativeUI)
- self._announceGroupCells[v.index] = cell
- end
- if #items > 0 then
- showDesc(items[1])
- end
- end
- function ModuleChooseLayer:OnClose()
- self:ReleaseServerCache()
- end
- function ModuleChooseLayer:OnDownloadResCB(isOK, filename, downloadFlag)
- if not isOK then
- return nil
- end
- if downloadFlag == self.DownloadFlag.Logo then
- self:UpdateLogo()
- elseif downloadFlag == self.DownloadFlag.AgeTips then
- self:UpdateAgeTipsImage()
- elseif downloadFlag == self.DownloadFlag.LogoMini then
- self:UpdateLogo()
- elseif downloadFlag == self.DownloadFlag.LogoMini2 then
- self:UpdateLogo()
- end
- end
- function ModuleChooseLayer:ShowAgreement()
- if self._agreementUI then
- self._agreementUI.nativeUI:removeFromParent()
- self._agreementUI = nil
- end
- if nil == self._currentModule or not self._currentSubMod then
- return
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- local content = modGameEnv:GetCustomDataByKey("agreement")
- if not content or string.len(content) == 0 then
- return nil
- end
- content = string.gsub(content, "<%s-br%s->", "<br></br>")
- content = string.gsub(content, "<%s-br%s-/>", "<br></br>")
- local root = CreateExport_launcher("server/agreement")
- self:addChild(root)
- self._agreementUI = ui_delegate(root)
- drawButtonColorStyle(self._agreementUI.Button_refuse, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- drawButtonColorStyle(self._agreementUI.Button_agree, {fontSize=18, color=cc.c3b(0xf8, 0xe6, 0xc6), outlineSize=3, outlineColor=cc.c3b(0x11,0x11,0x11)})
- -- agree
- local function agreeCB()
- self._agreementUI.nativeUI:removeFromParent()
- self._agreementUI = nil
- local launcherModID = global.L_ModuleManager:GetLauncherModuleID()
- local channelID = tostring(global.L_GameEnvManager:GetChannelID())
- local userData = UserData:new(launcherModID .. channelID .. "_data")
- userData:setIntegerForKey("agreement", 1)
- userData:writeMapDataToFile()
- end
- self._agreementUI.Button_agree:addClickEventListener(agreeCB)
- -- refuse
- local function refuseCB()
- local launcherModID = global.L_ModuleManager:GetLauncherModuleID()
- local channelID = tostring(global.L_GameEnvManager:GetChannelID())
- local userData = UserData:new(launcherModID .. channelID .. "_data")
- userData:setIntegerForKey("agreement", 0)
- userData:writeMapDataToFile()
- if global.isIOS then
- global.L_NativeBridgeManager:GN_accountLogout()
- global.L_GameEnvManager:RestartGame()
- else
- global.Director:endToLua()
- end
- end
- self._agreementUI.Button_refuse:addClickEventListener(refuseCB)
- -- 公告内容
- local RichTextHelp = requireLauncher( "init/RichTextHelp" )
- local scrollview = self._agreementUI.ScrollView_content
- local innerSize = scrollview:getInnerContainerSize()
- local richText = RichTextHelp:CreateRichTextWithXML(content, innerSize.width, 18, "#c9b39c")
- scrollview:addChild( richText )
- richText:formatText()
- richText:setAnchorPoint({x=0.5, y=1})
- richText:setOpenUrlHandler( function(sender, str)
- cc.Application:getInstance():openURL(str)
- end )
- local textContentSize = richText:getContentSize()
- local scrollContentSize = scrollview:getContentSize()
- local newContentSize = {width=textContentSize.width, height=math.min(scrollContentSize.height, textContentSize.height)}
- local newInnerSize = {width=textContentSize.width, height=math.max(newContentSize.height, textContentSize.height)}
- scrollview:setContentSize( newContentSize )
- scrollview:setInnerContainerSize( newInnerSize )
- richText:setPosition({x=newContentSize.width/2, y=textContentSize.height})
- end
- -- 内部显示隐私内容
- function ModuleChooseLayer:InsideShowNoticeContent( content )
- content = tostring(content) or ""
- -- root
- local visibleSize = cc.Director:getInstance():getVisibleSize()
- local Panel_1 = ccui.Layout:create()
- Panel_1:setName( "NOTICE_CONTENT" )
- Panel_1:setContentSize(visibleSize)
- Panel_1:setTouchEnabled( true )
- Panel_1:setSwallowTouches( true )
- self:addChild( Panel_1 )
- local clickCount = 0 --点击的内容url数量
- local clickUrl = false --是否是点击超链接进入的内容
- local clickCountUrls = {} --记录点击的内容的超链
- -- 背景图
- local csize = {width=600, height=400}
- local innerSize = {width=500,height=300}
- local Image_bg = ccui.ImageView:create()
- Image_bg:loadTexture(self.publicPath .. "1900000600.png",0)
- Image_bg:setPosition( visibleSize.width/2, visibleSize.height/2 )
- Image_bg:setTouchEnabled( true )
- Image_bg:setSwallowTouches( true )
- local x = 30
- local y = 30
- local width = 452-60
- local height = 179-60
- Image_bg:setScale9Enabled(true)
- Image_bg:setCapInsets({x = x, y = y, width = width, height = height})
- Image_bg:setContentSize(csize)
- Panel_1:addChild( Image_bg )
- local RichTextHelp = requireLauncher( "init/RichTextHelp" )
- local function UpdateContent( newContent )
- local listview = Image_bg:getChildByName("LISTVIEW_CONTENT")
- if listview then
- listview:removeAllChildren()
- -- 内容RichText
- local richText = RichTextHelp:CreateRichTextWithXML(newContent, innerSize.width, 18, "#FFFFFF")
- richText:formatText()
- listview:pushBackCustomItem( richText )
- richText:setOpenUrlHandler(function(sender,str)
- HTTPRequest(str, function(success,response)
- if success and response and string.len(response) > 0 then
- if success and response and string.len(response) > 0 then
- table.insert( clickCountUrls,str )
- clickCount = #clickCountUrls
- clickUrl = true
- UpdateContent( response )
- end
- end
- end)
- end)
- end
- end
- -- 确认按钮
- local Button_confirm = ccui.Button:create()
- Button_confirm:setPosition({x=csize.width/2, y=40})
- Button_confirm:loadTextureNormal(self.publicPath .. "1900001022.png")
- Button_confirm:loadTexturePressed(self.publicPath .. "1900001022.png")
- Button_confirm:setTouchEnabled(true)
- Button_confirm:setTitleFontName("fonts/font.ttf")
- Button_confirm:setTitleFontSize(18)
- Button_confirm:setTitleText("确 认")
- Button_confirm:addClickEventListener(function()
- if clickCount == #clickCountUrls then
- table.remove(clickCountUrls)
- end
- local url = table.remove(clickCountUrls)
- if url then
- HTTPRequest(url, function(success,response)
- if success and response and string.len(response) > 0 then
- UpdateContent( response )
- end
- end)
- return
- end
- if clickUrl then
- clickUrl = false
- UpdateContent( content )
- return
- end
- Panel_1:removeFromParent()
- Panel_1 = nil
- end)
- Image_bg:addChild(Button_confirm)
- -- 内容List
- local ListView_content = ccui.ListView:create()
- ListView_content:setName("LISTVIEW_CONTENT")
- ListView_content:ignoreContentAdaptWithSize(false)
- ListView_content:setClippingEnabled(true)
- ListView_content:setTouchEnabled(true)
- ListView_content:setAnchorPoint(0.5,1)
- ListView_content:setPosition( csize.width/2, 380)
- ListView_content:setContentSize( {width=550, height=300} )
- ListView_content:setInnerContainerSize( innerSize )
- Image_bg:addChild( ListView_content )
- -- 内容RichText
- local RichTextHelp = requireLauncher( "init/RichTextHelp" )
- local richText = RichTextHelp:CreateRichTextWithXML(content, innerSize.width, 18, "#FFFFFF")
- richText:formatText()
- ListView_content:pushBackCustomItem( richText )
- UpdateContent( content )
- end
- function ModuleChooseLayer:CheckAutoEnterGame()
- local envMgr = global.L_GameEnvManager
- local env_uid = envMgr:GetEnvDataByKey("uid")
- local env_token = envMgr:GetEnvDataByKey("token")
- local env_visitkey = envMgr:GetEnvDataByKey("visitkey")
- local env_isAutoEnterGame = envMgr:GetEnvDataByKey("isAutoEnterGame")
- local BoxAutoEnterGame = envMgr:GetEnvDataByKey("BoxAutoEnterGame")
- if env_uid and env_token and (env_visitkey or env_isAutoEnterGame or BoxAutoEnterGame) then
- if BoxAutoEnterGame then
- self.BoxAutoEnterGame = true
- self:UpdateEnvByKey("BoxAutoEnterGame",nil)
- end
- self:LaunchModule()
- return
- end
- local env_userId = envMgr:GetEnvDataByKey("user_id")
- local env_qqFirst = envMgr:GetEnvDataByKey("firstopen")
- if env_userId and env_token and tonumber(env_qqFirst) and tonumber(env_qqFirst) == 1 then
- if self.ui.CheckBox_agreement then
- self.ui.CheckBox_agreement:setSelected(true)
- end
- self:LaunchModule()
- end
- end
- function ModuleChooseLayer:updateBoxUI()
- -- 切换账号/返回盒子
- -- 区服大厅
- local HideGameList = function ()
- self.ui.Button_game_list:setVisible(false)
- local gameListY = self.ui.Button_game_list:getPositionY()
- local fixY = self.ui.Button_fix:getPositionY()
- self.ui.Button_fix:setPositionY(gameListY)
- self.ui.Button_share:setPositionY(fixY)
- end
- self.ui.Button_game:setTouchEnabled(false)
- if global.isBoxLogin or global.isUgc then
- if not global.isWindows then
- local btnTextStr = fixNewLanguageString( "返回盒子" )
- if global.isUgc then
- btnTextStr = fixNewLanguageString( "退出游戏" )
- end
- self.ui.Button_logout:setTitleText(btnTextStr)
- if global.L_GameEnvManager:GetEnvDataByKey("hideBackBox") == 1 then
- self.ui.Button_logout:setVisible(false)
- end
- if global.L_GameEnvManager:GetEnvDataByKey("platform") ~= "mac" then
- self.ui.Button_fix:setVisible(false)
- local fixY = self.ui.Button_fix:getPositionY()
- self.ui.Button_share:setPositionY(fixY)
- end
- end
- local boxConfig = global.L_GameEnvManager:GetEnvDataByKey("boxConfig")
- local hideServerList = global.L_GameEnvManager:GetEnvDataByKey("hideServerList")
- local showServer = hideServerList == 0 or hideServerList == nil
- if boxConfig and boxConfig ~= "" and showServer then
- self.ui.Button_game_list:setVisible(true)
- self._supportGameList = true
- else
- HideGameList()
- end
- else
- -- self.ui.Panel_game:setVisible(false)
- HideGameList()
- end
- end
- function ModuleChooseLayer:DecodeServerList(data) -- base64 -> des --ebc zeropadding
- local Array = require("lockbox.util.array");
- local Stream = require("lockbox.util.stream");
- local Base64 = require("lockbox.util.base64");
- local ECBMode = require("lockbox.cipher.mode.ecb");
- local ZeroPadding = require("lockbox.padding.zero");
- local DESCipher = require("lockbox.cipher.des");
- local decodeinfo = {
- mode = ECBMode,
- key = Array.fromString("v@K#KlYkLlH3BN&3%wM!BM99"),
- iv = Array.fromString(""),
- ciphertext=Base64.toStream(data),
- padding = ZeroPadding
- }
- local decipher = decodeinfo.mode.Decipher()
- .setKey(decodeinfo.key)
- .setBlockCipher(DESCipher)
- .setPadding(decodeinfo.padding);
- local res = decipher
- .init()
- .update(Stream.fromArray(decodeinfo.iv))
- .update(decodeinfo.ciphertext)
- .finish()
- .asBytes();
- return Array.toString(res)
- end
- function ModuleChooseLayer:OnLastSelectServerResp()
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if not modGameEnv then
- return nil
- end
- modGameEnv:ReadLastServers()
- self:UpdateSelected()
- end
- --showGameList
- function ModuleChooseLayer:ShowGameList()
- if global.isWindows then
- if getWindowsVersion then
- local versionStr = getWindowsVersion()
- local MajorVer = 10
- local MinorVer = 0
- local BuildNumber = 19045
- if versionStr and #versionStr > 0 then
- local verList = string.split(versionStr,"_")
- MajorVer = tonumber(verList[1]) or 10
- MinorVer = tonumber(verList[2]) or 0
- end
- --win7 6 1 win8 6 2
- if MajorVer <= 6 then
- if MinorVer <= 1 then
- global.L_SystemTipsManager:ShowTips("本功能暂不支持win7及以下版本")
- return
- end
- end
- end
- self.ui.Panel_webview:setVisible(true)
- self.ui.Panel_webview_tips:setVisible(true)
- local winSize = global.Director:getWinSize()
- local defaultSize = {width = winSize.width, height = winSize.height}--{width = 1050, height = 600}
- local showSize = defaultSize
- local minScale = 1
- -- if defaultSize.width > winSize.width or defaultSize.height > winSize.height then
- -- minScale = math.min(winSize.width / defaultSize.width , winSize.height / defaultSize.height)
- -- showSize.width = minScale * defaultSize.width
- -- showSize.height = minScale * defaultSize.height
- -- else
- -- showSize = defaultSize
- -- end
- if not ccexp.CustomView then --老版本可能没有
- return
- end
- local webview = ccexp.CustomView:create()
- if not webview.setWebToGameFunc then --老ie版本 打不开
- return
- end
- self._webView = webview
- local boxConfig = global.L_GameEnvManager:GetEnvDataByKey("boxConfig")
- local webUrl = global.L_GameEnvManager:GetEnvDataByKey("gameListUrl") or ""
- webview:setWebToGameFunc(function (param)
- -- releasePrint("setWebToGameFunc param is ", param)
- local jsonData = cjson.decode(param)
- local action = jsonData.action
-
- if action == "close" then
- self:HideGameList()
- return ""
- elseif action == "restart" then
- local envStr = jsonData.env
- local env = cjson.decode(envStr)
- env.gameListUrl = webUrl--游戏内启动需要保存一下地址
- -- 盒子 游戏大厅切换游戏 写入上报配置(PC盒子都一样)
- local appid = global.L_GameEnvManager:GetEnvDataByKey("sdkAppid")
- if appid then
- env.sdkAppid = appid
- end
- local secretKey = global.L_GameEnvManager:GetEnvDataByKey("sdkAppkey")
- if secretKey then
- env.sdkAppkey = secretKey
- end
- local channelid = global.L_GameEnvManager:GetEnvDataByKey("sdkChannel")
- if channelid then
- env.sdkChannel = channelid
- end
- envStr = cjson.encode(env)
- self:WriteEnvAndRestart(envStr)
- return ""
- elseif action == "getConfig" then
- return cjson.encode({
- boxConfig = boxConfig,
- viewScale = minScale,
- gameName = "cq"
- })
- end
- end)
- webview:setOnDidFinishLoading(function(sender, url)
- -- releasePrint("onWebViewDidFinishLoading, url is ", url)
- if url == webUrl or url == (webUrl .. "/") or url == ("http://" .. webUrl .. "/") or url == ("http://" .. webUrl) then
- self.ui.Panel_webview_tips:setVisible(false)
- end
- end)
- webview:setOnDidFailLoading(function(sender, url)
- releasePrint("setOnDidFailLoading, url is ", url)
- if url == webUrl or url == (webUrl .. "/") or url == ("http://" .. webUrl .. "/") or url == ("http://" .. webUrl) then
- global.L_SystemTipsManager:ShowTips("加载失败,请稍后再试~")
- self:HideGameList()
- end
- end)
- webview:setAnchorPoint(cc.p(0.5,0.5))
- webview:setContentSize(showSize.width,showSize.height)
- webview:setPosition(winSize.width/2 ,winSize.height/2)
- webview:loadURL(webUrl)
- self.ui.Panel_webview:addChild(webview)
- else
- --游戏大厅
- if global.L_NativeBridgeManager.GN_GameList then
- global.L_NativeBridgeManager:GN_GameList()
- end
- end
- -- 弹出用户协议提示 上报自定义事件
- local dataParam = {
- event={time=os.time(),name = "click_serverhall",type = "track"}
- }
- local userId = global.L_GameEnvManager:GetEnvDataByKey("user_id") or global.L_GameEnvManager:GetEnvDataByKey("uid")
- if userId and userId ~= "" then
- dataParam.user = {id = userId}
- end
- global.L_DataRePort:SendRePortData( dataParam )
- end
- function ModuleChooseLayer:WriteEnv(envStr)
- local fileutil = cc.FileUtils:getInstance()
- local envPath = ""
- if global.isWindows then
- local rootPath = fileutil:getDefaultResourceRootPath()
- envPath = rootPath .. "env.json"
- else
- local writePath = global.FileUtilCtl:getWritablePath()
- local launchDir = getNewFoldername("mod_launcher")
- envPath = writePath.. launchDir .. "/env.json"
- if not fileutil:isDirectoryExist(launchDir) then
- fileutil:createDirectory(launchDir)
- end
- end
- if fileutil:isFileExist(envPath) then
- fileutil:removeFile(envPath)
- end
- fileutil:writeStringToFile(envStr, envPath)
- end
- function ModuleChooseLayer:UpdateEnvByKey(key, value)
- local fileutil = cc.FileUtils:getInstance()
- local envPath = ""
- if global.isWindows then
- local rootPath = fileutil:getDefaultResourceRootPath()
- envPath = rootPath .. "env.json"
- else
- local writePath = global.FileUtilCtl:getWritablePath()
- local launchDir = getNewFoldername("mod_launcher")
- envPath = writePath.. launchDir .. "/env.json"
-
- end
- local jsonData = global.L_GameEnvManager:GetEnvData("new_boxtoken")
- jsonData[key] = value
- local jsonStr = cjson.encode(jsonData)
- fileutil:writeStringToFile(jsonStr, envPath)
- end
- function ModuleChooseLayer:WriteEnvAndRestart(envStr)
- self:WriteEnv(envStr)
- global.L_GameEnvManager:RestartGame()
- end
- --新用户 推荐服等设置
- function ModuleChooseLayer:ParseShowHideSrvitem()
- if not self._currentModule or not self._currentSubMod then
- return
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- local serverData = modGameEnv:GetServerData()
- local jsonData = serverData.source
- local referArrAble = false
- local stateHide = {}
- local refer = modGameEnv:GetRefer()
- local referArr = jsonData.referArr
- local referOnlyOne = jsonData.referOnlyOne --只展示一个 推荐
- if referArr and next(referArr) then
- referArrAble = true
- -- 推荐服组除了随到的其他服全隐藏
- for i, v in ipairs(referArr) do
- if refer and v ~= refer then
- stateHide[v] = 1
- end
- end
- end
- local hidesrvGroup = {}
- if self._existLastMod == false then
- -- 服务器组tag为key,新用户隐藏组功能
- if serverData.srvgroup and type(serverData.srvgroup) == "table" then
- for i, v in ipairs(serverData.srvgroup) do
- hidesrvGroup[v.tag] = (1 == tonumber(v.hide))
- end
- end
- end
- for i, srvitem in ipairs(serverData.srvlist) do
- local srvid = srvitem.serverId
- srvitem.state = srvitem.oriState
- --新用户
- if self._existLastMod == false then
- if referArrAble and refer then
- --推荐服没随到的都隐藏
- if stateHide[srvid] then
- --隐藏
- srvitem.state = 5-- 状态 1新服,2畅通,3爆满,4维护,5隐藏
- end
- --非审核状态
- if not global.L_GameEnvManager:IsReview() then
- local srvid = tonumber(srvid)
- local refer = tonumber(refer)
- local referOnlyOne = tonumber(referOnlyOne)
- if srvid and refer then
- --
- if (srvitem.state <= 3 and srvid > refer) or (referOnlyOne == 1 and srvid ~= refer) then
- srvitem.state = 5
- end
- end
- if hidesrvGroup[srvitem.tag] then
- srvitem.state = 5
- end
- end
- end
- else
- --老用户
- if referArrAble and refer then
- if stateHide[srvid] then
- --爆满
- srvitem.state = 3
- end
- end
- end
- end
- end
- function ModuleChooseLayer:UpdateServersWhenRoleInfoGet()
- --获取到角色数据了。。。。
- self._existLastMod = true
- self:ParseShowHideSrvitem()
- self:UpdateServers()
- end
- function ModuleChooseLayer:RequestCustomURL(customURL)
- if not customURL then
- return nil
- end
- self._customCount = self._customCount + 1
- local function reportError(str, callback)
- local tipsData = {
- btnType = 1,
- str = str,
- callback = callback
- }
- global.L_CommonTipsManager:OpenLayer( tipsData )
- end
- local function callback()
- self:RequestCustomURL(customURL)
- end
- ----------------------------------------
- local function httpCB(success, response, url, code)
- HideLoadingBar()
- -- 拉取失败,网络原因
- if not success then
- if self._customCount >= 3 then
- reportError("[customURL][0]远端数据获取异常,点击“确认”重试\n多次失败请联系客服", callback)
- -- 上报至服务器
- global.L_DataRePort:ReportErrorModlistURL("CUSTOMURL_REQUEST_FAILED", "-3010", "Request customURL ERROR, CODE ERROR", url, code)
- else
- callback()
- end
- return nil
- end
- -- 拉取失败,内容空
- if not response then
- if self._customCount >= 3 then
- reportError("[customURL][1]远端数据获取异常,点击“确认”重试\n多次失败请联系客服", callback)
- -- 上报至服务器
- global.L_DataRePort:ReportErrorModlistURL("CUSTOMURL_REQUEST_FAILED", "-3011", "Request customURL ERROR, RESPONSE ERROR", url, code)
- else
- callback()
- end
- return nil
- end
-
- local isOk, jsonData = pcall(function ()
- -- body
- return cjson.decode(response)
- end)
- -- json解析,检测是否解析成功
- if not isOk then
- reportError("[customURL][2]远端服务器配置格式异常,点击“确认”重试\n多次失败请联系客服", callback)
- -- 上报至服务器
- global.L_DataRePort:ReportErrorModlistURL("CUSTOMURL_REQUEST_FAILED", "-3013", "Request customURL ERROR, JSON ERROR"..response, url, code)
- return nil
- end
- self._customCount = 0
- if not self._currentModule or not self._currentSubMod then
- return nil
- end
- local modGameEnv = self._currentSubMod:GetGameEnv()
- if modGameEnv:GetCustomUrl() ~= customURL then
- return nil
- end
- for k, v in pairs(jsonData) do
- modGameEnv:SetCustomDataByKey(k, v)
- end
- modGameEnv:SetCustomIsLoaded(true)
- self:OnCustomData(true)
- end
- local str = string.match(customURL, "/(custom/.*/.*)")
- local srvlistData = str and str or ""
- local timestamp = os.time()
- local signKey = global.L_GameEnvManager:GetModlistSignKey()
- local sign = get_str_MD5("data=" .. srvlistData .. "&key=" .. signKey .. "&time="..timestamp)
- local customURL2 = customURL .. string.format("?time=%s&sign=%s", timestamp, sign)
- releasePrint("customURL:", customURL2)
- if customURL2 and string.len(customURL2) > 0 then
- ShowLoadingBar()
- HTTPRequest(customURL2, httpCB)
- end
- end
- return ModuleChooseLayer
|