import BangMember from "./BangMember"; import GameUtil from "../core/GameUtil"; import PlayerMgr from "../object/PlayerMgr"; import DB from "../utils/DB"; import BangMgr from "./BangMgr"; import SKLogger from "../gear/SKLogger"; import Player from "../object/Player"; import {MsgCode, Operate} from "../role/EEnum"; import ExpUtil from "../core/ExpUtil"; import * as schedule from "node-schedule"; import SKCxfUtil from "../gear/SKCxfUtil"; import SKDataUtil from "../gear/SKDataUtil"; export default class Bang { id: number; name: string; aim: string; bidding: number; weight: number; createtime: string; //创建时间 notice: string; // 帮派公告 rolelist: any[]; masterid: number; mastername: string; requestlist: any[]; isinit: boolean; banglevel:number; //帮派等级 bangexp:number; //帮派建设 cost:number; //维护费用 brisk:number; //活跃度 onlinecount:number; //成员上线次数 constructor() { this.id = 0; this.name = ''; this.aim = ''; this.createtime = ''; this.notice = ''; this.bidding = 0; this.weight = 0; this.rolelist = []; this.masterid = 0;// roleid this.mastername = ''; this.requestlist = []; this.isinit = false; this.banglevel = 0; this.bangexp = 0; this.cost = 0; this.brisk = 0; this.onlinecount = 0; schedule.scheduleJob("59 59 23 * * ? ", () => {//每天消耗帮派维护费用 let cost = (this.rolelist.length * 100); if(cost > this.bangexp){ cost = this.bangexp } this.bangexp -= cost; DB.bangUpdate({bangid: this.id, banglevel: this.banglevel, bangexp: this.bangexp});//每天更新帮派建设 }); schedule.scheduleJob("59 59 23 0/2 * ? ", () => {//每3天刷新活跃度 }) } toObj() { return { bangid: this.id, name: this.name, aim: this.aim, rolenum: this.rolelist.length, masterid: this.masterid, mastername: this.mastername, bidding: this.bidding, weight: this.weight, createtime: this.createtime, notice: this.notice, banglevel: this.banglevel, bangexp: this.bangexp, upexp: ExpUtil.getBangExp(this.banglevel), cost: (this.rolelist.length * 100), brisk: this.brisk } } addMember(meminfo: any) { let member = new BangMember(meminfo); this.rolelist.push(member); DB.updateBangMember(member,1); } delMember(roleid: any) { for (let index = 0; index < this.rolelist.length; index++) { const member = this.rolelist[index]; if (member.roleid == roleid) { this.rolelist.splice(index, 1); break; } } } getMemberNum() { return this.rolelist.length; } getBangInfo() { let infoObj: any = {}; infoObj.info = {}; infoObj.rolelist = []; infoObj.info = this.toObj(); for (const roleInfo of this.rolelist) { let player:Player = PlayerMgr.shared.getPlayerByRoleId(roleInfo.roleid); infoObj.rolelist.push({ roleid: roleInfo.roleid, name: roleInfo.name, resid: roleInfo.resid, relive: roleInfo.relive, level: roleInfo.level, race: roleInfo.race, sex: roleInfo.sex, online: player == null ? false : true, bangpost: roleInfo.bangpost, jointime: roleInfo.jointime, weekbangbtl: roleInfo.weekbangbtl, thisbangbtl: roleInfo.thisbangbtl, weekectype: roleInfo.weekectype, daytask: roleInfo.daytask }); } return infoObj; } getBangPost(roleid: number): any { let post = GameUtil.bangPost.BangZhong; if (roleid == this.masterid) { post = GameUtil.bangPost.BangZhu; return post; } for (const roleInfo of this.rolelist) { if (roleid == roleInfo.roleid) { post = roleInfo.bangpost; break; } } return post; } setBangPost(roleid: number, post: number){ for (const roleInfo of this.rolelist) { if (roleid == roleInfo.roleid) { let player = PlayerMgr.shared.getPlayerByRoleId(roleid); if(player){ player.bangpost = post; roleInfo.bangpost = post; DB.updateBangPost({roleid: player.roleid,bangpost: player.bangpost}); if(post == GameUtil.bangPost.FuBangZhu){ player.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.FuBangZhu); } else if(post == GameUtil.bangPost.ZuoHuFa){ player.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.ZuoHuFa); } else if(post == GameUtil.bangPost.YouHuFa){ player.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.YouHuFa); } else if(post == GameUtil.bangPost.ZhangLao){ player.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.ZhangLao); } else if(post == GameUtil.bangPost.TangZhu){ player.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.TangZhu); } else if(post == GameUtil.bangPost.BangZhong){ player.addTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.BangZhong); } return true; } return false; } } return false; } getBangRequest() { let tmplist = []; for (let index = 0; index < this.requestlist.length; index++) { const info = this.requestlist[index]; let temp = PlayerMgr.shared.getPlayerByRoleId(info.roleid,"帮派请求:"); if (temp == null || temp.bangid > 0) { tmplist.push(index); } } for (const index of tmplist) { this.requestlist.splice(index, 1); } return this.requestlist; } getRequestnum() { return this.requestlist.length; } addRequest(req: any) { this.requestlist.push({ roleid: req.roleid, name: req.name, resid: req.resid, relive: req.relive, level: req.level, race: req.race, sex: req.sex, }); } operRequest(role: any, targetid: any, oper: any) { // 如果信息未知 查询是否有该帮派 该帮派帮主是否是当前操作者 if(role.bangpost == GameUtil.bangPost.Unknow){ let bang = BangMgr.shared.getBang(role.bangid); if (bang != null && bang != undefined){ if (bang.masterid == role.roleid){ role.bangpost = GameUtil.bangPost.BangZhu; } } } if (role.bangpost == GameUtil.bangPost.BangZhong || role.bangpost == GameUtil.bangPost.Unknow) { role.send_notice("让管事儿的来") SKLogger.info(`当前玩家${role.name}:帮派编号${role.bangid}职位${role.bangpost}`) return; } let req = null; for (let index = 0; index < this.requestlist.length; index++) { const reqinfo = this.requestlist[index]; if (reqinfo.roleid == targetid) { req = reqinfo; this.requestlist.splice(index, 1); break; } } if (req == null) { return; } if (oper == 1) { this.addMember(req); let player = PlayerMgr.shared.getPlayerByRoleId(req.roleid,"加入帮派:"); if (player) { player.bangid = this.id; this.sendBangInfo(player); } } let master = PlayerMgr.shared.getPlayerByRoleId(this.masterid,"帮主:"); if (master) { master.send('s2c_getbangrequest', { requestlist: this.getBangRequest() }); this.sendBangInfo(master); } } /** * 离开帮派 * @param {number} roleid 退出帮派的玩家 * @param {number} type 0 自己退出 1 帮主踢出 */ leave(roleid: any, type: any = 0) { let pname = ''; let player = PlayerMgr.shared.getPlayerByRoleId(roleid,"退帮:"); if (player) { if (player.bangid == 0) { return true; } pname = player.name; player.bangid = 0; player.bangname = ''; player.bangpost = 0; player.delTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.BangZhu); player.delTitle(GameUtil.titleType.CommonTitle, GameUtil.titleBangType.BangZhong); } else { DB.updatePlayerBangID(roleid, 0, null); } let roleindex = -1; let list = this.rolelist; for (let index = 0; index < list.length; index++) { const role = list[index]; if (role.roleid == roleid) { roleindex = index; break; } } if (roleindex > -1) { this.rolelist.splice(roleindex, 1); } if (type == 0) { SKLogger.debug(`玩家[${pname}(${roleid})] 离开了帮派[${this.name}(${this.id})]`); } else if (type == 1) { SKLogger.debug(`玩家[${pname}(${roleid})] 被帮主踢出帮派[${this.name}(${this.id})]`); } return true; } checkPlayer(roleid: any) { for (let index = 0; index < this.rolelist.length; index++) { const role = this.rolelist[index]; if (role.roleid == roleid) { return true; } } return false; } sendBangInfo(player: any) { player.send('s2c_getbanginfo', this.getBangInfo()); } addBidding(player: any, money: any) { let strErr = player.CostFee(1, money, '帮派竞价'); if (strErr != '') { player.send('s2c_notice', { strRichText: strErr }); return; } this.bidding += money; DB.updateBangBidding(this.id, this.bidding); BangMgr.shared.initBidding(); this.sendBangInfo(player); } //帮派公告 issueAffiche(data: any){ let player = PlayerMgr.shared.getPlayerByRoleId(data.roleid); if(data.type == 1){ this.aim = data.content; }else{ this.notice = data.content; } if(player){ SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.BANG, operateDepict: "帮派公告", operateResSerial: this.id, operateResName: this.name, operateContent: SKDataUtil.toJson(this.toObj(), "{}") }) } DB.updateBangNotice({ bangid: this.id, notice: this.notice, aim: this.aim, }, 1); this.sendBangInfo(player); } //帮派升级 bangUp(roleid: number){ let player = PlayerMgr.shared.getPlayerByRoleId(roleid); if(player && player.bangpost > 0 && player.bangpost < 7){ if(this.banglevel >= 8){ player.send_notice("您的帮派等级已经是最高的喽!"); return; } let upexp = ExpUtil.getBangExp(this.banglevel); let isleavelup = false; if(this.bangexp >= upexp) { this.bangexp -= upexp; this.banglevel++; isleavelup = true; } if(isleavelup){ player.addMoney(1, -3000, `帮派升级`, MsgCode.SUCCESS); let text = `您的帮派升到了${this.banglevel}级`; player.send_notice(text) if(player){ SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.BANG, operateDepict: "帮派升级", operateResSerial: this.id, operateResName: this.name, operateContent: SKDataUtil.toJson(this.toObj(), "{}") }) } this.sendBangInfo(player); DB.bangUpdate({bangid: this.id,banglevel: this.banglevel,bangexp: this.bangexp}); }else{ player.send_notice("升级所需帮派建设不足") return; } }else{ player.send_notice("让管事儿的来") return; } } broadcast(event: any, data: any) { let roleList = this.rolelist; for (const pinfo of roleList) { let to = PlayerMgr.shared.getPlayerByRoleId(pinfo.roleid); if (to) { to.send(event, data); } } } }