import CsvMgr from "../Mgr_CSV/CsvMgr"; import { EGongFaType } from "./GameEnum"; import { wugong } from "./GameInterface"; export default class WuGongData{ archive:wugong; levelUp_paycoin = 0; // 升级所需花费(银两消耗) levelUp_condition = 0; // 升级条件(所需武学修为) isUseing = false; // 是否正在使用 value_keyAtt = 0; constructor(archive:wugong){ this.archive = archive; this.refresh(); } refresh() { this.refreshAttribute() this.refreshCondition() this.refreshCost(); } upgrade(){ this.level++; this.refresh(); // var e = this.config; // app.manager.toast.pop(a.CONDITION, o[e.type] + "造诣 +" + this.config.quality); // e.type < EGongFaType.轻功 && app.manager.toast.pop(a.GONGFA, "基础武学 +" + this.config.quality); } // 计算主属性值 refreshAttribute(){ var e = this.config; this.value_keyAtt = e.attr + 4 * (e.grow + e.quality) / 2 * this.level; for (let i = this.level; i > 0; i--) { this.value_keyAtt += Math.floor(i / 10); } } // 获取升级所需条件(所需武学修为) refreshCondition(){ const config = this.config; const isSpecialType = (EGongFaType.轻功 == config.type || EGongFaType.内功 == config.type); const commonCalculation = Math.round((this.level + 1) * (this.level + 1) * (config.quality + 5) / 30); // 是轻功或内功,且等级大于等于5的特殊计算公式 if (isSpecialType && this.level >= 5) { this.levelUp_condition = commonCalculation + 2 * (config.quality + 5) * this.level + 1; } else if (this.level >= 20 && config.quality > 1) { // 20级以上且品质大于1的通用计算公式 this.levelUp_condition = commonCalculation + this.level + 1; } } // 计算升级所需金币消耗 refreshCost() { const config = this.config; if (!config || typeof this.level !== 'number') return; const QUALITY_FACTOR = 1.01; const BASE_MULTIPLIER = 7; const LEVEL_THRESHOLD_HIGH = 80; const COST_MULTIPLIER_LIGHT_INTERNAL = 2; let cost = 0; // 10级以下采用斐波那契数列算法计算经验消耗 if (this.level < 10) { let fibPrev = 1; let fibCurr = 1; let fibNext = 0; for (let i = 0; i < this.level + 1; i++) { fibNext = fibPrev + fibCurr; fibPrev = fibCurr; fibCurr = fibNext; } cost = fibNext * (config.quality + QUALITY_FACTOR) * (config.quality + QUALITY_FACTOR); } else { // 10级以上采用立方增长算法计算经验消耗 const levelPlusOne = this.level + 1; cost = Math.round( (levelPlusOne * levelPlusOne * levelPlusOne) * (config.quality + QUALITY_FACTOR) * (config.quality + QUALITY_FACTOR) / BASE_MULTIPLIER ); // 80级以上额外增加消耗 if (this.level > LEVEL_THRESHOLD_HIGH) { const adjustmentFactor = 2 * (this.level - LEVEL_THRESHOLD_HIGH) + 100; cost = Math.round(cost * adjustmentFactor / 100); } } // 轻功内功升级额外消耗 if ( config.type === EGongFaType.轻功 || config.type === EGongFaType.内功 ) { cost *= COST_MULTIPLIER_LIGHT_INTERNAL; } this.levelUp_paycoin = Math.floor(cost); } get id(){ return this.archive.id; } set id(value: number) { this.archive.id = value; } get level() { return this.archive.level; } set level(value: number) { this.archive.level = value; } get config(){ return CsvMgr.WuGong_csv[this.id]; } get attainment(){ return this.level * this.config.overAll; } }