/** * 玩家类 */ import BattleObj from "./BattleObj"; import RoleTaskMgr from "../core/RoleTaskMgr"; import PartnerMgr from "./PartnerMgr"; import RelationMgr from "./RelationMgr"; import BattleMgr from "../battle/BattleMgr"; import TeamMgr from "../core/TeamMgr"; import EquipMgr from "./EquipMgr"; import PlayerMgr from "./PlayerMgr"; import NpcMgr from "../core/NpcMgr"; import PaiHangMgr from "../core/PaiHangMgr"; import Equip from "./Equip"; import SchemeMgr from "./SchemeMgr"; import BangMgr from "../bang/BangMgr"; import ActivityMgr from "../activity/ActivityMgr"; import ActivityDefine from "../activity/ActivityDefine"; import PetMgr from "../core/PetMgr"; import ChargeSum from "../core/ChargeSum"; import BattleRole from "../battle/BattleRole"; import MonsterMgr from "../core/MonsterMgr"; import World from "./World"; import DB from "../utils/DB"; import MapMgr from "../core/MapMgr"; import PetPracticeMgr from "./PetPracticeMgr"; import PalaceFight from "../activity/PalaceFight"; import ChargeConfig from "../core/ChargeConfig"; import RolePracticeMgr from "./RolePracticeMgr"; import NpcConfigMgr from "../core/NpcConfigMgr"; import HorseList from "../horse/HorseList"; import Agent from "../network/Agent"; import Exchange from "../core/Exchange"; import HorseSkill from "../horse/HorseSkill"; import Pet from "./Pet"; import SKDataUtil from "../gear/SKDataUtil"; import Npc, { NpcCreater } from "../core/Npc"; import SkillUtil from "../skill/core/SkillUtil"; import ExpUtil from "../core/ExpUtil"; import SKLogger from "../gear/SKLogger"; import GameUtil from "../core/GameUtil"; import ItemUtil from "../core/ItemUtil"; import SkillBase from "../skill/core/SkillBase"; import SKTimeUtil from "../gear/SKTimeUtil"; import VIPUtil from "../role/VIPUtil"; import DugMgr from "../role/DugMgr"; import { BattleType, EActionType, EAttrCalType, EAttrTypeL1, EAttrTypeL2, EEquipPos, EEquipType, EEventType, ELiveingType, ENpcCreater, ERaceType, ESexType, ESkillType, MsgCode, Operate } from "../role/EEnum"; import MapModel from "../core/MapModel"; import AIMgr from "../core/AIMgr"; import RoleUtil from "../utils/RoleUtil"; import GTimer from "../common/GTimer"; import MailList from "../mail/MailList"; import JingJiChang from "../activity/JingJiChang"; import SKRedisUtil from "../gear/SKRedisUtil"; import FivePhases from "../object/FivePhases"; import ChangeCard from "../object/ChangeCard"; import DWorld from "./DWorld"; import SatAssembly from "../activity/SatAssembly"; import SKCxfUtil from "../gear/SKCxfUtil"; import BoxMgr from "../core/BoxMgr"; import SpecialEffect from "../object/SpecialEffect"; import PetSupport from "../object/PetSupport"; import MagicWeapon from "./MagicWeapon"; import Ofuda from "../object/Ofuda"; import MagicWeaponMgr from "./MagicWeaponMgr"; import FactionWar from "../activity/FactionWar"; import zhenFaMgr from "../zhenFa/zhenFa"; import ZhenFaUtil from "../core/ZhenFaUtil"; import xwManager from "../zhenFa/xwManager"; import { json } from "express"; import Baby from "./Baby"; import BabyMgr from "./BabyMgr"; import StarMgr from "./StarMgr"; import KanPo3 from "../skill/ofuda/KanPo3"; export default class Player extends BattleObj { // 帐号索引 accountid: number = 0; // 邀请码 invite: string = ""; // 角色编码 roleid: number = 0; // 连接器 agent: Agent; // 种族 race: number; // 性别 sex: number; // 武器 weapon: string = ""; // 状态 state: number; // 装备列表 equip_list: any; // 法宝列表 magic_weapon_list: any; dir: number; aoi_model: string; aoi_obj_list: any; battle_id: number; taskMgr: RoleTaskMgr; partnerMgr: PartnerMgr; ZFMgr: zhenFaMgr; XWMgr: xwManager; money: number; jade: number; bind_jade: number; bangscore: number; shiscore: number; discore: number; xiuscore: number; guoscore: number; rewardrecord: number; sprewardrecord: number; curPet: any; curPetId: number; lastonline: any; usingIncense: any; loaded: boolean; gmlevel: number; teamid: number; isleader: boolean; lastWorldChatTime: number; lastWorldChatStr: string; nFlag: number; offline: boolean; offlineTimer: any; incenseTimer: NodeJS.Timeout; shape: number; inPrison: boolean; level_reward: string; getgift: number; getpet: number; shuilu: any; arena: any; titleId: number; titleType: number; onLoad: boolean; bangid: number; bangname: string; bangpost: number; titles: any; schemeName: string; baldric: number; color1: any; color_one_serial: any; color2: any; color_two_serial: any; safe_password: string; safe_lock: number; friendList: any; applyFriendList: any; star: number = 1; shane: any; titleVal: any; equipObjs: any = {}; magicWeaponObjs: any = {}; schemeMgr: SchemeMgr; xiulevel: number = 1; currentEquips: Equip[] = []; currentMagicWeapons: MagicWeapon[] = []; listEquips: Equip[] = []; listMagicWeapons: MagicWeapon[] = []; petList: Pet[] = []; bag_list: any = {}; locker_list: any = {}; relivelist: any[] = []; lockerEquips: any[] = []; dbData: any; anleiCnt: any; horseList: HorseList; horseSkill: HorseSkill; wingId: number; exchange: Exchange; onlineTime: number = 0; // 每日限购 dayMap: any; // 宝藏 treasure: any; // 存档计数 saveTotal: number = 0; // 存档失败 saveFailed: string[]; // 角色索引 roleIndex: number = 0; // 邮件管理器 mailList: MailList; // AI管理器 ai: AIMgr; // 背包默认空间 bagKindNum: number; // 仓库默认空间 lockerKindNum: number; // 界面图标 iconList: any; // 最后一次时使用的技能 lastSkill: number; petLastSkill: number; // 签到数据 daySignIn: any; // 幸运转盘每日免费 dial_num: number = 0; // 幸运转盘累计次数 dial_count: number = 0; // 幸运转盘免费最后一次点击时间 dial_date: any; // 最后一次补签时间 mendDate: any; // 最后一次刷新任务日期 mend_date: any; // 证道积分 sat_integral: number = 0; // 暂离状态 pause: number; //是否自动归队 ischeck: number; //离线时间 offlinetime: number; //双倍点数 doublecnt: number; //未领取的双倍点数 unget_doublecnt: number; // 属性状态 isFrozen: number; ai_flag: number; list: any[]; tianti_integral: number = 0; //宝宝 BabyMgr: BabyMgr = new BabyMgr() //星阵 StarMgr: StarMgr = new StarMgr(this) constructor() { super(); this.agent = null; this.race = ERaceType.UNKNOW; // 种族 this.sex = ESexType.UNKNOW; this.state = 1; // 装备列表 this.equip_list = {}; // dir 朝向 1 2 // 4方向 3 4 this.dir = 4; this.living_type = ELiveingType.PLAYER; this.aoi_model = "wm"; this.aoi_obj_list = {}; this.battle_id = 0; this.taskMgr = new RoleTaskMgr(this); this.partnerMgr = new PartnerMgr(this); this.ZFMgr = new zhenFaMgr(this); this.ZFMgr.init() this.XWMgr = new xwManager(this); this.XWMgr.init() this.list = [] this.money = 0; this.jade = 0; this.bind_jade = 0; this.bangscore = 0; this.shiscore = 0; this.discore = 0; this.xiuscore = 0; this.guoscore = 0; // 背包空间 this.bagKindNum = GameUtil.limitBagKindNum; // 仓库默认空间 this.lockerKindNum = GameUtil.limitLockerKindNum; this.rewardrecord = 0; this.sprewardrecord = 0; this.curPet = null; this.curPetId = 0; this.lastonline = null; this.usingIncense = false; this.loaded = false; // 是否加载完毕,玩家进入了场景 this.gmlevel = 0; this.teamid = 0; this.isleader = false; this.lastWorldChatTime = 0; this.lastWorldChatStr = ''; this.nFlag = 0; this.offline = false; this.offlineTimer = null; this.shane = 0; this.inPrison = false; this.level_reward = ''; this.getgift = 0; this.getpet = 1; this.shuilu = { season: 1, score: 0, gongji: 0, wtime: 0, ltime: 0, }; this.arena = { count: 10, //挑战次数 jpoint: 0, //竞技点 jtime: 0, //光阴 ranking: 0 }; //this.curtitle = 0; this.titleId = -1; this.titleType = -1; //当前的称谓类型 this.titleVal = ''; //当前称谓值 this.onLoad = false; //是否装载称谓 this.bangid = 0; this.bangname = ''; this.bangpost = 0; this.titles = []; this.schemeName = '套装方案'; this.baldric = 0; this.color1 = 0; // 染色部位1 this.color_one_serial = 0; // 染色部位编号一 this.color2 = 0; // 染色部位2 this.color_two_serial = 0; // 染色部位编号二 this.safe_password = ''; this.safe_lock = 0; this.friendList = {};// 好友列表 this.applyFriendList = {};// 好友申请列表 // 击杀地煞星 星级 this.star = 1; // 翅膀索引 this.wingId = 0; this.dayMap = {}; // 签到数据 this.daySignIn = {}; this.horseList = new HorseList(this); this.horseSkill = new HorseSkill(this); this.mailList = new MailList(this); // 界面图标 this.iconList = SKDataUtil.toJson(GameUtil.iconList, "{}"); // 最后一次时使用的技能 this.lastSkill = ESkillType.NormalAtkSkill; this.petLastSkill = ESkillType.NormalAtkSkill; this.mendDate = ""; this.mend_date = ""; // 幸运转盘免费次数 this.dial_num = 0; // 幸运转盘累计次数 this.dial_count = 0; // 幸运转盘免费最后一次点击时间 this.dial_date = ""; this.sat_integral = 0; this.pause = 0; this.ischeck = 0; this.offlinetime = 0; this.doublecnt = 0; this.unget_doublecnt = 0; this.isFrozen = 0; this.ai_flag = 0; this.tianti_integral = 0; } update(dt: number) { if (this.shane > 0) { this.shane--; if (this.shane <= 0) { this.shane = 0; this.ShanEChange(); } } // 未关服则每30分钟存档一次 if (dt % (GameUtil.savePlayerTime) == 0) { // 机器人不定时存档 if (this.isRobot()) { return; } // if (!GameUtil.isClose) { let self = this; this.saveAll((failed: string[]) => { if (failed.length > 0) { SKLogger.warn(`定时存档:玩家[${self.roleid}:${self.name}]存档失败:${failed}`); } else { SKLogger.debug(`玩家[${self.roleid}:${self.name}]定时存档成功!`); } }); // } } if (dt % (1000) == 0) { this.getTaskMgr().OnTimer(); } if (this.ai) { this.ai.update(dt); } } GetFlag(nIndex: any): any { return GameUtil.getFlag(this.nFlag, nIndex); } SetFlag(nIndex: any, bValue: any) { this.nFlag = GameUtil.setFlag(this.nFlag, nIndex, bValue); } // 获得每日限购已购次数 getDayCount(dayId: number): number { let count = this.dayMap[dayId]; if (count == null) { return 0; } return count; } // 增加加每日限购数量 addDayCount(dayId: number, count: number) { let current = this.dayMap[dayId]; if (current == null) { this.dayMap[dayId] = count; } else { this.dayMap[dayId] = current + count; } } // 清空每日存档 clearDayMap() { // this.dayMap = {}; let keys = Object.keys(this.dayMap) for (let index = 0; index < keys.length; index++) { let key = keys[index]; if (key.indexOf("day") != -1) { this.dayMap[key] = 0 } } let chargeSum = ChargeSum.shared.getPlayerChargeSum(this.roleid); let vipLevel = VIPUtil.getVipLevel(chargeSum); // 小于VIP等级的每日奖励已领取处理 vipLevel += 1; for (let i = 0; i < vipLevel; i++) { this.dayMap[`vip_${i}`] = 1; } this.send(`s2c_clear_day`, { dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); } // 清空VIP存档 clearDayMapVip() { let chargeSum = ChargeSum.shared.getPlayerChargeSum(this.roleid); let vipLevel = VIPUtil.getVipLevel(chargeSum); this.dayMap[`vip_${vipLevel}`] = 0; this.send(`s2c_clear_day`, { dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); } OnEnterTeam() { this.getTaskMgr().checkAndInceptTask(); this.getTaskMgr().updateTaskStateToClient(); } // 离开队伍 leaveTeam() { if (this.teamid == 0) { SKLogger.debug(`玩家[${this.roleid}:${this.name}]已离队`); return; } this.teamid = 0; this.isleader = false; this.getTaskMgr().leaveTeam(); SKLogger.debug(`玩家[${this.roleid}:${this.name}]${this.isleader ? "队长" : "队员"}离开队伍${this.teamid}`); } getTeamId() { return this.teamid; } isTeamLeader() { if (this.teamid == 0) { return false; } return this.isleader; } getTaskMgr(): RoleTaskMgr { if (!this.taskMgr) { this.taskMgr = new RoleTaskMgr(this); } return this.taskMgr; } CheckNewDay(lastonline: any) { if (lastonline == null) { return; } let cdate = new Date(GameUtil.gameTime); let ly = lastonline.getFullYear(); let lm = lastonline.getMonth(); let lw = GTimer.getYearWeek(lastonline); let ld = GTimer.getYearDay(lastonline); if (ly != cdate.getFullYear()) { this.OnNewYear(); } if (lm != cdate.getMonth()) { this.OnNewMonth(); } if (lw != GTimer.getYearWeek(cdate)) { this.OnNewWeek(); } if (lw != GTimer.getYearWeek(cdate)) { this.OnNewWeek(); } if (ld != GTimer.getYearDay(cdate)) { this.OnNewDay(); } } OnNewYear() { // 这辈子估计不会调用 } OnNewMonth() { } OnNewWeek() { } OnNewDay() { } on5oclock() { if (this.getTaskMgr() == null) return; this.getTaskMgr().OnNewDay(); } // OnNewHour() { // } setAgent(agent: any) { if (this.agent) { if (this.agent != agent) { SKLogger.debug(`玩家[${this.roleid}:${this.name}]在其他设备登录!`); this.agent.otherLogin(); } } this.agent = agent; } playerOffline() { if (this.offline) { return; } delete this.aoi_obj_list[this.onlyid]; let self = this; let offtime = this.offlinetime * (60 * 60 * 1000) this.offlineTimer = SKTimeUtil.delay(() => { if (this.teamid > 0) { TeamMgr.shared.leaveTeam(this); } self.destroy();//时间结束清理下线 }, offtime); if (this.battle_id != 0) { BattleMgr.shared.playerOffline(this.battle_id, this.onlyid); } // 未关服离线存档 if (!GameUtil.isClose && this.saveTotal < 1) { // 机器人下线不存档 if (this.isRobot()) { return; } let self = this; // this.redisSave(); this.saveAll((failed: string[]) => { if (failed.length > 0) { SKLogger.warn(`存档:玩家[${self.roleid}:${self.name}]离线存档失败!`); } else { SKLogger.debug(`存档:玩家[${self.roleid}:${self.name}]离线存档成功!`); } }); // 通过cxf存档 this.cxfSavePlayerAll(); } RelationMgr.shared.deleteTempRelationByPlayer(this.roleid); this.agent = null; SKLogger.debug(`玩家[${this.roleid}:${this.name}]已离线`); this.offline = true; this.calcOnlineTime(); } activateScheme() { let scheme = this.schemeMgr.getActivateScheme(); if (scheme) { this.addattr2 = scheme.content.attribute.addPoint; this.qianneng = scheme.content.attribute.qianNeng; this.addattr1 = scheme.content.defense.xiuPoint; this.xiulevel = scheme.content.defense.xiuLevel; for (const key in this.addattr1) { if (this.addattr1.hasOwnProperty(key)) { this.xiulevel += this.addattr1[key]; } } for (let index = 0; index < this.currentEquips.length; index++) { this.currentEquips[index].pos = EEquipPos.BAG; this.addEquipList(this.currentEquips[index]); } this.currentEquips = []; for (var it in scheme.content.curEquips) { let eid = scheme.content.curEquips[it]; let equip = this.equipObjs[eid]; if (equip) { let flag = true; let fullEquipData = equip.getFullData(this.roleid); if (fullEquipData.NeedGrade > this.level || fullEquipData.NeedRei > this.relive) { this.send('s2c_notice', { strRichText: '角色等级不足,尚不能使用!' }); flag = false; } if (fullEquipData.Shuxingxuqiu) { //属性需求不符合 for (const key in fullEquipData.Shuxingxuqiu) { if (this.getAttr1(key) < fullEquipData.Shuxingxuqiu[key]) { this.send('s2c_notice', { strRichText: '角色属性不足,尚不能使用!' }); flag = false; } } } if (flag) { equip.pos = EEquipPos.USE; } else { equip.pos = EEquipPos.BAG; continue; } this.currentEquips.push(equip); for (let index = 0; index < this.listEquips.length; index++) { if (this.listEquips[index].EquipID == eid) { this.listEquips.splice(index, 1); break; } } if (equip.EIndex == 1) { this.changeWeapon(equip); } } } this.sendEquipList(); this.schemeName = scheme.schemeName; this.partnerMgr.vecChuZhan = SKDataUtil.jsonBy(SKDataUtil.toJson(scheme.content.partner, "{}")); this.calculateAttr(); this.send('s2c_player_data', this.getData()); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); } } checkSchemeEquip(equipid: any): boolean { //装备 let equip: Equip = this.equipObjs[equipid]; let fullEquipData = equip.getFullData(); if (fullEquipData.OwnerRoleId > 0 && fullEquipData.OwnerRoleId != this.resid) { this.send('s2c_notice', { strRichText: '角色不匹配,不能使用!' }); return false; } else if ((fullEquipData.Sex != 9 && fullEquipData.Sex != this.sex) || (fullEquipData.Race != 9 && fullEquipData.Race != this.race)) { this.send('s2c_notice', { strRichText: '角色不匹配,不能使用!' }); return false; } if (fullEquipData.Shuxingxuqiu) { //属性需求不符合 for (const key in fullEquipData.Shuxingxuqiu) { if (this.getAttr1(key) < fullEquipData.Shuxingxuqiu[key]) { this.send('s2c_notice', { strRichText: '角色属性不足,尚不能使用!' }); return false; } } } return true; } syncSchemePartner() { if (this.schemeMgr != null) { this.schemeMgr.syncSchemePartner(); } } destroy() { if (this.offlineTimer) { SKTimeUtil.cancelDelay(this.offlineTimer); this.offlineTimer = null; } if (this.incenseTimer) { SKTimeUtil.cancelDelay(this.incenseTimer); this.incenseTimer = null; } if (this.agent) { this.agent.close(); this.agent = null; } for (let equipid in this.equipObjs) { EquipMgr.shared.delEquip(equipid); } let map = MapMgr.shared.getMap(this); if (map) { map.exitMap(this); } delete this.taskMgr; delete this.partnerMgr; PlayerMgr.shared.delPlayer(this.roleid); NpcMgr.shared.deletePlayersNpc(this.roleid); } // 从数据库中读档 setDB(data: any) { data.lastonline = new Date(data.lastonline); this.dbData = data; this.accountid = data.accountid; this.invite = data.invite; this.roleid = data.roleid; this.mapid = data.mapid; this.resid = data.resid; this.race = RoleUtil.checkRace(data.race, data.resid); this.sex = RoleUtil.checkSex(data.sex, data.resid); this.name = data.name; this.level_reward = data.level_reward; this.exp = data.exp; // 默认最低星 1星 this.star = data.star; if (this.star < 1) { this.star = 1; } this.bag_list = SKDataUtil.jsonBy(data.bagitem) || {}; // 设置称谓信息 // 称谓放在有关系统初始化之前,之后会操作称谓 let titles: any = SKDataUtil.jsonBy(data.title); this.setTitles(titles); this.initBang(data.bangid); let partnerdata = SKDataUtil.jsonBy(data.partnerlist); this.partnerMgr.init(partnerdata); this.locker_list = SKDataUtil.jsonBy(data.lockeritem) || {}; this.money = data.money; this.jade = data.jade; this.bind_jade = data.bind_jade || 0; this.bangscore = data.bang_score || 0; this.shiscore = data.shi_score || 0; this.discore = data.di_score || 0; this.xiuscore = data.xiu_score || 0; this.guoscore = data.guo_score || 0; this.rewardrecord = data.rewardrecord; this.sprewardrecord = data.sprewardrecord; this.x = data.x; this.y = data.y; this.curPetId = data.pet; this.curPet = null; this.petList = []; this.lastonline = data.lastonline; this.nFlag = data.state; this.getgift = data.getgift; this.tianti_integral = Number(data.tianti_integral);//天梯积分 // 背包空间 this.bagKindNum = data.bag_kind_num; // 等级相关 let relivelist = [ [0, 0], [0, 0], [0, 0], [0, 0], ]; let relist = SKDataUtil.jsonBy(data.relivelist) || relivelist; let fixed = 4 - relist.length; for (let i = 0; i < fixed; i++) { relist.push([0, 0]); } this.relivelist = relist; this.relive = data.relive; this.level = data.level; this.sat_integral = data.sat_integral; this.offlinetime = data.offlinetime; this.doublecnt = data.doublecnt; this.unget_doublecnt = data.unget_doublecnt == null ? 0 : data.unget_doublecnt; this.mend_date = data.mend_date == null ? "" : data.mend_date; if (data.color && data.color.length > 0) { let colors = SKDataUtil.jsonBy(data.color); if (colors.c1) { this.color1 = colors.c1; } if (colors.c2) { this.color2 = colors.c2; } if (colors.p1) { this.color_one_serial = colors.p1; } if (colors.p2) { this.color_two_serial = colors.p2; } } if (data.safecode != null) { let array = data.safecode.split(':'); this.safe_password = array[1] || ''; this.safe_lock = parseInt(array[0]) || 0; } else { this.safe_password = ''; this.safe_lock = 0; } this.currentEquips = []; this.listEquips = []; this.equipObjs = {}; this.lockerEquips = []; let equipList: any = {}; if (data.equipRows) { for (let info of data.equipRows) { equipList[info.EquipID] = info; } } for (let equipid in equipList) { if (this.equipObjs[equipid] != null) { continue; } let info = SKDataUtil.valueForKey(equipList, equipid); if (info == null) { SKLogger.warn(``); } else { let equip = new Equip(info, this); switch (info.pos) { case EEquipPos.USE: { let find = false; for (let useequip of this.currentEquips) { if (useequip.EIndex == equip.EIndex) { find = true; equip.pos = EEquipPos.BAG; this.addEquipList(equip); } } if (!find) { this.currentEquips.push(equip); if (equip.EIndex == 6) { let conf = EquipMgr.shared.getXianQiBy(equip.Type); this.wingId = conf.Shape; } } break; } case EEquipPos.BAG: { this.addEquipList(equip); break; } case EEquipPos.BANK: { this.lockerEquips.push(equip); break; } default: { equip.pos = EEquipPos.BAG; this.addEquipList(equip); } } this.equipObjs[equip.EquipID] = equip; SKLogger.debug(`玩家[${this.roleid}:${this.name}]加入装备[${equip.EquipID}:${equip.name}]`); } } // 水陆大会信息 this.initShuilu(data.shuilu); this.initJingji(data.arena); this.initRolePoint(data.addpoint); this.checkRolePoint(); // 修炼等级 this.xiulevel = data.xiulevel; this.initXiuLianPoint(data.xiupoint); this.checkXiulianPoint(); // 设置等级在属性设置 之后设置! this.setLevel(data.level); // 取消技能熟练度升级,直接满级 this.resetSkill(); this.getpet = data.getpet; // GM等级 this.gmlevel = data.gmlevel; this.shane = data.shane; if (this.shane > 0) { let curDate = new Date(); let passtime = (curDate.getTime() - data.lastonline.getTime()) / 1000; if (passtime > 0) { this.shane -= Math.floor(passtime * 4); } if (this.shane <= 0) { this.shane = 0; } } let schemeMgr: SchemeMgr = new SchemeMgr(this); this.schemeMgr = schemeMgr; this.schemeMgr.readDB(); // 好友相关 let friendlist: any = SKDataUtil.jsonBy(data.friendlist) || {}; if (friendlist.version == 1) { for (let roleid in friendlist) { if (roleid == 'version') { delete friendlist['version']; continue; } if (friendlist.hasOwnProperty(roleid)) { let finfo = friendlist[roleid]; try { finfo.name = Buffer.from(finfo.name, 'base64').toString(); } catch (error) { SKLogger.warn(`好友名称[${finfo.name}]编码失败`); } } } } this.friendList = friendlist; // 兑换码 this.exchange = new Exchange(this.roleid); this.exchange.readDB(); //阵法信息 if (!!data.zhenfa) { var info = SKDataUtil.jsonBy(data.zhenfa); this.ZFMgr.initByData(info) } if (!!data.xw) { var info = SKDataUtil.jsonBy(data.xw); this.XWMgr.loadData(info) } // 坐骑 this.horseList.setDB(data.horseRows); this.horseList.horseIndex = SKDataUtil.clamp(data.horse_index, 0, 4); // 坐骑技能 this.horseSkill.setDB(data.horseSkillRows); this.setPetDB(data.petRows); this.loaded = true; if (data.day_count) { this.dayMap = SKDataUtil.jsonBy(data.day_count); } // 不是机器人才进行读取签到数据和邮件数据 if (!this.isRobot()) { // 获取当前角色签到数据 if (data.signIn[0]) { // 补签日期 this.mendDate = data.signIn[0].mendDate == null ? "" : data.signIn[0].mendDate; let signInInfo = SKDataUtil.jsonBy(data.signIn[0].daySignIn); // 获取当前角色所签到的月份 let key: any = Object.keys(signInInfo); // 储存的月份与当前月份不相等重新进行生成 if (key != GTimer.getCurMonth()) { this.daySignIn = SKDataUtil.jsonBy(GameUtil.getDaySignIn()); } else { this.daySignIn = signInInfo; } } else { this.daySignIn = SKDataUtil.jsonBy(GameUtil.getDaySignIn()); } // 获取当前角色签到数据 if (data.dial[0]) { // 补签日期 this.dial_num = data.dial[0].dial_num; this.dial_count = data.dial[0].dial_count; this.dial_date = data.dial[0].dial_date; } else { this.dial_num = 1; this.dial_count = 0; this.dial_date = GTimer.getYearMonthDay(); } this.mailList.setDB(data.mailRows); } this.OnlineReminder(); //宝宝信息 this.BabyMgr.setDB(data.baby) this.StarMgr.setDB(data.star_info) }; setTitles(titles: any) { if (titles == null) { return; } this.titles = titles.titles; this.onLoad = titles.onload; this.titles.filter((e: any) => { if (e.onload) { this.titleType = e.type; this.titleId = e.titleid; this.titleVal = e.value; } }); } setActivateSchemeName(schemeName: any) { this.schemeName = schemeName; this.send('s2c_player_data', this.getData()); } // 开启背包格子 openBackpackGrid() { // 消耗金额 let price: number = GameUtil.bagPrice; // 消耗金额类型 let consume_type: number = GameUtil.goldKind.Money; // 当前背包格子大于65时,每开启5个格子固定消费仙玉(也就是开启75个格子时往后消费固定仙玉) if (this.bagKindNum > 65) { if (this.jade < price) { this.send_notice(`仙玉不足无法开启物品格子`); return; } consume_type = GameUtil.goldKind.Jade; } // 当前背包格子不等于初始格子并且当前背包格子小于65个格子时消费 银币 else if (this.bagKindNum != GameUtil.limitBagKindNum) { // ((当前背包格子 - 默认背包格子) / 5 * 背包开启价格 + 背包开启价格) * 50 price = ((this.bagKindNum - GameUtil.limitBagKindNum) / 5 * GameUtil.bagPrice + GameUtil.bagPrice) * 50; if (this.money < price) { this.send_notice(`银币不足无法开启物品格子`); return; } } // 第一次开启格子 else { if (this.money < price) { this.send_notice(`银币不足无法开启物品格子`); return; } } // 增加背包格子 this.bagKindNum += 5; // 扣钱金钱 this.addMoney(consume_type, -price, "", MsgCode.SUCCESS) this.send('s2c_open_backpack_grid', { num: this.bagKindNum }); // 发送信息 this.send_notice(`你新增了5个物品格子`); } OnlineReminder() { let name: any = []; let moneyRank: any = null; let levelRank: any = null; let jingjiRank: any = null; let moneyDesc: any = ''; let levelDesc: any = ''; let jingjiDesc: any = ''; moneyRank = PaiHangMgr.shared.getMoneyRank(); levelRank = PaiHangMgr.shared.getLevelRank(); jingjiRank = PaiHangMgr.shared.getJingJiRank(); for (let i = 0; i < 3; i++) { SKLogger.debug(moneyRank.length) if (moneyRank.length > 0 && moneyRank.length > i) { name.push(moneyRank[i][1]); } SKLogger.debug(levelRank.length) if (levelRank.length > 0 && levelRank.length > i) { name.push(levelRank[i][1]); } SKLogger.debug(jingjiRank.length) if (jingjiRank.length > 0 && jingjiRank.length > i) { name.push(jingjiRank[i][1]); } } let allname: any = SKDataUtil.unique(name); for (let j = 0; j < allname.length; j++) { if (allname[j] == this.name) { for (let n = 0; n < 3; n++) { if (moneyRank.length > 0 && moneyRank.length > n) { if (moneyRank[n][0] == this.name) { moneyDesc = `财富排行第${n + 1}`; break; } } } for (let m = 0; m < 3; m++) { if (levelRank.length > 0 && levelRank.length > m) { if (levelRank[m][0] == this.name) { levelDesc = `练功狂人排行第${m + 1}`; break; } } } for (let k = 0; k < 3; k++) { if (jingjiRank.length > 0 && jingjiRank.length > k) { if (jingjiRank[k][0] == this.name) { jingjiDesc = `竞技排行第${k + 1}`; break; } } } let strRichText = ` ${moneyDesc} ${levelDesc} ${jingjiDesc} ${allname[j]} 玩家,上线了!`; PlayerMgr.shared.broadcast('s2c_screen_msg', { strRichText: strRichText, bInsertFront: 0 }); break; } } } checkEquipExist(equipId: any) { let checkRes = false; checkRes = this.currentEquips.some((e: any) => { return e.EquipID == equipId; }) if (!checkRes) { return this.listEquips.some((e: any) => { return e.EquipID == equipId; }); } return checkRes; } initBang(bangid: any) { // 检查是否被踢 this.bangid = bangid; if (this.bangid > 0 && BangMgr.shared.bangList[this.bangid] == null) { this.bangid = 0; } if (this.bangid != 0) { let bang = BangMgr.shared.getBang(this.bangid); if (bang == null) { SKLogger.info(`没有找到帮编号${this.bangid}`) this.bangid = 0; } else { if (bang.isinit == true) { if (bang.checkPlayer(this.roleid)) { if (bang.masterid == this.roleid) { bang.mastername = this.name; } this.bangname = bang.name; this.bangpost = bang.getBangPost(this.roleid); if (bang.masterid == this.roleid) { this.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.BangZhu, '', false); } else { this.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.BangZhong, '', false); } } else { SKLogger.info(`${this.name}:没有找到帮编号${this.bangid}`) this.bangid = 0; this.bangname = ''; this.bangpost = 0; this.delTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.BangZhu); this.delTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.BangZhong); } } } } } initShuilu(shuiluinfo: any) { this.shuilu = { season: 1, score: 0, gongji: 0, wtime: 0, ltime: 0, }; if (shuiluinfo) { let t = SKDataUtil.jsonBy(shuiluinfo); this.shuilu.season = t.season ? t.season : 0; this.shuilu.score = t.score ? t.score : 0; this.shuilu.gongji = t.gongji ? t.gongji : 0; this.shuilu.wtime = t.wtime ? t.wtime : 0; this.shuilu.ltime = t.ltime ? t.ltime : 0; } let shuiludahui = ActivityMgr.shared.getActivity(ActivityDefine.activityKindID.ShuiLuDaHui); if (shuiludahui && this.shuilu.season != shuiludahui.season) { this.shuilu.season = shuiludahui.season; this.shuilu.score = 0; this.shuilu.wtime = 0; this.shuilu.ltime = 0; } } initJingji(jingjiinfo: any) { this.arena = { count: 10, jpoint: 0, jtime: 0, ranking: 0, }; if (jingjiinfo) { let t = SKDataUtil.jsonBy(jingjiinfo); this.arena.count = t.count ? t.count : 10; this.arena.jpoint = t.jpoint ? t.jpoint : 0; this.arena.jtime = t.jtime ? t.jtime : 0; this.arena.ranking = t.ranking ? t.ranking : 0; } } // 升级技能 updateSkill(data: any) { if (this.skill_list[data.skillId] == null) { this.send('s2c_notice', { strRichText: `找不到技能[${SkillUtil.getSkillName(data.skillId)}]` }); return; } let maxLevel = ExpUtil.getMaxSkillLevel(this.relive); if (this.skill_list[data.skillId] > maxLevel) { this.skill_list[data.skillId] = maxLevel; } if (this.skill_list[data.skillId] >= maxLevel) { this.send('s2c_notice', { strRichText: `技能[${SkillUtil.getSkillName(data.skillId)}]已经满级了!` }); return; } this.skill_list[data.skillId] += 100; if (this.skill_list[data.skillId] > maxLevel) { this.skill_list[data.skillId] = maxLevel; } this.send('s2c_player_data', this.getData()); let info = this.CostFee(GameUtil.goldKind.Money, data.costMoney); //升级技能所消耗的金币 if (info.length > 0) { this.send('s2c_notice', { strRichText: info }); } } addCustomPoint(data: any) { let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); let addlist = SKDataUtil.jsonBy(data.addattr); let alladd = 0; for (const key in addlist) { if (addlist.hasOwnProperty(key)) { //如果有负数,跳过 if (addlist[key] < 0) { continue; } alladd += addlist[key]; } } //如果加点超过1500点 if (alladd > 1500 || alladd < 0) { return; } if (alladd == 0) { return; } if (alladd <= this.qianneng) { for (const key in this.addattr2) { if (addlist.hasOwnProperty(key) && this.addattr2.hasOwnProperty(key)) { this.addattr2[key] += addlist[key]; } } this.calQianNeng(); this.calculateAttr(); if (player) { //cxf人物加点 SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.ITEM, operateDepict: "人物加点", operateResSerial: player.roleid, operateResName: player.name, operateContent: "" }) } // this.send('s2c_player_data', this.getData()); this.schemeMgr && this.schemeMgr.syncSchemePoint(); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); // 如果在队伍中需要刷新队伍信息 this.refresh_team_data(); } } // 属性检测 freeze() { //如果玩家根骨、灵性、力量、敏捷等属性超过2000点 if (this.attr1[EAttrTypeL1.BONE] > 2000 || this.attr1[EAttrTypeL1.SPIRIT] > 2000 || this.attr1[EAttrTypeL1.STRENGTH] > 2000 || this.attr1[EAttrTypeL1.DEXTERITY] > 2000) { this.send_notice('系统检测属性异常,请联系管理人员说明情况否则,对您进行封号处理'); // DB.freezeIP(this.accountid, (ret: any, ip: any) => { // if (ret == MsgCode.SUCCESS) { // if (ip == 0) { // return; // } // delete PlayerMgr.shared.player_role_list[this.roleid]; // delete PlayerMgr.shared.player_only_list[this.onlyid]; // this.destroy(); // FrozenIPMgr.shared.addFrozenIP(ip,this.accountid); // Signal.shared.DeleteTocken(this.accountid); // } // }); } } initTaskMgr(data: string) { let dict: any = SKDataUtil.jsonBy(data) || {}; let vecStateList = SKDataUtil.getDefault(dict.StateList, []); let vecRecordList = SKDataUtil.getDefault(dict.RecordList, []); let mapDailyCnt = SKDataUtil.getDefault(dict.DailyCnt, {}); let mapFuBenCnt = SKDataUtil.getDefault(dict.FuBenCnt, {}); let mapDailyStart = SKDataUtil.getDefault(dict.DailyStart, {}); let mapActiveScore = SKDataUtil.getDefault(dict.mapActiveScore, {}); let szBeenTake = SKDataUtil.getDefault(dict.szBeenTake, [0, 0, 0, 0, 0, 0]); this.getTaskMgr().init(vecStateList, vecRecordList, mapDailyCnt, mapFuBenCnt, mapDailyStart, mapActiveScore, szBeenTake); } // 设置召唤兽数据 setPetDB(rows: any) { SKLogger.debug(`玩家[${this.roleid}:${this.name}]加载召唤兽列表...`); if (rows == null || rows.length < 1) { this.getpet = 0; } else { for (let item of rows) { if (item.state == 0) { // 被删除 continue; } let pet = new Pet(item.dataid); pet.setOwner(this); pet.setDB(item); this.petList.push(pet); if (this.curPetId == 0) { this.curPetId = pet.petid; this.curPet = pet; } else if (this.curPetId == pet.petid) { this.curPet = pet; } } } } // 重置技能,取消技能熟练度升级,直接满级 resetSkill() { let conf: any = GameUtil.defineSkill; this.skill_list = SKDataUtil.clone(conf[this.race][this.sex]); let maxLevel = ExpUtil.getMaxSkillLevel(this.relive); for (let skillId in this.skill_list) { this.skill_list[skillId] = maxLevel; } } // 机器人重置技能,取消技能熟练度升级,直接满级 resetRoleSkill() { let conf: any = GameUtil.robotDefineSkill; this.skill_list = SKDataUtil.clone(conf[this.race][this.sex]); let maxLevel = ExpUtil.getMaxSkillLevel(this.relive); for (let skillId in this.skill_list) { this.skill_list[skillId] = maxLevel; } } // 初始化角色加点 initRolePoint(rolepoints: any) { if (rolepoints == null) { return; } if (rolepoints.length > 0 && (rolepoints[0] == '{' || rolepoints[0] == '[')) { let setPonit2 = (key: any, num: any) => { if (typeof (num) == 'number' && !isNaN(num)) { this.addattr2[key] = num > 0 ? num : 0; } } let addpoint = SKDataUtil.jsonBy(rolepoints); setPonit2(EAttrTypeL2.GENGU, addpoint[EAttrTypeL2.GENGU]); setPonit2(EAttrTypeL2.LINGXING, addpoint[EAttrTypeL2.LINGXING]); setPonit2(EAttrTypeL2.MINJIE, addpoint[EAttrTypeL2.MINJIE]); setPonit2(EAttrTypeL2.LILIANG, addpoint[EAttrTypeL2.LILIANG]); } } updateFriend(pInfo: any) { let friend = this.friendList[pInfo.roleid]; if (friend) { this.friendList[pInfo.roleid].name = pInfo.name; } } // 获得好友数量 getFriendNum(): number { let n = 0; for (let pid in this.friendList) { if (this.friendList.hasOwnProperty(pid)) { n++; } } return n; } checkRolePoint() { let qncount = this.level * 4; // LevelMgr.getRoleLevelQianneng(); let qn = 0; for (const key in this.addattr2) { if (this.addattr2.hasOwnProperty(key)) { qn += this.addattr2[key]; } } if (qn > qncount) { this.resetRolePoint(); this.calQianNeng(); } } initXiuLianPoint(xiupoints: any) { if (xiupoints != null) { if (xiupoints.length > 0 && (xiupoints[0] == '{' || xiupoints[0] == '[')) { let setPonit1 = (key: any, num: any) => { if (typeof (num) == 'number' && !isNaN(num)) { this.addattr1[key] = num > 0 ? num : 0; } } let xiupoint = SKDataUtil.jsonBy(xiupoints); for (const attrtype in xiupoint) { if (xiupoint.hasOwnProperty(attrtype)) { const num = xiupoint[attrtype]; setPonit1(attrtype, num); } } } } } checkXiulianPoint() { let maxlevel = RolePracticeMgr.shared.GetMaxPriactiveLevel(this.relive); if (this.xiulevel > maxlevel) { this.xiulevel = maxlevel; this.resetXiulianPoint(); return; } let xlpoint = 0 for (const key in this.addattr1) { if (this.addattr1.hasOwnProperty(key)) { const p = this.addattr1[key]; xlpoint += p; } } if (xlpoint > this.xiulevel) { this.resetXiulianPoint(); } } getTotalQianneng() { return this.level * 4; } calQianNeng() { let qncount = this.level * 4; // LevelMgr.getRoleLevelQianneng(); let qn = 0; for (const key in this.addattr2) { if (this.addattr2.hasOwnProperty(key)) { qn += this.addattr2[key]; } } let left_qn = qncount - qn; this.qianneng = left_qn; //当潜能值发生变化时,同步方案潜能值 this.schemeMgr && this.schemeMgr.syncSchemePoint(); } calculatePointAttr() { this.calQianNeng(); this.setAttr1(EAttrTypeL1.BONE, this.level + this.addattr2[EAttrTypeL1.BONE]); this.setAttr1(EAttrTypeL1.STRENGTH, this.level + this.addattr2[EAttrTypeL1.STRENGTH]); this.setAttr1(EAttrTypeL1.SPIRIT, this.level + this.addattr2[EAttrTypeL1.SPIRIT]); this.setAttr1(EAttrTypeL1.DEXTERITY, this.level + this.addattr2[EAttrTypeL1.DEXTERITY]); } calculateZhenfaAttr() { console.log("calculateZhenfaAttr.......") this.ZFMgr.calculateZhenfaAttr(this.attr1) } calculateStarAttr() { this.StarMgr.calculateStarAttr(this.attr1) } calculateEquipAttr() { if (this.currentEquips) { let list = [EAttrTypeL1.HP, EAttrTypeL1.MP, EAttrTypeL1.HP_MAX, EAttrTypeL1.MP_MAX, EAttrTypeL1.ATK, EAttrTypeL1.SPD]; for (const equip of this.currentEquips) { for (let key in EAttrTypeL1) { let value = SKDataUtil.numberBy(key); if (isNaN(value)) { continue; } if (list.indexOf(value) != -1) { continue; } let equipattr = equip.getAttr(value); if (equipattr == null || equipattr == 0) { continue; } let addattr = GameUtil.attrToBaseAttr[value]; if (addattr != null) { let target_attr = addattr.target; if (addattr.cal == EAttrCalType.ADD_PERCENT) { this.attr1[target_attr] = (1 + equipattr / 100) * this.attr1[target_attr]; } else if (addattr.cal == EAttrCalType.PERCENT) { this.attr1[target_attr] = (equipattr / 100) * this.attr1[target_attr]; } else if (addattr.cal == EAttrCalType.ADD_NUM) { this.attr1[target_attr] += equipattr; } } else { this.attr1[value] += equipattr; } } } } this.checkBaldricSuit(); this.checkPlayerOfudaUseState(); } // 检查佩饰套装 checkBaldricSuit() { let suitId: number = -1; let suitName: string = ""; let suitCount: number = 0; for (let equip of this.currentEquips) { if (ItemUtil.isBaldric(equip.EIndex)) { let itemData = ItemUtil.getItemData(equip.Type); if (itemData) { if (suitId == -1) { suitId = itemData.level; suitName = itemData.name.substring(0, 2); suitCount++; } else if (suitId == itemData.level) { //如果品级一样 则配饰技能不变 suitId = itemData.level; suitCount++; } else if (suitName == itemData.name.substring(0, 2)) { if (suitId > itemData.level) { //如果比原配饰品级低 则替换成低级的技能 suitId = itemData.level; } suitCount++; } else { break; } } } } if (suitCount >= 5) { let suitData = ItemUtil.getBaldricSuit(suitId); if (suitData) { let skill = SkillUtil.getSkill(suitData.skill); if (skill) { this.baldric = skill.skill_id; this.calcBaldricSkill(skill, 0, "佩饰技能"); } } } else { this.baldric = 0; } } //检查正在使用的天策符 checkPlayerOfudaUseState() { let ms1 = new Date().getMilliseconds(); let ofuda_map = Ofuda.shared.inUseOfudaByRoleid(this.roleid); if (ofuda_map == null || ofuda_map == undefined) { return; } if (ofuda_map.size > 0) { for (let [key, value] of ofuda_map) { if (value.oftype == 1 || value.oftype == 2) { let skill = SkillUtil.getSkill(key); this.calcBaldricSkill(skill, value.addition, "天策符") } if (value.oftype == 3) { for (let pet of this.petList) { pet.calculateAttribute(); } } } } let ms2 = new Date().getMilliseconds(); let time = ms2 - ms1; SKLogger.info(`检查正在使用的天策符-运行时间:${time}ms`); } checkPetOfudaUseState(pet: any, attr: any) { let ofuda_map = Ofuda.shared.inUseOfudaByRoleid(this.roleid); if (ofuda_map == null || ofuda_map == undefined) { return 0; } if (ofuda_map.size > 0) { for (let [key, value] of ofuda_map) { if (value.oftype == 3) { let skill = SkillUtil.getSkill(key); if (attr == EAttrTypeL1.PHY_BREAK) { if (skill.skill_id == ESkillType.MengGong1 || skill.skill_id == ESkillType.MengGong2 || skill.skill_id == ESkillType.MengGong3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.PHY_BREAK_PROB) { if (skill.skill_id == ESkillType.KanPo1 || skill.skill_id == ESkillType.KanPo2 || skill.skill_id == ESkillType.KanPo3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.PHY_HIT) { if (skill.skill_id == ESkillType.JingZhun1 || skill.skill_id == ESkillType.JingZhun2 || skill.skill_id == ESkillType.JingZhun3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.PHY_REBOUND) { if (skill.skill_id == ESkillType.HuWei1 || skill.skill_id == ESkillType.HuWei2 || skill.skill_id == ESkillType.HuWei3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.K_DETER) { if (skill.skill_id == ESkillType.LianXi1 || skill.skill_id == ESkillType.LianXi2 || skill.skill_id == ESkillType.LianXi3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.K_SEAL) { if (skill.skill_id == ESkillType.HuiGen1 || skill.skill_id == ESkillType.HuiGen2 || skill.skill_id == ESkillType.HuiGen3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.K_CONFUSION) { if (skill.skill_id == ESkillType.HuiGen1 || skill.skill_id == ESkillType.HuiGen2 || skill.skill_id == ESkillType.HuiGen3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.K_SLEEP) { if (skill.skill_id == ESkillType.HuiGen1 || skill.skill_id == ESkillType.HuiGen2 || skill.skill_id == ESkillType.HuiGen3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } else if (attr == EAttrTypeL1.K_FORGET) { if (skill.skill_id == ESkillType.HuiGen1 || skill.skill_id == ESkillType.HuiGen2 || skill.skill_id == ESkillType.HuiGen3) { return this.petOfudaAttr(skill, value.addition, pet); } continue; } } } } return 0; } calcOfudaSkill(skill: SkillBase, addition: number) { if (skill == null) { return 0; } if (skill.action_type != EActionType.PASSIVE) { return 0; } let level = 0; let bang = BangMgr.shared.getBang(this.bangid); if (bang) { let list = bang.rolelist; for (let key in list) { if (this.roleid == list[key].roleid) { level = list[key].ofudalevel; break; } } } let effectMap = skill.effectMap; for (let key in effectMap) { let type: EAttrTypeL1 = SKDataUtil.numberBy(key); let ret = skill.getBaldricEffect(type); return ret.add = SKDataUtil.toDecimal2((1 + (addition * 0.1)) * (level * 0.1)); } return 0; } // 计算佩饰技能 calcBaldricSkill(skill: SkillBase, addition: number, prefix: string) { if (skill == null) { return; } if (skill.action_type != EActionType.PASSIVE) { return; } let level = 0; let bang = BangMgr.shared.getBang(this.bangid); if (bang) { let list = bang.rolelist; for (let key in list) { if (this.roleid == list[key].roleid) { level = list[key].ofudalevel; break; } } } let effectMap = skill.effectMap; for (let key in effectMap) { let type: EAttrTypeL1 = SKDataUtil.numberBy(key); let ret = skill.getBaldricEffect(type); if (prefix == "天策符") { if (ret.add < 0) { ret.add = Math.floor((1 + (addition * 0.1)) * (level * 0.1) * (ret.add / 10)); } else { ret.add = SKDataUtil.toDecimal2((1 + (addition * 0.1)) * (level * 0.1)); } } if (ret.add) { let old = SKDataUtil.toDecimal2(this.attr1[type]); if (!(type == 0 || type == 1 || type == 2 || type == 9)) { this.attr1[type] = SKDataUtil.toDecimal2(old + ret.add); } let current: number = this.attr1[type]; SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}][${GameUtil.attrTypeL1Name[type]}]改变[${ret.add}]:${old}->${current}`); let oldHP = this.attr1[EAttrTypeL1.HP]; let oldMP = this.attr1[EAttrTypeL1.MP]; let oldATK = this.attr1[EAttrTypeL1.ATK]; let oldSPD = this.attr1[EAttrTypeL1.SPD]; if (prefix != "天策符") { if (type == EAttrTypeL1.HP_MAX) { this.attr1[EAttrTypeL1.HP] = this.attr1[EAttrTypeL1.HP_MAX]; SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}]气血最大值改变:${oldHP}->${this.attr1[EAttrTypeL1.HP]}`); } else if (type == EAttrTypeL1.MP_MAX) { this.attr1[EAttrTypeL1.MP] = this.attr1[EAttrTypeL1.MP_MAX]; SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}]法力最大值改变:${oldMP}->${this.attr1[EAttrTypeL1.MP]}`); } else if (type == EAttrTypeL1.HP_PERC) { this.attr1[EAttrTypeL1.HP] = Math.floor(this.attr1[EAttrTypeL1.HP_MAX] * (1 + ret.add / 100)); SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}]气血百分比改变:${oldHP}->${this.attr1[EAttrTypeL1.HP]}`); } else if (type == EAttrTypeL1.MP_PERC) { this.attr1[EAttrTypeL1.MP] = Math.floor(this.attr1[EAttrTypeL1.MP_MAX] * (1 + ret.add / 100)); SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}]法力百分比改变:${oldMP}->${this.attr1[EAttrTypeL1.MP]}`); } else if (type == EAttrTypeL1.ATK_PERC) { this.attr1[EAttrTypeL1.ATK] = Math.floor(this.attr1[EAttrTypeL1.ATK] * (1 + ret.add / 100)); SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}]攻击百分比改变:${oldATK}->${this.attr1[EAttrTypeL1.ATK]}`); } else if (type == EAttrTypeL1.ATK_ADD) { this.attr1[EAttrTypeL1.ATK] = Math.floor(this.attr1[EAttrTypeL1.ATK] * (1 + ret.add / 100)); SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}]攻击百分比改变:${oldATK}->${this.attr1[EAttrTypeL1.ATK]}`); } else if (type == EAttrTypeL1.SPD_PERC) { this.attr1[EAttrTypeL1.SPD] = Math.floor(this.attr1[EAttrTypeL1.SPD] * (1 + ret.add / 100)); SKLogger.debug(`玩家[${this.roleid}:${this.name}]佩饰技能[${skill.skill_name}]速度百分比改变:${oldSPD}->${this.attr1[EAttrTypeL1.SPD]}`); } else if (type == EAttrTypeL1.CURE_EHAN) {//加强治愈 this.attr1[EAttrTypeL1.CURE_EHAN] = Math.floor(this.attr1[EAttrTypeL1.CURE_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.SWEEP_EHAN) {//加强横扫 this.attr1[EAttrTypeL1.SWEEP_EHAN] = Math.floor(this.attr1[EAttrTypeL1.SWEEP_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.BREAK_EHAN) {//加强破甲 this.attr1[EAttrTypeL1.BREAK_EHAN] = Math.floor(this.attr1[EAttrTypeL1.BREAK_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.THUD_EHAN) {//加强震击 this.attr1[EAttrTypeL1.THUD_EHAN] = Math.floor(this.attr1[EAttrTypeL1.THUD_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.BLOODRETURN_EHAN) {//加强三尸 this.attr1[EAttrTypeL1.BLOODRETURN_EHAN] = Math.floor(this.attr1[EAttrTypeL1.BLOODRETURN_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_WIND) {//忽视抗风 this.attr1[EAttrTypeL1.HK_WIND] = Math.floor(this.attr1[EAttrTypeL1.HK_WIND] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_WILDFIRE) {//忽视抗鬼火 this.attr1[EAttrTypeL1.HK_WILDFIRE] = Math.floor(this.attr1[EAttrTypeL1.HK_WILDFIRE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.K_BLOODRETURN) {//抗三尸 this.attr1[EAttrTypeL1.K_BLOODRETURN] = Math.floor(this.attr1[EAttrTypeL1.K_BLOODRETURN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_BLOODRETURN) {//忽视抗三尸 this.attr1[EAttrTypeL1.HK_BLOODRETURN] = Math.floor(this.attr1[EAttrTypeL1.HK_BLOODRETURN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.K_CONFUSION) {//抗混乱 this.attr1[EAttrTypeL1.K_CONFUSION] = Math.floor(this.attr1[EAttrTypeL1.K_CONFUSION] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_CONFUSION) {//忽视抗混乱 this.attr1[EAttrTypeL1.HK_CONFUSION] = Math.floor(this.attr1[EAttrTypeL1.HK_CONFUSION] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_FIRE) {//忽视抗火 this.attr1[EAttrTypeL1.HK_FIRE] = Math.floor(this.attr1[EAttrTypeL1.HK_FIRE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_WATER) {//忽视抗水 this.attr1[EAttrTypeL1.HK_WATER] = Math.floor(this.attr1[EAttrTypeL1.HK_WATER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_THUNDER) {//忽视雷 this.attr1[EAttrTypeL1.HK_THUNDER] = Math.floor(this.attr1[EAttrTypeL1.HK_THUNDER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.K_SLEEP) {//抗睡 this.attr1[EAttrTypeL1.K_SLEEP] = Math.floor(this.attr1[EAttrTypeL1.K_SLEEP] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_SLEEP) {//忽视抗睡 this.attr1[EAttrTypeL1.HK_SLEEP] = Math.floor(this.attr1[EAttrTypeL1.HK_SLEEP] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.PHY_DODGE) {//闪避 this.attr1[EAttrTypeL1.PHY_DODGE] = Math.floor(this.attr1[EAttrTypeL1.PHY_DODGE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.K_DETER) {//抗震慑 this.attr1[EAttrTypeL1.PHY_DODGE] = Math.floor(this.attr1[EAttrTypeL1.PHY_DODGE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_DETER) {//忽视抗震慑 this.attr1[EAttrTypeL1.HK_DETER] = Math.floor(this.attr1[EAttrTypeL1.HK_DETER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.PHY_BREAK) {//破防程度 this.attr1[EAttrTypeL1.PHY_BREAK] = Math.floor(this.attr1[EAttrTypeL1.PHY_BREAK] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.PHY_BREAK_PROB) {//破防率 this.attr1[EAttrTypeL1.PHY_BREAK_PROB] = Math.floor(this.attr1[EAttrTypeL1.PHY_BREAK_PROB] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_FORGET) {//忽视抗遗忘 this.attr1[EAttrTypeL1.HK_FORGET] = Math.floor(this.attr1[EAttrTypeL1.HK_FORGET] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.S_GOLD) {//强力克金 this.attr1[EAttrTypeL1.S_GOLD] = Math.floor(this.attr1[EAttrTypeL1.S_GOLD] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.S_WOOD) {//强力克木 this.attr1[EAttrTypeL1.S_WOOD] = Math.floor(this.attr1[EAttrTypeL1.S_WOOD] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.S_WATER) {//强力克水 this.attr1[EAttrTypeL1.S_WATER] = Math.floor(this.attr1[EAttrTypeL1.S_WATER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.S_FIRE) {//强力克火 this.attr1[EAttrTypeL1.S_FIRE] = Math.floor(this.attr1[EAttrTypeL1.S_FIRE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.S_SOIL) {//强力克土 this.attr1[EAttrTypeL1.S_SOIL] = Math.floor(this.attr1[EAttrTypeL1.S_SOIL] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.KB_WIND) {//风系狂暴率 this.attr1[EAttrTypeL1.KB_WIND] = Math.floor(this.attr1[EAttrTypeL1.KB_WIND] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.KB_FIRE) {//火系狂暴率 this.attr1[EAttrTypeL1.KB_FIRE] = Math.floor(this.attr1[EAttrTypeL1.KB_FIRE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.KB_WATER) {//水系狂暴率 this.attr1[EAttrTypeL1.KB_WATER] = Math.floor(this.attr1[EAttrTypeL1.KB_WATER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.KB_THUNDER) {//雷系狂暴率 this.attr1[EAttrTypeL1.KB_THUNDER] = Math.floor(this.attr1[EAttrTypeL1.KB_THUNDER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.KB_BLOODRETURN) {//三尸狂暴率 this.attr1[EAttrTypeL1.KB_BLOODRETURN] = Math.floor(this.attr1[EAttrTypeL1.KB_BLOODRETURN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.KB_WILDFIRE) {//鬼火狂暴率 this.attr1[EAttrTypeL1.KB_WILDFIRE] = Math.floor(this.attr1[EAttrTypeL1.KB_WILDFIRE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.Q_BLOODRETURN) {//三尸狂暴 this.attr1[EAttrTypeL1.Q_BLOODRETURN] = Math.floor(this.attr1[EAttrTypeL1.Q_BLOODRETURN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.Q_WILDFIRE) {//鬼火狂暴 this.attr1[EAttrTypeL1.Q_WILDFIRE] = Math.floor(this.attr1[EAttrTypeL1.Q_WILDFIRE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.Q_WIND) {//风系狂暴 this.attr1[EAttrTypeL1.Q_WIND] = Math.floor(this.attr1[EAttrTypeL1.Q_WIND] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.Q_FIRE) {//火系狂暴 this.attr1[EAttrTypeL1.Q_FIRE] = Math.floor(this.attr1[EAttrTypeL1.Q_FIRE] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.Q_WATER) {//水系狂暴 this.attr1[EAttrTypeL1.Q_WATER] = Math.floor(this.attr1[EAttrTypeL1.Q_WATER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.Q_THUNDER) {//雷系狂暴 this.attr1[EAttrTypeL1.Q_THUNDER] = Math.floor(this.attr1[EAttrTypeL1.Q_THUNDER] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.WATER_EHAN) {//强水 this.attr1[EAttrTypeL1.WATER_EHAN] = Math.floor(this.attr1[EAttrTypeL1.WATER_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.FIRE_EHAN) {//强火 this.attr1[EAttrTypeL1.FIRE_EHAN] = Math.floor(this.attr1[EAttrTypeL1.FIRE_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.WIND_EHAN) {//强风 this.attr1[EAttrTypeL1.WIND_EHAN] = Math.floor(this.attr1[EAttrTypeL1.WIND_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.THUNDER_EHAN) {//强雷 this.attr1[EAttrTypeL1.THUNDER_EHAN] = Math.floor(this.attr1[EAttrTypeL1.THUNDER_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.CHAOS_EHAN) {//强雷 this.attr1[EAttrTypeL1.CHAOS_EHAN] = Math.floor(this.attr1[EAttrTypeL1.CHAOS_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.SEAL_EHAN) {//强雷 this.attr1[EAttrTypeL1.SEAL_EHAN] = Math.floor(this.attr1[EAttrTypeL1.SEAL_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.DEFEND_ADD_EHAN) {//强雷 this.attr1[EAttrTypeL1.DEFEND_ADD_EHAN] = Math.floor(this.attr1[EAttrTypeL1.DEFEND_ADD_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.SPD_ADD_EHAN) {//强雷 this.attr1[EAttrTypeL1.SPD_ADD_EHAN] = Math.floor(this.attr1[EAttrTypeL1.SPD_ADD_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.DETER_EHAN) {//强雷 this.attr1[EAttrTypeL1.DETER_EHAN] = Math.floor(this.attr1[EAttrTypeL1.DETER_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.SLEEP_EHAN) {//强雷 this.attr1[EAttrTypeL1.SLEEP_EHAN] = Math.floor(this.attr1[EAttrTypeL1.SLEEP_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.TOXIN_EHAN) {//强毒 this.attr1[EAttrTypeL1.TOXIN_EHAN] = Math.floor(this.attr1[EAttrTypeL1.TOXIN_EHAN] * (1 + ret.add / 100)); } else if (type == EAttrTypeL1.HK_POISON) {//忽视抗毒 this.attr1[EAttrTypeL1.HK_POISON] = Math.floor(this.attr1[EAttrTypeL1.HK_POISON] * (1 + ret.add / 100)); } } else { this.attr1[type] = this.attr1[type]; } } } } checkOfudaBySkillId(skillid: any) { let ofuda_map = Ofuda.shared.inUseOfudaByRoleid(this.roleid); if (ofuda_map == null || ofuda_map == undefined || ofuda_map.size < 0) { return false; } for (let [key, value] of ofuda_map) { if (key == skillid) { return true; } } return false; } // 基础百分比气血等 属性放在 等级计算等级之后 calculateEquipBaseAttr() { if (this.currentEquips) { let list = [EAttrTypeL1.HP_ADD, EAttrTypeL1.MP_ADD, EAttrTypeL1.ATK_ADD, EAttrTypeL1.SPD_ADD, EAttrTypeL1.HP_PERC, EAttrTypeL1.MP_PERC, EAttrTypeL1.ATK_PERC, EAttrTypeL1.SPD_PERC]; //, EAttrTypeL1.AATK, EAttrTypeL1.ASPD for (let equip of this.currentEquips) { for (let key in EAttrTypeL1) { let value = SKDataUtil.numberBy(key); if (isNaN(value)) { continue; } if (list.indexOf(value) == -1) { continue; } let equipattr = equip.getAttr(value); if (equipattr == null || equipattr == 0) { continue; } let addattr = GameUtil.attrToBaseAttr[value]; if (addattr != null) { let target_attr = addattr.target; if (addattr.cal == EAttrCalType.ADD_PERCENT) { this.attr1[target_attr] = Math.floor((1 + equipattr / 100) * this.attr1[target_attr]); } else if (addattr.cal == EAttrCalType.PERCENT) { this.attr1[target_attr] = Math.floor((1 + equipattr / 100) * this.attr1[target_attr]); } else if (addattr.cal == EAttrCalType.ADD_NUM) { this.attr1[target_attr] = Math.floor(this.attr1[target_attr] + equipattr); } } else { this.attr1[value] = Math.floor(this.attr1[value] + equipattr); } } } } let ofuda_map = Ofuda.shared.inUseOfudaByRoleid(this.roleid); if (ofuda_map != null && ofuda_map != undefined && ofuda_map.size > 0) { //载物符 - 通明 | 活血 for (let [key, value] of ofuda_map) { if (key == ESkillType.TongMing1 || key == ESkillType.TongMing2 || key == ESkillType.TongMing3) { let skill = SkillUtil.getSkill(key); let addition = this.calcOfudaSkill(skill, value.addition); this.attr1[EAttrTypeL1.MP] += Math.floor(this.attr1[EAttrTypeL1.MP_MAX] * (addition / 100)); } if (key == ESkillType.HuoXue1 || key == ESkillType.HuoXue2 || key == ESkillType.HuoXue3) { let skill = SkillUtil.getSkill(key); let addition = this.calcOfudaSkill(skill, value.addition); this.attr1[EAttrTypeL1.HP] += Math.floor(this.attr1[EAttrTypeL1.HP_MAX] * (addition / 100)); } } } // if(this.attr1[EAttrTypeL1.MP] > this.attr1[EAttrTypeL1.MP_MAX]){ // this.attr1[EAttrTypeL1.MP] = this.attr1[EAttrTypeL1.MP_MAX] // } // if(this.attr1[EAttrTypeL1.HP] > this.attr1[EAttrTypeL1.HP_MAX]){ // this.attr1[EAttrTypeL1.HP] = this.attr1[EAttrTypeL1.HP_MAX] // } } addXiulianPoint(data: any) { if (!data) { return; } let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); // 重置修炼点 if (data.type == 0) { let strErr = this.CostFee(GameUtil.goldKind.Money, 200000); if (strErr != '') { return; } this.resetXiulianPoint(); this.calculateAttr(); this.send('s2c_player_data', this.getData()); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); this.schemeMgr && this.schemeMgr.syncSchemePoint(); if (player) { //cxf重置修炼点 SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.PLAYER, operateDepict: "重置修炼点", operateResSerial: player.roleid, operateResName: player.name, operateContent: "" }) } return; } if (data.type == 1) { let sumpoint = 0; let addpoint: any = {}; addpoint = SKDataUtil.jsonBy(data.info); for (const key in addpoint) { sumpoint += addpoint[key]; } /* let curpoint = 0; for (const key in this.addattr1) { curpoint += this.addattr1[key]; } if (sumpoint + curpoint > this.xiulevel) { return; } */ if (sumpoint > this.xiulevel) { return; } for (const key in addpoint) { if (this.addattr1[key] == null) { this.addattr1[key] = 0; } if (Number(key) == 1000) { if (this.race == 1 && (this.addattr1[key] + addpoint[key] > 32)) { this.send_notice(`上限为180点`); return; } if ((this.race == 2 || this.race == 5) && (this.addattr1[key] + addpoint[key] > 20)) { this.send_notice(`上限为150点`); return; } if ((this.race == 3 || this.race == 4) && (this.addattr1[key] + addpoint[key] > 24)) { this.send_notice(`上限为160点`); return; } } this.addattr1[key] += addpoint[key]; } } this.checkXiulianPoint(); this.calculateAttr(); if (player) { //帮派修炼 SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.PLAYER, operateDepict: "帮派修炼", operateResSerial: player.roleid, operateResName: player.name, operateContent: "" }) } this.send('s2c_player_data', this.getData()); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); } resetRolePoint() { //重置加点 this.addattr2[EAttrTypeL2.GENGU] = 0; this.addattr2[EAttrTypeL2.LINGXING] = 0; this.addattr2[EAttrTypeL2.MINJIE] = 0; this.addattr2[EAttrTypeL2.LILIANG] = 0; for (let equip of this.currentEquips) { this.addEquipList(equip); } this.currentEquips = []; let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { //cxf重置加点 SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.PLAYER, operateDepict: "重置加点", operateResSerial: player.roleid, operateResName: player.name, operateContent: "" }) } this.changeWeapon(null); } resetXiulianPoint() { for (const key in this.addattr1) { this.addattr1[key] = 0; } } xiulianUpgrade(data: any) { let maxxiulian = RolePracticeMgr.shared.GetMaxPriactiveLevel(this.relive); if (this.xiulevel < maxxiulian) { if (this.bangscore >= data.score) { this.bangscore -= data.score; DB.updateMoney({ bind_jade: this.bind_jade, shiscore: this.shiscore, bangscore: this.bangscore, discore: this.discore, xiuscore: this.xiuscore, guoscore: this.guoscore, roleid: this.roleid }); this.xiulevel++; this.send('s2c_player_data', this.getData()); this.send('s2c_notice', { strRichText: '获得1个修炼点' }); } else { this.send_notice("帮贡不足"); return; } let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { //cxf帮派修炼等级 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.PLAYER, operateDepict: "帮派修炼等级", operateResSerial: this.bangid, operateResName: this.name, operateContent: "" }) } this.schemeMgr && this.schemeMgr.syncSchemePoint(); } else { this.send('s2c_notice', { strRichText: '修炼点已达到上限' }); } } getEquipAttr(attrtype: number): number { let tmp = 0; for (const equip of this.currentEquips) { tmp += equip.getAttr(attrtype); } return tmp; } calculateLevel() { let int = Math.floor; let E = int((100 - this.level) / 5); let L = this.level; let Gs: any = GameUtil.growPre[this.race]; let P = this.getAttr1(EAttrTypeL2.GENGU); // + this.getEquipAttr(EAttrTypeL1.GENGU); let G = Gs[EAttrTypeL2.GENGU]; let base = GameUtil.baseAttr[this.race][EAttrTypeL1.HP]; let Fs: any = this.getReliveFix(); let F: any = (Fs[EAttrTypeL1.HP] != null) ? Fs[EAttrTypeL1.HP] : 1; let hp = int((int((L + E) * P * G + base) + this.getEquipAttr(EAttrTypeL1.HP_MAX)) * (1 + F / 100)); P = this.getAttr1(EAttrTypeL2.LINGXING); // + this.getEquipAttr(EAttrTypeL1.LINGXING); G = Gs[EAttrTypeL2.LINGXING]; base = GameUtil.baseAttr[this.race][EAttrTypeL1.MP]; F = (Fs[EAttrTypeL1.MP] != null) ? Fs[EAttrTypeL1.MP] : 1; let mp = int((int((L + E) * P * G + base) + this.getEquipAttr(EAttrTypeL1.MP_MAX)) * (1 + F / 100)); P = this.getAttr1(EAttrTypeL2.LILIANG); // + this.getEquipAttr(EAttrTypeL1.LILIANG); G = Gs[EAttrTypeL2.LILIANG]; base = GameUtil.baseAttr[this.race][EAttrTypeL1.ATK]; F = (Fs[EAttrTypeL1.ATK] != null) ? Fs[EAttrTypeL1.ATK] : 1; let atk = int((L + E) * P * G / 5 + base + this.getEquipAttr(EAttrTypeL1.ATK) * (1 + F / 100)); P = this.getAttr1(EAttrTypeL2.MINJIE); // + this.getEquipAttr(EAttrTypeL1.MINJIE); G = Gs[EAttrTypeL2.MINJIE]; base = GameUtil.baseAttr[this.race][EAttrTypeL1.SPD]; F = (Fs[EAttrTypeL1.SPD] != null) ? Fs[EAttrTypeL1.SPD] : 1; let spd = int((int((10 + P) * G) + this.getEquipAttr(EAttrTypeL1.SPD)) * (1 + F / 100)) this.attr1[EAttrTypeL1.HP] = hp; this.attr1[EAttrTypeL1.HP_MAX] = hp; this.attr1[EAttrTypeL1.MP] = mp; this.attr1[EAttrTypeL1.MP_MAX] = mp; this.attr1[EAttrTypeL1.ATK] = atk; this.attr1[EAttrTypeL1.SPD] = spd; this.calculateEquipBaseAttr(); this.hp = this.attr1[EAttrTypeL1.HP]; this.maxhp = this.attr1[EAttrTypeL1.HP]; this.mp = this.attr1[EAttrTypeL1.MP]; this.maxmp = this.attr1[EAttrTypeL1.MP]; this.atk = this.attr1[EAttrTypeL1.ATK]; this.spd = this.attr1[EAttrTypeL1.SPD]; this.attr1[EAttrTypeL1.HP_MAX] = this.attr1[EAttrTypeL1.HP]; this.attr1[EAttrTypeL1.MP_MAX] = this.attr1[EAttrTypeL1.MP]; if (this.race == ERaceType.HUMEN) { // 抗混乱 封印 毒 昏睡 每4级 + 1 this.attr1[EAttrTypeL1.K_CONFUSION] += 0 + int(L / 4); this.attr1[EAttrTypeL1.K_SEAL] += 0 + int(L / 4); this.attr1[EAttrTypeL1.K_SLEEP] += 0 + int(L / 4); this.attr1[EAttrTypeL1.K_POISON] += 0 + int(L / 4); } else if (this.race == ERaceType.SKY) { this.attr1[EAttrTypeL1.K_WATER] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_FIRE] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_THUNDER] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_WIND] += 0 + int(L / 8); } else if (this.race == ERaceType.DEMON) { this.attr1[EAttrTypeL1.K_PHY_GET] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_CONFUSION] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_SEAL] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_SLEEP] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_POISON] += 0 + int(L / 8); this.attr1[EAttrTypeL1.K_WATER] += 0 + int(L / 12); this.attr1[EAttrTypeL1.K_FIRE] += 0 + int(L / 12); this.attr1[EAttrTypeL1.K_THUNDER] += 0 + int(L / 12); this.attr1[EAttrTypeL1.K_WIND] += 0 + int(L / 12); } else if (this.race == ERaceType.GHOST) { this.attr1[EAttrTypeL1.K_CONFUSION] += 0 + int(L / 6); this.attr1[EAttrTypeL1.K_SEAL] += 0 + int(L / 6); this.attr1[EAttrTypeL1.K_SLEEP] += 0 + int(L / 6); this.attr1[EAttrTypeL1.K_POISON] += 0 + int(L / 6); this.attr1[EAttrTypeL1.K_FORGET] += 0 + int(L / 6); this.attr1[EAttrTypeL1.K_WILDFIRE] += 0 + int(L / 6); this.attr1[EAttrTypeL1.K_BLOODRETURN] += 0 + int(L / 6); this.attr1[EAttrTypeL1.K_WATER] += 0 - int(L / 8); this.attr1[EAttrTypeL1.K_FIRE] += 0 - int(L / 8); this.attr1[EAttrTypeL1.K_THUNDER] += 0 - int(L / 8); this.attr1[EAttrTypeL1.K_WIND] += 0 - int(L / 8); this.attr1[EAttrTypeL1.PHY_HIT] += 0 + int(L / 4); this.attr1[EAttrTypeL1.PHY_DODGE] += 0 + int(L / 4); } } getReliveFix(): any { let result: any = {}; let relivefixs: any[] = [GameUtil.reliveFixAttr1, GameUtil.reliveFixAttr2, GameUtil.reliveFixAttr3, GameUtil.reliveFixAttr4] for (let index = 0; index < this.relive; index++) { let rerace = this.relivelist[index][0]; let resex = this.relivelist[index][1]; let item: any = relivefixs[index][rerace]; if (item == null) { continue; } let temp: any = item[resex]; for (const attr1 in temp) { const num = temp[attr1]; if (result[attr1] == null) { result[attr1] = 0; } result[attr1] += num; } } return result; } calculateReliveAttr() { if (this.relive == 0) { return; } let list = [EAttrTypeL1.HP, EAttrTypeL1.HP_MAX, EAttrTypeL1.MP, EAttrTypeL1.MP_MAX, EAttrTypeL1.ATK, EAttrTypeL1.SPD]; let fixed = this.getReliveFix(); for (let key in fixed) { if (fixed.hasOwnProperty(key)) { const addattr = fixed[key]; const id = parseInt(key); if (list.indexOf(id) == -1) { this.attr1[key] += addattr; } else { // this.attr1[key] = Math.ceil(this.attr1[key] * (1 + addattr / 100)); } } } } calculateXiuAttr() { let tempK_SLEEP: number = 0; let tempK_SEAL: number = 0; let tempK_CONFUSION: number = 0; let tempK_FORGET: number = 0; let temp_Max: number = 0; this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] = 100 + (this.addattr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] == null ? 0 : this.addattr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] * 2.5); this.attr1[EAttrTypeL1.K_SEAL] += (this.addattr1[EAttrTypeL1.K_SEAL] == null ? 0 : this.addattr1[EAttrTypeL1.K_SEAL] * 5); this.attr1[EAttrTypeL1.K_CONFUSION] += (this.addattr1[EAttrTypeL1.K_CONFUSION] == null ? 0 : this.addattr1[EAttrTypeL1.K_CONFUSION] * 5); this.attr1[EAttrTypeL1.K_SLEEP] += (this.addattr1[EAttrTypeL1.K_SLEEP] == null ? 0 : this.addattr1[EAttrTypeL1.K_SLEEP] * 5); this.attr1[EAttrTypeL1.K_FORGET] += (this.addattr1[EAttrTypeL1.K_FORGET] == null ? 0 : this.addattr1[EAttrTypeL1.K_FORGET] * 5); tempK_SEAL = this.attr1[EAttrTypeL1.K_SEAL]; tempK_CONFUSION = this.attr1[EAttrTypeL1.K_CONFUSION]; tempK_SLEEP = this.attr1[EAttrTypeL1.K_SLEEP]; tempK_FORGET = this.attr1[EAttrTypeL1.K_FORGET]; SKLogger.warn("---------1111111111111111111---" + tempK_SEAL + "-抗封印-" + tempK_CONFUSION + "-抗混乱-" + tempK_SLEEP + "-抗昏睡--" + tempK_FORGET) if (this.attr1[EAttrTypeL1.K_SEAL] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_SEAL] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } if (this.attr1[EAttrTypeL1.K_CONFUSION] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_CONFUSION] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } if (this.attr1[EAttrTypeL1.K_SLEEP] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_SLEEP] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } if (this.attr1[EAttrTypeL1.K_FORGET] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_FORGET] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } /* if(this.race == ERaceType.HUMEN){ if (this.attr1[EAttrTypeL1.K_SEAL] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]) { this.attr1[EAttrTypeL1.K_SEAL] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]; } }else if(this.race == ERaceType.DRAGON){ if (this.attr1[EAttrTypeL1.K_SEAL] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]) { this.attr1[EAttrTypeL1.K_SEAL] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]; } }else{ if (this.attr1[EAttrTypeL1.K_SEAL] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_SEAL] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } } if(this.race == ERaceType.HUMEN){ if (this.attr1[EAttrTypeL1.K_CONFUSION] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]) { this.attr1[EAttrTypeL1.K_CONFUSION] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]; } }else if(this.race == ERaceType.DRAGON){ if (this.attr1[EAttrTypeL1.K_CONFUSION] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]) { this.attr1[EAttrTypeL1.K_CONFUSION] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]; } }else{ if (this.attr1[EAttrTypeL1.K_CONFUSION] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_CONFUSION] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } } if(this.race == ERaceType.HUMEN){ if (this.attr1[EAttrTypeL1.K_SLEEP] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]) { this.attr1[EAttrTypeL1.K_SLEEP] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]; } }else if(this.race == ERaceType.DRAGON){ if (this.attr1[EAttrTypeL1.K_SLEEP] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]) { this.attr1[EAttrTypeL1.K_SLEEP] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]; } }else{ if (this.attr1[EAttrTypeL1.K_SLEEP] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_SLEEP] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } } if(this.race == ERaceType.HUMEN){ if (this.attr1[EAttrTypeL1.K_FORGET] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]) { this.attr1[EAttrTypeL1.K_FORGET] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN]; } }else if(this.race == ERaceType.DRAGON){ if (this.attr1[EAttrTypeL1.K_FORGET] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]) { this.attr1[EAttrTypeL1.K_FORGET] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG]; } }else{ if (this.attr1[EAttrTypeL1.K_FORGET] > this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]) { this.attr1[EAttrTypeL1.K_FORGET] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]; } } */ if (this.race == ERaceType.HUMEN) { if (this.attr1[EAttrTypeL1.K_FORGET] > 180) { this.attr1[EAttrTypeL1.K_FORGET] = 180; } if (this.attr1[EAttrTypeL1.K_SLEEP] > 180) { this.attr1[EAttrTypeL1.K_SLEEP] = 180; } if (this.attr1[EAttrTypeL1.K_CONFUSION] > 180) { this.attr1[EAttrTypeL1.K_CONFUSION] = 180; } if (this.attr1[EAttrTypeL1.K_SEAL] > 180) { this.attr1[EAttrTypeL1.K_SEAL] = 180 } temp_Max = 180; } else if (this.race == ERaceType.DRAGON || this.race == ERaceType.SKY) { if (this.attr1[EAttrTypeL1.K_FORGET] > 150) { this.attr1[EAttrTypeL1.K_FORGET] = 150; } if (this.attr1[EAttrTypeL1.K_SLEEP] > 150) { this.attr1[EAttrTypeL1.K_SLEEP] = 150; } if (this.attr1[EAttrTypeL1.K_CONFUSION] > 150) { this.attr1[EAttrTypeL1.K_CONFUSION] = 150; } if (this.attr1[EAttrTypeL1.K_SEAL] > 150) { this.attr1[EAttrTypeL1.K_SEAL] = 150 } temp_Max = 150; } else { if (this.attr1[EAttrTypeL1.K_FORGET] > 160) { this.attr1[EAttrTypeL1.K_FORGET] = 160; } if (this.attr1[EAttrTypeL1.K_SLEEP] > 160) { this.attr1[EAttrTypeL1.K_SLEEP] = 160; } if (this.attr1[EAttrTypeL1.K_CONFUSION] > 160) { this.attr1[EAttrTypeL1.K_CONFUSION] = 160; } if (this.attr1[EAttrTypeL1.K_SEAL] > 160) { this.attr1[EAttrTypeL1.K_SEAL] = 160 } temp_Max = 160; } let ofuda_map = Ofuda.shared.inUseOfudaByRoleid(this.roleid); if (ofuda_map != null && ofuda_map != undefined && ofuda_map.size > 0) { //载物符 - 明镜 | 清明 | 沉着 | 强心 for (let [key, value] of ofuda_map) { if (key == ESkillType.MingJing1 || key == ESkillType.MingJing2 || key == ESkillType.MingJing3) { let skill = SkillUtil.getSkill(key); let addition = this.calcOfudaSkill(skill, value.addition); // if(this.race == ERaceType.HUMEN){ // if (tempK_SEAL > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition)) { // this.attr1[EAttrTypeL1.K_SEAL] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition; // } // }else if(this.race == ERaceType.DRAGON){ // if (tempK_SEAL > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition)) { // this.attr1[EAttrTypeL1.K_SEAL] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition; // } // }else{ if (tempK_SEAL >= (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition)) { this.attr1[EAttrTypeL1.K_SEAL] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition; } else if (tempK_SEAL >= temp_Max) { this.attr1[EAttrTypeL1.K_SEAL] = tempK_SEAL; } //} } if (key == ESkillType.QingMing1 || key == ESkillType.QingMing2 || key == ESkillType.QingMing3) { let skill = SkillUtil.getSkill(key); let addition = this.calcOfudaSkill(skill, value.addition); // if(this.race == ERaceType.HUMEN){ // if (tempK_CONFUSION > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition)) { // this.attr1[EAttrTypeL1.K_CONFUSION] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition; // } // }else if(this.race == ERaceType.DRAGON){ // if (tempK_CONFUSION > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition)) { // this.attr1[EAttrTypeL1.K_CONFUSION] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition; // } // }else{ if (tempK_CONFUSION >= (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition)) { this.attr1[EAttrTypeL1.K_CONFUSION] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition; } else if (tempK_CONFUSION >= temp_Max) { this.attr1[EAttrTypeL1.K_CONFUSION] = tempK_CONFUSION; } //} } if (key == ESkillType.ChenZhuo1 || key == ESkillType.ChenZhuo2 || key == ESkillType.ChenZhuo3) { let skill = SkillUtil.getSkill(key); let addition = this.calcOfudaSkill(skill, value.addition); // if(this.race == ERaceType.HUMEN){ // if (tempK_SLEEP > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition)) { // this.attr1[EAttrTypeL1.K_SLEEP] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition; // } // }else if(this.race == ERaceType.DRAGON){ // if (tempK_SLEEP > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition)) { // this.attr1[EAttrTypeL1.K_SLEEP] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition; // } // }else{ if (tempK_SLEEP >= (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition)) { this.attr1[EAttrTypeL1.K_SLEEP] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition; } else if (tempK_SLEEP >= temp_Max) { this.attr1[EAttrTypeL1.K_SLEEP] = tempK_SLEEP; } //} } if (key == ESkillType.QiangXin1 || key == ESkillType.QiangXin2 || key == ESkillType.QiangXin3) { let skill = SkillUtil.getSkill(key); let addition = this.calcOfudaSkill(skill, value.addition); // if(this.race == ERaceType.HUMEN){ // if (tempK_FORGET > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition)) { // this.attr1[EAttrTypeL1.K_FORGET] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_REN] + addition; // } // }else if(this.race == ERaceType.DRAGON){ // if (tempK_FORGET > (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition)) { // this.attr1[EAttrTypeL1.K_FORGET] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_LIMIT_LONG] + addition; // } // }else{ if (tempK_FORGET >= (this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition)) { this.attr1[EAttrTypeL1.K_FORGET] = this.attr1[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT] + addition; } else if (tempK_FORGET >= temp_Max) { this.attr1[EAttrTypeL1.K_FORGET] = tempK_FORGET; } //} } } } SKLogger.warn("---------2222222---" + this.attr1[EAttrTypeL1.K_SEAL] + "-抗封印-" + this.attr1[EAttrTypeL1.K_CONFUSION] + "-抗混乱-" + this.attr1[EAttrTypeL1.K_SLEEP] + "-抗昏睡--" + this.attr1[EAttrTypeL1.K_FORGET]) this.attr1[EAttrTypeL1.K_WIND] += (this.addattr1[EAttrTypeL1.K_WIND] == null ? 0 : this.addattr1[EAttrTypeL1.K_WIND] * 5); this.attr1[EAttrTypeL1.K_THUNDER] += (this.addattr1[EAttrTypeL1.K_THUNDER] == null ? 0 : this.addattr1[EAttrTypeL1.K_THUNDER] * 5); this.attr1[EAttrTypeL1.K_WATER] += (this.addattr1[EAttrTypeL1.K_WATER] == null ? 0 : this.addattr1[EAttrTypeL1.K_WATER] * 5); this.attr1[EAttrTypeL1.K_FIRE] += (this.addattr1[EAttrTypeL1.K_FIRE] == null ? 0 : this.addattr1[EAttrTypeL1.K_FIRE] * 5); this.attr1[EAttrTypeL1.K_WILDFIRE] += (this.addattr1[EAttrTypeL1.K_WILDFIRE] == null ? 0 : this.addattr1[EAttrTypeL1.K_WILDFIRE] * 5); this.attr1[EAttrTypeL1.K_BLOODRETURN] += (this.addattr1[EAttrTypeL1.K_BLOODRETURN] == null ? 0 : this.addattr1[EAttrTypeL1.K_BLOODRETURN] * 5); this.attr1[EAttrTypeL1.K_POISON] += (this.addattr1[EAttrTypeL1.K_POISON] == null ? 0 : this.addattr1[EAttrTypeL1.K_POISON] * 5); this.attr1[EAttrTypeL1.PHY_GET] += (this.addattr1[EAttrTypeL1.PHY_GET] == null ? 0 : this.addattr1[EAttrTypeL1.PHY_GET] * 4); } // 是否为机器人 isRobot(): boolean { if (this.ai) { return true; } return false; } // 全部存档 saveAll(callback: (failed: string[]) => void) { if (this.roleid != undefined && this.resid != undefined) { let prefix: string = `${this.isRobot() ? `机器人` : `玩家`}`; if (this.saveTotal > 0) { SKLogger.warn(`${prefix}[${this.roleid}:${this.name}]正在存档中,当前存档:${this.saveTotal}`); return; } if (!this.loaded) { SKLogger.warn(`${prefix}[${this.roleid}:${this.name}]没有加载完成稍后存档`); callback([]); return; } if (this.ai_flag != 1) { this.saveTotal = 5; // 检查是否存档完成 套装,召唤兽,坐骑列表,坐骑技能,玩家 this.saveFailed = []; let equipSQL = ''; for (const equip of this.currentEquips) { equipSQL += equip.saveSQL(); } for (const equip of this.listEquips) { equipSQL += equip.saveSQL(); } for (let equip of this.lockerEquips) { equipSQL += equip.saveSQL(); } if (this.mapid == 3002) { this.mapid = 1011; this.x = 237; this.y = 19; } if (this.mapid == 1201 && !this.inPrison) { this.mapid = 1011; this.x = 112; this.y = 78; } let titles = SKDataUtil.toJson({ onload: this.onLoad, titles: this.titles, }, "{}"); let partnerList: string = ""; if (this.partnerMgr) { partnerList = this.partnerMgr.toJson(); } let color = { c1: this.color1, c2: this.color2, p1: this.color_one_serial, p2: this.color_two_serial }; let friendlist = SKDataUtil.clone(this.friendList); for (let roleid in friendlist) { if (friendlist.hasOwnProperty(roleid)) { if (roleid == 'version') { continue; } let finfo = friendlist[roleid]; finfo.name = Buffer.from(finfo.name).toString('base64'); } } friendlist.version = 1; let dbinfo = { accountid: this.accountid, name: this.name, mapid: this.mapid, x: this.x, y: this.y, addpoint: this.addattr2, xiupoint: this.addattr1, xiulevel: this.xiulevel, pet: this.curPetId, friendlist: friendlist, equipinfo: equipSQL, bagitem: this.bag_list, bangid: this.bangid, taskstate: this.taskStateToJson(), partnerlist: partnerList, lockeritem: this.locker_list, skill: this.skill_list, money: this.money, jade: this.jade, bind_jade: this.bind_jade, bang_score: this.bangscore, shi_score: this.shiscore, di_score: this.discore, xiu_score: this.xiuscore, guo_score: this.guoscore, exp: this.exp, level: this.level, level_reward: this.level_reward, resid: this.resid, race: this.race, sex: this.sex, relive: this.relive, relivelist: this.relivelist, shane: this.shane, state: this.nFlag, rewardrecord: this.rewardrecord, sprewardrecord: this.sprewardrecord, getgift: this.getgift, shuilu: this.shuilu, arena: this.arena, titles: titles, active_scheme_name: this.schemeName, color: color, star: this.star, horse_index: this.horseList.horseIndex, day_count: this.dayMap, bagKindNum: this.bagKindNum, mend_date: this.mend_date, sat_integral: this.sat_integral, offlinetime: this.offlinetime, doublecnt: this.doublecnt, unget_doublecnt: this.unget_doublecnt, zhenfa: this.ZFMgr.toJson(), xw: this.XWMgr.getXwListByJson(), baby: this.BabyMgr.ToJson(), star_info: this.StarMgr.ToJson(), tianti_integral: this.tianti_integral, }; let self = this; DB.savePlayerInfo(this.roleid, dbinfo, (code: number, msg: string) => { let info = `存档:${prefix}[${this.roleid}:${this.name}]角色存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.debug(info); } else { info += `失败:[${msg}]!`; SKLogger.warn(info); } self.checkSave(code, info, callback, "玩家信息"); }); // 保存套装 if (this.schemeMgr) { this.schemeMgr.saveDB((code: number, msg: string) => { this.checkSave(code, msg, callback, "套装"); }); } else { let msg = `存档:${prefix}[${this.roleid}:${this.name}]套装无需存档!`; this.checkSave(MsgCode.SUCCESS, msg, callback, "套装"); } // 保存召唤兽 DB.savePets(this.petList, this.roleid, (code: number, msg: string) => { let info = `存档:${prefix}[${this.roleid}:${this.name}]召唤兽存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.debug(info); } else { info += `失败[${msg}]!`; SKLogger.warn(info); } this.checkSave(code, msg, callback, "召唤兽"); }); this.horseList.saveDB((code: number, msg: string) => { let info = `存档:${prefix}[${this.roleid}:${this.name}]坐骑列表存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.debug(info); } else { info += `失败[${msg}]!`; SKLogger.warn(info); } this.checkSave(code, info, callback, "坐骑"); }); this.horseSkill.saveDB((code: number, msg: string) => { let info = `存档:${prefix}[${this.roleid}:${this.name}]坐骑技能存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.debug(info); } else { info += `失败[${msg}]!`; SKLogger.warn(info); } this.checkSave(code, info, callback, "坐骑技能"); }); //天策符的使用状态 let ofudaList = Ofuda.shared.getOfListByRoid(this.roleid); if (ofudaList.length > 0) { DB.insertOfuda(this.roleid, SKDataUtil.toJson(ofudaList, "{}")); } } else { let dbinfo = { accountid: this.accountid, name: this.name, mapid: this.mapid, x: this.x, y: this.y, addpoint: this.addattr2, xiupoint: this.addattr1, xiulevel: this.xiulevel, pet: this.curPetId, bagitem: this.bag_list, bangid: this.bangid, taskstate: this.taskStateToJson(), lockeritem: this.locker_list, skill: this.skill_list, money: this.money, jade: this.jade, bind_jade: this.bind_jade, bang_score: this.bangscore, shi_score: this.shiscore, di_score: this.discore, xiu_score: this.xiuscore, guo_score: this.guoscore, exp: this.exp, level: this.level, level_reward: this.level_reward, resid: this.resid, race: this.race, sex: this.sex, relive: this.relive, relivelist: this.relivelist, shane: this.shane, state: this.nFlag, rewardrecord: this.rewardrecord, sprewardrecord: this.sprewardrecord, getgift: this.getgift, shuilu: this.shuilu, arena: this.arena, active_scheme_name: this.schemeName, star: this.star, horse_index: this.horseList.horseIndex, day_count: this.dayMap, bagKindNum: this.bagKindNum, mend_date: this.mend_date, sat_integral: this.sat_integral, al_flag: this.ai_flag }; DB.savePlayerInfoRobot(this.roleid, dbinfo, (code: number, msg: string) => { let info = `机器人存档:[${this.roleid}:${this.name}]角色存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.info(info); callback([]); } else { info += `失败:[${msg}]!`; SKLogger.warn(info); callback([]); } }); } } else { SKLogger.warn("玩家信息错误/机器人不进行存档"); callback([]); } } // 保存角色签到数据 saveSignIn() { DB.saveSignIn(SKDataUtil.toJson(this.daySignIn, "{}"), this.roleid, this.mendDate, (code: number, msg: string) => { let info = `存档:[${this.roleid}:${this.name}]签到数据存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.info(info); } else { info += `失败[${msg}]!`; SKLogger.info(info); } }); } // 备用存档 saveAllReserve() { if (this.roleid != undefined && this.resid != undefined) { let equipSQL = ''; for (const equip of this.currentEquips) { equipSQL += equip.saveSQL(); } for (const equip of this.listEquips) { equipSQL += equip.saveSQL(); } for (let equip of this.lockerEquips) { equipSQL += equip.saveSQL(); } if (this.mapid == 3002) { this.mapid = 1011; this.x = 237; this.y = 19; } if (this.mapid == 1201 && !this.inPrison) { this.mapid = 1011; this.x = 112; this.y = 78; } let titles = SKDataUtil.toJson({ onload: this.onLoad, titles: this.titles, }, "{}"); let partnerList: string = ""; if (this.partnerMgr) { partnerList = this.partnerMgr.toJson(); } let color = { c1: this.color1, c2: this.color2, p1: this.color_one_serial, p2: this.color_two_serial }; let friendlist = SKDataUtil.clone(this.friendList); for (let roleid in friendlist) { if (friendlist.hasOwnProperty(roleid)) { if (roleid == 'version') { continue; } let finfo = friendlist[roleid]; finfo.name = Buffer.from(finfo.name).toString('base64'); } } friendlist.version = 1; let dbinfo = { accountid: this.accountid, name: this.name, mapid: this.mapid, x: this.x, y: this.y, addpoint: this.addattr2, xiupoint: this.addattr1, xiulevel: this.xiulevel, pet: this.curPetId, friendlist: friendlist, equipinfo: equipSQL, bagitem: this.bag_list, bangid: this.bangid, taskstate: this.taskStateToJson(), partnerlist: partnerList, lockeritem: this.locker_list, skill: this.skill_list, money: this.money, jade: this.jade, bind_jade: this.bind_jade, bang_score: this.bangscore, shi_score: this.shiscore, di_score: this.discore, xiu_score: this.xiuscore, guo_score: this.guoscore, exp: this.exp, level: this.level, level_reward: this.level_reward, resid: this.resid, race: this.race, sex: this.sex, relive: this.relive, relivelist: this.relivelist, shane: this.shane, state: this.nFlag, rewardrecord: this.rewardrecord, sprewardrecord: this.sprewardrecord, getgift: this.getgift, shuilu: this.shuilu, arena: this.arena, titles: titles, active_scheme_name: this.schemeName, color: color, star: this.star, horse_index: this.horseList.horseIndex, day_count: this.dayMap, bagKindNum: this.bagKindNum, mend_date: this.mend_date, sat_integral: this.sat_integral, zhenfa: this.ZFMgr.toJson(), xw: this.XWMgr.getXwListByJson(), baby: this.BabyMgr.ToJson(), star_info: this.StarMgr.ToJson(), tianti_integral: this.tianti_integral, }; DB.savePlayerInfo(this.roleid, dbinfo, (code: number, msg: string) => { let info = `备用存档:[${this.roleid}:${this.name}]角色存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.info(info); } else { info += `失败:[${msg}]!`; SKLogger.warn(info); } }); } else { SKLogger.warn("备用玩家信息错误不进行存档"); } } // 保存角色风雨转盘数据 saveDial() { DB.saveDial(this.roleid, this.dial_num, this.dial_count, this.dial_date, (code: number, msg: string) => { let info = `存档:[${this.roleid}:${this.name}]风雨转盘数据存档`; if (code == MsgCode.SUCCESS) { info += `成功!`; SKLogger.info(info); } else { info += `失败[${msg}]!`; SKLogger.info(info); } }); } // 通过CXF通讯存档 cxfSavePlayerAll() { if (this.roleid != undefined && this.resid != undefined) { let prefix: string = `${this.isRobot() ? `机器人` : `玩家`}`; if (!this.loaded) { SKLogger.warn(`${prefix}[${this.roleid}:${this.name}]没有加载完成稍后存档`); return; } this.saveFailed = []; // --------------------------------------------------- 装备存档 ---------------------------------------------------------- for (const equip of this.currentEquips) { SKCxfUtil.getCxfSaveEquip(equip.cxfEquip(this.roleid)); } for (const equip of this.listEquips) { SKCxfUtil.getCxfSaveEquip(equip.cxfEquip(this.roleid)); } for (let equip of this.lockerEquips) { SKCxfUtil.getCxfSaveEquip(equip.cxfEquip(this.roleid)); } // --------------------------------------------------- 玩家存档 ---------------------------------------------------------- if (this.mapid == 3002) { this.mapid = 1011; this.x = 237; this.y = 19; } if (this.mapid == 1201 && !this.inPrison) { this.mapid = 1011; this.x = 112; this.y = 78; } let titles = SKDataUtil.toJson({ onload: this.onLoad, titles: this.titles, }, "{}"); let partnerList: string = ""; if (this.partnerMgr) { partnerList = this.partnerMgr.toJson(); } let color = { c1: this.color1, c2: this.color2, p1: this.color_one_serial, p2: this.color_two_serial }; let friendlist = SKDataUtil.clone(this.friendList); for (let roleid in friendlist) { if (friendlist.hasOwnProperty(roleid)) { if (roleid == 'version') { continue; } let finfo = friendlist[roleid]; finfo.name = Buffer.from(finfo.name).toString('base64'); } } friendlist.version = 1; let dbinfo = { roleid: this.roleid, accountid: this.accountid, serverid: GameUtil.serverId, name: this.name, resid: this.resid, race: this.race, sex: this.sex, relive: this.relive, relivelist: SKDataUtil.toJson(this.relivelist, "[]"), level: this.level, level_reward: this.level_reward, exp: this.exp, money: this.money, jade: this.jade, bind_jade: this.bind_jade, bang_score: this.bangscore, shi_score: this.shiscore, di_score: this.discore, xiu_score: this.xiuscore, guo_score: this.guoscore, mapid: this.mapid, x: this.x, y: this.y, bangid: this.bangid, color: SKDataUtil.toJson(color, "{}"), star: this.star, shane: this.shane, addpoint: SKDataUtil.toJson(this.addattr2, "{}"), xiupoint: SKDataUtil.toJson(this.addattr1, "{}"), xiulevel: this.xiulevel, skill: SKDataUtil.toJson(this.skill_list, "{}"), bagitem: SKDataUtil.toJson(this.bag_list, "{}"), lockeritem: SKDataUtil.toJson(this.locker_list, "{}"), pet: this.curPetId, friendlist: SKDataUtil.toJson(friendlist, "{}"), taskstate: SKDataUtil.toJson(this.taskStateToJson(), "{}"), partnerlist: SKDataUtil.toJson(partnerList, "{}"), state: this.nFlag, rewardrecord: this.rewardrecord, sprewardrecord: this.sprewardrecord, getgift: this.getgift, shuilu: SKDataUtil.toJson(this.shuilu, "{}"), arena: SKDataUtil.toJson(this.arena, "{}"), titles: titles, activeSchemeName: this.schemeName, horseIndex: this.horseList.horseIndex, dayCount: SKDataUtil.toJson(this.dayMap, "{}"), bagKindNum: this.bagKindNum, mendDate: this.mend_date, satIntegral: this.sat_integral, tianti_integral: this.tianti_integral, }; // 玩家信息存档 SKCxfUtil.getCxfSaveGamer(dbinfo); // --------------------------------------------------- 套装存档 ---------------------------------------------------------- // 保存套装 if (this.schemeMgr) { let schemeList: any = this.schemeMgr.schemeList; for (let key in schemeList) { let scheme = schemeList[key]; SKCxfUtil.getCxfSaveScheme(scheme.toObj()); } } // -------------------------------------------------- 召唤兽存档 --------------------------------------------------------- for (let pet of this.petList) { SKCxfUtil.getCxfSavePet(pet.toSaveObj()) } // ------------------------------------------------- 坐骑列表存档 -------------------------------------------------------- for (let position in this.horseList.dict) { let horse = this.horseList.dict[position]; if (horse) { let horseObj: any = {}; horseObj.roleId = this.roleid; horseObj.exp = horse.exp; horseObj.name = horse.name; horseObj.level = horse.level; horseObj.position = horse.position; SKCxfUtil.getCxfSaveHorse(horseObj); } } // ------------------------------------------------- 坐骑技能存档 -------------------------------------------------------- for (let position in this.horseSkill.dict) { let skill: any = this.horseSkill.dict[position]; if (skill) { let horseSkillObj: any = {}; horseSkillObj.skillId = skill.skill_id; horseSkillObj.exp = skill.exp; horseSkillObj.position = position; horseSkillObj.roleId = this.roleid; SKCxfUtil.getCxfSaveHorseSkill(horseSkillObj); } } } } // 检查存档 checkSave(code: MsgCode, msg: string, callback: (failed: string[]) => void, content: string) { if (code != MsgCode.SUCCESS) { this.saveFailed.push(msg); } SKLogger.debug(msg); this.saveTotal--; // SKLogger.info(`**存档:[${this.roleid}:${this.name}]存档进度${this.saveTotal}/5,当前内容:${content}`); if (this.saveTotal > 0) { return; } // SKLogger.info(`[${this.roleid}:${this.name}]完成存档${this.saveTotal}`); callback(this.saveFailed); } redisSave() { let equipSQL = ''; for (const equip of this.currentEquips) { equipSQL += equip.saveSQL(); } for (const equip of this.listEquips) { equipSQL += equip.saveSQL(); } for (let equip of this.lockerEquips) { equipSQL += equip.saveSQL(); } if (this.mapid == 3002) { this.mapid = 1011; this.x = 237; this.y = 19; } if (this.mapid == 1201 && !this.inPrison) { this.mapid = 1011; this.x = 112; this.y = 78; } let titles = SKDataUtil.toJson({ onload: this.onLoad, titles: this.titles, }, "{}"); let partnerList: string = ""; if (this.partnerMgr) { partnerList = this.partnerMgr.toJson(); } let color = { c1: this.color1, c2: this.color2, p1: this.color_one_serial, p2: this.color_two_serial }; let friendlist = SKDataUtil.clone(this.friendList); for (let roleid in friendlist) { if (friendlist.hasOwnProperty(roleid)) { if (roleid == 'version') { continue; } let finfo = friendlist[roleid]; finfo.name = Buffer.from(finfo.name).toString('base64'); } } friendlist.version = 1; let role_data: any = { daySignIn: SKDataUtil.toJson(this.daySignIn, "{}"), mendDate: this.mendDate, dial_num: this.dial_num, dial_count: this.dial_count, dial_date: this.dial_date, friendList: this.friendList, color: color, dbinfo: { accountid: this.accountid, name: this.name, mapid: this.mapid, x: this.x, y: this.y, addpoint: this.addattr2, xiupoint: this.addattr1, xiulevel: this.xiulevel, pet: this.curPetId, friendlist: friendlist, equipinfo: equipSQL, bagitem: this.bag_list, bangid: this.bangid, taskstate: this.taskStateToJson(), partnerlist: partnerList, lockeritem: this.locker_list, skill: this.skill_list, money: this.money, jade: this.jade, bind_jade: this.bind_jade, bang_score: this.bangscore, shi_score: this.shiscore, di_score: this.discore, xiu_score: this.xiuscore, guo_score: this.guoscore, exp: this.exp, level: this.level, level_reward: this.level_reward, resid: this.resid, race: this.race, sex: this.sex, relive: this.relive, relivelist: this.relivelist, shane: this.shane, state: this.nFlag, rewardrecord: this.rewardrecord, sprewardrecord: this.sprewardrecord, getgift: this.getgift, shuilu: this.shuilu, arena: this.arena, titles: titles, active_scheme_name: this.schemeName, color: color, star: this.star, horse_index: this.horseList.horseIndex, day_count: this.dayMap, bagKindNum: this.bagKindNum, mend_date: this.mend_date, tianti_integral: this.tianti_integral, }, } SKRedisUtil.setValue(this.roleid.toString(), role_data); let pet_list: any = []; let scheme_list: any = []; let hourse_list: any = []; let hourse_skill_list: any = []; for (let key in this.petList) { let pet = this.petList[key]; pet_list.push(pet.toSaveObj()) } for (let key in this.schemeMgr.schemeList) { let scheme = this.schemeMgr.schemeList[key]; scheme_list.push(scheme.toObj()) } for (let key in this.horseList.dict) { let hourse = this.horseList.dict[key]; hourse_list.push(hourse) } for (let key in this.horseSkill.dict) { let hourses = this.horseSkill.dict[key]; hourse_skill_list.push(hourses) } SKRedisUtil.setValue(this.roleid + "pet", SKDataUtil.toJson(pet_list, "{}")); SKRedisUtil.setValue(this.roleid + "scheme", SKDataUtil.toJson(scheme_list, "{}")); SKRedisUtil.setValue(this.roleid + "hourse", SKDataUtil.toJson(hourse_list, "{}")); SKRedisUtil.setValue(this.roleid + "hourseskill", SKDataUtil.toJson(hourse_skill_list, "{}")); } toObj(): any { let teamPlayers = TeamMgr.shared.getTeamPlayer(this.teamid); let card = ChangeCard.shared.selectUseCard(this.roleid); let effid = SpecialEffect.shared.getSuiEffect(this.roleid) let changeid = 0; let effectid = 0; if (card) { changeid = card.resid; } if (effid > 0) { effectid = effid; } let obj: any = super.toObj(); obj.relive = this.relive; obj.xiulevel = this.xiulevel; obj.level = this.level; obj.accountid = this.accountid; obj.roleid = this.roleid; obj.resid = this.resid; obj.race = this.race; obj.sex = this.sex; obj.spd = this.attr1[EAttrTypeL1.SPD]; obj.bangid = this.bangid; obj.livingtype = this.living_type; obj.teamid = this.teamid; obj.isleader = this.isleader; obj.teamcnt = teamPlayers == null ? 0 : teamPlayers.length; obj.weapon = this.getWeapon(); obj.battleid = this.battle_id; obj.bangname = this.bangname; obj.titletype = this.titleType; obj.titleid = this.titleId; obj.titleval = this.titleVal; obj.color1 = this.color1; obj.color2 = this.color2; obj.schemename = this.schemeName; obj.baldric = this.baldric; obj.safepassword = this.safe_password; obj.safelock = this.safe_lock; obj.horseList = this.horseList.toObj(); obj.wingId = this.wingId; obj.sat_integral = this.sat_integral; obj.dayMap = SKDataUtil.toJson(this.dayMap, "{}"); obj.chargesum = ChargeSum.shared.getPlayerChargeSum(this.roleid); obj.bagKindNum = this.bagKindNum; obj.lockerKindNum = this.lockerKindNum; obj.tianti_integral = this.tianti_integral; // 坐牢时间 obj.shane = this.shane // 界面图标 obj.iconList = this.iconList; // 出战宠物信息 let pet: any; if (this.curPet != undefined) { pet = {}; pet.petid = this.curPet.petid; pet.resid = this.curPet.resid; pet.name = this.curPet.name; pet.spd = this.curPet.attr1[EAttrTypeL1.SPD]; pet.level = this.curPet.level; pet.relive = this.curPet.relive; } obj.curPet = pet == undefined ? "" : pet; // 最后一次时使用的技能 let role = PlayerMgr.shared.getPlayerByRoleId(this.roleid); let skill = ESkillType.NormalAtkSkill; if (role != null && role != undefined) { let brole = new BattleRole(); brole.setObj(role); if (brole.last_skill > 0) { skill = brole.last_skill; } } obj.lastSkill = skill; // 竞技场信息 obj.arena = this.arena; // 签到数据 obj.daySignIn = this.daySignIn; // 补签日期 obj.mendDate = this.mendDate; //变身卡id obj.changeid = changeid; let seffectlist = [505201, 505202, 505301, 505302, 505401, 505406, 505407, 505433, 505452, 505457, 505432, 505437, 505601, 505602, 505453]; let index = Math.floor((Math.random() * seffectlist.length)) if (this.ai_flag == 0) { //正在使用的特效 obj.effectlist = SKDataUtil.toJson(SpecialEffect.shared.getUseingEffect(this.roleid), "{}"); //随身特效 obj.effectid = effectid; } else { let list = []; list.push(seffectlist[index]); obj.effectlist = SKDataUtil.toJson(list, "{}"); obj.effectid = seffectlist[index]; } //头像框 obj.portrait = SpecialEffect.shared.getPortraitByRoleid(this.roleid); obj.pause = this.pause; obj.ischeck = this.ischeck; obj.offlinetime = this.offlinetime; obj.doublecnt = this.doublecnt; obj.unget_doublecnt = this.unget_doublecnt; obj.getgift = this.getgift; obj.isFrozen = this.isFrozen; obj.babyList = this.BabyMgr.ToJson() obj.xwList = this.XWMgr.ToJson() obj.starInfo = this.StarMgr.ToJson() this.clear_task(); // 属性检测 this.freeze(); return obj; } clear_task() { // 处理部分任务不刷新 let mendDate: any = new Date(GTimer.getYearMonthDay()).getTime(); let lastDate = mendDate; if (this.mend_date != "") { lastDate = new Date(this.mend_date).getTime(); if (lastDate < mendDate) { this.F5_Task(); } } else { this.F5_Task(); } } F5_Task() { let hours: number = GTimer.getHours(); if (hours >= 5) { if (!this.isRobot()) { console.log("玩家:" + this.roleid + " == " + this.name + "任务刷新了~") if (this.dbData != undefined) { this.dbData.taskstate = null; } this.arena.count = 10; this.dial_num = 1; this.getTaskMgr().OnNewDay(); this.clearDayMap(); this.clearDayMapVip(); this.mend_date = GTimer.getYearMonthDay(); } } } getWeapon() { for (let equip of this.currentEquips) { if (equip.EIndex == 1) { let equipobj: any = {}; equipobj.equipid = equip.EquipID; equipobj.gemcnt = equip.GemCnt; equipobj.type = equip.EquipType; equipobj.level = equip.Grade; return SKDataUtil.toJson(equipobj, "{}"); } } return ""; } getData() { let fp = FivePhases.shared.getFivePhasesByRoleid(this.roleid); let card = ChangeCard.shared.selectUseCard(this.roleid); let fplevel = 0; let changeid = 0; if (fp) { fplevel = fp.fplevel; } if (card) { changeid = card.resid; } let obj: any = {}; obj.onlyid = this.onlyid; obj.qianneng = this.qianneng; obj.attr1 = SKDataUtil.toJson(this.attr1, "{}"); obj.xiulevel = this.xiulevel; obj.addattr1 = SKDataUtil.toJson(this.addattr1, "{}"); obj.addattr2 = SKDataUtil.toJson(this.addattr2, "{}"); obj.skill = SKDataUtil.toJson(this.skill_list, "{}"); obj.level = this.level; obj.exp = this.exp; obj.bangid = this.bangid; obj.race = this.race; obj.sex = this.sex; obj.maxexp = this.maxexp; obj.money = this.money; obj.jade = this.jade; obj.bangscore = this.bangscore; obj.shiscore = this.shiscore; obj.discore = this.discore; obj.xiuscore = this.xiuscore; obj.guoscore = this.guoscore; obj.bindjade = this.bind_jade; obj.gmlevel = this.gmlevel; obj.chargesum = ChargeSum.shared.getPlayerChargeSum(this.roleid); obj.rewardrecord = this.rewardrecord; obj.sprewardrecord = this.sprewardrecord; obj.levelreward = this.level_reward; obj.shuilugj = this.shuilu.gongji; obj.titleval = this.titleVal; obj.titletype = this.titleType; obj.titleid = this.titleId; obj.color1 = this.color1; obj.color2 = this.color2; obj.schemename = this.schemeName; obj.wingId = this.wingId; obj.sat_integral = this.sat_integral; obj.fplevel = fplevel; obj.changeid = changeid; obj.jpoint = this.arena.jpoint; obj.tianti_integral = this.tianti_integral; obj.iconList = this.iconList; return obj; } setLevel(level: any, issend?: any) {//等级改变 let maxlevel = ExpUtil.getUserMaxGrade(this.relive); this.level = Math.min(level, maxlevel); SKLogger.debug(`玩家[${this.name}${this.roleid}]等级改变,当前${this.level}级`); this.maxexp = ExpUtil.getPlayerUpgradeExp(this.relive, this.level); this.calQianNeng(); this.calculateAttr(); if (this.partnerMgr) { this.partnerMgr.checkAndAddPartner(); if (this.level <= GameUtil.limitPartnerLevel) { this.partnerMgr.UpdatePartnerLevelAsPlayer(); } } PaiHangMgr.shared.CheckAndInsertLevelPaihang(this.roleid, this.name, this.relive, this.level, this.money); // 更新红名榜数据 PaiHangMgr.shared.updateMurderRankDataInfo(this.roleid, this.name, 0, this.level, this.relive); if (issend) { this.send('s2c_level_up', { onlyid: this.onlyid, curlevel: this.level, }); } if (this.bangid > 0) { let bang = BangMgr.shared.getBang(this.bangid) if (bang) { for (const roleInfo of bang.rolelist) { if (this.roleid == roleInfo.roleid) { roleInfo.relive = this.relive; roleInfo.level = this.level; break; } } } } //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); // 刷新队伍信息 this.refresh_team_data(); } taskStateToJson(): string { let mapValue: any = {}; let vecData = []; if (this.getTaskMgr()) { if (this.getTaskMgr().mapTaskState) { for (let it in this.getTaskMgr().mapTaskState) { let stTaskState = this.getTaskMgr().mapTaskState[it]; let nCurStep = 0; for (let it2 in stTaskState.vecEventState) { if (stTaskState.vecEventState[it2].nState == 1) nCurStep = Number(it2); } vecData.push({ nTaskID: stTaskState.nTaskID, nCurStep: nCurStep }); } } mapValue['RecordList'] = this.getTaskMgr().recordList; mapValue['DailyCnt'] = this.getTaskMgr().mapDailyCnt; mapValue['FuBenCnt'] = this.getTaskMgr().mapFuBenCnt; mapValue['DailyStart'] = this.getTaskMgr().mapDailyStart; mapValue['mapActiveScore'] = this.getTaskMgr().mapActiveScore; mapValue['szBeenTake'] = this.getTaskMgr().szBeenTake; } mapValue['StateList'] = vecData; return mapValue; } ////////////////////////////// 物品 相关 ///////////////////////////// // 清理背包 clear_bag(msg: string) { // if (msg == "清理背包"){ // this.bag_list = {} // this.send('s2c_bagitem', { // info: SKDataUtil.toJson(this.bag_list, "{}") // }); // } if (msg == "分解配饰") { this.clear_acc(2); } else if (msg == "打开五行礼包") { this.openGoods("50033"); } else if (msg == "打开变身卡礼包") { this.openGoods("50034"); } // else if (msg == "退出本次战斗") { // if(this.battle_id > 0){ // let battle = BattleMgr.shared.getBattle(this.battle_id); // if(battle.battle_type != BattleType.Force && battle.battle_type != BattleType.PK && battle.battle_type != BattleType.ShuiLu && battle.battle_type != BattleType.AREAN && battle.battle_type != BattleType.Sat){ // if(this.teamid > 0){ // if (this.isleader){ // BattleMgr.shared.destroyBattle(this.battle_id) // }else { // this.send_notice("您不是队长!"); // } // }else { // BattleMgr.shared.destroyBattle(this.battle_id) // } // } // } // } } openGoods(item: any) { let obj: any = {}; let num = this.getBagItemNum(item); if (num > 0) { for (let i = 0; i < num; i++) { let randomSelect = BoxMgr.shared.randomSelect(item); let goods = this.bag_list[randomSelect.item_id] if (goods == null || goods == undefined) { this.bag_list[randomSelect.item_id] = randomSelect.count; } else { this.bag_list[randomSelect.item_id] += randomSelect.count; } if (obj[randomSelect.item_id] == null || obj[randomSelect.item_id] == undefined) { obj[randomSelect.item_id] = randomSelect.count; } else { obj[randomSelect.item_id] += randomSelect.count; } } this.bag_list[item] -= num; if (this.bag_list[item] <= 0) { delete this.bag_list[item]; } let msg = "本次开启礼包获得:"; for (let key in obj) { let itemData = ItemUtil.getItemData(key); let count = obj[key]; msg += `[color=#ff0000]${itemData.name}[/color]:${count}、`; } this.send_notice(msg); this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); } else { this.send_notice("抱歉,您背包没有该道具!"); } } /** * * @param flag :1 全部清理、2 只分解配饰 */ clear_acc(flag: number) { let equipAcc: any = []; for (let i = 0; i < this.listEquips.length; i++) { let equip = this.listEquips[i]; if (equip.EquipType == 5) { let equip_: Equip = this.equipObjs[equip.EquipID]; equipAcc.push(equip_); } } //let count_score = 0; for (const acc of equipAcc) { // let score = 1; // if (acc.BaseAttr.length != 0 ){ // if (acc.Grade == 2) { // score = 2; // } else if (acc.Grade == 3) { // score = 5; // } // } // count_score += score; //this.shuilu.gongji += score; this.delEquipByTo(acc.EquipID, false, "佩饰分解"); this.sendEquipList(); } // this.send('s2c_you_money', { // nKind: GameUtil.goldKind.SLDH_Score, // nNum: this.shuilu.gongji, // nChange: count_score // }); // let info = `本次分解获得[color=#ff0000][${count_score}][/color]功绩`; // this.send('s2c_notice', { // strRichText: info // }); this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); } // 批量分解配饰 delEquipByTo(equipid: any, uninlay = true, source = '') { if (!equipid || equipid <= 0) { return; } let delequip = null; for (let index = 0; index < this.currentEquips.length; index++) { //已经装备的不能删,所以注释掉以下代码 if (this.currentEquips[index].EquipID == equipid) { delequip = this.currentEquips[index]; this.currentEquips.splice(index, 1); continue; } } for (let index = 0; index < this.listEquips.length; index++) { if (this.listEquips[index].EquipID == equipid) { delequip = this.listEquips[index]; this.listEquips.splice(index, 1); continue; } } if (delequip != null) { delequip.pos = EEquipPos.UNKNOW; let equipfulldata = delequip.getFullData(); SKLogger.debug(`玩家[${this.roleid}:${this.name}]删除装备[${delequip.EquipID}:${equipfulldata.EName}]:${source}]`); if (uninlay) { this.unInLay(delequip); } delequip.state = 0; delequip.save(); delete this.equipObjs[delequip.EquipID]; EquipMgr.shared.delEquip(delequip.EquipID); this.schemeMgr.deleteCurEquips(delequip.EquipID); } } update_bagitem(data: any) { if (data.operation == 0) { if (this.bag_list[data.itemid] == null || this.bag_list[data.itemid] < data.count) { this.send('s2c_operation_result', { code: MsgCode.ITEM_OPERATION_ERROR }); } else { this.bag_list[data.itemid] -= data.count; if (this.bag_list[data.itemid] <= 0) { delete this.bag_list[data.itemid]; } this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); } } else { if (this.bag_list[data.itemid] == null) { this.bag_list[data.itemid] = data.count; } else { this.bag_list[data.itemid] += data.count; } this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); } } update_lockeritem(data: any) { if (data.operation == 1) { if (this.getLockerItemAllKindNum() >= this.lockerKindNum) { this.send_notice(`仓库已满`); return; } } else if (data.operation == 0) { if (this.getBagItemAllKindNum() >= this.bagKindNum) { this.send_notice(`背包已满`); return; } } if (data.type == 0) { if (data.operation == 0) { if (this.locker_list[data.operateid] > 0) { if (this.bag_list[data.operateid] == null) this.bag_list[data.operateid] = 0; this.bag_list[data.operateid] += this.locker_list[data.operateid]; } delete this.locker_list[data.operateid]; } else { if (this.bag_list[data.operateid] > 0) { if (this.locker_list[data.operateid] == null) this.locker_list[data.operateid] = 0; this.locker_list[data.operateid] += this.bag_list[data.operateid]; } delete this.bag_list[data.operateid]; } this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); } else if (data.type == 1) { if (data.operation == 0) { for (let index = 0; index < this.lockerEquips.length; index++) { let equip = this.lockerEquips[index]; if (data.operateid == equip.EquipID) { equip.pos = EEquipPos.BAG; this.lockerEquips.splice(index, 1); this.addEquipList(equip); break; } } } else { for (let index = 0; index < this.listEquips.length; index++) { let equip = this.listEquips[index]; if (data.operateid == equip.EquipID) { equip.pos = EEquipPos.BANK; this.listEquips.splice(index, 1); this.lockerEquips.push(equip); break; } } } this.sendEquipList(); } } getBagItemNum(itemid: any): any { if (this.bag_list.hasOwnProperty(itemid) == false) return 0; return this.bag_list[itemid]; } // 加经验值 addExp(exp: number) { if (exp == 0) { return; } //检查星阵是否装备赤马阵, 经验获得加成 if (exp > 0 && this.StarMgr.EquipID == 5) { let star = this.StarMgr.GetStarByID(5) let buf = star.Level * 0.003 exp = Math.floor(exp * (1 + buf)) } super.addExp(exp);//经验改变 if (this.relive == 0 && this.level > 28) { let score = 0; for (let equip of this.currentEquips) { let full = equip.getFullData(this.roleid); if (full) { score += Number(full.BaseScore); } } //角色大于28级加入竞技场 let jingjilist = PaiHangMgr.shared.jingjilist; let isexit = false; for (let index = 0; index < jingjilist.length; index++) { let brole = jingjilist[index]; if (brole.roleId == this.roleid) { isexit = true; jingjilist.splice(index, 1, {//存在,替换 roleId: this.roleid, resid: this.resid, name: this.name, count: this.arena.count, jpoint: this.arena.jpoint, relive: this.relive, level: this.level, ranking: index + 1, baseSource: score, }); this.arena.ranking = index + 1 } } if (isexit == false) {//不存在加入 jingjilist.push({ roleId: this.roleid, resid: this.resid, name: this.name, count: this.arena.count, jpoint: this.arena.jpoint, relive: this.relive, level: this.level, ranking: jingjilist.length + 1, baseSource: score, }); this.arena.ranking = jingjilist.length + 1 } } if (this.relive == 1 && this.level >= 80) { //达到1转80级开启五行修炼 let playerfp = FivePhases.shared.getFivePhasesByRoleid(this.roleid); if (playerfp == undefined) { let fp = { roleid: this.roleid,//角色id fplevel: 0, //五行等级 jinlevel: 0, //金等级 jinexp: 0, //金经验 mulevel: 0, //木等级 muexp: 0, //木经验 shuilevel: 0, //水等级 shuiexp: 0, //水经验 huolevel: 0, //火等级 huoexp: 0, //火经验 tulevel: 0, //土等级 tuexp: 0, //土经验 count: 1000000 //次数 } FivePhases.shared.fplist.push(fp); DB.insertFivePhasesById(this.roleid); } } if (exp > 0) { this.send('s2c_add_exp', { onlyid: this.onlyid, curexp: this.exp, addexp: exp, maxexp: this.maxexp, }); } this.send('s2c_player_data', this.getData()); } addItem(itemId: number, count: number, isNotice = false, source = ''): boolean { count = SKDataUtil.numberBy(count); if (isNaN(count)) { SKLogger.warn(`玩家[${this.roleid}:${this.name}]:获得物品[${itemId}]数量无效!`); return false; } let itemData = ItemUtil.getItemData(itemId); if (itemData == null) { // 无此道具 SKLogger.warn(`玩家[${this.roleid}:${this.name}]获得物品[${itemId}]找不到!`); return false; } if (itemData.type < 4) { this.addBagItem(itemId, count, isNotice); } else if (itemData.type == 4) { this.addExp(count); } else if (itemData.type == 5) { this.addMoney(0, count, source, isNotice == true ? MsgCode.SUCCESS : MsgCode.FAILED); } else if (itemData.type == 6) { this.addMoney(1, count, source, isNotice == true ? MsgCode.SUCCESS : MsgCode.FAILED); } else if (itemData.type == 7 || itemData.type == 8) { // 7 神器 8 仙器 let info = itemData.json; if (itemData.id) { info.resid = itemData.id; } info.roleid = this.roleid; this.addEquip(info); } else if (itemData.type == 9) { if (this.petList.length >= GameUtil.limitPetNum) { this.send_notice("当前携带宠物已上限") return false; } this.createPet(itemData.json, source, isNotice); } else if (itemData.type == 10) { this.addBagItem(itemId, count, isNotice); } else if (itemData.type == 11) { let itemlist = itemData.json; if (itemlist) { let index = Math.floor(Math.random() * itemlist.length); let tempId = itemlist[index]; if (tempId != null) { itemId = tempId; } this.addBagItem(itemId, 1, isNotice); } } else if (itemData.type == 12) { this.addMoney(GameUtil.goldKind.BindJade, count, source, MsgCode.SUCCESS); } else if (itemData.type == 13) { // 宝箱 this.addBagItem(itemId, count, isNotice); } else if (itemData.type == 14) { // 钥匙 this.addBagItem(itemId, count, isNotice); } else if (itemData.type == 15) { // 变身卡 this.addBagItem(itemId, count, isNotice); } else if (itemData.type == 16) { // 特效 //获取特效类型 let effecttype = SpecialEffect.shared.getSeffectType(itemId); SpecialEffect.shared.seffectlist.push({ roleid: this.roleid, effectid: itemId, effecttype: effecttype, usestate: 0 }) DB.insertSeffect(itemId, this.roleid, 0, effecttype, 1); //this.addBagItem(itemId, count, isNotice); } else if (itemData.type == 17) { let info = itemData.json; info.id = itemData.id; info.roleid = this.roleid; this.addMagicWeapon(info); } else if (18 == itemData.type) { if (this.XWMgr.buildNewXw(itemId)) { this.addBagItem(itemId, count, isNotice); } } else if (19 == itemData.type) { this.addBagItem(itemId, count, isNotice); } let info = `玩家[(${this.roleid}:${this.name}]`; if (count < 0) { info += `物品[${itemData.id}:${itemData.name}]减少${count}个,${source}`; } else { info += `获得物品[${itemData.id}:${itemData.name}]${count}个,${source}`; } SKLogger.debug(info); return true; } getBagItemAllKindNum() { let count: number = 0; for (const item in this.bag_list) { let data = ItemUtil.getItemData(item); if (data != null) { // 无此道具 if (data.type != 15 && data.type != 18) { if (GameUtil.flagGoods.indexOf(data.id) == -1) { count++; } } } } return this.listEquips.length + count; } getLockerItemAllKindNum() { return this.lockerEquips.length + Object.keys(this.locker_list).length; } addBagItem(nItem: any, nNum: any, bNotice: any) { nNum = SKDataUtil.numberBy(nNum); if (isNaN(nNum)) { return; } if (this.bag_list[nItem] == null) { if (nNum > 0) { if (this.getBagItemAllKindNum() >= this.bagKindNum) { this.send_notice(`背包已满`) return; } } this.bag_list[nItem] = 0; } let nNewNum = parseInt(this.bag_list[nItem]) + parseInt(nNum); if (nNewNum < 0) { return; } let itemData = ItemUtil.getItemData(nItem); if (itemData == null) { return; } this.bag_list[nItem] = nNewNum; if (this.bag_list[nItem] == 0) { delete this.bag_list[nItem]; } this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); if (bNotice) { this.send('s2c_you_get_item', { nItem: nItem, nNum: nNum }); } //cxf背包物品变动 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "背包物品变动", operateResSerial: itemData.id, operateResName: itemData.name, operateContent: `${itemData.name} :数量${nNum},背包剩余数量${nNewNum}` }) // if (itemData.notice != 0 && nNum > 0) { // let strRichText = ` ${this.name} 获得了 ${itemData.name}, 真是太幸运了`; // PlayerMgr.shared.broadcast('s2c_screen_msg', { // strRichText: strRichText, // bInsertFront: 0 // }); // } return; } /** * 所有金币类消耗的入口 * @param {number} nKind 消耗类型 * @param {number} nNum 数量 * @param {String} strText 消耗日志 * @param {Boolen} usebind 是否使用绑定类型 */ CostFee(nKind: any, nNum: any, strText?: any, usebind = true) { let vecMsg = ['银两不足', '仙玉不足', '绑定仙玉不足', '水陆功绩不足', '', '竞技点不足']; let money = this.GetMoney(nKind); // let bindjade = this.GetMoney(GameUtil.goldKind.BindJade); // if (nKind == GameUtil.goldKind.Jade && usebind) { // money += bindjade; // } if (money < nNum) { return vecMsg[nKind]; } this.addMoney(nKind, -nNum, strText, MsgCode.SUCCESS); return ''; } GetMoney(nKind: any) { let money = 0; switch (nKind) { case GameUtil.goldKind.Money: money = this.money; break; case GameUtil.goldKind.Jade: money = this.jade; break; case GameUtil.goldKind.BindJade: money = this.bind_jade; break; case GameUtil.goldKind.SLDH_Score: money = this.shuilu.gongji; break; case GameUtil.goldKind.arena_Score: money = this.arena.jpoint; break; case GameUtil.goldKind.bang_Score: money = this.bangscore; break; case GameUtil.goldKind.shi_Score: money = this.shiscore; break; case GameUtil.goldKind.di_Score: money = this.discore; break; case GameUtil.goldKind.xiu_Score: money = this.xiuscore; break; case GameUtil.goldKind.guo_Score: money = this.guoscore; break; } return money; } // 加银两或仙玉 addMoney(kind: any, count: number, msg: string = "", flag: number = MsgCode.SUCCESS) { if (kind == GameUtil.goldKind.Money) { let money = this.money + count; if (money > 2000000000) { money = 2000000000; } this.money = money; PaiHangMgr.shared.CheckAndInsertMoneyPaihang(this.roleid, this.name, this.relive, this.level, this.money); if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.money, nChange: count, flag: flag }); SKLogger.debug(`玩家[${this.name}(${this.roleid})]银两改变[${count}],当前[${this.money},消息:${msg}]`); } return; } if (kind == GameUtil.goldKind.Jade) { // 仙玉 let jade = this.jade + count; if (jade > 1000000000) { jade = 1000000000; } this.jade = jade; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.jade, nChange: count, flag: flag }); //cxf仙玉变动 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "仙玉改变", operateResSerial: "", operateResName: "", operateContent: `${this.name}]仙玉改变[${count}],当前[${this.jade}],消息:${msg}` }) SKLogger.info(`玩家[${this.roleid}:${this.name}]仙玉改变[${count}],当前[${this.jade}],消息:${msg}`); } return; } if (kind == GameUtil.goldKind.bang_Score) { // 帮贡 let bangscore = this.bangscore + count; if (bangscore > 10000000000) { bangscore = 10000000000; } this.bangscore = bangscore; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.bangscore, nChange: count, flag: flag }); //cxf仙玉变动 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "帮贡改变", operateResSerial: "", operateResName: "", operateContent: `${this.name}]帮贡改变[${count}],当前[${this.bangscore}],消息:${msg}` }) SKLogger.info(`玩家[${this.roleid}:${this.name}]帮贡改变[${count}],当前[${this.bangscore}],消息:${msg}`); DB.updateMoney({ bind_jade: this.bind_jade, shiscore: this.shiscore, bangscore: this.bangscore, discore: this.discore, xiuscore: this.xiuscore, guoscore: this.guoscore, roleid: this.roleid }); } return; } if (kind == GameUtil.goldKind.shi_Score) { // 师贡 let shiscore = this.shiscore + count; if (shiscore > 10000000000) { shiscore = 10000000000; } this.shiscore = shiscore; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.shiscore, nChange: count, flag: flag }); //cxf仙玉变动 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "师贡改变", operateResSerial: "", operateResName: "", operateContent: `${this.name}]师贡改变[${count}],当前[${this.shiscore}],消息:${msg}` }) SKLogger.info(`玩家[${this.roleid}:${this.name}]师贡改变[${count}],当前[${this.shiscore}],消息:${msg}`); DB.updateMoney({ bind_jade: this.bind_jade, shiscore: this.shiscore, bangscore: this.bangscore, discore: this.discore, xiuscore: this.xiuscore, guoscore: this.guoscore, roleid: this.roleid }); } return; } if (kind == GameUtil.goldKind.di_Score) { // 地宫积分 let discore = this.discore + count; if (discore > 10000000000) { discore = 10000000000; } this.discore = discore; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.discore, nChange: count, flag: flag }); //cxf仙玉变动 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "地宫积分改变", operateResSerial: "", operateResName: "", operateContent: `${this.name}]地宫积分改变[${count}],当前[${this.discore}],消息:${msg}` }) SKLogger.info(`玩家[${this.roleid}:${this.name}]地宫积分改变[${count}],当前[${this.discore}],消息:${msg}`); DB.updateMoney({ bind_jade: this.bind_jade, shiscore: this.shiscore, bangscore: this.bangscore, discore: this.discore, xiuscore: this.xiuscore, guoscore: this.guoscore, roleid: this.roleid }); } return; } if (kind == GameUtil.goldKind.xiu_Score) { // 除魔积分 let xiuscore = this.xiuscore + count; if (xiuscore > 10000000000) { xiuscore = 10000000000; } this.xiuscore = xiuscore; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.xiuscore, nChange: count, flag: flag }); //cxf仙玉变动 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "除魔积分改变", operateResSerial: "", operateResName: "", operateContent: `${this.name}]除魔积分改变[${count}],当前[${this.xiuscore}],消息:${msg}` }) SKLogger.info(`玩家[${this.roleid}:${this.name}]除魔积分改变[${count}],当前[${this.xiuscore}],消息:${msg}`); DB.updateMoney({ bind_jade: this.bind_jade, shiscore: this.shiscore, bangscore: this.bangscore, discore: this.discore, xiuscore: this.xiuscore, guoscore: this.guoscore, roleid: this.roleid }); } return; } if (kind == GameUtil.goldKind.guo_Score) { // 郭氏积分 let guoscore = this.guoscore + count; if (guoscore > 10000000000) { guoscore = 10000000000; } this.guoscore = guoscore; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.guoscore, nChange: count, flag: flag }); //cxf仙玉变动 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "郭氏积分改变", operateResSerial: "", operateResName: "", operateContent: `${this.name}]郭氏积分改变改变[${count}],当前[${this.guoscore}],消息:${msg}` }) SKLogger.info(`玩家[${this.roleid}:${this.name}]郭氏积分改变[${count}],当前[${this.guoscore}],消息:${msg}`); DB.updateMoney({ bind_jade: this.bind_jade, shiscore: this.shiscore, bangscore: this.bangscore, discore: this.discore, xiuscore: this.xiuscore, guoscore: this.guoscore, roleid: this.roleid }); } return; } if (kind == GameUtil.goldKind.BindJade) { // 绑定仙玉 this.bind_jade += count; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.bind_jade, nChange: count, flag: flag }); SKLogger.info(`玩家[${this.roleid}:${this.name}]绑定仙玉改变[${count}],当前[${this.bind_jade}],消息:${msg}`); DB.updateMoney({ bind_jade: this.bind_jade, shiscore: this.shiscore, bangscore: this.bangscore, discore: this.discore, xiuscore: this.xiuscore, guoscore: this.guoscore, roleid: this.roleid }); } return; } if (kind == GameUtil.goldKind.SLDH_Score) { // 水陆大会功绩 this.shuilu.gongji += count; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.shuilu.gongji, nChange: count, flag: flag }); SKLogger.debug(`玩家[${this.name}(${this.roleid})]水陆大会功绩改变[${count}],当前[${this.shuilu.gongji},,消息:${msg}]`); } return; } if (kind == GameUtil.goldKind.arena_Score) { // 竞技场积分 this.arena.jpoint += count; if (count != 0) { this.send('s2c_you_money', { nKind: kind, nNum: this.arena.jpoint, nChange: count, flag: flag }); SKLogger.debug(`玩家[${this.name}(${this.roleid})]竞技场积分改变[${count}],当前[${this.arena.jpoint},,消息:${msg}]`); } return; } } /* * 充值成功 * @param jade 增加的仙玉 * @param money 充值的money */ chargeSuccess(jade: any, money: any) { this.addMoney(GameUtil.goldKind.Jade, jade, '仙玉充值', MsgCode.SUCCESS); let money_n = Number(money); let chargesum = ChargeSum.shared.getPlayerChargeSum(this.roleid); this.send('s2c_charge', { money: money_n, jade: Number(this.jade), chargesum: chargesum, dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); } aoi_enter(obj: BattleObj) { if (obj.isNpc() && this.canPlayerSeeNpc(obj) == false) { return; } if (this.offline) { return; } this.aoi_obj_list[obj.onlyid] = obj; this.send('s2c_aoi_pinfo', { list: [obj.toObj()] }); } aoi_update(obj: BattleObj) { if (obj.isNpc() && this.canPlayerSeeNpc(obj) == false) { return; } //离线时返回不发送 if (this.offline) { return; } this.aoi_obj_list[obj.onlyid] = obj; this.send('s2c_aoi_pinfo', { list: [obj.toObj()] }); } aoi_exit(obj: any) { delete this.aoi_obj_list[obj.onlyid]; if (this.offline) { return; } this.send('s2c_aoi_exit', { onlyid: obj.onlyid, }); } // 发送消息 send(event: string, obj?: any) { if (this.offline) { SKLogger.debug(`玩家[${this.roleid}:${this.name}]已离线,消息[${event}:${obj}]不发送`); return; } if (this.agent) { this.agent.send(event, obj); } else { // 机器人不发送消息 if (this.isRobot()) { return; } // SKLogger.warn(`玩家[${this.roleid}:${this.name}]发送[${event}]失败`); } } //玩家登录 playerLogined() { if (this.offline) { this.offline = false; } PlayerMgr.shared.addPlayer(this); ChangeCard.shared.checkCard(this.roleid); if (this.offlineTimer) { clearInterval(this.offlineTimer); this.offlineTimer = null; } if (this.mapid == 1201) { this.inPrison = true; } this.send('s2c_login', { errorcode: MsgCode.SUCCESS, info: this.toObj(), }); this.babyPracticeConfig() this.calcOnlineTime(); this.mailList.check(); this.activateScheme(); this.calculateAttr() this.send('s2c_player_data', this.getData()); } // 玩家重新登录 playerRelogin() { if (this.offline) { this.offline = false; } if (this.offlineTimer) { clearInterval(this.offlineTimer); this.offlineTimer = null; } this.calcOnlineTime(); } // 计算在线时长 calcOnlineTime() { if (this.onlineTime < 1) { this.onlineTime = new Date().getTime(); } else { let nowTime = new Date().getTime(); let time = nowTime - this.onlineTime; let days = Math.floor(time / (24 * 3600 * 1000)); //相差天数 let leave1 = time % (24 * 3600 * 1000); //计算天数后剩余的毫秒数 let hours = Math.floor(leave1 / (3600 * 1000)); // 相差小时数 let leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数 let minutes = Math.floor(leave2 / (60 * 1000)); // 相差分钟数 let leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数 let seconds = Math.round(leave3 / 1000); // 相差秒数 SKLogger.info(`玩家[${this.roleid}:${this.name}]在线时长:${days}天${hours}小时${minutes}分钟${seconds}秒`); this.onlineTime = 0; } } // 进入地图 onEnterMap() { this.stopIncense(); let mapModel: MapModel = MapMgr.shared.getMap(this); if (mapModel) { let playerList = mapModel.enterMap(this, ELiveingType.PLAYER); let mList = []; for (const oid in playerList) { if (playerList.hasOwnProperty(oid)) { const player = playerList[oid]; if (player.isNpc() && this.canPlayerSeeNpc(player) == false) continue; if (player.nFuBenID > 0 && player.nFuBenID != this.bangid) continue; this.aoi_obj_list[player.onlyid] = player; let prefix: string = `${player.isRobot ? `机器人` : `玩家`}`; SKLogger.debug(`${prefix}[${player.roleid}:${player.name}]进入地图[${mapModel.map_name}]!`); mList.push(player.toObj()); } } this.send('s2c_aoi_pinfo', { list: mList }); // 进入比武场后 检查水路大会情况 let activity = ActivityMgr.shared.getActivity(ActivityDefine.activityKindID.ShuiLuDaHui); if (activity && activity.activity_state != ActivityDefine.activityState.Close) { if (activity.checkSign(this.teamid) && activity.checkFinish(this.teamid) == false) { if (this.mapid == 1213) { this.send('s2c_shuilu_sign', { errorcode: MsgCode.SUCCESS, shuilustate: activity.sldh_state, }); } else { activity.playerUnsign(this); this.send('s2c_shuilu_unsign', { errorcode: MsgCode.SUCCESS, }); } } } } } onEnterGame() { if (this.ShanEChange()) { SKLogger.warn(`玩家[${this.roleid}:${this.name}]进入游戏错误`); return; } SKLogger.debug(`玩家[${this.roleid}:${this.name}]进入游戏`); this.onEnterMap(); // 发送角色数据 this.send('s2c_player_data', this.getData()); if (this.getpet == 0) { this.send('s2c_new_pet', {}); } else { this.sendPetList(); } // 任务系统初始化放置在进入场景之后进行! if (this.dbData) { this.initTaskMgr(this.dbData.taskstate ? this.dbData.taskstate : '{}'); delete this.dbData; } if (this.teamid > 0) { TeamMgr.shared.sendInfoToMember(this.teamid); } if (this.battle_id != 0) { BattleMgr.shared.playerBackToBattle(this.battle_id, this.onlyid); } let ltime = new Date(this.lastonline); this.CheckNewDay(ltime); DB.updateLastOnlineTime(this.roleid); this.lastonline = new Date(GameUtil.gameTime); this.checkFriendInfo(); } // 整理被删除的好友 checkFriendInfo() { for (const key in this.friendList) { if (this.friendList.hasOwnProperty(key)) { let roleId = SKDataUtil.numberBy(key); let target = PlayerMgr.shared.getPlayerByRoleId(roleId); if (target) { if (target.friendList[this.roleid] == null) { delete this.friendList[target.roleid]; } } } } } // NPC是否可见 canPlayerSeeNpc(npc: Npc) { // 系统创建的NPC可见 if (npc.stCreater.nKind == NpcCreater.SYSTEM) { return true; } // 玩家创建的并且是这个玩家可见 if (npc.stCreater.nKind == NpcCreater.PLAYER && npc.stCreater.nID == this.roleid) { return true; } // 组队创建的NPC并且是这个队伍可见 if (npc.stCreater.nKind == NpcCreater.TEAM && npc.stCreater.nID == this.teamid && this.teamid > 0) { return true; } return false; } playerMove(data: any, stop = false) { if (this.usingIncense) { this.anleiCnt--; if (this.anleiCnt <= 0) { this.triggerAnLei(); this.anleiCnt = Math.ceil(Math.random() * 15) + 15; } } if (this.teamid > 0 && this.isleader && !stop) { TeamMgr.shared.updateTeamPos(this.teamid, { x: data.x, y: data.y }); } let map: MapModel = MapMgr.shared.getMap(this); if (map) { let playerList: any[] = map.move(this.onlyid, data.x, data.y); let memberList = []; if (playerList) { if (this.teamid > 0 && !this.isleader) { playerList.push(this); SKLogger.debug(`队友${this.name}加入列表`); } for (let player of playerList) { if (player.isNpc() && this.canPlayerSeeNpc(player) == false) { continue; } memberList.push(player.toObj()); }; } this.send('s2c_aoi_pinfo', { list: memberList }); } } playerStop(data: any) { this.playerMove(data, true); if (this.teamid > 0 && this.isleader) { TeamMgr.shared.setTeamPath(this.teamid, SKDataUtil.jsonBy(data.path)); } } enterPrison() { this.inPrison = true; if (this.teamid > 0) { TeamMgr.shared.leaveTeam(this); } this.send('s2c_change_map', { mapid: 1201, pos: SKDataUtil.toJson({ x: 59, y: 4 }, "{}") }); this.changeMap({ mapid: 1201, x: 59, y: 4 }); } leavePrison() { if (this.shane > 0) { return; } this.inPrison = false; this.send('s2c_change_map', { mapid: 1011, pos: SKDataUtil.toJson({ x: 112, y: 78 }, "{}") }); this.changeMap({ mapid: 1011, x: 112, y: 78 }); } changeMap(data: any) { if (data.mapid == 1011 && this.shane > 0) { this.enterPrison(); this.send('s2c_prison_time', { onlyid: this.onlyid, time: this.inPrison ? Math.ceil(this.shane / 4) : 0 }); return; } if (data.mapid == 3002 && this.bangid <= 0) { this.send_notice("你还没有帮派,快去加入吧!"); return; } let map: MapModel = MapMgr.shared.getMap(this); if (map) { map.exitMap(this); } this.mapid = data.mapid; this.x = data.x; this.y = data.y; this.onEnterMap(); if (this.teamid > 0 && this.isleader) { TeamMgr.shared.changeTeamMap(this.teamid, this.mapid); } } useIncense(time: any) { this.stopIncense(); this.send('s2c_incense_state', { ltime: time }); this.usingIncense = true; this.anleiCnt = Math.ceil(Math.random() * 20) + 20; let self = this; this.incenseTimer = SKTimeUtil.delay(() => { self.usingIncense = false; self.send('s2c_incense_state', { ltime: 0 }); }, time * 1000); return true; } stopIncense() { this.usingIncense = false; if (this.incenseTimer) { SKTimeUtil.cancelDelay(this.incenseTimer); this.incenseTimer = null; } } triggerAnLei() { //触发暗雷怪 let map: MapModel = MapMgr.shared.getMap(this); if (map) { let groupid = map.getAnleiGroup(); if (groupid) { this.monsterBattle(groupid, 0, BattleType.Normal, true); } } } // 召唤兽转生 relivePet(data: any) { let operationPet = null; let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); for (let pet of this.petList) { if (pet.petid == data.petid) { operationPet = pet; break; } } if (operationPet == null) { console.warn(`$警告:[${this.roleid}:${this.name}]找不到转宝召唤兽:${data.petid}`); return; } operationPet.petRelive(); if (player) { //cxf宠物转生 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物转生", operateResSerial: data.petid, operateResName: operationPet.name, operateContent: "" }) } this.send('s2c_update_pet', { info: operationPet.toObj() }); } // 开启宠物技能格子 openPetSkillGrid(data: any) { // 道具编号 let prop: number = 10115; let pet = this.getPetByID(data.petId); let item_count = this.getBagItemNum(prop); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (pet != null) { let max: number = 4 * pet.getSkillNum(); // 必定开启 if (data.type == 2) { if (item_count < max) { this.send('s2c_notice', { strRichText: `缺少[${ItemUtil.getItemName(prop)}]`, }); return; } pet.openSkillGrid(data.index); //pet.learnSkill(3007); this.addBagItem(prop, -max, false); if (player) { //cxf宠物格子 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物格子", operateResSerial: pet.petid, operateResName: pet.name, operateContent: "" }) } } // 几率开启 else { let min: number = 2 * pet.getSkillNum(); if (item_count < min) { this.send('s2c_notice', { strRichText: `缺少[${ItemUtil.getItemName(prop)}]`, }); return; } // 开启成功 let random = SKDataUtil.random(0, 10); this.addBagItem(prop, -min, false); if (random < 3) { pet.openSkillGrid(data.index); if (player) { SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物格子", operateResSerial: data.petid, operateResName: pet.name, operateContent: "" }) } } else { if (player) { SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物格子", operateResSerial: data.petid, operateResName: pet.name, operateContent: "" }) } // 开启失败 this.send("s2c_pet_skill_grid", { petInfo: SKDataUtil.toJson(pet.toObj(), "{}"), type: 2 }) let info = `消耗[color=#ED4BFA][聚魂丹][/color],开启失败,少侠再接再厉!`; this.send_notice(info); } } } else { this.send_notice("获取宠物数据失败!") } } /* * 洗练宠物属性 */ washProperty(data: any) { let jll_count = this.bag_list[10118] || 0; /* 金柳露数量 */ let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (data.washtaype == 1 && jll_count < 3) { this.send_notice("金柳露数量不足!") return; } if (data.washtaype == 2 && jll_count < 30) { this.send_notice("金柳露数量不足!") return; } let operationPet = null; for (const pet of this.petList) { if (pet.petid == data.petid) { operationPet = pet; break; } } if (operationPet == null) { return; } if (data.washtaype == 1) { this.update_bagitem({ itemid: 10118, count: 3, operation: 0 }); operationPet.washProperty(); } if (data.washtaype == 2) { this.update_bagitem({ itemid: 10118, count: 30, operation: 0 }); operationPet.highWashProperty(); } if (player) { //cxf宠物洗练属性 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "洗练属性", operateResSerial: data.petid, operateResName: operationPet.name, operateContent: "" }) } } savePetProperty(data: any) { let operationPet = null; let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); for (const pet of this.petList) { if (pet.petid == data.petid) { operationPet = pet; break; } } if (operationPet == null) { return; } operationPet.saveProperty(data); if (player) { SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "保存洗练属性", operateResSerial: data.petid, operateResName: operationPet.name, operateContent: "" }) } } // 合成召唤兽 hechengPet(data: any) { let conf = PetMgr.shared.getPetData(data.petid); if (conf.gettype != 1 || conf.needitem == null || conf.needitem.length < 1) { this.send('s2c_notice', { strRichText: `该召唤兽[${conf.name}]未开放合成!` }); return; } if (PetMgr.shared.canHeCheng(this, data.petid)) { this.createPet(data, `召唤兽[${conf.name}]合成`); this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); } else { this.send('s2c_notice', { strRichText: `召唤兽[${conf.name}]无法合成!` }); } } createPet(data: any, source = '', isNotice: boolean = true) { let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); PetMgr.shared.createPet(this, data.petid, (pet: any) => { if (pet != null) { this.addPet(pet, false); if (this.curPet == null) { this.changePet(pet.petid, false); } this.getPetlist(); if (this.getpet != 1) { DB.getPet(this.roleid); this.getpet = 1; } SKLogger.debug(`玩家[${this.roleid}:s${this.name}]获得召唤兽[${pet.petid}:${pet.name}]${source}`); if (player) { //cxf合成宠物 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "合成宠物", operateResSerial: pet.petid, operateResName: pet.name, operateContent: "" }) } if (isNotice) { this.send('s2c_notice', { strRichText: `恭喜您获得了${pet.name}` }); } } else { this.send_notice("获取宠物信息失败!"); } }); } addPet(pet: any, issend = true) { pet.setOwner(this); this.petList.push(pet); if (issend) { this.getPetlist(); } } getPetByID(petid: any) { for (let pet of this.petList) { if (pet.petid == petid) { return pet; } } return null; } sendPetList() { if (this.offline) { return; } if (this.loaded == false) { return; } this.getPetlist(); } // 获得召唤兽列表 getPetlist(data?: any) { let listInfo: any = {}; listInfo.curid = 0; if (this.curPet != null) { listInfo.curid = this.curPet.petid; } listInfo.list = []; let repeat = SKDataUtil.removeRepeat(this.petList, "petid"); if (repeat.length > 0) { for (let pet of repeat) { SKLogger.warn(`玩家:[${this.roleid}:${this.name}]召唤兽[${pet.petid}:${pet.name}:${pet.state}]重复`); } } for (let pet of this.petList) { let conf = PetMgr.shared.getPetData(pet.dataid); // if (pet.name != conf.name) { // SKLogger.warn(`玩家:[${this.roleid}:${this.name}]召唤兽[${pet.petid}:${pet.name}]修复dataid:${pet.name}->${conf.name}`); // pet.name = conf.name; // } if (pet.resid != conf.resid) { SKLogger.warn(`玩家:[${this.roleid}:${this.name}]召唤兽[${pet.petid}:${pet.name}]修复resid:${pet.resid}->${conf.resid}`); pet.resid = conf.resid; } listInfo.list.push(pet.toObj()); } this.send('s2c_get_petlist', listInfo); SKLogger.debug(`发送玩家[${this.roleid}:${this.name}]召唤兽列表`); } updatePetPoint(data: any) { let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (!data) { return; } let sumpoint = 0; let addpoint: any = {}; if (data.type > 1) { addpoint = SKDataUtil.jsonBy(data.info); for (let key in addpoint) { sumpoint += addpoint[key]; } } let operationPet = null; for (let pet of this.petList) { if (pet.petid == data.petid) { operationPet = pet; break; } } if (operationPet == null) { return; } if (data.type == 0) { for (const key in operationPet.ppoint) { operationPet.ppoint[key] = 0; } } else if (data.type == 1) { for (const key in operationPet.dpoint) { operationPet.dpoint[key] = 0; } } else if (data.type == 2) { let curpoint = 0; for (const key in operationPet.ppoint) { curpoint += operationPet.ppoint[key]; } if (sumpoint + curpoint > operationPet.level * 4) { return; } for (const key in addpoint) { if (!operationPet.ppoint[key]) { operationPet.ppoint[key] = 0; } operationPet.ppoint[key] += addpoint[key]; } } else if (data.type == 3) { let curpoint = 0; for (let key in operationPet.dpoint) { curpoint += operationPet.dpoint[key]; } if (sumpoint + curpoint > PetPracticeMgr.shared.GetLevelPoint(operationPet.relive, operationPet.xlevel)) { //超过最大修炼点 return; } for (let key in addpoint) { if (!operationPet.dpoint[key]) { operationPet.dpoint[key] = 0; } operationPet.dpoint[key] += addpoint[key]; } } operationPet.calculateAttribute(); if (player) { //cxf宠物加点 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物加点", operateResSerial: operationPet.petid, operateResName: operationPet.name, operateContent: "" }) } this.send('s2c_update_pet', { info: operationPet.toObj() }); // 如果在队伍需要刷新队伍信息 this.refresh_team_data(); } petLockSkill(petid: any, skillid: any) { // this.send('s2c_notice', { // strRichText: '功能暂未开放' // }); // return; let pet = this.getPetByID(petid); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (!pet) { return; } let skillinfo = pet.skill_list[skillid]; if (!skillinfo) { return; } if (skillinfo.lck == 1) { this.send('s2c_notice', { strRichText: '技能已经被锁定,仙玉不变' }); return; } let n = pet.getLockedSkillNum(); let cost = Math.pow(2, n) * GameUtil.petLockSkillJade; let strErr = this.CostFee(1, cost, '宠物技能锁定'); if (strErr != '') { this.send('s2c_notice', { strRichText: strErr }); return; } pet.lockSkill(skillid); if (player) { //cxf宠物技能加锁 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物技能加锁", operateResSerial: pet.petid, operateResName: pet.name, operateContent: "" }) } } petForgetSkill(petid: any, skillid: any) { let pet = this.getPetByID(petid); if (pet) { pet.forgetSkill(skillid); //cxf宠物遗忘技能 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.PET, operateDepict: "宠物遗忘技能", operateResSerial: pet.petid, operateResName: pet.name, operateContent: SKDataUtil.toJson(pet.toObj(), "{}") }) } } petShenShouSkill(petid: any, skillid: any) { let pet = this.getPetByID(petid); if (!pet) { return; } if (pet.grade < GameUtil.petGrade.Shen) { return; } // if (skillid == GameUtil.skillIds.RuHuTianYi) { // this.send('s2c_notice', { // strRichText: '该技能稍后开放!' // }); // return; // } let strErr = this.CostFee(GameUtil.goldKind.Money, 50000000); if (strErr != '') { this.send('s2c_notice', { strRichText: strErr }); return; } pet.changeShenShouSkill(skillid); this.send('s2c_pet_changeSskill', { errorcode: MsgCode.SUCCESS, petid: petid, skillid: skillid, }); SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.PET, operateDepict: "改变神兽技能", operateResSerial: pet.petid, operateResName: pet.name, operateContent: SKDataUtil.toJson(pet.toObj(), "{}") }) } levelReward(level: any) { if (this.level_reward.split(':').indexOf(level + '') != -1) return; let level_reward = GameUtil.require_ex('../../conf/prop_data/prop_level.json'); let item = level_reward[level]; if (item) { if (this.examine(item.relive, level)) { if (this.level_reward == '') { this.level_reward += level; } else { this.level_reward += ':' + level; } let reward_list = item.reward_item.split(';'); for (let item of reward_list) { let reward = item.split(':'); this.addItem(reward[0], reward[1], false, '等级奖励'); } let send_data = { level: level, }; this.send('s2c_level_reward', send_data); } } } examine(relive: any, level: any): boolean { if (this.relive > relive) { return true } else { if (this.level >= level) { return true; } } return false; } changePet(petid: any, issend = true) { for (const pet of this.petList) { if (pet.petid == petid) { this.curPet = pet; this.curPetId = petid; // 刷新队伍信息 this.refresh_team_data(); if (issend) { this.send('s2c_change_pet', { curid: this.curPet.petid }); } break; } } } delPet(data: any) { let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (this.curPet != null && this.curPet.petid == data.petid) { this.curPet.state = 0; this.curPet = null; } for (let index = 0; index < this.petList.length; index++) { let pet: Pet = this.petList[index]; if (pet.petid == data.petid) { pet.state = 0; this.petList.splice(index, 1); for (let skillid in pet.skill_list) { if (Number(skillid) == 2110 || Number(skillid) == 2010) { PetSupport.shared.deletePet(this.roleid, pet.petid); } } DB.delPet(pet.petid, this.roleid, (code: number) => { SKLogger.debug(`玩家[${this.roleid}:${this.name}]放生召唤兽[${pet.petid}:${pet.name}]${code == MsgCode.SUCCESS ? "成功" : "失败"}`); if (player) { //cxf宠物放生 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物放生", operateResSerial: pet.petid, operateResName: pet.name, operateContent: "" }) } }) break; } } let params: any = {}; if (this.curPet == null) { params.curid = -1; } else { params.curid = this.curPet.petid; } params.delid = data.petid; this.send('s2c_del_pet', params); } /** * type 装备类型,0:新手装备,1:高级装备,2:神兵,3:仙器 4:翅膀, 5:配饰 * index 装备位置: * resid 装备编号 * roleid 角色id * @param data */ addEquip(data: any) { if (this.getBagItemAllKindNum() >= this.bagKindNum) { this.send('s2c_notice', { strRichText: `背包已满` }); return; } let equipAttr = EquipMgr.shared.makeEquipAttr(data); if (data.type == EEquipType.BALDRIC) { equipAttr.BaseAttr = '[]'; } if (!equipAttr) { SKLogger.warn(`玩家[${this.roleid}:${this.name}]加装备失败${data.resid}`); this.send('s2c_operation_result', { code: 0, }); return; } let equip = new Equip(equipAttr, this); this.addEquipList(equip); this.equipObjs[equip.EquipID] = equip; EquipMgr.shared.addEquip(equip); // this.send('s2c_bagitem', { // info: SKDataUtil.toJson(this.bag_list, "{}") // }); this.sendEquipList(); let equipInfo = equip.toObj(); let params = { equip: SKDataUtil.toJson(equipInfo, "{}") }; this.send("s2c_equip_info", params); this.send('s2c_notice', { strRichText: `恭喜你获得了[img]ui://main_ui/${equipInfo.Shape}[/img][color=#E96E29][${equipInfo.EName}][/color]` }); /* 神兵 仙器广播 */ if (data.type > 1) { if (data.type == 2) { SKLogger.debug(`玩家[${this.roleid}:${this.name}]获得神兵[${equipAttr.EquipID}:${equipInfo.EName}]`); } else if (data.type == 3) { SKLogger.debug(`玩家[${this.roleid}:${this.name}]获得仙器[${equipAttr.EquipID}:${equipInfo.EName}]`); } if (data.type == 3 && equipInfo.Grade == 1) { } else { let strRichText = ` ${this.name} 获得了 ${equipInfo.EDesc}:${equipInfo.EName}, 真是太幸运了`; PlayerMgr.shared.broadcast('s2c_screen_msg', { strRichText: strRichText, bInsertFront: 0 }); } } DB.createEquip(this.roleid, equipInfo, (code: MsgCode) => { if (code != MsgCode.SUCCESS) { SKLogger.debug(`存档:玩家[${this.roleid}:${this.name}]加入装备属性[${equipAttr}]失败!`); } }); //cxf合成装备 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "合成装备", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } /** * type 类型:6 法宝 * index 装备位置: * roleid 角色id * @param data */ addMagicWeapon(data: any) { if (this.getBagItemAllKindNum() >= this.bagKindNum) { this.send('s2c_notice', { strRichText: `背包已满` }); return; } let magicWeapon = MagicWeaponMgr.shared.getMagicWeaponAttr(data); if (!magicWeapon) { SKLogger.warn(`玩家[${this.roleid}:${this.name}]加装备失败${data.resid}`); this.send('s2c_operation_result', { code: 0, }); return; } let weapon = new MagicWeapon(magicWeapon, this); this.addMagicWeaponList(weapon); this.magicWeaponObjs[weapon.efId] = weapon; MagicWeaponMgr.shared.addMagicWeapon(weapon); this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); this.sendMagicWeaponList(); let weaponInfo = weapon.toObj(); let params = { weapon: SKDataUtil.toJson(weaponInfo, "{}") }; this.send("s2c_magic_weapon", params); this.send('s2c_notice', { strRichText: `恭喜您获得了${SKDataUtil.noToChinese(weaponInfo.efType)}阶法宝:${weaponInfo.efName}` }); // DB.createMagicWeapon(this.roleid, weaponInfo, (code: MsgCode) => { if (code != MsgCode.SUCCESS) { SKLogger.info(`存档:玩家[${this.roleid}:${this.name}]加入法宝属性[${weaponInfo}]失败!`); } }); } createEquip(data: any) { if (this.getBagItemAllKindNum() >= this.bagKindNum) { this.send('s2c_notice', { strRichText: `背包已满` }); return; } if (data.is > 0 || data.is == undefined) { if (data.type == 2) { if (!this.bag_list[10408] || this.bag_list[10408] < 50) { return; //神兵碎片不足 } this.bag_list[10408] -= 50; SKLogger.debug(`玩家[${this.name}${this.roleid}]消耗 神兵碎片 50 个`); } else if (data.type == 3) { if (!this.bag_list[10406] || this.bag_list[10406] < 40) { return; //八荒遗风不足 } this.bag_list[10406] -= 40; SKLogger.debug(`玩家[${this.name}${this.roleid}]消耗 八荒遗风 40 个`); } } else { data.type = EEquipType.XianQi; } this.addEquip(data); } sendEquipList() { let listInfo: any = {}; listInfo.use = {}; listInfo.score = 0; listInfo.list = []; listInfo.info = {}; for (let equip of this.currentEquips) { let full = equip.getFullData(); if (full) { listInfo.score += Number(full.BaseScore); listInfo.use[equip.EIndex] = equip.EquipID; listInfo.info[equip.EquipID] = equip.getSendInfo(); PaiHangMgr.shared.updateEquipRank(this.roleid, this.sex, this.name, equip.EIndex, this.level, full.BaseScore, this.relive, equip.name); } } for (let equip of this.listEquips) { listInfo.list.push(equip.EquipID); listInfo.info[equip.EquipID] = equip.getSendInfo(); } // 更新装备评价排行榜 PaiHangMgr.shared.updateEquipRankData(this.roleid, this.sex, this.name, this.race, this.level, listInfo.score, this.relive); this.send("s2c_equip_list", { list: SKDataUtil.toJson(listInfo, "{}") }); } sendMagicWeaponList() { let listInfo: any = {}; listInfo.use = {}; listInfo.score = 0; listInfo.list = []; listInfo.info = {}; // 获取穿戴的法宝 for (let magicWeapon of this.currentMagicWeapons) { let full = magicWeapon.getSendInfo(); if (full) { listInfo.score += Number(full.BaseScore); listInfo.use[magicWeapon.efIndex] = magicWeapon.efId; listInfo.info[magicWeapon.efId] = full; } } for (let magicWeapon of this.listMagicWeapons) { listInfo.list.push(magicWeapon.efId); listInfo.info[magicWeapon.efId] = magicWeapon.getSendInfo; } // 更新法宝评价排行榜 // PaiHangMgr.shared.updateEquipRankData(this.roleid, this.sex, this.name, this.race, this.level, listInfo.score, this.relive); this.send("s2c_magic_weapon_list", { list: SKDataUtil.toJson(listInfo, "{}") }); } getLockerEquipInfo() { let rInfo: any = {}; rInfo.locker = []; rInfo.list = []; for (let equip of this.listEquips) { rInfo.list.push(equip.getSendInfo()); } for (let equip of this.lockerEquips) { rInfo.locker.push(equip.getSendInfo()); } return rInfo; } // 发送装备信息 sendEquipInfo(equipId: string) { if (this.equipObjs[equipId]) { let equip: Equip = this.equipObjs[equipId]; let params = { equip: SKDataUtil.toJson(equip.toObj(), "{}") }; this.send("s2c_equip_info", params); } } // 获取属性评分 attributeScore(data: any) { let score: number = 0; // 判断装备是否存在 if (this.equipObjs[data.equipId]) { // 获取装备 let equip: Equip = this.equipObjs[data.equipId]; let info = equip.toObj(); // 配饰属性评分 if (EEquipType.BALDRIC == info.EquipType) { score = GameUtil.getBasicsListAttrScore(info.Race, info.Sex, info.BaseAttr) } // 翅膀属性评分 else if (EEquipType.WING == info.EquipType) { score = GameUtil.getBasicsListAttrScore(info.Race, info.Sex, info.LianhuaAttr) } // 装备属性评分 else { // 炼化 if (data.type == 0) { score = GameUtil.getBasicsListAttrScore(info.Race, info.Sex, SKDataUtil.jsonBy(info.LianhuaAttr)) } // 重铸 else { score = GameUtil.calculate(JSON.parse(info.BaseAttr), info.Race, info.Sex, true); } } } // 返回属性评分 this.send('s2c_attribute_score', { attributeScore: score }); } changeWeapon(weapon: any) { if (weapon) { let fullEquipData = weapon.getFullData(this.roleid); let weaponstr = SKDataUtil.toJson({ gemcnt: fullEquipData.GemCnt, type: fullEquipData.EquipType, level: fullEquipData.Grade }, "{}"); this.send('s2c_change_weapon', { weapon: weaponstr }); } else { this.send('s2c_change_weapon', { weapon: '' }); } } upgradeEquip(data: any) { let equip = this.equipObjs[data.equipid]; if (equip == null) { return; } if (equip.EquipType > EEquipType.HIGH) { return; } let itemid = 10405; if (this.bag_list[itemid] && this.bag_list[itemid] > 0) { let up = equip.upgrade(data); if (!up) return; //升级失败 this.addItem(itemid, -1, false, '装备升级消耗'); if (this.bag_list[itemid] <= 0) { delete this.bag_list[itemid]; } } else { //没有盘古精铁 return; } this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); this.sendEquipInfo(data.equipid); if (equip.EIndex == 1 && this.currentEquips.indexOf(equip) != -1) { this.changeWeapon(equip); } this.send('s2c_notice', { strRichText: `升级成功` }); } shenbignUpgrade(data: any) { let equip = this.equipObjs[data.equipid]; if (equip == null) { return; } if (equip.EquipType > EEquipType.ShenBing) { return; } if (data.use > 0 && this.equipObjs[data.use] == null) return; if (equip.canUpgrade() == false) { return; } // 是否失败 if (equip.checkUpgradeBroke() == false) { if (equip.Grade == 1) { this.delEquip(data.equipid, true, '神兵升级破碎'); } else { this.delEquip(data.use, true, '神兵升级破碎'); } this.sendEquipList(); // 神兵破碎 给 神兵碎片 this.addItem(10408, 5, false, '神兵升级破碎'); this.send('s2c_notice', { strRichText: `神兵升级失败` }); } else { equip.upgrade(data); this.delEquip(data.use, true, '神兵升级'); this.sendEquipList(); this.sendEquipInfo(data.equipid); if (equip.EIndex == 1 && this.currentEquips.indexOf(equip) != -1) { this.changeWeapon(equip); } this.send('s2c_notice', { strRichText: `神兵升级成功` }); } } xianqiUpGrade(data: any) { let equip: Equip = this.equipObjs[data.equipid]; if (equip == null || equip == undefined) { return; } if (equip.Grade == 1) { //一阶升阶需要3个 if ((data.use1 > 0 && this.equipObjs[data.use1] == null) || (data.use2 > 0 && this.equipObjs[data.use2] == null)) { this.send_notice("数量不够") return; } if (equip.pos == undefined) { equip.pos = 0; } if (this.equipObjs[data.use1].pos == undefined) { this.equipObjs[data.use1].pos = 0; } if (this.equipObjs[data.use2].pos == undefined) { this.equipObjs[data.use2].pos = 0; } } else {//大于一阶需要两个 if ((data.use1 > 0 && this.equipObjs[data.use1] == undefined) || data.use1 <= 0) { this.send_notice("数量不够") return; } if (equip.pos == undefined) { equip.pos = 0; } if (this.equipObjs[data.use1].pos == undefined) { this.equipObjs[data.use1].pos = 0; } if (this.equipObjs[data.use1].pos == undefined) { this.equipObjs[data.use1].pos = 0; } } let up = equip.canUpgrade(); if (!up) { SKLogger.warn(`仙器[${equip.name}(${equip.EquipID})]不能升阶!`); return; } else if (equip.pos == 2 || this.equipObjs[data.use1].pos == 2 || (this.equipObjs[data.use2] != null && this.equipObjs[data.use2].pos == 2)) { this.send('s2c_notice', { strRichText: `已穿戴装备[${equip.EquipID}:${equip.name}]不能升阶` }); return; } else if (equip.EIndex != this.equipObjs[data.use1].EIndex && (this.equipObjs[data.use2] != null && equip.EIndex != this.equipObjs[data.use2].EIndex)) { this.send('s2c_notice', { strRichText: `不同类型装备不能升阶` }); return; } else if (equip.pos == 4 || this.equipObjs[data.use1].pos == 4 || (this.equipObjs[data.use2] != null && this.equipObjs[data.use2].pos == 4)) { this.send('s2c_notice', { strRichText: `仓库中装备不能升阶` }); return; } this.delEquip(data.use1, true, `仙器升阶`); this.delEquip(data.use2, true, `仙器升阶`); equip.upgrade(data); this.sendEquipList(); this.sendEquipInfo(data.equipid); if (equip.EIndex == 1 && this.currentEquips.indexOf(equip) != -1) { this.changeWeapon(equip); } this.send('s2c_notice', { strRichText: `仙器:${equip.name}升${equip.Grade}阶成功` }); //cxf仙器升阶 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "仙器升阶", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } delEquip(equipid: any, uninlay = true, source = '') { if (!equipid || equipid <= 0) { return; } let delequip = null; for (let index = 0; index < this.currentEquips.length; index++) { //已经装备的不能删,所以注释掉以下代码 if (this.currentEquips[index].EquipID == equipid) { delequip = this.currentEquips[index]; this.currentEquips.splice(index, 1); break; } } for (let index = 0; index < this.listEquips.length; index++) { if (this.listEquips[index].EquipID == equipid) { delequip = this.listEquips[index]; this.listEquips.splice(index, 1); break; } } if (delequip != null) { delequip.pos = EEquipPos.UNKNOW; let equipfulldata = delequip.getFullData(); SKLogger.debug(`玩家[${this.roleid}:${this.name}]删除装备[${delequip.EquipID}:${equipfulldata.EName}]:${source}]`); if (uninlay) { this.unInLay(delequip); this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); } delequip.state = 0; delequip.save(); delete this.equipObjs[delequip.EquipID]; EquipMgr.shared.delEquip(delequip.EquipID); this.schemeMgr.deleteCurEquips(delequip.EquipID); } } updateEquip(data: any) { if (!data) { return; } let ret = false; if (data.operation == 0) { this.delEquip(data.equipid, true, '装备删除'); this.sendEquipList(); return; } else if (data.operation == 1 && this.equipObjs[data.equipid]) { //装备 let equip: Equip = this.equipObjs[data.equipid]; let fullEquipData = equip.getFullData(this.roleid); let flag = true if (fullEquipData.OwnerRoleId > 0 && fullEquipData.OwnerRoleId != this.resid) { this.send('s2c_notice', { strRichText: '角色不匹配,不能使用!' }); return; } else if (fullEquipData.Sex != 9 && fullEquipData.Sex != this.sex) { this.send('s2c_notice', { strRichText: '角色不匹配,不能使用!' }); return; } if (Array.isArray(fullEquipData.Race)) {//如果是数组,多种族通用 for (let race of fullEquipData.Race) { if (race == this.race) { flag = false; } } if (flag) { this.send('s2c_notice', { strRichText: '角色不匹配,不能使用!' }); return; } } else if (fullEquipData.Race != 9 && fullEquipData.Race != this.race) { this.send('s2c_notice', { strRichText: '角色不匹配,不能使用!' }); return; } if (fullEquipData.NeedGrade > this.level || fullEquipData.NeedRei > this.relive) { this.send('s2c_notice', { strRichText: '角色等级不足,尚不能使用!' }); return;//转生或等级不符合 } if (fullEquipData.Shuxingxuqiu) { //属性需求不符合 for (const key in fullEquipData.Shuxingxuqiu) { if (this.getAttr1(key) < fullEquipData.Shuxingxuqiu[key]) { this.send('s2c_notice', { strRichText: '角色属性不足,尚不能使用!' }); return; } } } for (let index = 0; index < this.currentEquips.length; index++) { let item = this.currentEquips[index]; if (item.EIndex == equip.EIndex) { item.pos = EEquipPos.BAG; this.addEquipList(item); this.currentEquips.splice(index, 1); } } equip.pos = EEquipPos.USE; this.currentEquips.push(equip); for (let index = 0; index < this.listEquips.length; index++) { let item = this.listEquips[index]; if (item.EquipID == data.equipid) { this.listEquips.splice(index, 1); break; } } this.sendEquipList(); if (equip.EIndex == 1) { this.changeWeapon(equip); } else if (equip.EIndex == 6) { let conf = EquipMgr.shared.getXianQiBy(equip.Type); this.wingId = conf.Shape; } SKLogger.debug(`玩家[${this.roleid}:${this.name}]穿上装备[${equip.name}]`); ret = true; let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); } else if (data.operation == 2 && this.equipObjs[data.equipid]) { //卸下 let equip = this.equipObjs[data.equipid]; let finduse = false; for (let index = 0; index < this.currentEquips.length; index++) { if (this.currentEquips[index].EquipID == data.equipid) { this.currentEquips[index].pos = EEquipPos.BAG; this.currentEquips.splice(index, 1); finduse = true; break; } } if (finduse) { this.addEquipList(equip); this.sendEquipList(); if (equip.EIndex == 1) { this.changeWeapon(null); } else if (equip.EIndex == 6) { this.wingId = 0; } SKLogger.debug(`玩家[${this.roleid}:${this.name}]卸下装备[${equip.name}]`); ret = true; let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); } } if (ret) { this.calculateAttr(); //this.send('s2c_player_data', this.getData()); //将通过背包修改的装备信息,同步修改方案装备信息 let curEqupsData: any = {} this.currentEquips.forEach((e: any) => { curEqupsData[e.EIndex] = e.EquipID; }); if ((data.operation == 1 || data.operation == 2) && this.schemeMgr) { this.schemeMgr.syncSchemeEquips(curEqupsData); }//检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); } else { this.send('s2c_operation_result', { code: MsgCode.FAILED }); } } // 拆卸 unInLay(equip: Equip) { if (equip == null) { return; } let itemList = equip.getGemList(); for (let itemId in itemList) { if (itemList[itemId] <= 0) { continue; } if (this.bag_list[itemId] == null) { this.bag_list[itemId] = itemList[itemId]; SKLogger.debug(`玩家[${this.roleid}:${this.name}]装备[${equip.name}]拆卸返回道具[${ItemUtil.getItemName(itemId)}]`); } else { this.bag_list[itemId] += itemList[itemId]; SKLogger.debug(`玩家[${this.roleid}:${this.name}]装备[${equip.name}]拆卸返回道具[${ItemUtil.getItemName(itemId)}]${itemList[itemId]}个`); } } equip.GemCnt = 0; // 刷新装备 this.sendEquipList(); SKLogger.debug(`玩家[${this.roleid}:${this.name}]装备拆卸[${equip.name}]`); } // 宝石镶嵌 equipInlay(data: any) { let equip: Equip = this.equipObjs[data.equipid]; if (equip == null) { SKLogger.warn(`玩家[${this.roleid}:${this.name}]宝石镶嵌找不到装备${data.equipid}`); return; } if (data.operation == 0) { this.unInLay(equip); if (equip.EIndex == 1 && this.currentEquips.indexOf(equip) != -1) { this.changeWeapon(equip); } } else { let fullData = equip.getFullData(); if (fullData) { let maxEmbed = fullData.MaxEmbedGemCnt; if (equip.GemCnt >= maxEmbed) { this.send_notice(`您的装备${equip.name}已经镶嵌到顶级!`); return; } } let itemid = equip.getInlayGemID(); let conf = ItemUtil.getItemData(itemid); if (conf == null) { SKLogger.warn(`玩家[${this.roleid}:${this.name}]装备[${equip.name}]宝石镶嵌找不到道具[${itemid}]定义!`); this.send_notice(`您的装备${equip.name}]无法镶嵌宝石!`); return; } if (this.bag_list[itemid] && this.bag_list[itemid] > 0) { this.bag_list[itemid] -= 1; if (this.bag_list[itemid] <= 0) { delete this.bag_list[itemid]; } equip.GemCnt += 1; SKLogger.debug(`玩家[${this.roleid}:${this.name}]装备[${equip.name}]镶嵌宝石[${conf.name}]成功!`); equip.calculateAttribute(); if (equip.EIndex == 1 && this.currentEquips.indexOf(equip) != -1) { this.changeWeapon(equip); } } else { SKLogger.debug(`玩家[${this.roleid}:${this.name}]装备[${equip.name}]镶嵌,缺少[${conf.name}]!`); this.send_notice(`您的装备${equip.name}]无法镶嵌宝石:[${conf.name}]数量不足!`); return; } } equip.calculateAttribute(); this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); this.sendEquipInfo(data.equipid); this.calculateAttr(); this.send('s2c_player_data', this.getData()); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); // 刷新装备 this.sendEquipList(); //cxf宝石镶嵌 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "宝石镶嵌", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } // 装备炼化 (装备和翅膀) equipRefine(data: any) { let equip = this.equipObjs[data.equipid]; if (equip == null) { return; } if (data.refine) { let refine = SKDataUtil.jsonBy(data.refine); equip.refine = refine // 选择替换的属性, 其他炼化为空 } if (data.operation == 1) {// 0获取,1确认 if (equip.refine == null) { return; } equip.LianhuaAttr = equip.refine.slice(0); equip.refine = null; equip.calculateAttribute(); this.sendEquipInfo(data.equipid); this.calculateAttr(); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); this.send_notice(`炼化成功`); // 刷新装备 this.sendEquipList(); //cxf装备炼化 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "装备炼化", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } else { // 如果是翅膀,则需要10个翅膀精华10411练化一次 if (equip.EIndex == 6) { let needitem = 10411; if (this.bag_list[needitem] && this.bag_list[needitem] > 1) { this.bag_list[needitem] -= 10; if (this.bag_list[needitem] <= 0) { delete this.bag_list[needitem]; } } else { // this.send('s2c_notice', { strRichText: `炼化材料不足,至少需要10个翅膀精华` }); return; } } else { let needitem = 10404; if (data.level == 3) { needitem = 10410; }//超级九彩云龙珠 //if (data.level == 4) { needitem = 10411; }//翅膀精华 if (this.bag_list[needitem]) { if (needitem == 10404 && this.bag_list[needitem] > 30) { this.bag_list[needitem] -= 30; if (this.bag_list[needitem] <= 0) { delete this.bag_list[needitem]; } } else if (needitem == 10404 && this.bag_list[needitem] < 30) { this.send('s2c_notice', { strRichText: `需要30个高级九彩云龙珠不足` }); return; } if (needitem == 10410 && this.bag_list[needitem] >= 5) { this.bag_list[needitem] -= 5; if (this.bag_list[needitem] <= 0) { delete this.bag_list[needitem]; } } else if (needitem == 10410 && this.bag_list[needitem] < 5) { this.send('s2c_notice', { strRichText: `需要5个超级九彩云龙珠` }); return; } } else { this.send('s2c_notice', { strRichText: `炼化材料不足` }); return; } } this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); equip.refine = null; SKLogger.debug(`炼化数据:` + data.level) if (data.level == 2) { let list = []; let refinelist = EquipMgr.shared.getLianhuaData(equip.EIndex, data.level); for (let attr of refinelist) { equip.refine = attr; let score = GameUtil.getBasicsListAttrScore(equip.Race, equip.Sex, equip.refine); let obj = { property: equip.refine, score: score } list.push(obj) } this.send('s2c_high_refine', { list: SKDataUtil.toJson(list, "[]") }); } else if (data.level == 3) { equip.refine = EquipMgr.shared.getMaxLianhuaData(equip.EIndex, data.level);//超级九彩炼化数据 this.send('s2c_equip_property', { property: SKDataUtil.toJson(equip.refine, "[]"), score: GameUtil.getBasicsListAttrScore(equip.Race, equip.Sex, equip.refine) }); } else if (data.level == 4) { equip.refine = EquipMgr.shared.getWingLianhuaData();//炼化翅膀 this.send('s2c_equip_property', { property: SKDataUtil.toJson(equip.refine, "[]"), score: GameUtil.getBasicsListAttrScore(equip.Race, equip.Sex, equip.refine) }); } else { let list = []; let refinelist = EquipMgr.shared.getLianhuaData(equip.EIndex, data.level); for (let attr of refinelist) { equip.refine = attr; let score = GameUtil.getBasicsListAttrScore(equip.Race, equip.Sex, equip.refine); let obj = { property: equip.refine, score: score } list.push(obj) } this.send('s2c_high_refine', { list: SKDataUtil.toJson(list, "[]") }); } } } // 道具分解 itemResolve(data: any) { let itemData = ItemUtil.getItemData(data.itemId); if (itemData == null) { // 无此道具 SKLogger.warn(`玩家[${this.roleid}:${this.name}]物品[${data.itemId}]分解找不到定义!`); return; } let count = ItemUtil.getBagItemCount(this, itemData.id); if (count < 1) { SKLogger.warn(`玩家[${this.roleid}:${this.name}]背包无此物品[${data.itemId}]!`); return; } if (itemData && itemData.type == 10 && itemData.level == 2) { //let count = data.count * 10; this.addBagItem(10102, 10, true); } this.addItem(data.itemId, -1, false, `道具[${itemData.name}]分解`); //let score = ItemUtil.canResolve(itemData); // if (score < 1) { // this.send('s2c_notice', { // strRichText: `物品[${data.itemId}]无法分解!` // }); // return; // } // this.shuilu.gongji += score; // this.send('s2c_you_money', { // nKind: GameUtil.goldKind.SLDH_Score, // nNum: this.shuilu.gongji, // nChange: score // }); // let info = `消耗[color=#b94bd1][${itemData.name}][/color]X1得到功绩${score}`; // this.send('s2c_notice', { // strRichText: info // }); } // 佩饰重铸 baldricRecast(data: any) { let equip: Equip = this.equipObjs[data.equipid]; if (equip == null) { return; } if (!ItemUtil.isBaldric(equip.EIndex)) { return; } let item_1 = 10406; let item_2 = 10409; if (data.operation == 1) { if (equip.recast == null) { return; } if (data.locks) { let total = 0; for (let lock of data.locks) { if (lock == 1) { total++; } } if (total > 0) { let hasCnt = ItemUtil.getBagItemCount(this, 70004) total = SKDataUtil.clamp(total, 1, 3); let jade = GameUtil.lockJade[total - 1]; if (hasCnt < jade) { this.send_notice(`您的碎片不足,佩饰重铸锁住${total}条属性需消耗碎片${jade}`); return; } this.addItem(70004, -jade, false, `佩饰重铸锁住${total}属性,消耗碎片${jade}`); } let source = equip.BaseAttr; let target = SKDataUtil.jsonBy(equip.recast); let index = 0; for (let lock of data.locks) { if (lock == 0) { source[index] = target[index]; } index++; } } else { equip.BaseAttr = SKDataUtil.jsonBy(equip.recast); } equip.calculateAttribute(); equip.recast = null; this.sendEquipInfo(data.equipid); this.calculateAttr(); this.send('s2c_player_data', this.getData()); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); this.send_notice(`重铸替属性成功`); // 刷新装备 this.sendEquipList(); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { //cxf配饰重铸 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.EQUIP, operateDepict: "配饰重铸", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } } else { if (this.money < 300000) { this.send_notice(`佩饰重铸需要300000银两!`); return; } let item_count_1 = this.getBagItemNum(item_1); if (item_count_1 < 5) { this.send_notice(`缺少重铸材料[${ItemUtil.getItemName(item_1)}至少5个]`); return; } let item_count_2 = this.getBagItemNum(item_2); if (item_count_2 < 1) { this.send_notice(`缺少重铸材料[${ItemUtil.getItemName(item_2)}至少1个]`); return; } let recastData = EquipMgr.shared.getBaldricRecast(equip); if (recastData) { equip.recast = recastData.BaseAttr; this.addMoney(0, -300000, "", MsgCode.SUCCESS); this.addBagItem(item_1, -5, false); this.addBagItem(item_2, -1, false); let info = equip.toObj(); //cxf配饰重铸 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "配饰重铸", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) this.send('s2c_equip_property', { property: equip.recast, score: GameUtil.getBasicsListAttrScore(info.Race, info.Sex, SKDataUtil.jsonBy(info.recast)) }); } } } // 佩饰分解 baldricResolve(data: any) { let equip: Equip = this.equipObjs[data.equipid]; if (equip == null) { SKLogger.debug(`[${this.roleid}:${this.name}]佩饰分解找不到装备${data.equipid}`); return; } if (!ItemUtil.isBaldric(equip.EIndex)) { return; } let score = 1; if (equip.BaseAttr.length != 0) { if (equip.Grade == 2) { score = 2; } else if (equip.Grade == 3) { score = 5; } } this.shuilu.gongji += score; this.delEquip(equip.EquipID, true, "佩饰分解"); this.sendEquipList(); this.send('s2c_you_money', { nKind: GameUtil.goldKind.SLDH_Score, nNum: this.shuilu.gongji, nChange: score }); let info = `消耗[color=${ItemUtil.getBaldricColor(equip.Grade)}][${equip.name}][/color]X1得到功绩${score}`; //cxf配饰分解 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "配饰分解", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) this.send('s2c_notice', { strRichText: info }); } // 配饰鉴定 accAuthenticate(data: any) { let equip: Equip = this.equipObjs[data.equipid]; if (equip == null) { SKLogger.debug(`[${this.roleid}:${this.name}]佩饰鉴定找不到装备${data.equipid}`); return; } if (!ItemUtil.isBaldric(equip.EIndex)) { return; } // 玉符,盘古精铁,补天神石,银两 let need_goods: any = [{ itemId: 10409, num: 1, type: GameUtil.goldKind.Goods }, { itemId: 10405, num: 1, type: GameUtil.goldKind.Goods }, { itemId: 10407, num: 1, type: GameUtil.goldKind.Goods }, { itemId: 90003, num: 230000, type: GameUtil.goldKind.Money }]; for (const need of need_goods) { if (need.type == GameUtil.goldKind.Goods) { let item_count = this.getBagItemNum(need.itemId); if (item_count < need.num) { this.send('s2c_notice', { strRichText: `缺少鉴定材料[${ItemUtil.getItemName(need.itemId)}至少${need.num}个]`, }); return; } } else { if (this.money < need.num) { this.send('s2c_notice', { strRichText: `佩饰鉴定需要${ItemUtil.getItemName(need.num)}银两!`, }); return; } } } for (const need of need_goods) { if (need.type == GameUtil.goldKind.Goods) { this.addBagItem(need.itemId, -need.num, false); } else { this.addMoney(GameUtil.goldKind.Money, -need.num, "", MsgCode.FAILED); } } let recastData = EquipMgr.shared.getBaldricRecast(equip); if (recastData) { // 赋值装备属性 equip.BaseAttr = SKDataUtil.jsonBy(recastData.BaseAttr); equip.calculateAttribute(); // 发送装备信息 this.sendEquipInfo(data.equipid); // 核对属性 this.calculateAttr(); // 更新装备属性 this.send('s2c_player_data', this.getData()); this.send('s2c_acc_authenticate', { attribute: recastData.BaseAttr }); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); } //cxf配饰鉴定 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "配饰鉴定", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } // 装备重铸 equipRecast(data: any) { let equip: any = this.equipObjs[data.equipid]; if (equip == null) { return; } if (equip.EquipType == 0 || equip.EquipType == 2) { return; } if (data.operation == 1) { if (equip.recast == null) { return; } equip.setDB(equip.recast); equip.calculateAttribute(); equip.recast = null; this.sendEquipInfo(data.equipid); this.calculateAttr(); this.send('s2c_player_data', this.getData()); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); this.send_notice(`重铸成功`); // 刷新装备 this.sendEquipList(); //cxf装备重铸 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EQUIP, operateDepict: "装备重铸", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } else { let itemid = 10405; if (equip.EquipType == 3) { itemid = 10401; } let itemnum = this.getBagItemNum(itemid); if (itemnum == 0) { this.send_notice(`缺少重铸材料`); return; } equip.recast = null; let recastData = EquipMgr.shared.getRecastData({ type: equip.EquipType, grade: equip.Grade, role: this, ower: equip.OwnerRoleId, pos: equip.EIndex, resid: equip.Type }); equip.recast = recastData; if (equip.recast) { this.addBagItem(itemid, -1, false); this.send('s2c_equip_property', { property: equip.recast.BaseAttr, score: GameUtil.calculate(JSON.parse(equip.recast.BaseAttr), equip.Race, equip.Sex, true) }); } } } // 装备分解 equipResolve(data: any) { let equip = this.equipObjs[data.equipid]; if (equip == null) { this.send('s2c_notice', { strRichText: `分解的装备不存在!` }); return; } if (equip.EIndex == 6) { this.addItem(10411, 10, false, `${equip.name}分解`); this.delEquip(equip.EquipID, true, "翅膀分解"); this.sendEquipList(); let info = `消耗翅膀[color=${ItemUtil.getBaldricColor(equip.Grade)}][${equip.name}][/color]X1得到10个[img]ui://main_ui/10411[/img]翅膀精华`; let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { //cxf仙器分解 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.EQUIP, operateDepict: "翅膀分解", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } this.send('s2c_notice', { strRichText: info }); return; } if (equip.EquipType != 3 && equip.Grade < 2) { this.send('s2c_notice', { strRichText: `只有二阶及以上的仙器才能分解!` }); return; } let count = ItemUtil.getEquipResolve(equip.Grade); if (count < 1) { this.send('s2c_notice', { strRichText: `仙器[color=${ItemUtil.getBaldricColor(equip.Grade)}][${equip.name}][/color]无法分解!` }); } this.addItem(10406, count, false, `${equip.name}分解`); this.delEquip(equip.EquipID, true, "仙器分解"); this.sendEquipList(); let info = `消耗仙器[color=${ItemUtil.getBaldricColor(equip.Grade)}][${equip.name}][/color]X1得到${count}个[img]ui://main_ui/10406[/img]八荒遗风`; let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { //cxf仙器分解 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.EQUIP, operateDepict: "仙器分解", operateResSerial: equip.EquipID, operateResName: equip.name, operateContent: SKDataUtil.toJson(equip.cxfEquip(this.roleid), "{}") }) } this.send('s2c_notice', { strRichText: info }); } buyEquip(info: any) { } sellEquip(info: any) { } ////////////////////////////// 装备 结束 ///////////////////////////// getPartnerOnBattle(): any { let battlelist: any = []; if (this.partnerMgr == null) { return battlelist; } for (var it in this.partnerMgr.vecChuZhan) { let nPartnerID = this.partnerMgr.vecChuZhan[it]; if (0 == nPartnerID) continue; let pPartner = this.partnerMgr.mapPartner[nPartnerID]; if (null == pPartner) continue; battlelist.push(pPartner); } return battlelist; } // 获得战斗召唤兽 getBattlePet(pos: any): any { let pets = []; let btlpet = null; for (let petid in this.petList) { let pet: Pet = this.petList[petid]; let battlePet = new BattleRole(); battlePet.setObj(pet); battlePet.bindid = this.onlyid; if (this.curPet && pet.onlyid == this.curPet.onlyid) { battlePet.pos = pos; btlpet = battlePet; } else { battlePet.pos = 0; } pets.push(battlePet); } let result = { pets: pets, btlpet: btlpet } return result; } /** * 获取自己的战斗队伍 * @param {number} type 是否有伙伴上场 0 上场 1 不上场 */ getBattleTeam(type = BattleType.Normal) { let btlteam: any = []; let teamid = this.teamid; if (teamid != 0) { let team_players = TeamMgr.shared.getTeamPlayer(teamid); let count = 0; for (let i = 0; i < team_players.length; i++) { let player = team_players[i]; if (player.pause == 1) { count++; continue; } let brole = new BattleRole(); brole.pos = i + 1; brole.setObj(player); let pPets = player.getBattlePet(i + 6); if (pPets.btlpet) { brole.bindid = pPets.btlpet.onlyid; } btlteam.push(brole); btlteam = btlteam.concat(pPets.pets); } if (type == BattleType.Normal || type == BattleType.PK) { let partnerlist = TeamMgr.shared.getTeamLeaderPartner(teamid); let index = 1; for (const partner of partnerlist) { let bpartner = new BattleRole(); bpartner.pos = (team_players.length - count) + index; bpartner.setObj(partner); btlteam.push(bpartner); index++; } } } else { let brole = new BattleRole(); brole.pos = 1; brole.setObj(this); let petData = this.getBattlePet(6); if (petData.btlpet) { brole.bindid = petData.btlpet.onlyid; } btlteam.push(brole); btlteam = btlteam.concat(petData.pets); if (type == BattleType.Normal || type == BattleType.PK || type == BattleType.AREAN) { let partnerlist = this.getPartnerOnBattle(); let index = 1; for (const partner of partnerlist) { let bpartner = new BattleRole(); bpartner.pos = 1 + index; bpartner.setObj(partner); btlteam.push(bpartner); index++; } } } return btlteam; } forcedBattle(p1: any, battle: any) { if (this.teamid != 0) { let plist = TeamMgr.shared.getTeamPlayer(this.teamid); for (const pPlayer of plist) { if (pPlayer.pause == 1) { continue; } pPlayer.send('s2c_btl', { btlid: battle.battle_id, teamS: battle.getTeamData(2), teamE: battle.getTeamData(), }); pPlayer.battle_id = battle.battle_id; } } else { this.send('s2c_btl', { btlid: battle.battle_id, teamS: battle.getTeamData(2), teamE: battle.getTeamData(), }); this.battle_id = battle.battle_id; } } // type 0 正常 1 pk 2 切磋 playerBattle(onlyid: any, type = BattleType.Normal) { if (this.battle_id != 0 || this.onlyid == onlyid) { return null; } let p2 = PlayerMgr.shared.getPlayerByOnlyId(onlyid); if (p2 == null || p2.battle_id != 0) { return null; } if (this.teamid != 0 && this.isleader == false) { return null; } if (p2.teamid != 0 && this.teamid == p2.teamid) { return null; } if (type == BattleType.Force) { if (this.level < GameUtil.PKLevelLimit || p2.level < GameUtil.PKLevelLimit) { this.send('s2c_notice', { strRichText: '强制pk等级不足' + GameUtil.PKLevelLimit + '级!' }); return null; } let mapsi = GameUtil.cantPKMaps.indexOf(this.mapid); let mapti = GameUtil.cantPKMaps.indexOf(p2.mapid); if (mapsi != -1 || mapti != -1) { this.send('s2c_notice', { strRichText: '此处为安全区域,无法强制PK!' }); return null; } if (!this.bag_list[10003] || this.bag_list[10003] < 1) { this.send('s2c_notice', { strRichText: '夺命香数量不足!' }); return null; } this.bag_list[10003] -= 1; if (this.bag_list[10003] <= 0) { delete this.bag_list[10003]; } this.send('s2c_bagitem', { info: SKDataUtil.toJson(this.bag_list, "{}") }); console.log(`玩家[${this.name}${this.roleid}]消耗 夺命香 1 个`); } let t1 = this.getBattleTeam(type); let t2 = p2.getBattleTeam(type); let battle = BattleMgr.shared.createBattle(); battle.setBattleType(type); battle.setTeamBRole(t1, t2); battle.source = this.onlyid; let senddata = { btlid: battle.battle_id, teamS: battle.getTeamData(), teamE: battle.getTeamData(2), }; if (this.teamid != 0) { let plist = TeamMgr.shared.getTeamPlayer(this.teamid); for (const pPlayer of plist) { if (pPlayer.pause == 1) { continue; } pPlayer.battle_id = battle.battle_id; pPlayer.send('s2c_btl', senddata); pPlayer.synInfoToWatcher(); } } else { this.battle_id = battle.battle_id; this.send('s2c_btl', senddata); this.synInfoToWatcher(); } if (type != BattleType.AREAN) { p2.forcedBattle(this.onlyid, battle); } if (type == BattleType.Force) { //显示强制PK的 通知title this.send('s2c_pktitle', { info: '正在强制PK对方,您失败将扣除经验【2亿】,每次胜利将获赠一次监牢30分钟旅游的机会!' }); p2.send('s2c_pktitle', { info: '正在被对方强制PK,您失败将扣除经验【2亿】,战胜对方是不会进监牢的,加油干掉对面吧!' }); } setTimeout(() => { battle.begin(); }, 1 * 1000); return battle; } monsterBattle(mongroupid?: any, taskGrop?: number, battletype = BattleType.Normal, yewai = false) { if (this.battle_id != 0) return null; if (mongroupid == null || isNaN(mongroupid)) { mongroupid = 10048; } let mongroup = MonsterMgr.shared.getGroupData(mongroupid); if (mongroup == null) { return null; } let monsterlist = MonsterMgr.shared.getMonGroup(mongroupid); if (monsterlist == null) { return null; } if (this.teamid != 0 && this.isleader == false) { return null; } if (this.mapid == 1003) { //北俱芦洲 没有宝宝 yewai = false; } let t1 = this.getBattleTeam(mongroup.partner); let maxlevel = 0; for (let key in t1) { let player = t1[key]; if (!player.isPet()) { if (player.level > maxlevel) { maxlevel = player.level } } } let t2 = []; for (let i = 0; i < monsterlist.length; i++) { const monster = monsterlist[i]; let brole = new BattleRole(); brole.pos = parseInt(monster.pos); brole.setObj(monster); let lev = maxlevel - brole.level; if (lev > 0) { // brole.setAttr(EAttrTypeL1.HP, 1); // brole.setAttr(EAttrTypeL1.HP_MAX, 1); // brole.setAttr(EAttrTypeL1.ATK, 1); // brole.setAttr(EAttrTypeL1.SPD, 1); brole.setAttr(EAttrTypeL1.HP, brole.roleattr[EAttrTypeL1.HP] + Math.floor(brole.roleattr[EAttrTypeL1.HP] * (lev / 100))); brole.setAttr(EAttrTypeL1.HP_MAX, brole.roleattr[EAttrTypeL1.HP_MAX] + Math.floor(brole.roleattr[EAttrTypeL1.HP_MAX] * (lev / 100))); brole.setAttr(EAttrTypeL1.ATK, brole.roleattr[EAttrTypeL1.ATK] + Math.floor(brole.roleattr[EAttrTypeL1.ATK] * (lev / 100))); brole.setAttr(EAttrTypeL1.SPD, brole.roleattr[EAttrTypeL1.SPD] + Math.floor(brole.roleattr[EAttrTypeL1.SPD] * (lev / 100))); } t2.push(brole); } if (yewai && t2.length < 10) { let r = GameUtil.random(1, 10000); if (r < 10000) { let list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; for (const key in t2) { const brole = t2[key]; let t = list.indexOf(brole.pos); list.splice(t, 1); } if (list.length > 0) { let bb = MonsterMgr.shared.getRandomBB(); let brole = new BattleRole(); brole.is_bb = true; brole.pos = list[GameUtil.random(0, list.length - 1)]; brole.setObj(bb); t2.push(brole); } } } let battle = BattleMgr.shared.createBattle(); battle.setBattleType(battletype); battle.setTeamBRole(t1, t2); battle.monster_group_id = mongroupid; battle.taskGroup = taskGrop; let senddata = { btlid: battle.battle_id, teamS: battle.getTeamData(), teamE: battle.getTeamData(2), }; if (this.teamid != 0) { let plist = TeamMgr.shared.getTeamPlayer(this.teamid); for (const pPlayer of plist) { if (pPlayer.pause == 1) { continue; } pPlayer.battle_id = battle.battle_id; pPlayer.send('s2c_btl', senddata); pPlayer.synInfoToWatcher(); } } else { this.battle_id = battle.battle_id; this.send('s2c_btl', senddata); this.synInfoToWatcher(); } setTimeout(() => { battle.begin(); }, 1 * 1000); return battle; } // 战斗结束 exitBattle(iswin: any) { let battle = BattleMgr.shared.getBattle(this.battle_id); if (battle == null) { this.battle_id = 0; return; } if (battle.battle_type == BattleType.AREAN && iswin == 1) { this.send('s2c_btl_end', { btlid: this.battle_id, result: iswin, }); } else { this.send('s2c_btl_end', { btlid: this.battle_id, result: iswin, }); } // 奖励相关 let mgdata = MonsterMgr.shared.getGroupData(battle.monster_group_id); if (iswin == 1 && mgdata && battle.battle_type != BattleType.AREAN) { this.addExp(mgdata.exp); this.addMoney(0, mgdata.gold, '战斗奖励', MsgCode.SUCCESS); if (this.curPet) { this.curPet.addExp(mgdata.exp); } let itemlist = MonsterMgr.shared.makeGroupDrop(battle.monster_group_id); for (const iteminfo of itemlist) { this.addItem(iteminfo.itemid, iteminfo.itemnum, true, '战斗奖励'); } } // 任务相关 if (iswin == 1) { if (battle.battle_type == BattleType.Force && battle.source == this.onlyid) { if (this.teamid > 0) { let team_players = TeamMgr.shared.getTeamPlayer(this.teamid); // TeamMgr.shared.destroyTeam(this.teamid); for (let i = 0; i < team_players.length; i++) { const pPlayer = team_players[i]; pPlayer.shane += 1440 * 5; pPlayer.ShanEChange(); pPlayer.send('s2c_aoi_pinfo', { list: [this.toObj()] }); } } else { this.shane += 1440 * 5; this.ShanEChange(); this.send('s2c_aoi_pinfo', { list: [this.toObj()] }); this.send('s2c_notice', { strRichText: '恭喜您获得30分钟监牢旅游一次的机会,进入长安才会触发!' }); } // 杀人记录 this.syncMurder(battle); } if (battle.battle_type == BattleType.Normal) { let pNpc = NpcMgr.shared.findNpc(battle.source); if (pNpc) { this.OnKillNpc(pNpc.configid, pNpc.onlyid, battle); } } /* 胜利宠物加10点亲密值 */ if (this.teamid > 0) { let team_players = TeamMgr.shared.getTeamPlayer(this.teamid); for (let player of team_players) { if (player && player.curPet) { player.curPet.addqinmi(10); } } } else { if (this.curPet) { this.curPet.addqinmi(10); } } } else { // 战斗失败了 if (battle.battle_type == BattleType.Force && this.roleid) { if (this.teamid > 0) { let team_players = TeamMgr.shared.getTeamPlayer(this.teamid); for (let i = 0; i < team_players.length; i++) { const pPlayer = team_players[i]; pPlayer.addExp(-200000000); console.log(`队伍玩家[${pPlayer.name}${pPlayer.roleid}]被强制pk 扣除经验 2亿`); } } else { let pPlayer = PlayerMgr.shared.getPlayerByRoleId(this.roleid); pPlayer.addExp(-200000000); pPlayer.send('s2c_notice', { strRichText: '角色经验被扣除2亿' }); } } this.getTaskMgr().OnFailEvent(EEventType.PLAYER_DEAD, 0); let pNpc = NpcMgr.shared.findNpc(battle.source); if (pNpc) { // 天地星 World.shared.starMgr.ChallengeFail(pNpc.onlyid, battle); // 证道恶鬼 World.shared.magicWorldMgr.ChallengeFail(pNpc.onlyid, battle); // 海盗 World.shared.pirateMgr.ChallengeFail(pNpc.onlyid); } } // 水路大会 if (battle.battle_type == BattleType.ShuiLu) { let activity = ActivityMgr.shared.getActivity(ActivityDefine.activityKindID.ShuiLuDaHui); if (activity) { let matchteam = activity.getMatchTeamInfo(this.teamid); if (matchteam) { activity.battleEnd(this.teamid, iswin); } } } // 皇城pk else if (battle.battle_type == BattleType.PALACE) { if (iswin && ((this.teamid != 0 && this.isleader) || this.teamid == 0)) { PalaceFight.shared.pkWin(this.roleid); } } // 竞技场 else if (battle.battle_type == BattleType.AREAN) { let tcamp = battle.plist; let brole = PlayerMgr.shared.getPlayerByRoleId(this.roleid); for (let i in tcamp) { let trole = tcamp[i]; if (trole.onlyid != brole.onlyid) { if (trole.living_type == 1) { JingJiChang.shared.JingJiInfo(this.roleid, trole.onlyid, iswin); JingJiChang.shared.battleEnd(this.roleid, iswin, trole.onlyid); break; } } } } // 证道大会 else if (battle.battle_type == BattleType.Sat) { if (SatAssembly.shared.activity_state != ActivityDefine.activityState.Close) { let match_team = SatAssembly.shared.getMatchTeamInfo(this.teamid); if (match_team) { SatAssembly.shared.battleEnd(this.teamid, iswin); } } } // 帮战比武 else if (battle.battle_type == BattleType.FactionWarContest) { if (FactionWar.shared.activity_state != ActivityDefine.activityState.Close) { FactionWar.shared.contestResult(this, iswin); } } // 帮战战斗 else if (battle.battle_type == BattleType.FactionWarFight) { if (FactionWar.shared.activity_state != ActivityDefine.activityState.Close) { FactionWar.shared.fightResult(this, iswin, battle); } } this.battle_id = 0; this.synInfoToWatcher(); } // 杀人记录 syncMurder(battle: any) { // 死亡玩家编号数组 let list: any = []; for (let role of battle.campB.broles) { // 如果是玩家 并且死亡 if (role.living_type == 1) { if (role.source != null && role.source != undefined) { let data: any = { defier_role_id: this.roleid, by_defier_role_id: role.source.roleid, server_id: GameUtil.serverId }; PaiHangMgr.shared.updateMurderRankData(this.roleid, this.name, this.race, this.level, this.relive) list.push(data); } } } // 通过CXF 同步到数据库 console.log(`胜利玩家:${this.name}死亡玩家:${SKDataUtil.toJson(list, "[]")}`) SKCxfUtil.getCxfMurder(list); } ShanEChange() { let change = false; // 如果玩家牢狱时间小于=0 并且玩家在牢房,将其释放 if (this.mapid == 1201 && this.shane <= 0) { this.leavePrison(); this.send('s2c_prison_time', { onlyid: this.onlyid, time: 0 }); change = true; } // 如果玩家牢狱时间大于=0 并且玩家不在牢房,将其传送进牢房 if (this.mapid == 1011 && this.shane > 0) { this.enterPrison(); change = true; } if (this.shane != 0) { this.send('s2c_prison_time', { onlyid: this.onlyid, time: this.inPrison ? Math.ceil(this.shane / 4) : -1 }); } // 更新监牢犯人数据 PaiHangMgr.shared.updateDaysPrisonerData(this.roleid, this.name, this.race, this.level, this.relive, this.shane); return change; } getWorldStar() { return this.star; } OnKillNpc(nConfigID: any, nOnlyID: any, battle: any = null) { let pNpc = NpcMgr.shared.findNpc(nOnlyID); if (null == pNpc) return; let pConfig = NpcConfigMgr.shared.getConfig(nConfigID); if (null == pConfig) return; this.getTaskMgr().onGameEvent(EEventType.PLAYER_KILL_NPC, nOnlyID); if (pNpc.stCreater.nKind != ENpcCreater.SYSTEM) { NpcMgr.shared.CheckAndDeleteNpc(nOnlyID, this); } if (World.shared.starMgr.IsStar(nOnlyID)) { this.star++; } // 天地星 World.shared.OnKillNpc(this.accountid, nOnlyID, battle); // 天元盛典 DWorld.shared.OnKillNpc(this.accountid, nOnlyID); } // 加入到装备列表 addEquipList(value: Equip) { this.listEquips.push(value); } // 加入到法宝列表 addMagicWeaponList(value: MagicWeapon) { this.listMagicWeapons.push(value); } playerRelive(data: any) { let nextlive = this.relive + 1; let relivedata = GameUtil.reliveLimit[nextlive]; if (relivedata == null) { this.send('s2c_relive', { result: MsgCode.FAILED, info: this.toObj(), data: this.getData() }); return; } if (this.level < relivedata.level) { return; } //处理装备 for (const equip of this.currentEquips) { this.addEquipList(equip); } this.currentEquips = []; this.sendEquipList(); this.schemeMgr.reset(); this.changeWeapon(null); //清理加点 for (const key in this.addattr2) { this.addattr2[key] = 0; } this.relivelist[this.relive] = [this.race, this.sex]; this.relive = nextlive; this.resid = data.resid; this.race = SKDataUtil.clamp(data.race, ERaceType.HUMEN, ERaceType.DRAGON); this.sex = data.sex; this.setLevel(relivedata.tolevel); this.resetSkill(); this.addExp(0); this.calculateAttr(); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player.bangid > 0) { let bang = BangMgr.shared.getBang(player.bangid) if (bang) { for (const roleInfo of bang.rolelist) { if (player.roleid == roleInfo.roleid) { roleInfo.resid = player.resid; roleInfo.race = player.race; roleInfo.relive = player.relive; roleInfo.level = player.level; roleInfo.sex = player.sex; } } } } this.send('s2c_relive', { result: MsgCode.SUCCESS, info: this.toObj(), data: this.getData() }); // 更新红名榜数据 PaiHangMgr.shared.updateMurderRankDataInfo(this.roleid, this.name, this.race, this.level, this.relive); //cxf玩家转生 SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.EXP, operateDepict: "玩家转生", operateResSerial: "", operateResName: "", operateContent: `${this.name}]转生后:[${this.relive}转,${this.level}级]` }) } playerFlyUp(data: any) { if (this.relive != 3) { this.send('s2c_notice', { strRichText: `你才{${this.relive}}转,需要3转180级后才可以飞升` }); return; } let nextlive = this.relive + 1; let relivedata = GameUtil.reliveLimit[nextlive]; if (relivedata == null) { this.send('s2c_notice', { strRichText: `没有开放飞升配置,请稍候重试!` }); return; } if (this.level < relivedata.level) { this.send('s2c_notice', { strRichText: `需要达到等级:${relivedata.level}才可以飞升!` }); return; } //处理装备 for (const equip of this.currentEquips) { this.addEquipList(equip); } this.currentEquips = []; this.sendEquipList(); this.changeWeapon(null); //清理加点 for (const key in this.addattr2) { this.addattr2[key] = 0; } this.relivelist[this.relive] = [this.race, this.sex]; this.relive = nextlive; this.setLevel(relivedata.tolevel); this.resetSkill(); this.addExp(0); this.calculateAttr(); this.send('s2c_relive', { result: MsgCode.SUCCESS, info: this.toObj(), data: this.getData() }); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); } // 玩家改变种族 playerChangeRace(data: any) { if (this.jade < 300) { this.send('s2c_notice', { strRichText: '仙玉不足' }); return; } this.addMoney(1, -300, `玩家[${this.roleid}:${this.name}]改变种族`, MsgCode.SUCCESS); for (let equip of this.currentEquips) { this.addEquipList(equip); equip.pos = EEquipPos.BAG } this.currentEquips = []; this.sendEquipList(); this.changeWeapon(null); this.resid = data.resid; this.race = RoleUtil.checkRace(data.race, data.resid); this.sex = RoleUtil.checkSex(data.sex, data.resid); //重置加点 this.addattr2[EAttrTypeL2.GENGU] = 0; this.addattr2[EAttrTypeL2.LINGXING] = 0; this.addattr2[EAttrTypeL2.MINJIE] = 0; this.addattr2[EAttrTypeL2.LILIANG] = 0; this.addXiulianPoint({ type: 0 }) this.setRoleColor(this.color_one_serial, this.color_two_serial); this.resetSkill(); this.addExp(0); this.calculateAttr(); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); this.horseList.changeRace(this.race); let params = { result: MsgCode.SUCCESS, info: this.toObj(), data: this.getData() }; this.send("s2c_changerace", params); this.syncChangeRace(); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player.bangid > 0) { let bang = BangMgr.shared.getBang(player.bangid) if (bang) { for (const roleInfo of bang.rolelist) { if (player.roleid == roleInfo.roleid) { roleInfo.resid = player.resid; roleInfo.race = player.race; roleInfo.sex = player.sex; } } } } } // 同步种族改变 syncChangeRace() { let playerList = this.getWatcherPlayer(); if (playerList) { for (let key in playerList) { let player = playerList[key]; if (player.isPlayer()) { player.send('s2c_sync_race', { info: this.toObj(), data: this.getData() }); } } } } /** * 修改角色名称 * @param data */ playerChangeName(data: any) { if (this.jade < 600) { this.send('s2c_notice', { strRichText: '仙玉不足' }); return; } if (!GameUtil.checkLimitWord(data.name)) { this.send_notice("再想一个独一无二的名字吧,仙玉未扣除!"); return; } let rag = /[\u4e00-\u9fa5a-zA-Z]{3,5}$/; if (rag.test(data.name) == false) { this.send_notice("名字不符合规则(3~5个中文字符)"); return; } let callback = (ret: any) => { if (ret == MsgCode.SUCCESS) { this.addMoney(1, -600, '玩家改变名字', MsgCode.SUCCESS); this.send_notice("改名成功,西游欢迎您重新归来!"); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PLAYER, operateDepict: "玩家改名", operateResSerial: this.roleid, operateResName: player.name, operateContent: "" }) } this.name = data.name; if (this.bangid > 0) { let bang = BangMgr.shared.getBang(this.bangid) if (bang) { if (bang.masterid == this.roleid) { bang.mastername = this.name; } for (const roleInfo of bang.rolelist) { if (this.roleid == roleInfo.roleid) { roleInfo.name = this.name; break; } } } } // 更新红名榜数据 PaiHangMgr.shared.updateMurderRankDataInfo(this.roleid, this.name, this.race, this.level, this.relive); this.send('s2c_aoi_pinfo', { list: [this.toObj()] }); this.synInfoToWatcher(); } else { this.send_notice("再想一个独一无二的名字吧,仙玉未扣除!"); } callback = null; } DB.changeName(data, callback); } /** * 修改宠物名字 * @param data */ playerChangePetName(data: any) { if (this.jade < 600) { this.send_notice("仙玉不足"); return; } if (!GameUtil.checkLimitWord(data.name)) { this.send_notice("再想一个独一无二的名字吧,仙玉未扣除!"); return; } let rag = /^[\u4e00-\u9fa5]{3,5}$/; if (rag.test(data.name) == false) { this.send_notice("名字不符合规则(3~5个中文字符)"); return; } let callback = (ret: any) => { if (ret == MsgCode.SUCCESS) { this.addMoney(1, -600, '宠物改变名字', MsgCode.SUCCESS); this.send_notice("改名成功!"); let operationPet = null; for (const pet of this.petList) { if (pet.petid == data.petId) { operationPet = pet; break; } } operationPet.playerChangePetName(data.name); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物改名", operateResSerial: operationPet.petid, operateResName: operationPet.name, operateContent: "" }) } } else { this.send_notice("修改失败!"); } callback = null; } // 如果在队伍刷新宠物名称 this.refresh_team_data(); DB.changePetName(data, callback); } resetPoint() { //重置加点 this.resetRolePoint(); this.sendEquipList(); this.calculateAttr(); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); this.currentEquips = []; //this.send('s2c_player_data', this.getData()); this.send('s2c_notice', { strRichText: '角色加点重置成功!' }); } sendReliveList() { this.send('s2c_relive_list', { strJson: SKDataUtil.toJson(this.relivelist, "[]") }); } changeReliveList(data: any) { if (this.getBagItemNum(10201) <= 0) { this.send('s2c_notice', { strRichText: '回梦丹不足' }); return; } this.addItem(10201, -1, false, '转生修正消耗'); let vecLiveInfo = SKDataUtil.jsonBy(data.strJson); if (vecLiveInfo.length != 4) return; this.relivelist = []; for (var nLive in vecLiveInfo) { let stLive = vecLiveInfo[nLive]; let vecInfo = [GameUtil.getDefault(stLive.nRace, 0), GameUtil.getDefault(stLive.nSex, 0)]; this.relivelist.push(vecInfo); } this.calculateAttr(); this.send('s2c_player_data', this.getData()); //检查变身卡效果 ChangeCard.shared.checkCard(this.roleid); this.send('s2c_notice', { strRichText: '修改成功' }); } getWatcherPlayer() { let pMap = MapMgr.shared.getMap(this); if (pMap == null) return; return pMap.getWatcher(this.onlyid); } synPosToWatcher() { let mPlayers = this.getWatcherPlayer(); if (mPlayers) { mPlayers[this.onlyid] = this; for (const key in mPlayers) { let p = mPlayers[key]; if (p.isPlayer()) p.send('s2c_player_pos', { onlyid: this.onlyid, x: this.x, y: this.y }); } } } addShuiluScore(jifen: any, gongji: any, iswin: any) { this.shuilu.gongji += parseInt(gongji); this.shuilu.score += parseInt(jifen); if (iswin == 1) { this.shuilu.wtime++; } else { this.shuilu.ltime++; } } addJingjiScore(jpoint: any, jtime: any) { this.arena.jpoint += parseInt(jpoint); this.arena.jtime += parseInt(jtime); } synInfoToWatcher() { let mPlayers = this.getWatcherPlayer(); if (mPlayers) { for (const key in mPlayers) { let p = mPlayers[key]; if (p.isPlayer()) p.send('s2c_aoi_pinfo', { list: [this.toObj()] }); } } } /* * 充值奖励 */ chargeReward(data: any) { let rewardid = data.rewardid; let choose_item = null; let num = 1 << (rewardid - 1); if ((num & this.rewardrecord) != 0) { this.send_notice("你已领过该阶段的奖励了"); return; } let list = ChargeConfig.shared.reward_list; for (let item of list) { if (item.id == rewardid) { choose_item = item; break; } } let chargesum = ChargeSum.shared.getPlayerChargeSum(this.roleid); if (!choose_item || chargesum < choose_item.money) { this.send_notice("你的充值积分不够"); this.send("s2c_charge_reward", { flag: MsgCode.FAILED }); return; } this.send("s2c_charge_reward", { flag: MsgCode.SUCCESS }); for (let item of choose_item.reward) { this.addItem(item.gid, item.count, true, '充值奖励'); } this.rewardrecord |= num; this.send('s2c_player_data', this.getData()); } /* * 充值奖励 */ spChargeReward(data: any) { let rewardid = data.rewardid; let choose_item = null; let num = 1 << (rewardid - 1); if ((num & this.sprewardrecord) != 0) { this.send_notice("你已领过该阶段的奖励了"); return; } let list = ChargeConfig.shared.spreward_list; for (let item of list) { if (item.id == rewardid) { choose_item = item; break; } } let chargesum = ChargeSum.shared.getPlayerChargeSum(this.roleid); if (!choose_item || chargesum < choose_item.money) { this.send_notice("你的充值积分不够"); this.send("s2c_charge_reward", { flag: MsgCode.FAILED }); return; } this.send("s2c_charge_reward", { flag: MsgCode.SUCCESS }); for (let item of choose_item.reward) { this.addItem(item.gid, item.count, true, '充值奖励'); } this.sprewardrecord |= num; this.send('s2c_player_data', this.getData()); } // 领取首充奖励 reGetGift() { if (this.getgift == 0) { return MsgCode.GIFT_HAS_GOT; } let conf = GameUtil.game_conf.firstCharge; if (conf) { let message = ``; for (let item of conf) { message += `物品:${item.name},数量:${item.count}、`; this.addItem(item.prop, item.count, false, "首充奖励") } SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "首充奖励", operateResSerial: "", operateResName: "", operateContent: message }) } this.getgift = 0; return MsgCode.SUCCESS; } getBang() { if (this.bangid == 0) { return null; } return BangMgr.shared.getBang(this.bangid); } // 称谓相关 addTitle(type: any, titleId: any, value = '', onload = false) { let titlesList = this.getTitleItemByTitleId(type, titleId, value) if (titlesList.length <= 0) { //添加称谓 let title = { "type": type, "titleid": titleId, "value": value, "onload": onload } this.titles.push(title); } } delTitle(type: any, titleId: any, value = '') { let delIndex = -1; let delItem = this.titles.find((e: any, index: any): boolean => { if (e.type == type && e.titleid == titleId && e.value == value) { delIndex = index; return true; } return false; }); if (delIndex >= 0 && delItem) { if (delItem.onload) { this.titleId = -1; this.titleType = -1; this.titleVal = ''; } this.titles.splice(delIndex, 1); } } getTitles() { this.send('s2c_title_info', { titles: SKDataUtil.toJson(this.titles, "{}"), }); } //通过titleID获取title信息 getTitleItemByTitleId(type: any, titleId: any, value: any): any { return this.titles.filter((e: any) => { if (e.type == type && e.titleid == titleId && e.value == value) { return true; } return false; }); } changeTitle(data: any) { if (data.operatetype == 1) { let res = this.titles.some((e: any) => { e.onload = false; return true; }); if (res) { this.titleId = -1; this.titleType = -1; this.titleVal = ''; this.onLoad = false; this.send('s2c_title_change', { ecode: MsgCode.SUCCESS, titleid: 0, type: -1, value: '', operatetype: data.operatetype }); } return; } else { this.titles.forEach((e: any) => { if (e.type == data.type && e.titleid == data.titleid) { if ((data.type == GameUtil.titleType.BroTitle || data.type == GameUtil.titleType.CoupleTitle) && e.value == data.value) { e.onload = !e.onload; this.onLoad = true; this.titleVal = e.value; } else { this.onLoad = false; e.onload = !e.onload; this.titleVal = ''; } this.titleId = e.titleid; this.titleType = e.type; } }); this.send('s2c_title_change', { ecode: MsgCode.SUCCESS, title: this.titles, titleid: this.titleId, type: this.titleType, value: this.titleVal, operatetype: data.operatetype }); } } /* * 是否能进行皇城pk */ canPalaceFight() { return (this.mapid == 1206 && this.battle_id == 0); } getIsOnline() { return !this.offline; } //变身 shapeshift(data: any) { } setRoleColor(index1: any, index2: any) { let rolecolor = GameUtil.require_ex('../../conf/prop_data/prop_rolecolor.json'); if (!rolecolor[this.resid]) { SKLogger.debug(`prop_rolecolor 未找到${this.resid}`); return; } let data1, data2; let canset = true; if (index1 != 0) { data1 = rolecolor[this.resid]['color1_' + index1]; if (data1 && parseInt(data1.color, 16) != this.color1) { if (!this.bag_list[data1.itemid] || this.bag_list[data1.itemid] < data1.count) { canset = false; } } } if (index2 != 0) { data2 = rolecolor[this.resid]['color2_' + index2]; if (data2 && parseInt(data2.color, 16) != this.color2) { if (!this.bag_list[data2.itemid] || this.bag_list[data2.itemid] < data2.count) { canset = false; } } } if (canset) { if (data1) { this.update_bagitem({ itemid: data1.itemid, count: data1.count, operation: 0, }); this.color1 = parseInt(data1.color, 16); } else { this.color1 = 0; } if (data2) { this.update_bagitem({ itemid: data2.itemid, count: data2.count, operation: 0, }); this.color2 = parseInt(data2.color, 16); } else { this.color2 = 0; } SKLogger.debug(`玩家${this.roleid}成功的进行了染色color1:${this.color1},color2:${this.color2}`); this.send('s2c_change_role_color', { color1: this.color1, color2: this.color2, }); this.send('s2c_notice', { strRichText: '玩家染色成功' }); // 更新染色部位 this.color_one_serial = index1; this.color_two_serial = index2; } } clone() { let p: any = new Player(); for (const key in this) { if (this.hasOwnProperty(key)) { const info = this[key]; p[key] = info; } } p.accountid = -1; p.roleid = -1; return p; } /* * 消耗铃铛进行世界广播 */ costBell(str: any) { let bell_count = this.getBagItemNum(10205); if (bell_count <= 0) { return; } this.update_bagitem({ operation: 0, count: 1, itemid: 10205, }); PlayerMgr.shared.broadcast('s2c_bell_msg', { msg: str, name: this.name, roleid: this.roleid, }); } /* * 设置玩家安全锁密码 */ setSafePassword(pass: any, lock: any) { this.safe_password = pass; this.safe_lock = lock; let safecode = this.safe_lock + ':' + this.safe_password; DB.setSafecode(this.accountid, safecode, (ret: any) => { if (ret == MsgCode.SUCCESS) { this.send('s2c_safepass_msg', { pass: this.safe_password, lock: this.safe_lock, }); } else { this.safe_password = ''; this.safe_lock = 0; } }); } // 骑乘 ride(horseIndex: number) { if (this.horseList.horseIndex == horseIndex) { return; } this.horseList.horseIndex = horseIndex; this.syncRide(horseIndex); } syncRide(horseIndex: number) { let playerList = this.getWatcherPlayer(); if (playerList) { for (const key in playerList) { let player = playerList[key]; if (player.isPlayer()) { player.send("s2c_sync_ride", { onlyId: this.onlyid, horseIndex: horseIndex, }); } } } } // 下马 get_down() { if (this.horseList.horseIndex == 0) { return; } this.horseList.horseIndex = 0; this.syncGetDown(); } // 同步下马 syncGetDown() { let mPlayers = this.getWatcherPlayer(); if (mPlayers) { for (const key in mPlayers) { let p = mPlayers[key]; if (p.isPlayer()) { p.send('s2c_sync_get_down', { onlyId: this.onlyid, }); } } } } // 升级坐骑 upgradeHorse(data: any) { this.horseList.addExp(data.itemId, data.horseIndex); } // 召唤兽管制改变 petControl(data: any) { let petid = data.petid; let control = SKDataUtil.clamp(data.control, 0, 4); for (let pet of this.petList) { if (pet.petid == petid) { if (pet.control == control) { return; } pet.control = control; SKLogger.debug(`玩家[${this.roleid}:${this.name}]召唤兽[${pet.name}]管制改变:${control}`); pet.calculateAttribute(); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: player.name, operateType: Operate.PET, operateDepict: "宠物管制", operateResSerial: pet.petid, operateResName: pet.name, operateContent: "" }) } this.getPetlist(); return; } } SKLogger.warn(`玩家[${this.roleid}:${this.name}]召唤兽管制找不到:${petid}:${control}`); } // 更新召唤兽管制属性 updatePetControl(control: number) { let hasChange = false; for (let pet of this.petList) { if (pet.control == control) { hasChange = true; pet.calculateAttribute(); SKLogger.debug(`玩家[${this.name}(${this.roleid})]召唤兽[${pet.name}管制更新属性:${control}`) } } if (hasChange) { this.getPetlist(); } } //召唤兽天策符属性 petOfudaAttr(skill: SkillBase, addition: number, pet: any) { let level = 0; let bang = BangMgr.shared.getBang(this.bangid); if (bang) { let list = bang.rolelist; for (let key in list) { if (this.roleid == list[key].roleid) { level = list[key].ofudalevel; break; } } } if (pet != null) { return pet.checkOfudaSkill(skill, addition, level); } else { return 0; } } getPlayerInfoById() { let fp = FivePhases.shared.getFivePhasesByRoleid(this.roleid); let effid = SpecialEffect.shared.getSuiEffect(this.roleid); let effectid = 0; let oflevel = 0; let score = 0; if (effid > 0) { effectid = effid; } let bang = BangMgr.shared.getBang(this.bangid); if (bang) { let list = bang.rolelist; for (let key in list) { if (this.roleid == list[key].roleid) { oflevel = list[key].ofudalevel; break; } } } //如果是龙族就去掉逆鳞技能 if (this.race == 5) { delete this.skill_list[1045] } let listInfo = []; for (let equip of this.currentEquips) { let full = equip.getFullData(); if (full) { score += Number(full.BaseScore); let equip: Equip = this.equipObjs[full.EquipID]; listInfo.push(equip.toObj()); } } let petInfo = []; for (let pet of this.petList) { petInfo.push(pet.toObj()) } let obj = { roleid: this.roleid, name: this.name, resid: this.resid, race: this.race, sex: this.sex, relive: this.relive, level: this.level, xiulevel: this.xiulevel, bangname: this.bangname, score: score, color1: this.color1, color2: this.color2, wingId: this.wingId, effectlist: SKDataUtil.toJson(SpecialEffect.shared.getUseingEffect(this.roleid), "{}"), effectid: effectid, weapon: this.getWeapon(), oflevel: oflevel, fplevel: fp == null ? 0 : fp.fplevel, jin: fp == null ? 0 : fp.jinlevel, mu: fp == null ? 0 : fp.mulevel, shui: fp == null ? 0 : fp.shuilevel, huo: fp == null ? 0 : fp.huolevel, tu: fp == null ? 0 : fp.tulevel, skill: SKDataUtil.toJson(this.skill_list, "{}"), currentEquips: SKDataUtil.toJson(listInfo, "{}"), petInfo: SKDataUtil.toJson(petInfo, "{}"), } return obj; } /** * 分享世界 * 获取道具信息 * type 1:装备,2:道具,3:宠物,4:坐骑,5:称谓 */ goodsInfo(data: any) { if (data.type == 1) { // 装备信息 let callback = (ret: any, item: any) => { if (ret == MsgCode.SUCCESS) { item = item[0]; let player = PlayerMgr.shared.getPlayerByRoleId(item.roleid); let obj: any = {}; // 判断玩家是否在线(查数据库) if (player.offline) { let equipdata: any = EquipMgr.shared.getEquipData({ resid: item.Type, type: item.EquipType }); if (equipdata == null) { SKLogger.warn(`装备[${item.EquipID}:${this.name}]完整信息为空!`); this.send_notice(`获取信息失败!`); return; } obj.EquipID = item.EquipID; obj.EquipType = item.EquipType; obj.BaseAttr = SKDataUtil.toJson(item.BaseAttr, "{}"); obj.BaseScore = equipdata.BaseScore; obj.EDesc = equipdata.EDesc; obj.Detail = equipdata.Detail; obj.Dynamic = equipdata.Dynamic; obj.Grade = item.Grade; obj.EIndex = item.EIndex; obj.JiLv = equipdata.JiLv; obj.MaxEmbedGemCnt = equipdata.MaxEmbedGemCnt; obj.MaxEndure = equipdata.MaxEndure; obj.EName = equipdata.EName; obj.NeedGrade = equipdata.NeedGrade; obj.NeedRei = equipdata.NeedRei; obj.NextType = equipdata.NextType; obj.Overlap = equipdata.Overlap; obj.Quan = equipdata.Quan; obj.Race = equipdata.Race; obj.Rarity = equipdata.Rarity; obj.RndRange = equipdata.RndRange; obj.RndWeight = equipdata.RndWeight; obj.Sex = equipdata.Sex; obj.Shape = equipdata.Shape; obj.Shuxingxuqiu = SKDataUtil.toJson(item.Shuxingxuqiu, "{}"); obj.Type = item.Type; obj.GemCnt = item.GemCnt; obj.LianhuaAttr = SKDataUtil.toJson(item.LianhuaAttr, "{}"); obj.OwnerRoleId = equipdata.OwnerRoleId; obj.refine = SKDataUtil.toJson(item.refine, "{}"); obj.recast = SKDataUtil.toJson(item.recast, "{}"); } else { // 在线则查缓存中的数据 let equip: Equip = player.equipObjs[item.EquipID]; if (equip != null && equip != undefined) { obj = equip.toObj(); } else { this.send_notice(`获取信息失败!`); return; } } obj.name = item.name; obj.roleid = item.roleid; this.send('s2s_goods_info', { type: data.type, info: SKDataUtil.toJson(obj, "{}") }); } else { this.send_notice(`获取信息失败!`); } callback = null; } DB.equipInfo(data, callback); } else if (data.type == 3) { // 宠物信息 let callback = (ret: any, item: any) => { if (ret == MsgCode.SUCCESS) { let obj: any = item[0]; if (obj) { let player = PlayerMgr.shared.getPlayerByRoleId(obj.roleid); // 判断玩家是否在线(查数据库) if (player == null || player == undefined) { DB.loginByRoleid(obj.roleid, (code: any, info: any) => { let pet: any = new Pet(obj.dataid); let player = new Player(); player.setDB(info); pet.setDB(obj); pet.setOwner(player) // 坐骑 player.horseList.setDB(info.horseRows); player.horseList.horseIndex = SKDataUtil.clamp(info.horse_index, ERaceType.HUMEN, ERaceType.DRAGON); // 坐骑技能 player.horseSkill.setDB(info.horseSkillRows); // 发送前端 this.sendPetInfo(pet, item[0], data.type, obj.PetName, player.horseSkill.getList(obj.control)); }); } else { // 在线则查缓存中的数据 let arr = player.petList; let pet = arr.find(function (pet) { return pet.petid === Number(data.id) }) // 发送前端 this.sendPetInfo(pet, item[0], data.type, obj.PetName, this.horseSkill.getList(pet.control)); } } else { this.send_notice(`获取信息失败!`); } } else { this.send_notice(`获取信息失败!`); } callback = null; } DB.petInfo(data, callback); } else if (data.type == 2 || data.type == 5 || data.type == 6) { // 道具信息 let obj: any = {}; obj.id = data.id this.send('s2s_goods_info', { type: data.type, info: JSON.stringify(obj) }); } // 查询队伍信息 else if (data.type == 9) { this.send('s2s_goods_info', { type: data.type, info: SKDataUtil.toJson(TeamMgr.shared.teamListInfo(data.id), "{}") }); } else { this.send_notice(`该道具查询未生效!`); return; } } /** * 发送宠物详情 * @param pet 宠物信息 * @param item 角色信息 * @param type 返回类型 * @param petName 角色名称 * @param horseSkill 坐骑技能 */ sendPetInfo(pet: any, item: any, type: number, petName: string, horseSkill: any) { let obj = pet.toObj(); obj.PetName = petName; obj.name = item.name; obj.roleid = item.roleid; obj.horseSkill = horseSkill; this.send('s2s_goods_info', { type: type, info: SKDataUtil.toJson(obj, "{}") }); } //检查是否可以兑换 checkExchange(code: any) { if (this.exchange.hasCode(code)) { this.send_notice(`您的兑换码[${code}]已经兑换过了!`); return; } this.exchange.checkCode(code, this); } // 获得坐骑技能列表 getHorseSkill() { let params = this.horseSkill.toObj(); this.send('s2c_horse_skill', params); } // 升级坐骑技能 upgradeHorseSkill(data: any) { let skill = this.horseSkill.getSkill(data.position); if (skill == null) { return; } let exp = SKDataUtil.clamp(skill.exp + 150, 0, 20000); if (skill.exp >= exp) { this.send('s2c_notice', { strRichText: `坐骑技能[${skill.skill_name}]熟练度已升满!` }); return; } let itemData = ItemUtil.getItemData(GameUtil.horseSkillUpItemId); let count = ItemUtil.getBagItemCount(this, itemData.id); if (count < 3) { this.send('s2c_notice', { strRichText: `您需要至少3个[${itemData.name}]才能升级坐骑技能!` }); return; } let old = skill.exp; skill.exp = exp; this.addItem(itemData.id, -3, false, "升级坐骑技能"); SKLogger.debug(`玩家[${this.roleid}:${this.name}]坐骑技能[${skill.skill_name}]升级经验:${old}->${skill.exp}`); let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid); if (player) { //cxf坐骑技能升级 SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.HORSE, operateDepict: "坐骑技能升级", operateResSerial: skill.skill_id, operateResName: skill.skill_name, operateContent: "" }) } this.updatePetControl(Math.floor(data.position / 3) + 1); let params = this.horseSkill.toObj(); this.send("s2c_horse_skill", params); } // 坐骑洗炼 horseRefining(data: any) { this.horseSkill.refining(data); } // 领取每日充值奖励 dayReward(data: any) { let key = data.money; let receive = (this.dayMap[`day_${key}`] || 0); if (receive > 0) { this.send('s2c_notice', { strRichText: `您已领取每日充值${key}元奖励!` }); return; } if ((this.getBagItemAllKindNum() + 4) >= this.bagKindNum) { this.send('s2c_notice', { strRichText: `背包没有足够的空间,无法领取每日充值${key}元奖励!` }); return; } let reward = ChargeSum.shared.dayReward[key]; let message = ``; for (let item of reward) { message += `物品:${item.item_name},数量:${item.count}、`; this.addItem(item.item_id, item.count, true, `每日充值${key}元奖励`); } this.dayMap[`day_${key}`] = 1; this.send(`s2c_day_reward`, { dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); SKCxfUtil.getCxfRecordOperate({ roleId: this.roleid, roleName: this.name, operateType: Operate.ITEM, operateDepict: "每日充值奖励", operateResSerial: "", operateResName: "", operateContent: message }) } //新用户绑定 roleBinding(bPlayer: any) { let list = PaiHangMgr.shared.bind_player_list; for (let key in list) { let bplayer = list[key]; if (this.roleid == bplayer.roleid) { this.send_notice("您已经绑定过玩家了!"); return; } } PaiHangMgr.shared.bind_player_list.push({ roleid: this.roleid, name: this.name, resid: this.resid, relive: this.relive, level: this.level, bind_roleid: bPlayer.roleid, bind_name: bPlayer.name, bind_resid: bPlayer.resid, bind_relive: bPlayer.relive, bind_level: bPlayer.level }) let sql = `INSERT INTO qy_binding(roleid, name, resid, relive, level, bind_roleid, bind_name, bind_resid, bind_relive, bind_level) VALUES(${this.roleid},'${this.name}',${this.resid},${this.relive},${this.level},${bPlayer.roleid},'${bPlayer.name}',${bPlayer.resid},${bPlayer.relive},${bPlayer.level});`; DB.query(sql, (error: any, rows: any) => { if (error) { let info = DB.errorInfo(error); SKLogger.warn(`数据插入错误[${info}]`); return; } if (rows.length == 0) { return; } }) this.send('s2c_notice', { strRichText: `绑定成功!` }) } // 领取VIP每日奖励 vipReward(data: any) { let type = data.type; let vipLevel = data.vipLevel; let chargeSum = ChargeSum.shared.getPlayerChargeSum(this.roleid); let myVip = VIPUtil.getVipLevel(chargeSum); if (vipLevel > myVip) { this.send('s2c_notice', { strRichText: `您不能领取高于自己VIP${vipLevel}每日奖励!` }); return; } let receive = (this.dayMap[`vip_${vipLevel}`] || 0); if (receive > 0) { this.send('s2c_notice', { strRichText: `您已领取VIP${vipLevel}每日奖励!` }); return; } if ((this.getBagItemAllKindNum() + 4) >= this.bagKindNum) { this.send('s2c_notice', { strRichText: `背包没有足够的空间,无法领取VIP${vipLevel}每日奖励!` }); return; } let reward = VIPUtil.getVipReward(vipLevel); if (reward == null) { this.send('s2c_notice', { strRichText: `奖励物品错误,无法领取VIP${vipLevel}每日奖励!` }); return; } for (let itemData of reward) { this.addItem(itemData.id, itemData.count, true, `VIP${vipLevel}每日奖励`); } this.dayMap[`vip_${vipLevel}`] = 1; this.send(`s2c_vip_reward`, { dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); } // 挖宝列表 dugList(data: any) { let type = data.type; let dug = this.dayMap[`dug_${type}`]; if (!DugMgr.enabled) { this.send('s2c_notice', { strRichText: `今日挖宝活动已关闭,何时开启另行通知!`, }); if (dug == null) { this.dayMap[`dug_${type}`] = DugMgr.shared.update(type); } this.send(`s2c_dug_list`, { dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); return; }; if (dug == null) { this.dayMap[`dug_${type}`] = DugMgr.shared.update(type); } else { let count = (dug.count != null ? dug.count : -1); if (count < 0) { // 10万仙玉刷新 let updateJade = DugMgr.updateJade; if (this.jade < updateJade) { this.send('s2c_notice', { strRichText: `挖宝刷新需要消耗${this.jade}仙玉不足`, }); } else { this.addMoney(GameUtil.goldKind.Jade, -100000, `挖宝刷新消耗仙玉${updateJade}`, MsgCode.SUCCESS); this.dayMap[`dug_${type}`] = DugMgr.shared.update(type); } } } this.send(`s2c_dug_list`, { dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); } // 开挖 dug(data: any) { let index = data.index; if (!DugMgr.enabled) { this.send('s2c_notice', { strRichText: `今日挖宝活动已关闭,何时开启另行通知!`, }); this.send(`s2c_dug`, { state: 0, index: index }); return; }; let type = data.type; let dug = this.dayMap[`dug_${type}`]; if (dug == null) { return; } if (index == -1) { this.dayMap[`dug_${type}`] = DugMgr.shared.start(dug); this.send(`s2c_dug_list`, { dayMap: SKDataUtil.toJson(this.dayMap, "{}") }); } else { // 已挖处理 if (dug.list[index].done == 1) { this.send('s2c_notice', { strRichText: `您第${dug.count + 1}次挖宝奖励已挖!`, }); return; } // 扣除仙玉 let reward = dug.list[index]; let itemData = ItemUtil.getItemData(reward.item_id); if (itemData == null) { this.send_notice(`您第${dug.count + 1}次挖宝奖励不存在!`); this.send(`s2c_dug`, { state: 0, index: index }); return; } let jade = DugMgr.shared.getJade(dug.count); if (this.jade < jade) { this.send_notice(`您第${dug.count + 1}次挖宝消耗仙玉${jade}不足`); this.send(`s2c_dug`, { state: 0, index: index }); return; } this.addMoney(GameUtil.goldKind.Jade, -jade, `您第${dug.count + 1}次挖宝消耗仙玉${jade}`, MsgCode.SUCCESS); dug.count = dug.count + 1; dug.list[index].done = 1; this.addItem(reward.item_id, reward.count, true, `挖宝奖励`); SKLogger.info(`玩家[${this.roleid}:${this.name}]第${dug.count + 1}次挖宝消耗仙玉${jade},获得奖励[${itemData.name}]${reward.count}个`); this.send(`s2c_dug`, { state: 1, index: index }); } } // ------------------------------------------------------- 公共方法 --------------------------------------------------- /** * 发送信息 * @param msg 内容 */ send_notice(msg: string) { this.send('s2c_notice', { strRichText: msg, }); } /** * 发送信息 - 信息 * @param msg 内容 */ send_message(msg: string) { this.send('s2c_game_chat', { scale: 7, msg: msg, name: '', resid: 0, teamid: 0, }); } /** * 跳转地图 * @param id 地图编号 */ map_transfer(id: any, coordx: number = 0, coordy: number = 0) { this.send('s2c_map_transfer', { mapId: id, coordx: coordx, coordy: coordy, }); } /** * 刷新队伍信息 */ refresh_team_data() { // 判断玩家是否在队伍中 if (this.teamid > 0) { TeamMgr.shared.sendInfoToMember(this.teamid) } } getZhenFaInfo() { var json = this.ZFMgr.toJson() this.send('s2c_getZhenFaInfo', { info: json }); } upLevelZhenFa(index: number, level: number) { var lv = this.ZFMgr.getZhenFaLevelByPos(index) const l = level - lv if (0 >= l) { this.send_notice(`该阵法位置等级信息错误,请稍后再试!`); return false } const count = ItemUtil.getBagItemCount(this, 2000030) const _count = (l * 5) if (count < _count) { this.send_notice(`您的荒玉道具不足,请及时购买!`); return false } this.addBagItem(2000030, 0 - _count, false) this.ZFMgr.upLevel(index, level) this.onZhenFaChange() return true } equipXwItem(data: any) { if (!this.bag_list[data.itemID]) {//如果没有在背包中 if (!!this.ZFMgr.isEquip(data.itemID)) { var index = this.ZFMgr.getEquipIndex(data.itemID)//获取装备位 if (-1 != index) { if (!!this.ZFMgr.dumpXw(index)) {//卸下信物 var oldXw = this.ZFMgr.equipXw(data.pos, data.itemID) if (0 != oldXw) this.addBagItem(oldXw, 1, false) this.onZhenFaChange() } else { SKLogger.warn(`卸下信物失败!`); } } else { SKLogger.warn(`在阵法对应位置上未找到该信物!`); } } else { this.send_notice(`您没有该信物,请通过多宝商店进行购买!`); } } else if (!!this.bag_list[data.itemID]) {//如果在背包中 this.addBagItem(data.itemID, -1, false) var oldXw = this.ZFMgr.equipXw(data.pos, data.itemID) if (0 != oldXw) this.addBagItem(oldXw, 1, false) this.onZhenFaChange() } else { this.send_notice(`您没有该信物,请通过多宝商店进行购买!`); } } //激活阵法位 active_zhenfa_position(data: any) { this.ZFMgr.saveActiveInde(data.index)//保存激活位 var list = this.ZFMgr.getZhenFaItem()//获取阵法上的所有装备 if (0 < list.length) { const count = list.length for (var i = 0; i < count; ++i) { this.addBagItem(list[i], 1, false) } } this.ZFMgr.clearInfo()//清空阵法信息 var list = ItemUtil.getBagXwItem(this) var info = ZhenFaUtil.getZhenFaInfo(data.index)//获取阵法位信息 const count = info.valid_pos.length for (var i = 0; i < count; ++i) { //随机信物道具 if (0 < list.length) { var index = Math.floor((Math.random() * 100)) % list.length if (!!this.ZFMgr.active(info.valid_pos[i], list[index].id)) { this.addBagItem(list[index].id, -1, false) list.splice(index, 1) } } else { this.ZFMgr.active(info.valid_pos[i], 0) } } this.onZhenFaChange() return true } onZhenFaChange() { this.calculateAttr(); for (let pet of this.petList) { pet.calculateAttribute(); } this.send('s2c_player_data', this.getData()); this.getZhenFaInfo() } succinct(data: any) { let cnt = ItemUtil.getBagItemCount(this, 2000031) if (cnt < 1) { return this.send("s2c_xw_normal_succinct", { ret: 1, // 缺少五色石 }) } let money = this.GetMoney(GameUtil.goldKind.Money) if (money < 300000) { return this.send("s2c_xw_normal_succinct", { ret: 2, // 缺少银两 }) } this.update_bagitem({ operation: 0, itemid: 2000031, count: 1 }) this.addMoney(GameUtil.goldKind.Jade, -300000) this.list.splice(0, this.list.length) var info = this.XWMgr.succinct(data.itemID) if (!!info) { this.XWMgr.setNewAttrInfo(data.itemID, info) this.list.push(info) } this.send("s2c_xw_normal_succinct", { ret: 0, list: SKDataUtil.toJson(this.list, "{}") }) } //获取属性信息 getAttrInfo(data: any) { var info: any = this.XWMgr.getAttrInfo(data.itemID) this.send("s2c_getXwAttrInfo", { pos1: info.pos1, attr1: info.attr1, value1: info.value1, pos2: info.pos2, attr2: info.attr2, value2: info.value2, pos3: info.pos3, attr3: info.attr3, value3: info.value3, max1: info.max1, max2: info.max2, max3: info.max3 }) } getAllAttrInfo(data: any) { var attr_info = this.XWMgr.getAttrInfo(data.itemID) console.log("attr_info:", attr_info) var new_info = this.XWMgr.getNewAttrInfo(data.itemID) console.log("new_info:", new_info) this.send("s2c_getAttrInfo", { attrList: SKDataUtil.toJson(attr_info, "{}"), succintAttrList: SKDataUtil.toJson({ list: new_info }, "{}") }) } replaceAttribute(data: any) { var code = this.XWMgr.replaceAttr(data.itemID) if (0 == code) { var item = this.XWMgr.getXwItem(data.itemID) if (!!item) { var attr_info = this.XWMgr.getAttrInfo(data.itemID) var new_info = this.XWMgr.getNewAttrInfo(data.itemID) this.send("s2c_replaceattribute", { itemID: data.itemID, attrList: SKDataUtil.toJson(attr_info, "{}"), succintAttrList: SKDataUtil.toJson(new_info, "{}"), }) } } else if (1 == code) { this.send_notice("洗练失败不能替换信物属性") } else if (2 == code) { this.send_notice("没有找到该信物") } this.getZhenFaInfo() this.calculateAttr(); this.send('s2c_player_data', this.getData()); } getBabySkillConfig(data: any) { //todo let msg = GameUtil.require_ex("../../conf/prop_data/prop_baby_skill.json") this.send("s2c_getBabySkillConfig", { config: SKDataUtil.toJson(msg, "{}"), }) } adoptBaby(data: any) { let baby = this.BabyMgr.AdoptBaby(data.sex) let ret = 1 let jsonBaby = "" if (baby != null) { ret = 0 jsonBaby = baby.ToJson() this.addMoney(GameUtil.goldKind.Jade, -6000000) } this.send("s2c_adoptBaby", { ret: ret, baby: jsonBaby }) if (this.BabyMgr.BabyList.length == 1) { this.BabyMgr.SetBattle(baby.ID) this.send("s2c_babyBattle", { ret: ret, baby: baby.ToJson() }) } } babyBattle(data: any) { let baby = this.BabyMgr.SetBattle(data.id) let ret = 1 let jsonBaby = "" if (baby != null) { ret = 0 jsonBaby = baby.ToJson() } this.send("s2c_babyBattle", { ret: ret, baby: baby.ToJson() }) } babySkillBless(data: any) { let hasCnt = ItemUtil.getBagItemCount(this, 9651) if (hasCnt < 1) { this.send("s2c_babySkillBless", { ret: 1, id: data.id, }) return } let skill = this.BabyMgr.Bless(data.id) let ret = 1 let jsonSkill = "" if (skill != null) { ret = 0 jsonSkill = SKDataUtil.toJson(skill, "{}") this.update_bagitem({ operation: 0, itemid: 9651, count: 1 }) } this.send("s2c_babySkillBless", { ret: ret, id: data.id, skill: jsonSkill }) } babySkillUpgrade(data: any) { let _skill = this.BabyMgr.GetBabySkill(data.id, data.skillId) if (_skill == null) { this.send("s2c_babySkillUpgrade", { ret: 1, id: data.id, }) return } if (_skill.level >= 100) { this.send("s2c_babySkillUpgrade", { ret: 3, id: data.id, }) return } let need = _skill.level * 5 let hasCnt = ItemUtil.getBagItemCount(this, 9650) let hasMoney = this.GetMoney(GameUtil.goldKind.Money) if (hasCnt < need || hasMoney < 1000000) { this.send("s2c_babySkillUpgrade", { ret: 1, id: data.id, }) return } let ret = this.BabyMgr.Upgrade(data.id, data.skillId) let jsonSkill = "" if (ret == 0) { let skill = this.BabyMgr.GetBabySkill(data.id, data.skillId) jsonSkill = SKDataUtil.toJson(skill, "{}") this.addMoney(GameUtil.goldKind.Money, -1000000) this.update_bagitem({ operation: 0, itemid: 9650, count: need }) } this.send("s2c_babySkillUpgrade", { ret: ret, id: data.id, skill: jsonSkill }) } babySkillBattle(data: any) { let skill = this.BabyMgr.SkillBattle(data.id, data.skillId) let ret = 1 let jsonSkill = "" if (skill != null) { ret = 0 jsonSkill = SKDataUtil.toJson(skill, "{}") } this.send("s2c_babySkillBattle", { ret: ret, id: data.id, skill: jsonSkill }) } babyPracticeConfig(data?: any) { let config = GameUtil.require_ex("../../conf/prop_data/prop_baby_practice.json") this.send("s2c_babyPracticeConfig", { config: SKDataUtil.toJson(config, "{}") }) } //0 成功 1 失败 2 疲劳已满 3 属性已加至最高 babyPractice(data: any) { let ret = this.BabyMgr.Practice(data.id, data.type, data.class) let babyJson = "" if (ret == 0) { let baby = this.BabyMgr.GetBabyByID(data.id) babyJson = baby.ToJson() } this.send("s2c_babyPractice", { ret: ret, baby: babyJson }) } BabyEatCandy(babyId: number): boolean { let ret = this.BabyMgr.EatCandy(babyId) let babyJson = "" if (ret == 0) { let baby = this.BabyMgr.GetBabyByID(babyId) babyJson = baby.ToJson() } this.send("s2c_babyPractice", { ret: ret, baby: babyJson }) return ret == 0 } ReadingBook(babyId: number): boolean { let ret = this.BabyMgr.ReadingBook(babyId) let babyJson = "" if (ret == 0) { let baby = this.BabyMgr.GetBabyByID(babyId) babyJson = baby.ToJson() } this.send("s2c_babyPractice", { ret: ret, baby: babyJson }) return ret == 0 } //获取新属性信息 getNewAttrInfo(data: any) { var info: any = this.XWMgr.getNewAttrInfo(data.itemID) var strList = SKDataUtil.toJson([info], "{}") this.send("s2c_getNewAttrInfo", { list: strList }) } //清除所有新属性信息 clearNewAttrInfo() { this.XWMgr.clearNewAttrInfo() } upgradeStar(data: any) { let ret = this.StarMgr.Upgrade(data.starid, data.upgrade) if (ret != 0) { return this.send("s2c_upgradeStar", { ret: ret }) } let star = this.StarMgr.GetStarByID(data.starid) let msg = { ret: 0, starid: data.starid, level: star.Level, equip: SKDataUtil.toJson(star.EquipAttr, "[]"), fresh: SKDataUtil.toJson(star.FreshAttr, "[]") } this.send("s2c_upgradeStar", msg) this.calculateAttr() this.send('s2c_player_data', this.getData()); } getNewStarAttr(data: any) { let ret = this.StarMgr.GetNewStarAttr(data.starid) if (ret != 0) { return this.send("s2c_getNewStarAttr", { ret: ret }) } let star = this.StarMgr.GetStarByID(data.starid) let msg = { ret: 0, starid: data.starid, attr: SKDataUtil.toJson(star.FreshAttr, "[]") } this.send("s2c_getNewStarAttr", msg) } replaceStarAttr(data: any) { let ret = this.StarMgr.ReplaceStarAttr(data.starid) if (ret != 0) { return this.send("s2c_replaceStarAttr", { ret: ret }) } let star = this.StarMgr.GetStarByID(data.starid) let msg = { ret: 0, starid: data.starid, attr: SKDataUtil.toJson(star.EquipAttr, "[]") } this.send("s2c_replaceStarAttr", msg) this.calculateAttr() this.send('s2c_player_data', this.getData()); } equipStar(data: any) { let ret = this.StarMgr.EquipStar(data.starid) if (ret == 0) { this.calculateAttr() this.send('s2c_player_data', this.getData()); } let msg = { ret: ret, starid: data.starid } return this.send("s2c_equipStar", msg) } }