import SKUIUtil from "./gear_2.3.4/util/SKUIUtil"; import FGUtil from "./gear_2.3.4/fgui/FGUtil"; import GameUtil from "./core/GameUtil"; import SKDataUtil from "./gear_2.3.4/util/SKDataUtil"; import GameModel from "./core/GameModel"; import MsgAlert from "./game/msg/MsgAlert"; import FGAlert from "./gear_2.3.4/fgui/FGAlert"; const { ccclass, property } = cc._decorator; export default class PetRefine extends cc.Component { /** * 單例實例 */ public static Instance: PetRefine = null; /** * 主面板 */ refinePanel: fgui.GComponent = null; refineList: any = []; selectId: number = 0; petLogic: any = null; tipWarn: boolean = false; curLevel: number = 0; tipHighWarn: boolean = false; inCD: boolean = false; onLoad() { if (PetRefine.Instance === null) { PetRefine.Instance = this; } else { this.destroy(); return; } } openEquipRefinePanel(listData: any, curLevel) { this.curLevel = curLevel if (!SKUIUtil.isFGUIValid(this.refinePanel)) { this.refinePanel = FGUtil.create("main_ui", "priview_pet_more_panel"); FGUtil.root().addChild(this.refinePanel); this.refinePanel.makeFullScreen(); } this.refineList = listData; FGUtil.getButton(this.refinePanel, "alert/back").onClick(this.backClick, this); FGUtil.getButton(this.refinePanel, "alert/coast").onClick(this.changeRefine, this); FGUtil.getButton(this.refinePanel, "alert/change").onClick(this.changeProp, this); var hasNum = GameModel.player.itemList[10118] == null ? 0 : GameModel.player.itemList[10118] FGUtil.getRichTextField(this.refinePanel, "alert/num").text = `[color=#${hasNum > 30 ? "00A03C" : "FB8C84"}]${hasNum}[/color]/30` for (let i = 0; i < 6; i++) { var item = FGUtil.getComponent(this.refinePanel, `alert/n${i}`); var data = listData[i]; let info = { cur_aptitude: data.aptitude, rate: data.rate / 10000, cur_hp: data.hp, cur_mp: data.mp, cur_atk: data.atk, cur_spd: data.spd, max_rate: data.maxrate / 10000, max_hp: 0, max_mp: 0, max_atk: 0, max_spd: 0, }; if (info.cur_aptitude > this.curLevel) this.tipHighWarn = true for (let key in GameModel.conf_pet) { if (GameModel.conf_pet.hasOwnProperty(key)) { let item = GameModel.conf_pet[key]; if (key == this.petLogic.dataid) { info.max_hp = JSON.parse(item.hp)[1]; info.max_mp = JSON.parse(item.mp)[1]; info.max_atk = JSON.parse(item.atk)[1]; info.max_spd = JSON.parse(item.spd)[1]; } } } var tips = ["[color=#009F3C]資質平平[/color]", "[color=#5666F4]出類拔萃[/color]", "[color=#D887F5]妙領天機[/color]", "[color=#B2521B]萬中無一[/color]"]; if (!this.tipWarn) this.tipWarn = info.cur_aptitude == 3; FGUtil.getRichTextField(item, "n13").text = tips[info.cur_aptitude] || tips[0]; FGUtil.getTextField(item, "chengzhang").text = `${info.rate.toFixed(3)}/${info.max_rate.toFixed(3)}`; var qixuePb = FGUtil.getProgressBar(item, "qixue"); qixuePb.max = info.max_hp qixuePb.value = info.cur_hp var faliPb = FGUtil.getProgressBar(item, "fali"); faliPb.max = info.max_mp faliPb.value = info.cur_mp var gongjiPb = FGUtil.getProgressBar(item, "gongji"); gongjiPb.max = info.max_atk gongjiPb.value = info.cur_atk var suduPb = FGUtil.getProgressBar(item, "sudu"); suduPb.max = info.max_spd suduPb.value = info.cur_spd var level = 0 for (let i = 1; i <= 5; i++) { if (info.rate / info.max_rate * 0.99 >= i / 5) level++ } FGUtil.getControl(item, "level").selectedIndex = level item.node["idx"] = i item.onClick(this.ClickRefineItem, this) } } ClickRefineItem(e: Event) { var id = 0; if (e && e.target && SKDataUtil.hasProperty(e.target, "idx")) id = e.target["idx"]; if (id == this.selectId) return; FGUtil.getControl(this.refinePanel, `alert/n${this.selectId}/selected`).selectedIndex = 0 FGUtil.getControl(this.refinePanel, `alert/n${id}/selected`).selectedIndex = 1 this.selectId = id } backClick() { FGUtil.dispose(this.refinePanel); this.refinePanel = null; } changeProp() { this.tipWarn = false this.tipHighWarn = false GameModel.send("c2s_save_petproperty", { petid: this.petLogic.petid, info: JSON.stringify(this.refineList[this.selectId]) }) this.backClick() } changeRefine() { if (this.inCD) { MsgAlert.addMsg("您點擊太快啦") return; } this.inCD = true this.scheduleOnce(() => { this.inCD = false }, 0.8) if (this.tipWarn) { FGAlert.show("預覽中存在萬中無一的資質,確定要重新洗練麼?", () => { FGAlert.hide() }, () => { FGAlert.hide() this.tipWarn = false this.tipHighWarn = false this.changeRefine() }) return } // if (this.tipHighWarn) { // FGAlert.show("預覽中有更高評級,確定要重新洗練麼?", () => { // FGAlert.hide() // }, () => { // FGAlert.hide() // this.tipWarn = false // this.tipHighWarn = false // this.changeRefine() // }) // return // } this.tipWarn = false this.tipHighWarn = false if (GameModel.player.itemList[10118] && GameModel.player.itemList[10118] >= 30) GameModel.player.itemList[10118] -= 30; else { MsgAlert.addMsg("金柳露不足") return; } GameModel.send('c2s_wash_petproperty', { petid: this.petLogic.petid, dataid: this.petLogic.dataid, washtaype: 2 }); } }