403 lines
13 KiB
TypeScript
403 lines
13 KiB
TypeScript
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);
|
|
}
|
|
}
|
|
}
|
|
}
|