import { GUILDACTIVITY } from "../../pubUtils/dicParam"; import { SimpleGuildRankParam, SimpleRoleRankParam } from '../rank' import { prop } from "@typegoose/typegoose"; import { CITY_STATUS } from "../../consts"; export class GateMembersRec { roleId: string; round: number = 0; enemies: number[] = []; constructor(roleId: string) { this.roleId = roleId; } } // 军团活动蛮夷入侵城门血量等数据存储 export class GateActivityObject { private gateHp: Map = new Map(); // 城门血条,每个军团有一条血条 guildCode => hp private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] private membersRecord: Map = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec private guilds: Map = new Map(); // 参加的所有军团 server => [guildCode] public getObj(guildCode: string, serverId: number) { console.log(guildCode, serverId) return { gateHp: this.getGateHpAndInc(guildCode), members: this.members.get(guildCode)||[], memberesRecord: [...this.membersRecord], guilds: this.guilds.get(serverId)||[] } } public getGateHpAndInc(guildCode: string, inc: number = 0) { let gateHp = this.gateHp.get(guildCode); if(!this.gateHp.has(guildCode)) { gateHp = GUILDACTIVITY.GATEACTIVITY_GATEHP; } if(inc != 0) { gateHp += inc; this.gateHp.set(guildCode, gateHp); } if(gateHp <= 0) gateHp = 0; return gateHp } public getGuilds() { return this.guilds; } public pushMembers(guildCode: string, serverId: number, roleId: string, job: number) { if(this.members.has(guildCode)) { let members = this.members.get(guildCode); if(members.findIndex(cur => cur.roleId == roleId) == -1) { members.push({ roleId, job }); } } else { let arr = new Array(); arr.push(roleId); this.members.set(guildCode, [{ roleId, job }]); } if(this.guilds.has(serverId)) { let arr = this.guilds.get(serverId); if(!arr.includes(guildCode)) arr.push(guildCode); this.guilds.set(serverId, arr); } else { this.guilds.set(serverId, [guildCode]); } } public getMemberRecord(recCode: string, roleId: string) { return this.membersRecord.get(recCode)||new GateMembersRec(roleId) } public setMemberRecord(recCode: string, newMemberRecord: GateMembersRec) { this.membersRecord.set(recCode, newMemberRecord); } public delMemberRecord(recCode: string) { this.membersRecord.delete(recCode); } public delGuildRecord(guildCode: string, serverId: number) { let guildList = this.guilds.get(serverId); if(guildList) { let index = guildList.indexOf(guildCode); guildList.splice(index, 1); } this.members.delete(guildCode); } } // 军团诸侯混战等数据 export class CityActivityObject { private gateHp: Map = new Map(); // 城门血条,每个cityId有一条血条 serverId&cityId => gateHp private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] private cities: Map = new Map(); // 各个城池参与的军团 serverId&cityId => [guildCode] private guilds: Map = new Map(); // 军团所在的城池 guildCode => cityId private historyCity: Map = new Map(); // 获取自己打开过的城池的页面 roleId => cityId private getKey(serverId: number, cityId: number) { return `${serverId}_${cityId}`; } private decodeKey(key: string) { let arr = key.split('_'); return { serverId: parseInt(arr[0]), cityId: parseInt(arr[1]) } } public getObj( serverId: number, cityId: number, guildCode: string) { let key = this.getKey(serverId, cityId); return { gateHp: this.gateHp.get(key), members: this.members.get(guildCode), city: this.cities.get(key), guild: this.guilds.get(guildCode) } } public getAllCities() { let allCities = new Array<{ serverId: number, cityId: number, guildCodes: string[]}>(); let serverlists = new Array(); for(let [key, guildCodes] of this.cities) { let { serverId, cityId } = this.decodeKey(key); allCities.push({ serverId, cityId, guildCodes }); if(!serverlists.includes(serverId)) serverlists.push(serverId); } return {cities: allCities, serverlists}; } public getGuildsInCity(serverId: number, cityId: number) { let key = this.getKey(serverId, cityId); return this.cities.get(key)||[]; } public getMembersOfGuild(guildCode: string) { return this.members.get(guildCode)||[]; } public getGateHpAndInc(serverId: number, cityId: number, maxHp: number, inc: number = 0) { let key = this.getKey(serverId, cityId); let gateHp = this.gateHp.get(key); if(!this.gateHp.has(key)) { gateHp = maxHp; } if(inc != 0) { gateHp += inc; this.gateHp.set(key, gateHp); } if(gateHp <= 0) gateHp = 0; return gateHp } public getHistoryCity(roleId: string) { return this.historyCity.get(roleId) } public setHistoryCity(roleId: string, cityId: number) { return this.historyCity.set(roleId, cityId); } public pushMembers(guildCode: string, roleId: string, job: number) { if(this.members.has(guildCode)) { let members = this.members.get(guildCode); if(members.findIndex(cur => cur.roleId == roleId) == -1) { members.push({ roleId, job }); } } else { let arr = new Array(); arr.push(roleId); this.members.set(guildCode, [{ roleId, job }]); } } public pushGuild(guildCode: string, serverId: number, cityId: number) { let key = this.getKey(serverId, cityId); if(!this.cities.has(key)) { this.cities.set(key, [guildCode]); } else { let arr = this.cities.get(key); if(!arr.includes(guildCode)) { arr.push(guildCode); } } this.guilds.set(guildCode, cityId); } public delCityRecord(cityId: number, serverId: number) { let key = this.getKey(serverId, cityId); let guildCodes = this.cities.get(key)||[]; for(let guildCode of guildCodes) { this.members.delete(guildCode); this.guilds.delete(guildCode); } this.cities.delete(key); } } class WoodenHorseMember { roleId: string; roleName: string; } // 木牛流马 export class WoodenHorse { guildCode: string; // 军团code 木马的唯一标识 guildName: string; // 军团名 guildCe: number; // 军团战力 speed: number; // 速度 durability: number; // 耐久度 distance: number; // 距离 time: number; // 到达时间 memberCnt: number; // 成员人数 members: WoodenHorseMember[]; // 成员 constructor(guildCode: string, guildName: string, guildCe: number) { this.guildCode = guildCode; this.guildName = guildName; this.guildCe = guildCe; } calSpeed(events: Event[]) { let speed = this.speed; for(let event of events) { } return speed; } getWoodenHorse(events: Event[]) { let newObj = new WoodenHorse(this.guildCode, this.guildName, this.guildCe); newObj.speed = this.calSpeed(events); newObj.durability = this.durability; newObj.distance = this.distance; newObj.time = this.time; newObj.memberCnt = this.memberCnt; newObj.members = this.members; return newObj; } } export class Event { id: number; timestamp: number; fromGuild: string; toGuild: string; startDistance: number; effect: number[]; endTimestamp?: number; endDistance?: number; } export interface GuildGateRankParam { guildRank: SimpleGuildRankParam[], myGuildRank: SimpleGuildRankParam, memberRank: SimpleRoleRankParam[], myMemberRank?: SimpleRoleRankParam } export class Member { @prop({required: true}) roleId: string; // 玩家id @prop({required: true}) job: number; // 在军团的职位 } export class CityParam { cityId: number = 0; // 城池id guardGuildCode: string = ''; // 占领军团id guardGuildName: string = ''; // 占领军团名 declareCount: number = 0; // 宣战数 status: number = CITY_STATUS.NOT_OPEN; // 城池对于我军状态 constructor(cityId: number) { this.cityId = cityId; } }