军团活动:蛮夷入侵
This commit is contained in:
@@ -8,7 +8,7 @@ import { ChannelUser } from '../../../domain/ChannelUser';
|
||||
import { getWorldChannelSid, groupRoomId } from '../../../services/chatService';
|
||||
import { reloadResources } from '../../../pubUtils/data';
|
||||
import { GeneralRankParam } from '../../../domain/rank';
|
||||
import { getAllGuildActivityStatus } from '../../../services/guildActivityService';
|
||||
import { getAllGuildActivityStatus } from '../../../services/guildActivity/guildActivityService';
|
||||
import { MailParam } from '../../../domain/roleField/mail';
|
||||
import { RankFirstType } from '../../../db/RankFirst';
|
||||
import { LotType } from '../../../db/Lot';
|
||||
|
||||
@@ -5,7 +5,7 @@ import { reloadResources } from '../../../pubUtils/data';
|
||||
import { UserGuildType } from '../../../db/UserGuild';
|
||||
import { kickUser } from '../../../services/connectorService';
|
||||
import { PVPConfigModel, PVPConfigType } from '../../../db/SystemConfig';
|
||||
import { setDicAuctionTime } from '../../../services/guildActivityService';
|
||||
import { setDicAuctionTime } from '../../../services/guildActivity/guildActivityService';
|
||||
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
|
||||
import { taflush } from '../../../services/sdkService';
|
||||
import { errlogger } from '../../../util/logger';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Application, ChannelService, BackendSession, pinus, HandlerService, } from "pinus";
|
||||
import { GUILD_ACTIVITY_TYPE, STATUS, REDIS_KEY, GUILD_POINT_WAYS, CITY_STATUS, TASK_TYPE, ITEM_CHANGE_REASON } from "../../../consts";
|
||||
import { resResult } from "../../../pubUtils/util";
|
||||
import { getGuildActivityStatus, getCityActivityObj, getCityStatus as pubGetCityStatus, getCities, getCityActivityRank, sendSingleCityActEndMsg, getMedianCe } from "../../../services/guildActivityService";
|
||||
import { getGuildActivityStatus, getCityActivityObj, getCityStatus as pubGetCityStatus, getCities, getCityActivityRank, sendSingleCityActEndMsg, getMedianCe } from "../../../services/guildActivity/guildActivityService";
|
||||
import { GuildActivityCityModel } from "../../../db/GuildActivityCity";
|
||||
import { gameData } from "../../../pubUtils/data";
|
||||
import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Application, BackendSession, ChannelService, pinus, HandlerService, } from "pinus";
|
||||
import { getMedianCe, getGuildActivityStatus, getRecordScore, getGateActivityObj, participants, getGateActivityRank, getCityActivityObj } from "../../../services/guildActivityService";
|
||||
import { getMedianCe, getGuildActivityStatus, getRecordScore, getGateActivityObj, participants, getGateActivityRank, getCityActivityObj } from "../../../services/guildActivity/guildActivityService";
|
||||
import { resResult } from "../../../pubUtils/util";
|
||||
import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS, TASK_TYPE } from "../../../consts";
|
||||
import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec";
|
||||
@@ -51,12 +51,9 @@ export class GateActivityHandler {
|
||||
|
||||
let ranks = await getGateActivityRank(guildCode, serverId, roleId, roleName);
|
||||
|
||||
let obj = getGateActivityObj();
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...statusResult,
|
||||
challengeCnt: GUILDACTIVITY.GATEACTIVITY_CHALLENGE_TIMES - challengeCnt,
|
||||
gateHp,
|
||||
...ranks
|
||||
});
|
||||
}
|
||||
@@ -74,13 +71,9 @@ export class GateActivityHandler {
|
||||
if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
let obj = getGateActivityObj();
|
||||
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid);
|
||||
if (!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
@@ -113,7 +106,6 @@ export class GateActivityHandler {
|
||||
...statusResult,
|
||||
guildScore: guildScore || 0,
|
||||
myScore: 0,
|
||||
gateHp,
|
||||
challengeCnt: GUILDACTIVITY.GATEACTIVITY_CHALLENGE_TIMES - challengeCnt,
|
||||
medianCe
|
||||
});
|
||||
@@ -131,11 +123,7 @@ export class GateActivityHandler {
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
// 计算record内得分
|
||||
let memberRecord = obj.getMemberRecord(code, roleId);
|
||||
@@ -161,67 +149,25 @@ export class GateActivityHandler {
|
||||
code: rec.code,
|
||||
...statusResult,
|
||||
guildScore: guildScore || 0,
|
||||
myScore: myScore || 0,
|
||||
gateHp
|
||||
myScore: myScore || 0
|
||||
});
|
||||
}
|
||||
|
||||
// 上报敌军攻打城门情况
|
||||
async hitGate(msg: { code: string, damage: number }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let guildCode = session.get('guildCode');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
let { code, damage } = msg;
|
||||
let obj = getGateActivityObj();
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// TODO 测试完成后去掉这条判断
|
||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
gateHp = obj.getGateHpAndInc(guildCode, -1 * damage);
|
||||
// if (gateHp <= 0) {
|
||||
// // 推送 停止活动并结算奖励
|
||||
// await sendSingleGateActEndMsg(guildCode, serverId);
|
||||
// }
|
||||
// 推送 城门血量
|
||||
let chatSid = await getGuildChannelSid(guildCode);
|
||||
pinus.app.rpc.chat.guildRemote.pushGateHp.toServer(chatSid, guildCode, gateHp);
|
||||
|
||||
// 返回当前军团总军功
|
||||
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }, true);
|
||||
let myScore = await myR.getMyScore({ roleId });
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
code,
|
||||
...statusResult,
|
||||
guildScore,
|
||||
myScore,
|
||||
gateHp
|
||||
})
|
||||
}
|
||||
|
||||
// 结束挑战
|
||||
async battleEnd(msg: { code: string, isSuccess: boolean }, session: BackendSession) {
|
||||
async battleEnd(msg: { code: string, isSuccess: boolean, gateHp: number }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let guildCode = session.get('guildCode');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
|
||||
let { code, isSuccess } = msg;
|
||||
let obj = getGateActivityObj();
|
||||
let { code, isSuccess, gateHp } = msg;
|
||||
|
||||
let statusResult = getGuildActivityStatus(this.aid);
|
||||
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
// 更新userGuildActivityRecord
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true });
|
||||
let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true, gateHp });
|
||||
if (!myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||
|
||||
// 功劳簿计算
|
||||
@@ -252,7 +198,6 @@ export class GateActivityHandler {
|
||||
// 返回当前军团总军功
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
let myScore = await myR.getMyScore({ roleId });
|
||||
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||
|
||||
let info = {
|
||||
round,
|
||||
@@ -265,7 +210,6 @@ export class GateActivityHandler {
|
||||
...statusResult,
|
||||
guildScore,
|
||||
myScore,
|
||||
gateHp,
|
||||
info
|
||||
})
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import { getGoldObject } from '../../../pubUtils/itemUtils';
|
||||
import { RoleModel } from '../../../db/Role';
|
||||
import { sendMailToGuildByContent } from '../../../services/mailService';
|
||||
import { genAuction } from '../../../services/auctionService';
|
||||
import { getMedianCe } from '../../../services/guildActivityService';
|
||||
import { getMedianCe } from '../../../services/guildActivity/guildActivityService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
|
||||
@@ -19,7 +19,7 @@ import { GuildTrainReportModel } from '../../../db/GuildTrainReport';
|
||||
import { DATA_NAME } from '../../../consts/dataName';
|
||||
import { pushGuildTrainSucMsg } from '../../../services/chatService';
|
||||
import { checkActivityTask, checkTask } from '../../../services/taskService';
|
||||
import { sendPopUpActivityData } from '../../../services/guildActivityService';
|
||||
import { sendPopUpActivityData } from '../../../services/guildActivity/guildActivityService';
|
||||
import { guildInter, RewardInter } from '../../../pubUtils/interface';
|
||||
import { getGuildTrainGkInfo } from '../../../pubUtils/data';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Application, ChannelService, BackendSession, HandlerService, } from "pinus";
|
||||
import { GUILD_ACTIVITY_TYPE, STATUS, GUILD_ACTIVITY_STATUS, GUILD_POINT_WAYS, REDIS_KEY, TASK_TYPE } from "../../../consts";
|
||||
import { resResult } from "../../../pubUtils/util";
|
||||
import { getGuildActivityStatus, getRaceActivityObj, getRaceActivityRank, getWoodenHorseList, calWoodenHorseAndSend, raceActivitySettleReward } from "../../../services/guildActivityService";
|
||||
import { getGuildActivityStatus, getRaceActivityObj, getRaceActivityRank, getWoodenHorseList, calWoodenHorseAndSend, raceActivitySettleReward } from "../../../services/guildActivity/guildActivityService";
|
||||
import { UserGuildModel } from "../../../db/UserGuild";
|
||||
import { GuildActivityRecordModel } from "../../../db/GuildActivityRec";
|
||||
import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec";
|
||||
@@ -9,7 +9,6 @@ import { addActive } from "../../../services/guildService";
|
||||
import { Rank } from "../../../services/rankService";
|
||||
import { checkActivityTask, checkTask } from "../../../services/taskService";
|
||||
import { guildInter } from "../../../pubUtils/interface";
|
||||
import { RaceActivityObject } from "../../../services/guildActivityObjService";
|
||||
import { getGuildChannelSid } from "../../../services/chatService";
|
||||
|
||||
export default function (app: Application) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Application, ChannelService, HandlerService, } from 'pinus';
|
||||
import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime } from '../../../services/guildActivityService';
|
||||
import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime } from '../../../services/guildActivity/guildActivityService';
|
||||
import { gameData } from '../../../pubUtils/data';
|
||||
import { setWeek } from '../../../pubUtils/timeUtil';
|
||||
import { sendUngotDividend } from '../../../services/auctionService';
|
||||
|
||||
@@ -4,7 +4,7 @@ import PvpDefenseType from '../../../db/PvpDefense';
|
||||
import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity';
|
||||
import { reloadResources } from '../../../pubUtils/data';
|
||||
import { setMarquee, cancelMarquee } from '../../../services/gmService';
|
||||
import { setDicAuctionTime, setDicGuildActivity } from '../../../services/guildActivityService';
|
||||
import { setDicAuctionTime, setDicGuildActivity } from '../../../services/guildActivity/guildActivityService';
|
||||
import { setWeek } from '../../../pubUtils/timeUtil';
|
||||
import { ServerlistType } from '../../../db/Serverlist';
|
||||
import { MarqueeType } from '../../../db/Marquee';
|
||||
|
||||
@@ -8,7 +8,7 @@ import { gameData, getGoodById } from '../pubUtils/data';
|
||||
import { DividendParam, DividendType } from '../db/Dividend';
|
||||
import { sendMailByContent } from './mailService';
|
||||
import { FrontendOrBackendSession, pinus } from 'pinus';
|
||||
import { participants } from './guildActivityService';
|
||||
import { participants } from './guildActivity/guildActivityService';
|
||||
import { Member } from '../domain/battleField/guildActivity';
|
||||
import * as dicParam from '../pubUtils/dicParam';
|
||||
import { RewardInter } from '../pubUtils/interface';
|
||||
|
||||
@@ -31,7 +31,7 @@ import { getEvent } from './eventSercive';
|
||||
import { getBattleListOfMain } from './normalBattleService';
|
||||
import { GuildType } from '../db/Guild';
|
||||
import UserGuild, { UserGuildType } from '../db/UserGuild';
|
||||
import { setMedianCe, getAllGuildActivityStatus } from './guildActivityService';
|
||||
import { setMedianCe, getAllGuildActivityStatus } from './guildActivity/guildActivityService';
|
||||
import { getAllOnlineRoles } from './redisService';
|
||||
import Item from '../db/Item';
|
||||
import { PvpDefenseModel } from '../db/PvpDefense';
|
||||
|
||||
118
game-server/app/services/guildActivity/cityActivityObj.ts
Normal file
118
game-server/app/services/guildActivity/cityActivityObj.ts
Normal file
@@ -0,0 +1,118 @@
|
||||
// 军团活动蛮夷入侵城门血量等数据存储
|
||||
|
||||
import { Member } from "../../domain/battleField/guildActivity";
|
||||
|
||||
// 军团诸侯混战等数据
|
||||
export class CityActivityObject {
|
||||
private gateHp: Map<string, number> = new Map(); // 城门血条,每个cityId有一条血条 serverId&cityId => gateHp
|
||||
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
||||
private cities: Map<string, string[]> = new Map(); // 各个城池参与的军团 serverId&cityId => [guildCode]
|
||||
private guilds: Map<string, number> = new Map(); // 军团所在的城池 guildCode => cityId
|
||||
private historyCity: Map<string, number> = new Map(); // 获取自己打开过的城池的页面 roleId => cityId
|
||||
private sentCity: string[] = [];
|
||||
|
||||
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<number>();
|
||||
for(let [key, guildCodes] of this.cities) {
|
||||
if(this.sentCity.indexOf(key) == -1) {
|
||||
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, code: string) {
|
||||
|
||||
if(this.members.has(guildCode)) {
|
||||
let members = this.members.get(guildCode);
|
||||
if(members.findIndex(cur => cur.roleId == roleId) == -1) {
|
||||
members.push({ roleId, job, code });
|
||||
}
|
||||
} else {
|
||||
let arr = new Array<string>();
|
||||
arr.push(roleId);
|
||||
this.members.set(guildCode, [{ roleId, job, code }]);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
this.sentCity.push(key);
|
||||
}
|
||||
}
|
||||
67
game-server/app/services/guildActivity/gateActivityObj.ts
Normal file
67
game-server/app/services/guildActivity/gateActivityObj.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
// 军团活动蛮夷入侵城门血量等数据存储
|
||||
|
||||
import { Member, GateMembersRec } from "../../domain/battleField/guildActivity";
|
||||
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
|
||||
|
||||
export class GateActivityObject {
|
||||
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
||||
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec
|
||||
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团 server => [guildCode]
|
||||
|
||||
public getObj(guildCode: string, serverId: number) {
|
||||
// console.log(guildCode, serverId)
|
||||
return {
|
||||
members: this.members.get(guildCode)||[],
|
||||
memberesRecord: [...this.membersRecord],
|
||||
guilds: this.guilds.get(serverId)||[]
|
||||
}
|
||||
}
|
||||
|
||||
public getGuilds() {
|
||||
return this.guilds;
|
||||
}
|
||||
|
||||
public pushMembers(guildCode: string, serverId: number, roleId: string, job: number, code: string) {
|
||||
|
||||
if(this.members.has(guildCode)) {
|
||||
let members = this.members.get(guildCode);
|
||||
if(members.findIndex(cur => cur.roleId == roleId) == -1) {
|
||||
members.push({ roleId, job, code });
|
||||
}
|
||||
} else {
|
||||
let arr = new Array<string>();
|
||||
arr.push(roleId);
|
||||
this.members.set(guildCode, [{ roleId, job, code }]);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -1,30 +1,32 @@
|
||||
import { ServerlistModel } from "../db/Serverlist";
|
||||
import { RoleModel } from "../db/Role";
|
||||
import { reduceCe } from "../pubUtils/util";
|
||||
import { GUILDACTIVITY } from "../pubUtils/dicParam";
|
||||
import { gameData, getGuildAuctionRewards, getCityActivityRewards } from "../pubUtils/data";
|
||||
import { getCurDay, nowSeconds, getTimeFun } from "../pubUtils/timeUtil";
|
||||
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, AUCTION_SOURCE, MAIL_TYPE, CITY_STATUS, DEBUG_MAGIC_WORD, GUILD_POINT_WAYS, TASK_TYPE, AUCTION_TIME } from "../consts";
|
||||
import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec";
|
||||
import { GateMembersRec, CityParam, Member, WoodenHorse } from "../domain/battleField/guildActivity";
|
||||
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
|
||||
import { getAllServers, getRoleOnlineInfo } from "./redisService";
|
||||
import { SimpleGuildRankParam, SimpleRoleRankParam, SimpleGuildRankWithTimeParam, GuildRankInfo, RoleRankInfo } from "../domain/rank";
|
||||
import { getGuildChannelSid, getWorldChannelSid, getCityChannelSid } from "./chatChannelService";
|
||||
import { ServerlistModel } from "../../db/Serverlist";
|
||||
import { RoleModel } from "../../db/Role";
|
||||
import { reduceCe } from "../../pubUtils/util";
|
||||
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
|
||||
import { gameData, getGuildAuctionRewards, getCityActivityRewards } from "../../pubUtils/data";
|
||||
import { getCurDay, nowSeconds, getTimeFun } from "../../pubUtils/timeUtil";
|
||||
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, AUCTION_SOURCE, MAIL_TYPE, CITY_STATUS, DEBUG_MAGIC_WORD, GUILD_POINT_WAYS, TASK_TYPE, AUCTION_TIME } from "../../consts";
|
||||
import { Record, UserGuildActivityRecModel } from "../../db/UserGuildActivityRec";
|
||||
import { GateMembersRec, CityParam, Member, WoodenHorse } from "../../domain/battleField/guildActivity";
|
||||
import { DicGuildActivity } from "../../pubUtils/dictionary/DicGuildActivity";
|
||||
import { getAllServers, getRoleOnlineInfo } from "../redisService";
|
||||
import { SimpleGuildRankParam, SimpleRoleRankParam, SimpleGuildRankWithTimeParam, GuildRankInfo, RoleRankInfo } from "../../domain/rank";
|
||||
import { getGuildChannelSid, getWorldChannelSid, getCityChannelSid } from "../chatChannelService";
|
||||
import { pinus } from "pinus";
|
||||
import { GuildActivityRecordModel } from "../db/GuildActivityRec";
|
||||
import { genAuction } from "./auctionService";
|
||||
import { sendMailByContent } from "./mailService";
|
||||
import { getHonourObject } from '../pubUtils/itemUtils';
|
||||
import { GuildActivityCityType, GuildActivityCityModel } from "../db/GuildActivityCity";
|
||||
import { DicCityActivity } from "../pubUtils/dictionary/DicCityActivity";
|
||||
import { GateActivityObject, CityActivityObject, RaceActivityObject } from "./guildActivityObjService";
|
||||
import { Rank } from "./rankService";
|
||||
import { BossInstanceModel } from "../db/BossInstance";
|
||||
import { UserGuildModel } from "../db/UserGuild";
|
||||
import { raceActivityEnd } from "./timeTaskService";
|
||||
import { addActive } from "./guildService";
|
||||
import { checkTask, checkActivityTask } from "./taskService";
|
||||
import { GuildActivityRecordModel } from "../../db/GuildActivityRec";
|
||||
import { genAuction } from "../auctionService";
|
||||
import { sendMailByContent } from "../mailService";
|
||||
import { getHonourObject } from '../../pubUtils/itemUtils';
|
||||
import { GuildActivityCityType, GuildActivityCityModel } from "../../db/GuildActivityCity";
|
||||
import { DicCityActivity } from "../../pubUtils/dictionary/DicCityActivity";
|
||||
import { CityActivityObject } from "./cityActivityObj";
|
||||
import { GateActivityObject } from "./gateActivityObj";
|
||||
import { RaceActivityObject } from "./raceActivityObj";
|
||||
import { Rank } from "../rankService";
|
||||
import { BossInstanceModel } from "../../db/BossInstance";
|
||||
import { UserGuildModel } from "../../db/UserGuild";
|
||||
import { raceActivityEnd } from "../timeTaskService";
|
||||
import { addActive } from "../guildService";
|
||||
import { checkTask, checkActivityTask } from "../taskService";
|
||||
|
||||
let gateActivityObj: GateActivityObject;
|
||||
let cityActivityObj: CityActivityObject;
|
||||
@@ -386,7 +388,7 @@ export async function sendSingleRaceActEndMsg(guildCode: string, woodenHorse: Wo
|
||||
export async function gateActivitySettleReward(guildCode: string, serverId: number) {
|
||||
console.log('gateActivitySettleReward', guildCode, serverId);
|
||||
let obj = getGateActivityObj();
|
||||
let { gateHp, members } = obj.getObj(guildCode, serverId);
|
||||
let { members } = obj.getObj(guildCode, serverId);
|
||||
// console.log('***** gateHp', gateHp, 'members', members);
|
||||
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
|
||||
@@ -398,9 +400,9 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
|
||||
// console.log('***** rewards', JSON.stringify(rewards));
|
||||
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, {
|
||||
isSuccess: gateHp > 0,
|
||||
isSuccess: true,
|
||||
isCompleted: true,
|
||||
rank, score: guildScore, remainGateHp: gateHp,
|
||||
rank, score: guildScore,
|
||||
members, memberCnt: members.length,
|
||||
auctionType: AUCTION_SOURCE.GATE,
|
||||
rewards: rewards.map(cur => cur.goods)
|
||||
@@ -1,211 +1,17 @@
|
||||
|
||||
// 军团活动蛮夷入侵城门血量等数据存储
|
||||
|
||||
import { Member, GateMembersRec, WoodenHorse, Event } from "../domain/battleField/guildActivity";
|
||||
import { GUILDACTIVITY } from "../pubUtils/dicParam";
|
||||
import { RewardInter } from "../pubUtils/interface";
|
||||
import { getRaceEventItems, gameData } from "../pubUtils/data";
|
||||
import { GuildModel } from "../db/Guild";
|
||||
import { Member, GateMembersRec, WoodenHorse, Event } from "../../domain/battleField/guildActivity";
|
||||
import { RewardInter } from "../../pubUtils/interface";
|
||||
import { getRaceEventItems, gameData } from "../../pubUtils/data";
|
||||
import { GuildModel } from "../../db/Guild";
|
||||
import { sendSingleRaceActEndMsg } from "./guildActivityService";
|
||||
import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS, RACE_ACTIVITY_STATUS } from "../consts";
|
||||
import { getGuildChannelSid } from "./chatService";
|
||||
import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS, RACE_ACTIVITY_STATUS } from "../../consts";
|
||||
import { getGuildChannelSid } from "../chatService";
|
||||
import { pinus } from "pinus";
|
||||
import { getRandEelm, sortArrRandom, resResult } from "../pubUtils/util";
|
||||
import { Rank } from "./rankService";
|
||||
import { getTimeFun } from "../pubUtils/timeUtil";
|
||||
|
||||
export class GateActivityObject {
|
||||
private gateHp: Map<string, number> = new Map(); // 城门血条,每个军团有一条血条 guildCode => hp
|
||||
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
||||
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec
|
||||
private guilds: Map<number, string[]> = 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, code: string) {
|
||||
|
||||
if(this.members.has(guildCode)) {
|
||||
let members = this.members.get(guildCode);
|
||||
if(members.findIndex(cur => cur.roleId == roleId) == -1) {
|
||||
members.push({ roleId, job, code });
|
||||
}
|
||||
} else {
|
||||
let arr = new Array<string>();
|
||||
arr.push(roleId);
|
||||
this.members.set(guildCode, [{ roleId, job, code }]);
|
||||
}
|
||||
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<string, number> = new Map(); // 城门血条,每个cityId有一条血条 serverId&cityId => gateHp
|
||||
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
||||
private cities: Map<string, string[]> = new Map(); // 各个城池参与的军团 serverId&cityId => [guildCode]
|
||||
private guilds: Map<string, number> = new Map(); // 军团所在的城池 guildCode => cityId
|
||||
private historyCity: Map<string, number> = new Map(); // 获取自己打开过的城池的页面 roleId => cityId
|
||||
private sentCity: string[] = [];
|
||||
|
||||
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<number>();
|
||||
for(let [key, guildCodes] of this.cities) {
|
||||
if(this.sentCity.indexOf(key) == -1) {
|
||||
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, code: string) {
|
||||
|
||||
if(this.members.has(guildCode)) {
|
||||
let members = this.members.get(guildCode);
|
||||
if(members.findIndex(cur => cur.roleId == roleId) == -1) {
|
||||
members.push({ roleId, job, code });
|
||||
}
|
||||
} else {
|
||||
let arr = new Array<string>();
|
||||
arr.push(roleId);
|
||||
this.members.set(guildCode, [{ roleId, job, code }]);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
this.sentCity.push(key);
|
||||
}
|
||||
}
|
||||
|
||||
import { getRandEelm, sortArrRandom, resResult } from "../../pubUtils/util";
|
||||
import { Rank } from "../rankService";
|
||||
import { getTimeFun } from "../../pubUtils/timeUtil";
|
||||
|
||||
// 粮草先行
|
||||
export class RaceActivityObject {
|
||||
@@ -407,4 +213,5 @@ export class RaceActivityObject {
|
||||
public hasSend(guildCode: string) {
|
||||
return this.hasSentGuild.indexOf(guildCode) != -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import { indexOf } from 'underscore';
|
||||
import { PvpSeasonResultModel } from '../db/PvpSeasonResult';
|
||||
import { settleGuildWeekly } from './guildService';
|
||||
import { sendMailByContent, SendMailFun } from './mailService';
|
||||
import { getGuildActivityByDic, sendEndMsgToAll, autoDeclare, sendGuildActivityStatus } from './guildActivityService';
|
||||
import { getGuildActivityByDic, sendEndMsgToAll, autoDeclare, sendGuildActivityStatus } from './guildActivity/guildActivityService';
|
||||
import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
|
||||
import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
|
||||
import { dispatch } from '../pubUtils/dispatcher';
|
||||
|
||||
@@ -78,6 +78,8 @@ export default class UserGuildActivityRec extends BaseModel {
|
||||
record: Record[]; // 个人总军功
|
||||
@prop({ required: true })
|
||||
round: number; // 回合数
|
||||
@prop({ required: true })
|
||||
gateHp: number; // 最终城门血量
|
||||
|
||||
// 诸侯混战字段
|
||||
@prop({ required: true, default: 0 })
|
||||
|
||||
Reference in New Issue
Block a user