import BattleRole from "../battle/BattleRole" import GameUtil from "../core/GameUtil" import SKDataUtil from "../gear/SKDataUtil" import { EMagicType, ESkillType } from "../role/EEnum" import SkillUtil from "../skill/core/SkillUtil" import GTimer from "../common/GTimer"; class Attr { name = "" //姓名 sex = 0 // 性别 0女 1男 battle = false //是否参战 qualitites = 0 //气质 fame = 0 //名气 endurance = 0 //耐力 moral = 0 //道德 intelligence = 0 //智力 rebel = 0 //叛逆 internalForce = 0 //内力 bosom = 0 //亲密 filial = 0 // 孝心 foodFull = 0 //温饱 busy = 0 //疲劳值 } class Skill { name: string desp: string grade: string class: string type: string mod: string id: number level: number pos: number //处于命盘中的位置 1-13 1-6:纯阳 7-12: 太阴 13:合体 0表示未占据位置 } export default class Baby { ID = 0 //todo:宝宝唯一识别ID RoundSkill: Skill BattleSkillList: number[] = [] //天地人 012 PannelSkillList: number[] = [] //命盘技能 BlessSkillList: Skill[] = [] //已经许愿的技能库, 只在许愿中保持技能副本,其它一律使用技能ID Attr = new Attr() CareTimeList:any = {} UpdateData(data: any) { this.Attr = data.attr this.BattleSkillList = data.battleSkillList this.PannelSkillList = data.pannelSkillList this.BlessSkillList = data.blessSkillList this.ID = data.id this.CareTimeList = data.careTimeList || {} } GetObject(): any { return { id: this.ID, attr: this.Attr, battleSkillList: this.BattleSkillList, pannelSkillList: this.PannelSkillList, blessSkillList: this.BlessSkillList, careTimeList: this.CareTimeList, } } GetSkillByID(id: number): Skill { for (let index = 0; index < this.BlessSkillList.length; index++) { let skill = this.BlessSkillList[index]; if (skill.id == id) { return skill } } return null; } RemoveSkillByID(id: number) { for (let index = 0; index < this.BlessSkillList.length; index++) { let skill = this.BlessSkillList[index]; if (skill.id == id) { this.BlessSkillList.splice(index, 1) return } } } GetTypeCount(type: string): number { let cnt = 0 for (let index = 0; index < this.PannelSkillList.length; index++) { let id = this.PannelSkillList[index] let skill = this.GetSkillByID(id); if (skill && skill.type == type) { cnt++ } } return cnt } ToJson(): string { let obj = this.GetObject() return SKDataUtil.toJson(obj, "{}") } GetPos(skill: Skill) { let unUsePosList = [] for (let index = 1; index <= 13; index++) { let use = false for (let i = 0; i < this.PannelSkillList.length; i++) { let id = this.PannelSkillList[i] let _skill = this.GetSkillByID(id); if (_skill.pos == index) { use = true } } if (!use) { unUsePosList.push(index) } } if (unUsePosList.length == 0) { //顶替 if (skill.type == "纯阳") { return SKDataUtil.random(1, 6) } if (skill.type == "太阴") { return SKDataUtil.random(7, 12) } return 13 } else { let unuse_yang = [] let unuse_ying = [] let unuse_ht = [] for (let index = 0; index < unUsePosList.length; index++) { if (unUsePosList[index] <= 6) { unuse_yang.push(unUsePosList[index]) continue } if (unUsePosList[index] <= 12) { unuse_ying.push(unUsePosList[index]) continue } unuse_ht.push(unUsePosList[index]) } if (skill.type == "纯阳") { return unuse_yang[0] } if (skill.type == "太阴") { return unuse_ying[0] } return unuse_ht[0] } } AttachSkillPannnel(skill: Skill) { for (let index = 0; index < this.PannelSkillList.length; index++) { let id = this.PannelSkillList[index] let _skill = this.GetSkillByID(id); if (skill.pos == _skill.pos) { _skill.pos = 0 this.PannelSkillList.splice(index, 1) break } } this.RemoveSkillByID(skill.id) this.BlessSkillList.push(skill) this.PannelSkillList.push(skill.id) } //许愿 Bless(): Skill { let data = GameUtil.require_ex("../../conf/prop_data/prop_baby_skill.json") let skill_list = [] for (const key in data) { if (Object.prototype.hasOwnProperty.call(data, key)) { let origin_skill = data[key] let skill = this.GetSkillByID(origin_skill.id) if (skill == null) { skill = new Skill() skill.name = origin_skill.name skill.desp = origin_skill.desp skill.grade = origin_skill.grade skill.class = origin_skill.class skill.type = origin_skill.type skill.mod = origin_skill.mod skill.id = origin_skill.id skill.level = 1 skill.pos = 0 } if (skill.pos != 0) { continue } skill_list.push(skill) } } let yang_list = [] let yin_list = [] let ht_list = [] for (let index = 0; index < skill_list.length; index++) { let skill = skill_list[index]; if (skill.type == "纯阳") { yang_list.push(skill) } if (skill.type == "太阴") { yin_list.push(skill) } if (skill.type == "合体") { ht_list.push(skill) } } let yangCnt = this.GetTypeCount("纯阳") let yinCnt = this.GetTypeCount("太阴") let htCnt = this.GetTypeCount("合体") let random_list = [] if (yangCnt < 6) { random_list.push(...yang_list) } if (yinCnt < 6) { random_list.push(...yin_list) } if (htCnt < 1) { random_list.push(...ht_list) } if (random_list.length == 0) { random_list = skill_list } let skill = random_list[SKDataUtil.random(0, random_list.length - 1)] skill.pos = this.GetPos(skill) this.AttachSkillPannnel(skill) return skill } Upgrade(id: number): number { let skill = this.GetSkillByID(id) if (skill == null) { //该技能未许愿 return 2 } if (skill.level >= 100) { return 3 } skill.level++ return 0 } SkillBattle(id: number): Skill { let skill = this.GetSkillByID(id) if (skill == null) { //该技能未许愿 return null } for (let index = 0; index < this.BattleSkillList.length; index++) { let battle_id = this.BattleSkillList[index]; let battle_skill = this.GetSkillByID(battle_id) if (skill.type == battle_skill.type) { this.BattleSkillList.splice(index, 1) break } } this.BattleSkillList.push(skill.id) return skill } EatCandy(): boolean { if (this.Attr.bosom >= 1200 && this.Attr.filial >= 1200) { return false } let addType = 0 if (this.Attr.bosom >= 1200) { addType = 1 } if (this.Attr.filial >= 1200) { addType = 2 } if (addType == 0) { addType = 1 let rand = SKDataUtil.random(0, 100) if (rand > 50) { addType = 2 } } if (addType == 1) { this.Attr.filial += 5 if (this.Attr.filial > 1200) { this.Attr.filial = 1200 } } if (addType == 2) { this.Attr.bosom += 5 if (this.Attr.bosom > 1200) { this.Attr.bosom = 1200 } } return true } ReadingBook(): boolean { if (this.Attr.rebel <= 0) { return false } this.Attr.rebel -= 10 if (this.Attr.rebel <= 0) { this.Attr.rebel = 0 } return true } //培养 Practice(type: number, index: number): number { let now = GTimer.getYearMonthDay() let key = (type * 10 + index).toString() if(Object.prototype.hasOwnProperty.call(this.CareTimeList, key)){ let caretime = this.CareTimeList[key] if (now == caretime) { return 4 } } this.CareTimeList[key] = now if (type != 2 && this.Attr.busy >= 700) { return 2 } let config = GameUtil.require_ex("../../conf/prop_data/prop_baby_practice.json") let data = null if (type == 0) { data = config["Learning"] } if (type == 1) { data = config["Practice"] } if (type == 2) { data = config["Enjoy"] } if (data == null) { return 1 } if (index < 0 || index >= data.length) { return 1 } let attr = data[index] if (Object.prototype.hasOwnProperty.call(attr, "qizhi")) { if (this.Attr.qualitites >= 1200) { return 3 } this.Attr.qualitites += attr["qizhi"] if (this.Attr.qualitites < 0) { this.Attr.qualitites = 0 } if (this.Attr.endurance > 1200) { this.Attr.endurance = 1200 } } if (Object.prototype.hasOwnProperty.call(attr, "naili")) { if (this.Attr.endurance >= 1200) { return 3 } this.Attr.endurance += attr["naili"] if (this.Attr.endurance < 0) { this.Attr.endurance = 0 } if (this.Attr.endurance > 1200) { this.Attr.endurance = 1200 } } if (Object.prototype.hasOwnProperty.call(attr, "neili")) { if (this.Attr.internalForce >= 1200) { return 3 } this.Attr.internalForce += attr["neili"] if (this.Attr.internalForce < 0) { this.Attr.internalForce = 0 } if (this.Attr.endurance > 1200) { this.Attr.endurance = 1200 } } if (Object.prototype.hasOwnProperty.call(attr, "zhili")) { if (this.Attr.intelligence >= 1200) { return 3 } this.Attr.intelligence += attr["zhili"] if (this.Attr.intelligence < 0) { this.Attr.intelligence = 0 } if (this.Attr.endurance > 1200) { this.Attr.endurance = 1200 } } if (Object.prototype.hasOwnProperty.call(attr, "mingqi")) { if (this.Attr.fame >= 1200) { return 3 } this.Attr.fame += attr["mingqi"] if (this.Attr.fame < 0) { this.Attr.fame = 0 } if (this.Attr.endurance > 1200) { this.Attr.endurance = 1200 } } if (Object.prototype.hasOwnProperty.call(attr, "daode")) { if (this.Attr.moral >= 1200) { return 3 } this.Attr.moral += attr["daode"] if (this.Attr.moral < 0) { this.Attr.moral = 0 } if (this.Attr.endurance > 1200) { this.Attr.endurance = 1200 } } if (Object.prototype.hasOwnProperty.call(attr, "pani")) { if (this.Attr.rebel >= 1200) { return 3 } this.Attr.rebel += attr["pani"] if (this.Attr.rebel < 0) { this.Attr.rebel = 0 } if (this.Attr.rebel > 1200) { this.Attr.rebel = 1200 } } if (Object.prototype.hasOwnProperty.call(attr, "pilao")) { if (this.Attr.busy == 0 && attr["pilao"] < 0) { return 3 } this.Attr.busy += attr["pilao"] if (this.Attr.busy < 0) { this.Attr.busy = 0 } if (this.Attr.busy > 700) { this.Attr.busy = 700 } } return 0 } /////////战斗功能 //清空当前技能 ResetSkill() { this.RoundSkill = null } HasPlaySkill(): boolean { return this.RoundSkill != null } GetPlaySkillName(): string { if (this.RoundSkill == null) return "" return this.RoundSkill.name } //0-未释放技能 1 进攻性被动 2 防御型被动 GetPlaySkillType(): number { if (this.RoundSkill == null) return 0 if (this.RoundSkill.id >= 35500 && this.RoundSkill.id <= 35513) { return 2 } if (this.RoundSkill.id >= 35514 && this.RoundSkill.id <= 35537) { return 1 } if (this.RoundSkill.id == 35538 || this.RoundSkill.id == 35539 || this.RoundSkill.id == 35542) { return 2 } if (this.RoundSkill.id == 35540 || this.RoundSkill.id == 35541) { return 1 } return 0 } HasAttrLessDst(dst: number): boolean { if (this.Attr.qualitites < dst) { return true } if (this.Attr.fame < dst) { return true } if (this.Attr.moral < dst) { return true } if (this.Attr.intelligence < dst) { return true } if (this.Attr.internalForce < dst) { return true } if (this.Attr.bosom < dst) { return true } if (this.Attr.filial < dst) { return true } return false } //计算技能触发几率 GetScore(): number { if (this.HasAttrLessDst(300)) { return 0 } if (this.HasAttrLessDst(600)) { return 3000 } if (this.HasAttrLessDst(900)) { return 4000 } return 5000 } GetSkillBuff(skillid: number): number { let skill = this.GetSkillByID(skillid) if (skill == null) return 0 let buffer = 0 let level = skill.level if (level > 100) { level = 100 let score = this.GetScore() if (score == 0) { buffer = 0.05 } if (score == 3000) { buffer = 0.1 } if (score == 4000) { buffer = 0.15 } buffer = 0.2 } buffer += level * 0.6 / 100 return buffer } GetSkillDefence(skillid: number): number { let skill = this.GetSkillByID(skillid) if (skill == null) return 0 let base = 500 if (skill.grade == "超凡") { base = 1000 } let level = skill.level if (level > 100) { level = 100 } return base * level } IsTriggerSkill(skillid: number): boolean { let rand = this.GetSkillBuff(skillid) if (Math.random() <= rand) { return true } return false } IsAddTarget(skillId: number, role: BattleRole): boolean { if (this.RoundSkill != null) return false if (this.BattleSkillList.length == 0) return false for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35514 && skillId == ESkillType.ZhenTianDongDi && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35515 && skillId == ESkillType.CangHaiHengLiu && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35516 && skillId == ESkillType.ZeBeiWanWu && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35517 && skillId == ESkillType.FeiJvJiuTian && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35518 && skillId == ESkillType.SiMianChuGe && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35519 && skillId == ESkillType.ShiXinKuangLuan && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35520 && skillId == ESkillType.WanDuGongXin && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35521 && skillId == ESkillType.BaiRiMian && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35522 && skillId == ESkillType.YanLuoZhuiMing && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35523 && skillId == ESkillType.QianKunJieSu && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35524 && skillId == ESkillType.HanQingMoMo && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35525 && skillId == ESkillType.MoShenFuShen && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35526 && skillId == ESkillType.TianZhuDiMie && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35527 && skillId == ESkillType.XiuLiQianKun && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35528 && skillId == ESkillType.JiuYinChunHuo && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35529 && skillId == ESkillType.JiuLongBingFeng && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35530 && skillId == ESkillType.XueHaiShenChou && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35531 && skillId == ESkillType.XiXingDaFa && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35532 && skillId == ESkillType.QianNvYouHun && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35533 && skillId == ESkillType.MengPoTang && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } //test // if (_skillid == 35527 && // skillId == ESkillType.XiuLiQianKun) { // this.RoundSkill = this.GetSkillByID(_skillid) // return true // } } return false } IsHitTwice(skillId: number, role: BattleRole): boolean { if (this.RoundSkill != null) return false if (this.BattleSkillList.length == 0) return false for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35534 && skillId == ESkillType.YanLuoZhuiMing && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35535 && skillId == ESkillType.FeiJvJiuTian && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35536 && skillId == ESkillType.ZhenTianDongDi && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } if (_skillid == 35537 && skillId == ESkillType.CangHaiHengLiu && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } } return false } Defence(skillId: number, role: BattleRole): number { if (this.RoundSkill != null) return 0 if (this.BattleSkillList.length == 0) return 0 let skill = SkillUtil.getSkill(skillId) if (skill == null) return 0 for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35500 && skill.skill_type == EMagicType.GHOST_FIRE && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35501 && skill.skill_type == EMagicType.WATER && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35502 && skill.skill_type == EMagicType.THREE_CORPSE && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35503 && skill.skill_type == EMagicType.THUNDER && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35504 && skill.skill_type == EMagicType.FIRE && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35505 && skill.skill_type == EMagicType.TOXIN && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35506 && skill.skill_type == EMagicType.WIND && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35507 && skill.skill_type == EMagicType.WIND && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35508 && skill.skill_type == EMagicType.WATER && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35509 && skill.skill_type == EMagicType.THUNDER && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35510 && skill.skill_type == EMagicType.THREE_CORPSE && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35511 && skill.skill_type == EMagicType.GHOST_FIRE && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35512 && skill.skill_type == EMagicType.TOXIN && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } if (_skillid == 35513 && skill.skill_type == EMagicType.FIRE && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return this.GetSkillDefence(_skillid) } } return 0 } IsTriggerJinGang(): boolean { if (this.RoundSkill != null) return false if (this.BattleSkillList.length == 0) return false for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35538 && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } } return false } IsTriggerLongShen(skillid: number): boolean { if (this.RoundSkill != null) return false if (this.BattleSkillList.length == 0) return false for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35539 && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } } return false } IsTriggerLingJi(): boolean { if (this.RoundSkill != null) return false if (this.BattleSkillList.length == 0) return false for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35540 && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } } return false } IsTriggerSpeed(): boolean { if (this.RoundSkill != null) return false if (this.BattleSkillList.length == 0) return false for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35541 && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } } return false } IsTriggerRelive(): boolean { if (this.RoundSkill != null) return false if (this.BattleSkillList.length == 0) return false for (let index = 0; index < this.BattleSkillList.length; index++) { let _skillid = this.BattleSkillList[index]; if (_skillid == 35542 && this.IsTriggerSkill(_skillid)) { this.RoundSkill = this.GetSkillByID(_skillid) return true } } return false } }