//********************* // create by 流云 // time: Wed Sep 10 2025 // desc: //********************* import { _decorator, Component, Node, find, Label, instantiate, RichText, Sprite } from 'cc'; import { Auto_WeaponLevelUp } from './Auto_WeaponLevelUp'; import { SpriteLoad } from 'db://assets/mx/components/SpriteLoad'; import { GPath, GBundle, UIID } from '../../game/ConfigRes'; import { GEvent } from 'db://assets/mx/module/event/GEvent'; import { SkillDataManager } from '../../manager/SkillDataManager'; import { StatisticsType, TaskType } from '../../game/GameData'; import MTools from 'db://assets/mx/tools/MTools'; import { ConstEnum } from '../../manager/ConstManager'; import { sdkConfig } from '../../sdk/sdkConfig'; import { TargetTaskType } from '../../manager/TargetTaskManager'; const { ccclass, property } = _decorator; @ccclass('UIWeaponLevelUp') export class UIWeaponLevelUp extends Auto_WeaponLevelUp { //武器id weaponId: number = 0 //武器等级 weaponLevel: number = 1 //装备状态 0未拥有1已拥有2已装备 equippedStatus: number = 0 //在装备区的位置 equippedPos: number = -1 weaponSPNum: number = 0; needNum: number = 0; maxLevel = 50 isCloselayer = false onLoad(): void { super.onLoad(); } onEnable(): void { super.onEnable(); } onDisable(): void { super.onDisable(); } onInit(): void { this.showOpenCenterEff(); this.showOpenMaskEff(2); this.weaponId = this.prema[0] this.refreshView() this.scheduleOnce(() => { this.showGuide() }, 0.3) this.scheduleOnce(() => { this.isCloselayer = true }, 0.5) } showGuide() { if (gg.data.getStatistics(StatisticsType.homeGuideIndex) == 3) { let toggle = this.node.getChildByName('guideNode') gg.ui.openPanel(UIID.NewGuideMask, { data: [ [toggle], [gg.lang.get('升级武器会增加基础属性,达到特定等级会解锁新技能')], () => { this.scheduleOnce(() => { //点击升级 this.close() //引导点击战斗 GEvent.Ins.emit(GEvent.homeGuideIndexEvent, 3) }, 0.03) }, true, 255 ] }) } } showLiulianGuide(){ if(gg.data.getStatistics(StatisticsType.LiulianGuideIndex) == 3){ gg.sdk.reportDY("inLevel", `章节1_5-引导点击使用`); let toggle = this.node.getChildByName('guideNode2') gg.ui.openPanel(UIID.NewGuideMask, { data: [ [toggle], [gg.lang.get('点击上阵榴莲')], () => { //引导替换武器 gg.data.setStatistics(StatisticsType.LiulianGuideIndex, 4) setTimeout(()=>{ GEvent.Ins.emit(GEvent.LiulianGuideIndexEvent) },50) }, true, 255 ] }) } } /**刷新界面 */ refreshView() { let conf = gg.data.project.getWeaponData(this.weaponId); this.weaponLevel = gg.data.project.getWeaponLevel(this.weaponId); this.weaponSPNum = gg.data.getItemNum(conf.scrapId); //已经拥有的碎片 this.needNum = gg.data.project.getWeaponFlagNumByLevel(this.weaponId)//需要的碎片升级 let maxLevel = gg.data.table.getConst(ConstEnum.WeaponMaxLevel); this.maxLevel = maxLevel; this.showProperty() this.showSkillInfo() } /**显示属性 */ showProperty() { let config: ITableWeapon2 = gg.data.project.getWeaponData(this.weaponId); let itemData = gg.data.table.getItemData(config.itemID) let levelPara = gg.data.project.getLevelParaByWeaponLevel(this.weaponLevel, this.weaponId) this.lb_weaponName.string = gg.lang.get(config.name) if (config.weapon_para) { //攻击力 this.ui_center.getChildByName('生命值').active = false this.lb_health.node.active = false this.ui_center.getChildByName('攻击').active = true this.lb_att.node.active = true let attack = gg.data.getPlayerAtkCoefficient() let allAttack = Math.floor(config.weapon_para * attack * levelPara) this.lb_att.string = `${allAttack.toFixed(0)}` } if (config.weapon_para) { //生命值 this.ui_center.getChildByName('攻击').active = false this.lb_att.node.active = false this.ui_center.getChildByName('生命值').active = true this.lb_health.node.active = true let attack = gg.data.getPlayerAtkCoefficient() let allHealth = Math.floor(config.weapon_para * attack * levelPara) this.lb_health.string = `${allHealth.toFixed(0)}` } //名称 this.lb_weaponName.string = gg.lang.get(config.name) //冷却 let cdNum = gg.data.getPlayerCoolCoefficient() // 这里不能先 floor,<1s 的 CD 会被截断成 0(显示 0.0s) let jisuanCd = config.cd / (1 + cdNum / 10000) this.lb_cd.string = `${jisuanCd.toFixed(1)}` + 's' //射程 this.lb_dis.string = `${config.range}` //icon信息 this.ui_iconInfo.getChildByName('itemSpr').getComponent(SpriteLoad).setSprite(GPath.WeaponLevelUp(`物品底${config.quality}`), GBundle.WeaponLevelUp); this.ui_iconInfo.getChildByName('iconSpr').getComponent(SpriteLoad).setSprite(GPath.Item(itemData.icon), GBundle.Items); this.ui_iconInfo.getChildByName('lb_level').getComponent(Label).string = `Lv.${this.weaponLevel}` //this.curLevelLab.string = `LV.${this.weaponLevel} >> LV.${this.weaponLevel+1}` this.lb_curLevel1.string = this.weaponLevel + '' this.lb_curLevel2.string = (this.weaponLevel + 1) + '' if (this.weaponLevel >= this.maxLevel) { this.ui_iconInfo.getChildByName('lb_progress').getComponent(Label).string = gg.lang.get('已满级') this.ui_iconInfo.getChildByName('progress').getComponent(Sprite).fillRange = 1 //this.curLevelLab.string = '已满级' this.ui_dengjikuang.active = false } else { this.ui_iconInfo.getChildByName('lb_progress').getComponent(Label).string = `${this.weaponSPNum}/${this.needNum}` this.ui_iconInfo.getChildByName('progress').getComponent(Sprite).fillRange = this.weaponSPNum / this.needNum } //按钮状态 let isflagNum = this.needNum <= this.weaponSPNum //碎片数满足 let isMax = this.weaponLevel >= this.maxLevel //是否满级 if (!gg.data.project.isWeaponUnlocked(this.weaponId)) { //未拥有 this.btnLevelUp.active = false this.btnLevelUpNo.active = false this.btnUse.active = false this.btnRemove.active = false } else { //已拥有 if (!isMax) { this.btnLevelUp.active = isflagNum && this.weaponLevel < this.maxLevel this.btnLevelUpNo.active = !this.btnLevelUp.active } else { this.btnLevelUp.active = false this.btnLevelUpNo.active = false this.btnLevelUpMax.active = true } this.btnUse.active = true this.btnRemove.active = false } if (gg.data.project.isWeaponEquipped(this.weaponId) >= 0) { //已装备 if (!isMax) { this.btnLevelUp.active = isflagNum && this.weaponLevel < this.maxLevel this.btnLevelUpNo.active = !this.btnLevelUp.active } else { this.btnLevelUp.active = false this.btnLevelUpNo.active = false this.btnLevelUpMax.active = true } this.btnUse.active = false this.btnRemove.active = true } } /**显示技能条 */ showSkillInfo() { this.ui_content.destroyAllChildren() let data: ITableWeapon2 = gg.data.project.getWeaponData(this.weaponId) this.initSingleItem(data); } /**生成单个技能卡片 */ initSingleItem(weaponConfig: ITableWeapon2) { //有解锁技能 //技能特殊技能skill 1,52;2,48;2,49;2,50;3,53;4,54;5,55;6,56 //等级this.weaponLevel < skill[i][0] let skill = MTools.deepClone(weaponConfig.skill.split(';')) // let newSkill = [] //例如skill == 1,52;2,48;2,49;2,50;3,53;4,54;5,55;6,56, skill_des == 2,51, 合并为 1,52;2,51;3,53;4,54;5,55;6,56 合并新数组 if (weaponConfig.skill_des != '') { let skill_des = MTools.deepClone(weaponConfig.skill_des.split(';')) for (let i = 0; i < skill_des.length; i++) { newSkill.push(skill_des[i]) } for (let i = 0; i < skill.length; i++) { let findItem = false for (let j = 0; j < newSkill.length; j++) { let skillItem = newSkill[j].split(',') if (skillItem[0] == skill[i].split(',')[0]) { findItem = true break } } if (!findItem) { newSkill.push(skill[i]) } } // ['2,51', '1,52', '3,53', '4,54', '5,55', '6,56'] //根据前面的id排序 newSkill.sort((a, b) => { let aItem = a.split(',') let bItem = b.split(',') return Number(aItem[0]) - Number(bItem[0]) }) } else { for (let i = 0; i < skill.length; i++) { //let skillItem = skill[i].split(',') newSkill.push(skill[i]) } } // console.log(newSkill) //排序 if (newSkill.length > 0) { let skillConfig: ITableSkill = null for (let j = 0; j < newSkill.length; j++) { let newSkillItem = newSkill[j].split(',') skillConfig = SkillDataManager.getSkillDataById(newSkillItem[1]) // console.log("skillConfig",JSON.stringify(skillConfig)); let item = instantiate(this.ui_singleItem) item.active = true item.parent = this.ui_content item.getChildByName('itemSpr').getComponent(SpriteLoad).setSprite(GPath.WeaponLevelUp(`技能底${skillConfig.quality}`), GBundle.WeaponLevelUp); item.getChildByName('iconSpr').getComponent(SpriteLoad).setSprite(GPath.SkillItem(skillConfig.icon), GBundle.Items); item.getChildByName('lb_tag').getComponent(Label).string = gg.lang.get(skillConfig.icon_desc) if (this.weaponLevel < newSkillItem[0]) { //等级未解锁 item.getChildByName('未解锁').active = true item.getChildByName('等级属性框未解锁').active = true let strlang = gg.lang.get('解锁:') item.getChildByName('desc_richText').getComponent(RichText).string = `LV${newSkillItem[0]}${strlang}` + gg.lang.get(skillConfig.desc) } else { //等级已解锁 item.getChildByName('等级属性框未解锁').active = false item.getChildByName('未解锁').active = false item.getChildByName('desc_richText').getComponent(RichText).string = gg.lang.get(skillConfig.desc) } } } } /**关闭 */ click_closeArea() { if (!this.isCloselayer) { return } gg.audio.playEffect({ name: "点击音效" }); this.close(2) } /**不能升级 */ click_btnLevelUpNo() { gg.audio.playEffect({ name: "点击音效" }); if (this.weaponSPNum < this.needNum) { this.close(2) gg.ui.openPanel(UIID.WeaponSuiPian) } else { gg.ui.showToast("已达到满级!"); } } /**升级 */ click_btnLevelUp() { gg.audio.playEffect({ name: "升级" }); let level = this.weaponLevel + 1 //每次升1级 //消耗碎片 if (level >= this.maxLevel) { level = this.maxLevel } let conf = gg.data.project.getWeaponData(this.weaponId); gg.data.subItemNum(conf.scrapId, this.needNum) gg.data.addDayTaskProgressData(TaskType.weaponUpgrade, 1) gg.data.project.setWeaponLevel(this.weaponId, level); this.refreshView() gg.ui.showToast("升级成功!"); gg.sdk.reportDY("inLevel", `章节${gg.data.doc.chapter}-${this.lb_weaponName.string}${level}级`) gg.sdk.reportDY("inLevel", `武器升级-${this.lb_weaponName.string}${level}级`) //更新界面 this.shengjiSpine.active = true this.scheduleOnce(() => { if (this.shengjiSpine.isValid) { this.shengjiSpine.active = false } }, 1) //升级统计 gg.targetTaskManager.statisticalData(TargetTaskType.upgradeAnyWeapon, 1 ) GEvent.Ins.emit(GEvent.WeaponLevelUp, this.weaponId) } /**使用 */ click_btnUse() { gg.audio.playEffect({ name: "点击音效" }); GEvent.Ins.emit(GEvent.WeaponUse, this.weaponId) this.close(2) } /**移除 */ click_btnRemove() { gg.audio.playEffect({ name: "点击音效" }); //彩虹飞弹不能移除 if ((!sdkConfig.isIAPVersion && this.weaponId == 1) || (sdkConfig.isIAPVersion && !gg.purchase.isCanUninstallRainbowBullet()) && this.weaponId == 1) { gg.ui.showToast("该武器不能卸下"); return } GEvent.Ins.emit(GEvent.WeaponRemove, this.weaponId) this.close(2) } }