2025-04-23 09:34:08 +08:00

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);
}
}
}
}