Builds / 1.14.88
Update 1.14.88
Compared with 1.14.86 · published Sat, 26 Sep 2026 09:43:03 GMT · live channel
No summary yet.
Text changes 1
| Key | Text | |
|---|---|---|
| GAME_1850 | + | Call of Twilight can only take you to a wave at or below your recorded highest wave. |
Translations touched: de (1), es (1), fr (1), id (1), it (1), ja (1), ko (1), pl (1), pt (1), ru (1), th (1), tr (1), vi (1), zh-CN (1), zh-TW (1)
Code 14 changes in 6 classes
Minified client code with short names blanked for diffing. Class names are real.
- TreasureDetailPopup 33
- TimeShiftManager 5
- LanguageManager 2
- VersionManager 1
- TimeShiftGaugeIcon 1
- BattleController 1
TreasureDetailPopup 7 hunks, 33 statements
- super(),Xt(this,"abilityBg"),Xt(this,"setBg"),Xt(this,"icon",new HJt),Xt(this,"lblName",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblMaxLevel",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblAbilityTitle",new yD("유물능력",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"buffInfo1",new ZJt),Xt(this,"buffInfo2",new ZJt),Xt(this,"lblBuffDesc1",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_DESC_FONT_OPTION_16)),Xt(this,"lblBuffDesc2",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_DESC_FONT_OPTION_16)),Xt(this,"lblSetTitle",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"setContainer",new He),Xt(this,"tierLabels",[]),Xt(this,"skillLabels",[]),Xt(this,"setIcons",[]),Xt(this,"lblFooter",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_FONT_OPTION_16)),Xt(this,"lblHonorCoin",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"btnAction",new fF("UI_GEM","","",.8,160,60)),Xt(this,"btnLimitBreak",new fF("PVP_COIN_ON","","",.7,180,60)),Xt(this,"btn10LimitBreak",new fF("PVP_COIN_ON","","+10",.7,180,60)),Xt(this,"btn100LimitBreak",new fF("PVP_COIN_ON","","+100",.7,180,60)),Xt(this,"btnMaxLimitBreak",new fF("PVP_COIN_ON","","MAX",.7,180,60)),Xt(this,"multiLimitBreakContainer",new He),Xt(this,"btnResetLimitBreak",new fF("UI_GEM_ICON","","",.7,180,60)),Xt(this,"contentContainer",new He),Xt(this,"vo"),Xt(this,"mode","unequip"),Xt(this,"limitBreakTimer",null),Xt(this,"limitBreakStartValue",-1),Xt(this,"limitBreakStartHonorCoin",-1),Xt(this,"hideHandler",null),Xt(this,"requestPending",!1),Xt(this,"bookVo"),this.bg.height<850&&(this.bg.height=850,this.y=Xy.safeHeight-850),this.addChild(this.contentContainer),this.icon.hideFrame(),this.icon.x=11,this.icon.y=50,this.contentContainer.addChild(this.icon),this.lblName.x=this.icon.x+this.icon.width+20,this.lblName.y=this.icon.y+5,this.contentContainer.addChild(this.lblName),this.lblMaxLevel.x=this.lblName.x,this.lblMaxLevel.y=this.lblName.y+this.lblName.height+8,this.contentContainer.addChild(this.lblMaxLevel),this.abilityBg=new nU,this.abilityBg.setIndex(2),this.abilityBg.width=620,this.abilityBg.height=130,this.abilityBg.x=11,this.abilityBg.y=this.icon.y+this.icon.height+15,this.contentContainer.addChild(this.abilityBg),this.lblAbilityTitle.text=sB.getText("GAME_146","유물능력"),this.lblAbilityTitle.x=this.abilityBg.x+15,this.lblAbilityTitle.y=this.abilityBg.y+8,this.contentContainer.addChild(this.lblAbilityTitle),this.buffInfo1.x=this.lblAbilityTitle.x,this.buffInfo1.y=this.lblAbilityTitle.y+30,this.lblBuffDesc1.x=this.lblAbilityTitle.x,this.lblBuffDesc1.y=this.buffInfo1.y+2,this.contentContainer.addChild(this.lblBuffDesc1),this.buffInfo2.x=this.lblAbilityTitle.x,this.buffInfo2.y=this.buffInfo1.y+28,this.lblBuffDesc2.x=this.lblAbilityTitle.x,this.lblBuffDesc2.y=this.buffInfo2.y+2,this.contentContainer.addChild(this.lblBuffDesc2); + super(),Xt(this,"abilityBg"),Xt(this,"setBg"),Xt(this,"icon",new HJt),Xt(this,"lblName",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblMaxLevel",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"lblAbilityTitle",new yD("유물능력",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"buffInfo1",new ZJt),Xt(this,"buffInfo2",new ZJt),Xt(this,"lblBuffDesc1",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_DESC_FONT_OPTION_16)),Xt(this,"lblBuffDesc2",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_DESC_FONT_OPTION_16)),Xt(this,"lblSetTitle",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"setContainer",new He),Xt(this,"tierLabels",[]),Xt(this,"skillLabels",[]),Xt(this,"setIcons",[]),Xt(this,"lblFooter",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_FONT_OPTION_16)),Xt(this,"lblHonorCoin",new yD("",IL.DEFAULT_COLOR,IL.DEFAULT_OUTLINE_FONT_OPTION_16)),Xt(this,"btnAction",new fF("UI_GEM","","",.8,160,60)),Xt(this,"btnLimitBreak",new fF("PVP_COIN_ON","","",.7,180,60)),Xt(this,"btn10LimitBreak",new fF("PVP_COIN_ON","","+10",.7,180,60)),Xt(this,"btn100LimitBreak",new fF("PVP_COIN_ON","","+100",.7,180,60)),Xt(this,"btnMaxLimitBreak",new fF("PVP_COIN_ON","","MAX",.7,180,60)),Xt(this,"multiLimitBreakContainer",new He),Xt(this,"btnResetLimitBreak",new fF("UI_GEM_ICON","","",.7,180,60)),Xt(this,"contentContainer",new He),Xt(this,"vo"),Xt(this,"mode","unequip"),Xt(this,"limitBreakTimer",null),Xt(this,"limitBreakStartValue",-1),Xt(this,"limitBreakStartHonorCoin",-1),Xt(this,"limitBreakSyncPromise",null),Xt(this,"hideHandler",null),Xt(this,"requestPending",!1),Xt(this,"bookVo"),this.bg.height<850&&(this.bg.height=850,this.y=Xy.safeHeight-850),this.addChild(this.contentContainer),this.icon.hideFrame(),this.icon.x=11,this.icon.y=50,this.contentContainer.addChild(this.icon),this.lblName.x=this.icon.x+this.icon.width+20,this.lblName.y=this.icon.y+5,this.contentContainer.addChild(this.lblName),this.lblMaxLevel.x=this.lblName.x,this.lblMaxLevel.y=this.lblName.y+this.lblName.height+8,this.contentContainer.addChild(this.lblMaxLevel),this.abilityBg=new nU,this.abilityBg.setIndex(2),this.abilityBg.width=620,this.abilityBg.height=130,this.abilityBg.x=11,this.abilityBg.y=this.icon.y+this.icon.height+15,this.contentContainer.addChild(this.abilityBg),this.lblAbilityTitle.text=sB.getText("GAME_146","유물능력"),this.lblAbilityTitle.x=this.abilityBg.x+15,this.lblAbilityTitle.y=this.abilityBg.y+8,this.contentContainer.addChild(this.lblAbilityTitle),this.buffInfo1.x=this.lblAbilityTitle.x,this.buffInfo1.y=this.lblAbilityTitle.y+30,this.lblBuffDesc1.x=this.lblAbilityTitle.x,this.lblBuffDesc1.y=this.buffInfo1.y+2,this.contentContainer.addChild(this.lblBuffDesc1),this.buffInfo2.x=this.lblAbilityTitle.x,this.buffInfo2.y=this.buffInfo1.y+28,this.lblBuffDesc2.x=this.lblAbilityTitle.x,this.lblBuffDesc2.y=this.buffInfo2.y+2,this.contentContainer.addChild(this.lblBuffDesc2);
- (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&this.syncLimitBreakToServer(),super.hide(),this.hideHandler&&(this.hideHandler(),this.hideHandler=null)} + this.hasPendingLimitBreak()&&this.syncLimitBreakToServer(),super.hide(),this.hideHandler&&(this.hideHandler(),this.hideHandler=null)}
- (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&await this.syncLimitBreakToServer(),"unequip"===this.mode?this.onUnequip():"equip"===this.mode&&this.onEquip()} + this.hasPendingLimitBreak()&&await this.syncLimitBreakToServer(),"unequip"===this.mode?this.onUnequip():"equip"===this.mode&&this.onEquip()}
+ if(this.limitBreakSyncPromise)return void pH.getInstance().showMessage(sB.getText("GAME_LOADING","잠시 후 다시 시도해주세요."));
- async syncLimitBreakToServer(){ - if(this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),-1===this.limitBreakStartValue||!this.vo)return this.resetLimitBreak(),!0; + syncLimitBreakToServer(){ + if(this.limitBreakSyncPromise)return this.limitBreakSyncPromise; + if(this.limitBreakTimer&&(clearTimeout(this.limitBreakTimer),this.limitBreakTimer=null),-1===this.limitBreakStartValue||!this.vo)return this.resetLimitBreak(),Promise.resolve(!0);
- if(t<=0)return this.resetLimitBreak(),!0; - const i=this.vo.kindNum,s=this.limitBreakStartValue,e=this.limitBreakStartHonorCoin,n=await SL.getInstance().treasure.limitBreak(i,t); - return!1===n.success?(this.vo&&this.vo.kindNum===i&&(this.vo.limitBreak=s),qD.honorCoin=e,IH.getInstance().updateAll(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout()),N8t.getInstance().setData(),AQt.getInstance().setData(),this.resetLimitBreak(),KG.getInstance().showError(n),!1):(qD.setUserInfo(n.body),JR.getInstance().setData(n.body.treasure,n.body.dungeon),IH.getInstance().updateAll(),N8t.getInstance().setData(),AQt.getInstance().setData(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout()),this.resetLimitBreak(),!0)} + if(t<=0)return this.resetLimitBreak(),Promise.resolve(!0); + const i=this.vo.kindNum,s=this.limitBreakStartValue,e=this.limitBreakStartHonorCoin; + return this.resetLimitBreak(),this.limitBreakSyncPromise=this.requestLimitBreak(i,t,s,e).finally(()=>{ + this.limitBreakSyncPromise=null} + ),this.limitBreakSyncPromise} + hasPendingLimitBreak(){ + return null!==this.limitBreakTimer||-1!==this.limitBreakStartValue||null!==this.limitBreakSyncPromise} + async requestLimitBreak(t,i,s,e){ + let n; + try{ + n=await SL.getInstance().treasure.limitBreak(t,i)} + catch(Qnt){ + n={ + success:!1,error:"NETWORK_ERROR",errorMessage:sB.getText("COMMON_77","네트워크 오류가 발생하였습니다.")} + } + return!1===n.success?(await this.recoverLimitBreakFromServer(t,s,e),KG.getInstance().showError(n),!1):(qD.setUserInfo(n.body),JR.getInstance().setData(n.body.treasure,n.body.dungeon),this.refreshAfterLimitBreak(),!0)} + async recoverLimitBreakFromServer(t,i,s){ + let e=null; + try{ + e=await SL.getInstance().treasure.getMyTreasureList()} + catch(Qnt){ + e=null} + e&&!1!==e.success&&e.body?(qD.setUserInfo(e.body),JR.getInstance().setData(e.body.treasure,e.body.dungeon)):(this.vo&&this.vo.kindNum===t&&(this.vo.limitBreak=i),qD.honorCoin=s),this.refreshAfterLimitBreak()} + refreshAfterLimitBreak(){ + IH.getInstance().updateAll(),N8t.getInstance().setData(),AQt.getInstance().setData(),this.vo&&(this.updateTreasureInfo(this.vo),this.updateActionButton(),this.updateLayout())}
- (this.limitBreakTimer||-1!==this.limitBreakStartValue)&&await this.syncLimitBreakToServer(); + this.hasPendingLimitBreak()&&await this.syncLimitBreakToServer();
TimeShiftManager 3 hunks, 5 statements
+ static isWithinMaxWave(t){ + return Number.isFinite(t)&&t>0&&t<=qD.maxWave}
- return this.isUnlocked&&this._autoEnabled&&this.hasStack&&this.isNightWave(t)&&!this.isNightWave(t+1)} + return this.isUnlocked&&this._autoEnabled&&this.hasStack&&this.isNightWave(t)&&!this.isNightWave(t+1)&&this.isWithinMaxWave(this.nightStartOf(t+1))}
- return this.consume()?this.nightStartOf(t+1):t+1} + const i=this.nightStartOf(t+1); + return this.isWithinMaxWave(i)&&this.consume()?i:t+1}
LanguageManager 1 hunks, 2 statements
+ case"INSUFFICIENT_HONOR_COIN":case"LACK_OF_HONOR_COIN":s=t.getText("GAME_194","명예코인이 부족합니다."); + break;
VersionManager 1 hunks, 1 statements
- qt(Jy,"VersionManager"),Xt(Jy,"gameId","ef2"),Xt(Jy,"appVersion","1.14.86"); + qt(Jy,"VersionManager"),Xt(Jy,"gameId","ef2"),Xt(Jy,"appVersion","1.14.88");
TimeShiftGaugeIcon 1 hunks, 1 statements
- "blocked"!==t&&("ok"===t?(R1t.consume(),pH.getInstance().showMessage(sB.getText("GAME_1570","황혼의 부름으로 밤이 되었습니다."))):"lastDay"===t?pH.getInstance().showMessage(sB.getText("GAME_1572","곧 밤이 됩니다.")):pH.getInstance().showMessage(sB.getText("GAME_1571","밤에는 황혼의 부름을 사용할 수 없습니다.")))} + "blocked"!==t&&("maxWave"!==t?"ok"===t?(R1t.consume(),pH.getInstance().showMessage(sB.getText("GAME_1570","황혼의 부름으로 밤이 되었습니다."))):"lastDay"===t?pH.getInstance().showMessage(sB.getText("GAME_1572","곧 밤이 됩니다.")):pH.getInstance().showMessage(sB.getText("GAME_1571","밤에는 황혼의 부름을 사용할 수 없습니다.")):pH.getInstance().showMessage(sB.getText("GAME_1850","황혼의 부름은 기존 최고층 이내에서만 사용할 수 있습니다.")))}
BattleController 1 hunks, 1 statements
- return WU.getInstance().getScenarioForWave(this.currentScenarioId,i)?(qD.wave=i,this.currentWave=i,Yci.getInstance().updateDay(qD.wave),this.startNewWave(),"ok"):"blocked"} + return R1t.isWithinMaxWave(i)?WU.getInstance().getScenarioForWave(this.currentScenarioId,i)?(qD.wave=i,this.currentWave=i,Yci.getInstance().updateDay(qD.wave),this.startNewWave(),"ok"):"blocked":"maxWave"}