军团活动:修复rpc调用以及其他问题
This commit is contained in:
@@ -123,6 +123,14 @@ app.configure('production|development|alpha|dev|isbn', 'gm', function () {
|
|||||||
init();//将gm后台数据加载到gate服
|
init();//将gm后台数据加载到gate服
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.configure('production|development|alpha|dev|isbn', 'guild', function () {
|
||||||
|
app.set('connectorConfig',
|
||||||
|
{
|
||||||
|
connector: pinus.connectors.hybridconnector,
|
||||||
|
useProtobuf: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
app.configure('production|development|alpha|dev|isbn', 'systimer', function () {
|
app.configure('production|development|alpha|dev|isbn', 'systimer', function () {
|
||||||
app.set('connectorConfig',
|
app.set('connectorConfig',
|
||||||
{
|
{
|
||||||
@@ -176,6 +184,7 @@ app.configure('production|development|alpha|dev|isbn', function () {
|
|||||||
app.route('chat', routeUtil.chat);
|
app.route('chat', routeUtil.chat);
|
||||||
app.route('battle', routeUtil.battle);
|
app.route('battle', routeUtil.battle);
|
||||||
app.route('gm', routeUtil.gm);
|
app.route('gm', routeUtil.gm);
|
||||||
|
app.route('guild', routeUtil.guild);
|
||||||
|
|
||||||
// filter configures
|
// filter configures
|
||||||
app.filter(new pinus.filters.time());
|
app.filter(new pinus.filters.time());
|
||||||
@@ -198,6 +207,7 @@ app.configure('production|development|alpha|dev|isbn', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
app.configure('development', function () {
|
app.configure('development', function () {
|
||||||
// enable the system monitor modules
|
// enable the system monitor modules
|
||||||
app.enable('systemMonitor');
|
app.enable('systemMonitor');
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export class GuildRemote {
|
|||||||
private GUILD_REC_ADD = 'onGuildRecAdd';
|
private GUILD_REC_ADD = 'onGuildRecAdd';
|
||||||
private GUILD_ACT_RANK = 'onGuildGateRankUpdate'; // 军团活动排行榜
|
private GUILD_ACT_RANK = 'onGuildGateRankUpdate'; // 军团活动排行榜
|
||||||
private GUILD_GATE_ACT_HP = 'onGuildGateHpUpdate'; // 军团活动蛮夷入侵排行榜
|
private GUILD_GATE_ACT_HP = 'onGuildGateHpUpdate'; // 军团活动蛮夷入侵排行榜
|
||||||
|
private GUILD_ACTIVITY_END = 'onGuildActivityEnd';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 封装,军团相关channel名: 'guild'+guildCode
|
* 封装,军团相关channel名: 'guild'+guildCode
|
||||||
@@ -158,6 +159,14 @@ export class GuildRemote {
|
|||||||
this.pushMessage(guildCode, this.GUILD_REC_ADD, {type, params, createTime});
|
this.pushMessage(guildCode, this.GUILD_REC_ADD, {type, params, createTime});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向军团推送城门血量
|
||||||
|
* @param guildCode
|
||||||
|
*/
|
||||||
|
public pushGateHp(guildCode: string, msg: GuildGateRankParam) {
|
||||||
|
this.pushMessage(guildCode, this.GUILD_GATE_ACT_HP, msg);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 向军团推送排行榜名次
|
* 向军团推送排行榜名次
|
||||||
* @param guildCode
|
* @param guildCode
|
||||||
@@ -165,4 +174,13 @@ export class GuildRemote {
|
|||||||
public pushRank(guildCode: string, msg: GuildGateRankParam) {
|
public pushRank(guildCode: string, msg: GuildGateRankParam) {
|
||||||
this.pushMessage(guildCode, this.GUILD_ACT_RANK, msg);
|
this.pushMessage(guildCode, this.GUILD_ACT_RANK, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 向军团推送结束活动
|
||||||
|
* @param guildCode
|
||||||
|
*/
|
||||||
|
public async sendGuildActivityEnd(guildCode: string) {
|
||||||
|
console.log("MSG END")
|
||||||
|
this.pushMessage(guildCode, this.GUILD_ACTIVITY_END, {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Application, BackendSession, ChannelService } from "pinus";
|
import { Application, BackendSession, ChannelService, pinus } from "pinus";
|
||||||
import { setMedianCe, getMedianCe, getGuildActivityStatus, getRecordScore, getGuildActivityObj, getGuildActivityRank } from "../../../services/guildActivityService";
|
import { setMedianCe, getMedianCe, getGuildActivityStatus, getRecordScore, getGuildActivityObj, getGuildActivityRank, sendSingleGuildGateActEndMsg, sendGuildActEndMsg } from "../../../services/guildActivityService";
|
||||||
import { resResult } from "../../../pubUtils/util";
|
import { resResult } from "../../../pubUtils/util";
|
||||||
import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS } from "../../../consts";
|
import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS } from "../../../consts";
|
||||||
import { GameModel } from "../../../db/Game";
|
import { GameModel } from "../../../db/Game";
|
||||||
@@ -14,6 +14,8 @@ import { setRank, getGuildKeyName, getRankScore, getRank, getUnionRank } from ".
|
|||||||
import { REDIS_KEY } from "../../../consts";
|
import { REDIS_KEY } from "../../../consts";
|
||||||
import { addActive } from "../../../services/guildService";
|
import { addActive } from "../../../services/guildService";
|
||||||
import { gameData } from "../../../pubUtils/data";
|
import { gameData } from "../../../pubUtils/data";
|
||||||
|
import { getGuildChannelSid } from "../../../services/chatService";
|
||||||
|
import { guildActivityStart } from "../../../services/timeTaskService";
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
return new GateActivityHandler(app);
|
return new GateActivityHandler(app);
|
||||||
@@ -42,7 +44,7 @@ export class GateActivityHandler {
|
|||||||
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||||
|
|
||||||
let { code: sourceCode } = guildActivityRec;
|
let { code: sourceCode } = guildActivityRec;
|
||||||
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, [], this.aid);
|
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, this.aid);
|
||||||
let { challengeCnt } = myGuildActivityRec;
|
let { challengeCnt } = myGuildActivityRec;
|
||||||
|
|
||||||
let ranks = await getGuildActivityRank(guildCode, serverId, roleId, roleName);
|
let ranks = await getGuildActivityRank(guildCode, serverId, roleId, roleName);
|
||||||
@@ -64,8 +66,9 @@ export class GateActivityHandler {
|
|||||||
const serverId = session.get('serverId');
|
const serverId = session.get('serverId');
|
||||||
const guildCode = session.get('guildCode');
|
const guildCode = session.get('guildCode');
|
||||||
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||||
|
let obj = getGuildActivityObj(this.aid);
|
||||||
|
|
||||||
let gateHp = getGuildActivityObj(this.aid).getGateHpAndInc(guildCode);
|
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||||
|
|
||||||
let statusResult = getGuildActivityStatus(this.aid);
|
let statusResult = getGuildActivityStatus(this.aid);
|
||||||
@@ -77,11 +80,15 @@ export class GateActivityHandler {
|
|||||||
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
if(!guildActivityRec) return resResult(STATUS.INTERNAL_ERR);
|
||||||
|
|
||||||
let { code: sourceCode } = guildActivityRec;
|
let { code: sourceCode } = guildActivityRec;
|
||||||
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, heroes, this.aid);
|
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, this.aid);
|
||||||
|
if(myGuildActivityRec.challengeCnt > 0) {
|
||||||
|
return resResult(STATUS.CHALLENGE_CNT_NOT_ENOUGH);
|
||||||
|
}
|
||||||
|
await UserGuildActivityRecModel.incChallengeCnt(myGuildActivityRec.code, heroes);
|
||||||
let { code, challengeCnt } = myGuildActivityRec;
|
let { code, challengeCnt } = myGuildActivityRec;
|
||||||
|
|
||||||
// 更新公会参与的玩家
|
// 更新公会参与的玩家
|
||||||
getGuildActivityObj(this.aid).pushMembers(guildCode, serverId, roleId);
|
obj.pushMembers(guildCode, serverId, roleId);
|
||||||
|
|
||||||
// 返回当前军团总军功
|
// 返回当前军团总军功
|
||||||
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||||
@@ -108,21 +115,22 @@ export class GateActivityHandler {
|
|||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
|
|
||||||
let { code, record } = msg;
|
let { code, record } = msg;
|
||||||
|
let obj = getGuildActivityObj(this.aid);
|
||||||
|
|
||||||
let statusResult = getGuildActivityStatus(this.aid);
|
let statusResult = getGuildActivityStatus(this.aid);
|
||||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
// TODO 测试完成后去掉这条判断
|
// TODO 测试完成后去掉这条判断
|
||||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||||
|
|
||||||
let gateHp = getGuildActivityObj(this.aid).getGateHpAndInc(guildCode);
|
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||||
|
|
||||||
// 计算record内得分
|
// 计算record内得分
|
||||||
let memberRecord = getGuildActivityObj(this.aid).getMemberRecord(code, roleId);
|
let memberRecord = obj.getMemberRecord(code, roleId);
|
||||||
let scoreResult = getRecordScore(this.aid, record, memberRecord);
|
let scoreResult = getRecordScore(this.aid, record, memberRecord);
|
||||||
if(!scoreResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if(!scoreResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let { score, newRecords, memberRecord: newMemberRecord } = scoreResult;
|
let { score, newRecords, memberRecord: newMemberRecord } = scoreResult;
|
||||||
getGuildActivityObj(this.aid).setMemberRecord(code, memberRecord);
|
obj.setMemberRecord(code, newMemberRecord);
|
||||||
|
|
||||||
// 更新redis数据
|
// 更新redis数据
|
||||||
let role = await RoleModel.findByRoleId(roleId);
|
let role = await RoleModel.findByRoleId(roleId);
|
||||||
@@ -154,7 +162,8 @@ export class GateActivityHandler {
|
|||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
|
|
||||||
let { code, damage } = msg;
|
let { code, damage } = msg;
|
||||||
let gateHp = getGuildActivityObj(this.aid).getGateHpAndInc(guildCode);
|
let obj = getGuildActivityObj(this.aid);
|
||||||
|
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||||
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
if(gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
|
||||||
|
|
||||||
let statusResult = getGuildActivityStatus(this.aid);
|
let statusResult = getGuildActivityStatus(this.aid);
|
||||||
@@ -162,11 +171,14 @@ export class GateActivityHandler {
|
|||||||
// TODO 测试完成后去掉这条判断
|
// TODO 测试完成后去掉这条判断
|
||||||
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
// if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||||
|
|
||||||
gateHp = getGuildActivityObj(this.aid).getGateHpAndInc(guildCode, -1 * damage);
|
gateHp = obj.getGateHpAndInc(guildCode, -1 * damage);
|
||||||
if(gateHp <= 0) {
|
if(gateHp <= 0) {
|
||||||
// TODO 推送 停止活动
|
// 推送 停止活动并结算奖励
|
||||||
|
await sendSingleGuildGateActEndMsg(guildCode, serverId);
|
||||||
}
|
}
|
||||||
// TODO 推送 城门血量
|
// 推送 城门血量
|
||||||
|
let chatSid = await getGuildChannelSid(guildCode);
|
||||||
|
pinus.app.rpc.chat.guildRemote.pushGateHp.toServer(chatSid, guildCode, { gateHp });
|
||||||
|
|
||||||
// 返回当前军团总军功
|
// 返回当前军团总军功
|
||||||
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||||
@@ -189,6 +201,7 @@ export class GateActivityHandler {
|
|||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
|
|
||||||
let { code, isSuccess } = msg;
|
let { code, isSuccess } = msg;
|
||||||
|
let obj = getGuildActivityObj(this.aid);
|
||||||
|
|
||||||
let statusResult = getGuildActivityStatus(this.aid);
|
let statusResult = getGuildActivityStatus(this.aid);
|
||||||
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
@@ -217,7 +230,7 @@ export class GateActivityHandler {
|
|||||||
let role = await RoleModel.findByRoleId(roleId);
|
let role = await RoleModel.findByRoleId(roleId);
|
||||||
let { lv, vLv, head, frame, spine, title } = role;
|
let { lv, vLv, head, frame, spine, title } = role;
|
||||||
let userParam = new RankParam(roleName, lv, vLv, head, frame, spine, title);
|
let userParam = new RankParam(roleName, lv, vLv, head, frame, spine, title);
|
||||||
await setRank(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, guildCode, score, Date.now(), userParam);
|
await setRank(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, roleId, score, Date.now(), userParam);
|
||||||
|
|
||||||
let guild = await GuildModel.findByCode(guildCode, serverId);
|
let guild = await GuildModel.findByCode(guildCode, serverId);
|
||||||
let leader = <RoleType>guild.leader;
|
let leader = <RoleType>guild.leader;
|
||||||
@@ -230,9 +243,9 @@ export class GateActivityHandler {
|
|||||||
// 返回当前军团总军功
|
// 返回当前军团总军功
|
||||||
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||||
let myScore = await getRankScore(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, roleId, true);
|
let myScore = await getRankScore(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, roleId, true);
|
||||||
let gateHp = getGuildActivityObj(this.aid).getGateHpAndInc(guildCode);
|
let gateHp = obj.getGateHpAndInc(guildCode);
|
||||||
|
|
||||||
getGuildActivityObj(this.aid).delMemberRecord(code);
|
obj.delMemberRecord(code);
|
||||||
let info = {
|
let info = {
|
||||||
round,
|
round,
|
||||||
enemyCnt, littleBossCnt, bossCnt,
|
enemyCnt, littleBossCnt, bossCnt,
|
||||||
@@ -261,7 +274,9 @@ export class GateActivityHandler {
|
|||||||
|
|
||||||
async debugGetPrivate(msg: { }, session: BackendSession) {
|
async debugGetPrivate(msg: { }, session: BackendSession) {
|
||||||
let guildCode = session.get('guildCode');
|
let guildCode = session.get('guildCode');
|
||||||
let res = getGuildActivityObj(this.aid).getObj(guildCode);
|
console.log(guildCode);
|
||||||
|
let serverId = session.get('serverId');
|
||||||
|
let res = getGuildActivityObj(this.aid).getObj(guildCode, serverId);
|
||||||
return resResult(STATUS.SUCCESS, res)
|
return resResult(STATUS.SUCCESS, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,4 +285,24 @@ export class GateActivityHandler {
|
|||||||
let result = await setMedianCe();
|
let result = await setMedianCe();
|
||||||
return resResult(STATUS.SUCCESS, {result});
|
return resResult(STATUS.SUCCESS, {result});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async debugIncChallengeCnt(msg: { }, session: BackendSession) {
|
||||||
|
let roleId = session.get('roleId');
|
||||||
|
let res = await UserGuildActivityRecModel.updateInfoByRoleId(roleId, { challengeCnt: 0 });
|
||||||
|
|
||||||
|
return resResult(STATUS.SUCCESS, { challengeCnt: res.challengeCnt });
|
||||||
|
}
|
||||||
|
|
||||||
|
async debugStartActivity(msg: { aid: number }, session: BackendSession) {
|
||||||
|
let { aid } = msg;
|
||||||
|
let dic = gameData.guildActivity.get(aid);
|
||||||
|
await guildActivityStart(dic);
|
||||||
|
return resResult(STATUS.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
async debugEndActivity(msg: { aid: number }, session: BackendSession) {
|
||||||
|
let { aid } = msg;
|
||||||
|
await sendGuildActEndMsg(aid);
|
||||||
|
return resResult(STATUS.SUCCESS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ export class GuildActivityRemote {
|
|||||||
/**
|
/**
|
||||||
* 从systimer服分发到guild各个服,发送排行榜数据
|
* 从systimer服分发到guild各个服,发送排行榜数据
|
||||||
*/
|
*/
|
||||||
public async sendRankToGuilds() {
|
public async sendRankToGuilds(aid: number) {
|
||||||
await sendAllGuildRanks();
|
await sendAllGuildRanks(aid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送结束活动消息
|
* 发送结束活动消息
|
||||||
*/
|
*/
|
||||||
public async guildActivityEnd() {
|
public async guildActivityEnd(aid: number) {
|
||||||
await sendGuildActEndMsg();
|
await sendGuildActEndMsg(aid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,9 +11,12 @@ import { SystimerRemote } from './systimer/remote/systimerRemote';
|
|||||||
import { GuildRemote } from './chat/remote/guildRemote';
|
import { GuildRemote } from './chat/remote/guildRemote';
|
||||||
import { GMRemote } from './gm/remote/gmRemote';
|
import { GMRemote } from './gm/remote/gmRemote';
|
||||||
import { RoleRemote } from './role/remote/roleRemote';
|
import { RoleRemote } from './role/remote/roleRemote';
|
||||||
import { GuildActivityRemote } from './guild/remote/guildActivitRemote';
|
import { GuildActivityRemote } from './guild/remote/guildActivityRemote';
|
||||||
declare global {
|
declare global {
|
||||||
interface UserRpc {
|
interface UserRpc {
|
||||||
|
guild: {
|
||||||
|
guildActivityRemote: RemoterClass<FrontendSession, GuildActivityRemote>;
|
||||||
|
},
|
||||||
chat: {
|
chat: {
|
||||||
chatRemote: RemoterClass<FrontendSession, ChatRemote>;
|
chatRemote: RemoterClass<FrontendSession, ChatRemote>;
|
||||||
guildRemote: RemoterClass<FrontendSession, GuildRemote>;
|
guildRemote: RemoterClass<FrontendSession, GuildRemote>;
|
||||||
@@ -33,9 +36,6 @@ declare global {
|
|||||||
},
|
},
|
||||||
role: {
|
role: {
|
||||||
roleRemote: RemoterClass<FrontendSession, RoleRemote>;
|
roleRemote: RemoterClass<FrontendSession, RoleRemote>;
|
||||||
},
|
|
||||||
guild: {
|
|
||||||
guildActivityRemote: RemoterClass<FrontendSession, GuildActivityRemote>;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,17 +2,22 @@ import { ServerlistModel } from "../db/Serverlist";
|
|||||||
import { RoleModel } from "../db/Role";
|
import { RoleModel } from "../db/Role";
|
||||||
import { reduceCe } from "../pubUtils/util";
|
import { reduceCe } from "../pubUtils/util";
|
||||||
import { GUILDACTIVITY } from "../pubUtils/dicParam";
|
import { GUILDACTIVITY } from "../pubUtils/dicParam";
|
||||||
import { gameData, getTodayGuildActivity } from "../pubUtils/data";
|
import { gameData, getGuildAuctionRewards, getTodayGuildActivity } from "../pubUtils/data";
|
||||||
import { getCurHourPoint, getCutDay, nowSeconds } from "../pubUtils/timeUtil";
|
import { getCurHourPoint, getCutDay, nowSeconds } from "../pubUtils/timeUtil";
|
||||||
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY } from "../consts";
|
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, AUCTION_SOURCE, MAIL_TYPE } from "../consts";
|
||||||
import { Record } from "../db/UserGuildActivityRec";
|
import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec";
|
||||||
import { GateMembersRec, GateActivityObject } from "../domain/battleField/guildActivity";
|
import { GateMembersRec, GateActivityObject } from "../domain/battleField/guildActivity";
|
||||||
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
|
import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity";
|
||||||
import { getUnionRank, getRank, getGuildKeyName } from "./redisService";
|
import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore } from "./redisService";
|
||||||
import { GuildModel } from "../db/Guild";
|
import { GuildModel } from "../db/Guild";
|
||||||
import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank";
|
import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank";
|
||||||
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
|
import { getGuildChannelSid, getWorldChannelSid } from "./chatChannelService";
|
||||||
import { pinus } from "pinus";
|
import { pinus } from "pinus";
|
||||||
|
import { GuildActivityRecordModel } from "../db/GuildActivityRec";
|
||||||
|
import { uniq } from 'underscore'
|
||||||
|
import { genAuction } from "./auctionService";
|
||||||
|
import { sendMail } from "./mailService";
|
||||||
|
import { getHonourObject } from '../pubUtils/itemUtils';
|
||||||
|
|
||||||
let gateActivityObj: GateActivityObject;
|
let gateActivityObj: GateActivityObject;
|
||||||
export function getGuildActivityObj(aid: number) {
|
export function getGuildActivityObj(aid: number) {
|
||||||
@@ -177,25 +182,85 @@ export async function getGuildActivityRank(guildCode: string, serverId: number,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 对这个guild服内所有军团发排行榜信息
|
* 对这个guild服内所有军团发排行榜信息
|
||||||
|
* @param aid 活动类型
|
||||||
*/
|
*/
|
||||||
export async function sendAllGuildRanks() {
|
export async function sendAllGuildRanks(aid: number) {
|
||||||
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
let obj = getGuildActivityObj(aid);
|
||||||
let guilds = obj.getGuilds();
|
let guilds = obj.getGuilds();
|
||||||
for(let [ serverId, guildCodes ] of guilds) {
|
for(let [ serverId, guildCodes ] of guilds) {
|
||||||
// TODO 不需要每个军团都排序一次
|
// TODO 不需要每个军团都排序一次
|
||||||
for(let guildCode of guildCodes) {
|
for(let guildCode of guildCodes) {
|
||||||
let ranks = await getGuildActivityRank(guildCode, serverId);
|
let ranks = await getGuildActivityRank(guildCode, serverId);
|
||||||
let chatSid = await getGuildChannelSid(guildCode);
|
let chatSid = await getGuildChannelSid(guildCode);
|
||||||
pinus.app.rpc.chat.guildRemote.pushRank.toServer(chatSid, ranks);
|
pinus.app.rpc.chat.guildRemote.pushRank.toServer(chatSid, guildCode, ranks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function sendGuildActEndMsg() {
|
/**
|
||||||
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
* 活动结束发送结束信号以及结算奖励
|
||||||
|
* @param aid 活动类型
|
||||||
|
*/
|
||||||
|
export async function sendGuildActEndMsg(aid: number) {
|
||||||
|
let obj = getGuildActivityObj(aid);
|
||||||
let guilds = obj.getGuilds();
|
let guilds = obj.getGuilds();
|
||||||
for(let [ serverId ] of guilds) {
|
for(let [ serverId, guildCodes ] of guilds) {
|
||||||
let chatSid = await getWorldChannelSid(serverId);
|
let chatSid = await getWorldChannelSid(serverId);
|
||||||
pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId);
|
pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId);
|
||||||
|
|
||||||
|
if(aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
|
||||||
|
for(let guildCode of guildCodes) {
|
||||||
|
await gateActivitySettleReward(guildCode, serverId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单个军团城门血条破了之后给他发奖励
|
||||||
|
* @param guildCode
|
||||||
|
*/
|
||||||
|
export async function sendSingleGuildGateActEndMsg(guildCode: string, serverId: number) {
|
||||||
|
let chatSid = await getGuildChannelSid(guildCode);
|
||||||
|
pinus.app.rpc.chat.guildRemote.sendGuildActivityEnd.toServer(chatSid, guildCode);
|
||||||
|
await gateActivitySettleReward(guildCode, serverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 军团结算奖励
|
||||||
|
* @param guildCode
|
||||||
|
* @param serverId
|
||||||
|
*/
|
||||||
|
export async function gateActivitySettleReward(guildCode: string, serverId: number) {
|
||||||
|
let obj = getGuildActivityObj(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||||
|
let { gateHp, members } = obj.getObj(guildCode, serverId);
|
||||||
|
members = uniq(members);
|
||||||
|
|
||||||
|
let rank = await getMyUnionRank(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||||
|
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
|
||||||
|
|
||||||
|
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, rank);
|
||||||
|
|
||||||
|
let rec = await GuildActivityRecordModel.updateInfo(guildCode, {
|
||||||
|
isSuccess: gateHp > 0,
|
||||||
|
isCompleted: true,
|
||||||
|
rank, score: guildScore, remainGateHp: gateHp,
|
||||||
|
members, memberCnt: members.length,
|
||||||
|
rewards
|
||||||
|
});
|
||||||
|
// 结算功勋等奖励
|
||||||
|
let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||||
|
let memberRankResult = await getRank(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, '');
|
||||||
|
for(let { rank, roleId, num: myScore } of memberRankResult.ranks) {
|
||||||
|
let honour = dic.honour + myScore * GUILDACTIVITY.GATEACTIVITY_HONOUR_RATIO;
|
||||||
|
let honourObj = getHonourObject(Math.floor(honour));
|
||||||
|
await sendMail(MAIL_TYPE.GUILD_ACTIVITY_REWARD, roleId, '系统', [], [honourObj])
|
||||||
|
|
||||||
|
await UserGuildActivityRecModel.updateInfoByRoleId(roleId, { score: myScore, rank });
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加入拍卖行
|
||||||
|
await genAuction(guildCode, AUCTION_SOURCE.GATE, rec.code, serverId, rewards);
|
||||||
|
|
||||||
|
obj.delGuildRecord(guildCode, serverId);
|
||||||
}
|
}
|
||||||
@@ -173,7 +173,7 @@ export async function setRank(key: string, serverId: number, myId: string, score
|
|||||||
if(!hasCurUser) {
|
if(!hasCurUser) {
|
||||||
await redisUserInfoAdd(infoKey, myId, params);
|
await redisUserInfoAdd(infoKey, myId, params);
|
||||||
}
|
}
|
||||||
return true;
|
return newScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取排行榜
|
// 获取排行榜
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { MAIL_TYPE, REDIS_KEY, ADULT_AGE, GUEST_MAX_TIME, ADDICTION_PREVENTION_C
|
|||||||
import { RankParam } from '../domain/rank';
|
import { RankParam } from '../domain/rank';
|
||||||
import { RoleModel } from '../db/Role';
|
import { RoleModel } from '../db/Role';
|
||||||
import { MailModel, MailType } from '../db/Mail';
|
import { MailModel, MailType } from '../db/Mail';
|
||||||
import { pinus } from 'pinus';
|
import { pinus, Application } from 'pinus';
|
||||||
import { indexOf } from 'underscore';
|
import { indexOf } from 'underscore';
|
||||||
import { PvpSeasonResultModel } from '../db/PvpSeasonResult';
|
import { PvpSeasonResultModel } from '../db/PvpSeasonResult';
|
||||||
import { settleGuildWeekly } from './guildService';
|
import { settleGuildWeekly } from './guildService';
|
||||||
@@ -20,8 +20,9 @@ import { STATUS } from '../consts/statusCode';
|
|||||||
import { getMailContent, sendMail } from './mailService';
|
import { getMailContent, sendMail } from './mailService';
|
||||||
import { reportOnline } from '../pubUtils/httpUtil';
|
import { reportOnline } from '../pubUtils/httpUtil';
|
||||||
import User, { UserModel } from '../db/User';
|
import User, { UserModel } from '../db/User';
|
||||||
import { getGuildActivityByDic, getGuildActivityRank } from './guildActivityService';
|
import { getGuildActivityByDic, getGuildActivityRank, setMedianCe } from './guildActivityService';
|
||||||
import { sendUngotDividend, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
|
import { sendUngotDividend, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
|
||||||
|
import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
|
||||||
const PER_SECOND = 1 * 1000;
|
const PER_SECOND = 1 * 1000;
|
||||||
const PER_DAY = 24 * 60 * 60;
|
const PER_DAY = 24 * 60 * 60;
|
||||||
const SETTLE_DIFF = 29 * 60;
|
const SETTLE_DIFF = 29 * 60;
|
||||||
@@ -68,9 +69,14 @@ export async function init() {
|
|||||||
// 每5分钟汇报在线玩家在线情况
|
// 每5分钟汇报在线玩家在线情况
|
||||||
scheduleJob('reportOnline', '0 0/5 * * * *', reportOnlineSchedule);
|
scheduleJob('reportOnline', '0 0/5 * * * *', reportOnlineSchedule);
|
||||||
|
|
||||||
|
// 军团活动排行榜
|
||||||
guildActivitySchedule();
|
guildActivitySchedule();
|
||||||
|
// 每天0点计算前一天活跃玩家中位数战力
|
||||||
|
scheduleJob('setMedian', '0 0 5 * * ?', setMedianCe);
|
||||||
|
|
||||||
// 拍卖行刷新:拍卖阶段刷新,分红发放
|
// 拍卖行刷新:拍卖阶段刷新,分红发放
|
||||||
auctionSchedule();
|
auctionSchedule();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function setPvpSeasonSchdule() {
|
function setPvpSeasonSchdule() {
|
||||||
@@ -334,8 +340,9 @@ export async function reportOneOnline(roleId: string, userCode: string, sid: str
|
|||||||
* 军团活动,每晚8点开启
|
* 军团活动,每晚8点开启
|
||||||
*/
|
*/
|
||||||
async function guildActivitySchedule() {
|
async function guildActivitySchedule() {
|
||||||
// 军团晚间活动,每天8点开始
|
/***********guildActivitySchedule***********/
|
||||||
scheduleJob('guildActivityStart', '0 0 20 * * ?', guildActivityStart);
|
|
||||||
|
scheduleJob('guildActivityStart', '0 0 20 * * ?', guildActivityStartSchedule);
|
||||||
|
|
||||||
let dicGuildActivity = getTodayGuildActivity();
|
let dicGuildActivity = getTodayGuildActivity();
|
||||||
let statusResult = getGuildActivityByDic(dicGuildActivity);
|
let statusResult = getGuildActivityByDic(dicGuildActivity);
|
||||||
@@ -347,38 +354,44 @@ async function guildActivitySchedule() {
|
|||||||
if(dicGuildActivity.id == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
|
if(dicGuildActivity.id == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
|
||||||
seconds = 1;
|
seconds = 1;
|
||||||
}
|
}
|
||||||
guildActSecondsJobId = scheduleJob('guildActivitySeconds', seconds, guildActivitySeconds);
|
guildActSecondsJobId = scheduleJob('guildActivitySeconds', `*/${seconds} * * * * *`, gateActivitySeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!guildActEndJobId) {
|
if(!guildActEndJobId) {
|
||||||
guildActEndJobId = scheduleJob('guildActivityEnd', statusResult.time, guildActivityEnd);
|
guildActEndJobId = scheduleJob('guildActivityEnd', statusResult.time, gateActivityEnd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开始军团活动
|
// 军团晚间活动,每天8点开始
|
||||||
export async function guildActivityStart() {
|
async function guildActivityStartSchedule() {
|
||||||
|
await guildActivityStart();
|
||||||
|
}
|
||||||
|
|
||||||
let dicGuildActivity = getTodayGuildActivity();
|
export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) {
|
||||||
|
console.log('***********开始军团晚间活动****')
|
||||||
|
if(!dicGuildActivity) dicGuildActivity = getTodayGuildActivity();
|
||||||
if(!dicGuildActivity) return;
|
if(!dicGuildActivity) return;
|
||||||
|
|
||||||
|
|
||||||
let seconds = 10; // 每10秒下发一次
|
if(dicGuildActivity.id == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
|
||||||
if(dicGuildActivity.id == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
|
guildActSecondsJobId = scheduleJob('guildActivitySeconds', '*/10 * * * * *', gateActivitySeconds);
|
||||||
seconds = 1;
|
// 结束时间
|
||||||
|
guildActEndJobId = scheduleJob('guildActivityEnd', dicGuildActivity.duringTime, gateActivityEnd);
|
||||||
|
} else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) {
|
||||||
|
|
||||||
|
} else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
|
||||||
|
|
||||||
}
|
}
|
||||||
guildActSecondsJobId = scheduleJob('guildActivitySeconds', seconds, guildActivitySeconds);
|
|
||||||
// 结束时间
|
|
||||||
guildActEndJobId = scheduleJob('guildActivityEnd', dicGuildActivity.duringTime, guildActivityEnd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 蛮夷入侵
|
||||||
// 结束军团活动
|
// 结束军团活动
|
||||||
export async function guildActivityEnd() {
|
export async function gateActivityEnd() {
|
||||||
|
|
||||||
let servers = pinus.app.getServersByType('guild');
|
let servers = pinus.app.getServersByType('guild');
|
||||||
console.log(servers);
|
|
||||||
for(let { id } of servers) {
|
for(let { id } of servers) {
|
||||||
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id);
|
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(guildActSecondsJobId) guildActSecondsJobId.cancel();
|
if(guildActSecondsJobId) guildActSecondsJobId.cancel();
|
||||||
@@ -386,11 +399,10 @@ export async function guildActivityEnd() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 每10秒下发一次的任务
|
// 每10秒下发一次的任务
|
||||||
export async function guildActivitySeconds() {
|
export async function gateActivitySeconds() {
|
||||||
let servers = pinus.app.getServersByType('guild');
|
let servers = pinus.app.getServersByType('guild');
|
||||||
console.log(servers);
|
|
||||||
for(let { id } of servers) {
|
for(let { id } of servers) {
|
||||||
await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.toServer(id);
|
await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.toServer(id, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,10 @@ export function guild(session: Session, msg: any, app: Application, cb: (err: Er
|
|||||||
if (['guild.gateActivityHandler.checkBattle', // 军团活动蛮夷入侵路由,按军团路由
|
if (['guild.gateActivityHandler.checkBattle', // 军团活动蛮夷入侵路由,按军团路由
|
||||||
'guild.gateActivityHandler.action',
|
'guild.gateActivityHandler.action',
|
||||||
'guild.gateActivityHandler.hitGate',
|
'guild.gateActivityHandler.hitGate',
|
||||||
'guild.gateActivityHandler.battleEnd'
|
'guild.gateActivityHandler.battleEnd',
|
||||||
|
'guild.gateActivityHandler.debugGetPrivate',
|
||||||
|
'guild.gateActivityHandler.debugStartActivity',
|
||||||
|
'guild.gateActivityHandler.debugEndActivity'
|
||||||
].indexOf(arg.route) !== -1) {
|
].indexOf(arg.route) !== -1) {
|
||||||
rid = session.get('guildCode');
|
rid = session.get('guildCode');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ module.exports = {
|
|||||||
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233"}
|
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233"}
|
||||||
],
|
],
|
||||||
'guild': [
|
'guild': [
|
||||||
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9238"},
|
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239"},
|
||||||
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9238"}
|
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'production': {
|
'production': {
|
||||||
@@ -81,8 +81,8 @@ module.exports = {
|
|||||||
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
|
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
|
||||||
],
|
],
|
||||||
'guild': [
|
'guild': [
|
||||||
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9238"},
|
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239"},
|
||||||
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9238"}
|
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'alpha': {
|
'alpha': {
|
||||||
@@ -119,8 +119,8 @@ module.exports = {
|
|||||||
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
|
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
|
||||||
],
|
],
|
||||||
'guild': [
|
'guild': [
|
||||||
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9238"},
|
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239"},
|
||||||
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9238"}
|
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'dev': {
|
'dev': {
|
||||||
@@ -158,8 +158,8 @@ module.exports = {
|
|||||||
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233"}
|
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056, "args": " --inspect=9233"}
|
||||||
],
|
],
|
||||||
'guild': [
|
'guild': [
|
||||||
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9238"},
|
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239"},
|
||||||
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9238"}
|
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'isbn': {
|
'isbn': {
|
||||||
@@ -194,8 +194,8 @@ module.exports = {
|
|||||||
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
|
{'id': 'systimer-server-1', 'host': '127.0.0.1', 'port': 6056}
|
||||||
],
|
],
|
||||||
'guild': [
|
'guild': [
|
||||||
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9238"},
|
{'id': 'guild-server-1', 'host': '127.0.0.1', 'port': 6057, "args": " --inspect=9239"},
|
||||||
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9238"}
|
{'id': 'guild-server-2', 'host': '127.0.0.1', 'port': 6058, "args": " --inspect=9240"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -164,4 +164,4 @@ export enum ENEMIES_TYPE {
|
|||||||
ENEMY = 2, // 小兵
|
ENEMY = 2, // 小兵
|
||||||
LITTLE_BOSS = 3, // 小boss
|
LITTLE_BOSS = 3, // 小boss
|
||||||
BOSS = 4, // 大boss
|
BOSS = 4, // 大boss
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -341,7 +341,8 @@ export const FILENAME = {
|
|||||||
DIC_ROLE_FRIEND: 'dic_zyz_friends',
|
DIC_ROLE_FRIEND: 'dic_zyz_friends',
|
||||||
DIC_ROLE_FRIEND_LEVEL: 'dic_zyz_closelevel',
|
DIC_ROLE_FRIEND_LEVEL: 'dic_zyz_closelevel',
|
||||||
DIC_GUILD_ACTIVITY: 'dic_zyz_guildActivity',
|
DIC_GUILD_ACTIVITY: 'dic_zyz_guildActivity',
|
||||||
DIC_GATE_ACTIVITY_POINT: 'dic_zyz_gateActivityPoint'
|
DIC_GATE_ACTIVITY_POINT: 'dic_zyz_gateActivityPoint',
|
||||||
|
DIC_GUILD_AUCTION: 'dic_zyz_guildAuction'
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WAR_RELATE_TABLES = [
|
export const WAR_RELATE_TABLES = [
|
||||||
@@ -381,7 +382,8 @@ export const MAIL_TYPE = {
|
|||||||
WISH_POOL_REWARD: 11,
|
WISH_POOL_REWARD: 11,
|
||||||
PVP_RESULT: 12,
|
PVP_RESULT: 12,
|
||||||
PVP_RANK_REWARD: 13,
|
PVP_RANK_REWARD: 13,
|
||||||
GUILD_DIVIDEND: 14, // 拍卖行分红
|
GUILD_ACTIVITY_REWARD: 14,
|
||||||
|
GUILD_DIVIDEND: 15, // 拍卖行分红
|
||||||
};
|
};
|
||||||
|
|
||||||
export const CHAT_SERVER = 'chat-server-1';
|
export const CHAT_SERVER = 'chat-server-1';
|
||||||
|
|||||||
@@ -200,6 +200,7 @@ export const STATUS = {
|
|||||||
// 军团活动 21100-21199
|
// 军团活动 21100-21199
|
||||||
GUILD_ACTIVITY_NOT_OPEN: { code: 21100, simStr: '活动未开放' },
|
GUILD_ACTIVITY_NOT_OPEN: { code: 21100, simStr: '活动未开放' },
|
||||||
GATE_HP_IS_ZERO: { code: 21101, simStr: '城门已被击破' },
|
GATE_HP_IS_ZERO: { code: 21101, simStr: '城门已被击破' },
|
||||||
|
CHALLENGE_CNT_NOT_ENOUGH: { code: 21102, simStr: '挑战次数不足' },
|
||||||
|
|
||||||
// 通用 30000 - 30099
|
// 通用 30000 - 30099
|
||||||
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
||||||
|
|||||||
@@ -35,12 +35,15 @@ export default class GuildActivityRecord extends BaseModel {
|
|||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
memberCnt: number; // 参加的团员的数量
|
memberCnt: number; // 参加的团员的数量
|
||||||
|
|
||||||
@prop({ required: true, type: ()=> ItemReward, default: [] })
|
@prop({ required: true, type: ()=> ItemReward, default: [], _id: false })
|
||||||
rewards: ItemReward[]; // 转到拍卖行的道具
|
rewards: ItemReward[]; // 转到拍卖行的道具
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
score: number; // 蛮夷入侵总军功
|
score: number; // 蛮夷入侵总军功
|
||||||
|
|
||||||
|
@prop({ required: true })
|
||||||
|
remainGateHp: number; // 城门剩余血量
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
cityId: number; // 诸侯混战占领了的城池
|
cityId: number; // 诸侯混战占领了的城池
|
||||||
|
|
||||||
@@ -72,6 +75,14 @@ export default class GuildActivityRecord extends BaseModel {
|
|||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async updateInfo(guildCode: string, update: GuildActivityRecordUpdateParam) {
|
||||||
|
let today = getTodayZeroDate();
|
||||||
|
|
||||||
|
let rec: GuildActivityRecordType = await GuildActivityRecordModel.findOneAndUpdate(
|
||||||
|
{ guildCode, createdAt: { $gte: today } },
|
||||||
|
{ $set: update }, { new: true }).lean();
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);
|
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);
|
||||||
|
|||||||
@@ -62,11 +62,11 @@ export default class UserGuildActivityRec extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
score: number; // 个人总军功
|
score: number; // 个人总军功
|
||||||
|
|
||||||
@prop({ required: true, type: Record })
|
@prop({ required: true, type: Record, _id: false })
|
||||||
record: Record[]; // 个人总军功
|
record: Record[]; // 个人总军功
|
||||||
|
|
||||||
// 每天一条记录
|
// 每天一条记录
|
||||||
public static async getRecord(roleId: string, roleName: string, guildCode: string, serverId: number, sourceCode: string, heroes: number[], aid: number) {
|
public static async getRecord(roleId: string, roleName: string, guildCode: string, serverId: number, sourceCode: string, aid: number) {
|
||||||
let today = getTodayZeroDate();
|
let today = getTodayZeroDate();
|
||||||
let docs = new UserGuildActivityRecModel();
|
let docs = new UserGuildActivityRecModel();
|
||||||
let code = genCode(10);
|
let code = genCode(10);
|
||||||
@@ -76,14 +76,17 @@ export default class UserGuildActivityRec extends BaseModel {
|
|||||||
{ roleId, sourceCode, createdAt: { $gte: today }},
|
{ roleId, sourceCode, createdAt: { $gte: today }},
|
||||||
{ $setOnInsert: update },
|
{ $setOnInsert: update },
|
||||||
{new: true, upsert: true}).lean();
|
{new: true, upsert: true}).lean();
|
||||||
if(heroes.length > 0 && rec) {
|
|
||||||
rec = await UserGuildActivityRecModel.findOneAndUpdate( { code: rec.code}, { $push: { heroes: { $each: heroes}}, $inc: { challengeCnt: 1 }}, {new: true}).lean();
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async incChallengeCnt(code: string, heroes: number[], inc: number = 1 ) {
|
||||||
|
let rec = await UserGuildActivityRecModel.findOneAndUpdate( { code}, { $push: { heroes: { $each: heroes}}, $inc: { challengeCnt: inc }}, {new: true}).lean();
|
||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async pushRecord(code: string, records: Record[]) {
|
public static async pushRecord(code: string, records: Record[]) {
|
||||||
let rec: UserGuildActivityRec = await UserGuildActivityRecModel.findOneAndUpdate(
|
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate(
|
||||||
{ code },
|
{ code },
|
||||||
{ $push: { record: { $each: records } } },
|
{ $push: { record: { $each: records } } },
|
||||||
{ new: true }
|
{ new: true }
|
||||||
@@ -92,7 +95,14 @@ export default class UserGuildActivityRec extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async updateInfo(code: string, update: UserGuildActivityRecUpdateParam) {
|
public static async updateInfo(code: string, update: UserGuildActivityRecUpdateParam) {
|
||||||
let rec: UserGuildActivityRec = await UserGuildActivityRecModel.findOneAndUpdate({ code }, { $set: update }, { new: true }).lean();
|
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate({ code }, { $set: update }, { new: true }).lean();
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateInfoByRoleId(roleId: string, update: UserGuildActivityRecUpdateParam) {
|
||||||
|
let today = getTodayZeroDate();
|
||||||
|
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate(
|
||||||
|
{ roleId, createdAt: { $gte: today } }, { $set: update }, { new: true }).lean();
|
||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,16 +13,18 @@ export class GateMembersRec {
|
|||||||
// 军团活动蛮夷入侵城门血量等数据存储
|
// 军团活动蛮夷入侵城门血量等数据存储
|
||||||
|
|
||||||
export class GateActivityObject {
|
export class GateActivityObject {
|
||||||
private gateHp: Map<string, number> = new Map(); // 城门血条,每个军团有一条血条
|
private gateHp: Map<string, number> = new Map(); // 城门血条,每个军团有一条血条 guildCode => hp
|
||||||
private members: Map<string, Array<string>> = new Map(); // 每个军团参与的成员
|
private members: Map<string, Array<string>> = new Map(); // 每个军团参与的成员 guildCode => [roleId]
|
||||||
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷
|
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec
|
||||||
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团
|
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团 server => [guildCode]
|
||||||
|
|
||||||
public getObj(guildCode: string) {
|
public getObj(guildCode: string, serverId: number) {
|
||||||
|
console.log(guildCode, serverId)
|
||||||
return {
|
return {
|
||||||
gateHp: this.getGateHpAndInc(guildCode),
|
gateHp: this.getGateHpAndInc(guildCode),
|
||||||
members: this.members.get(guildCode),
|
members: this.members.get(guildCode)||[],
|
||||||
memberesRecord: this.membersRecord.get(guildCode)
|
memberesRecord: [...this.membersRecord],
|
||||||
|
guilds: this.guilds.get(serverId)||[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,27 +50,40 @@ export class GateActivityObject {
|
|||||||
if(this.members.has(guildCode)) {
|
if(this.members.has(guildCode)) {
|
||||||
this.members.get(guildCode).push(roleId);
|
this.members.get(guildCode).push(roleId);
|
||||||
} else {
|
} else {
|
||||||
|
let arr = new Array<string>();
|
||||||
|
arr.push(roleId);
|
||||||
this.members.set(guildCode, [roleId]);
|
this.members.set(guildCode, [roleId]);
|
||||||
}
|
}
|
||||||
if(this.guilds.has(serverId)) {
|
if(this.guilds.has(serverId)) {
|
||||||
this.guilds.set(serverId, []);
|
let arr = this.guilds.get(serverId);
|
||||||
} else {
|
|
||||||
let arr = this.guilds.get(serverId)||[];
|
|
||||||
if(!arr.includes(guildCode)) arr.push(guildCode);
|
if(!arr.includes(guildCode)) arr.push(guildCode);
|
||||||
this.guilds.set(serverId, arr);
|
this.guilds.set(serverId, arr);
|
||||||
|
} else {
|
||||||
|
this.guilds.set(serverId, [guildCode]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public getMemberRecord(code: string, roleId: string) {
|
public getMemberRecord(recCode: string, roleId: string) {
|
||||||
return this.membersRecord.get(code)||new GateMembersRec(roleId)
|
return this.membersRecord.get(recCode)||new GateMembersRec(roleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
public setMemberRecord(code: string, newMemberRecord: GateMembersRec) {
|
public setMemberRecord(recCode: string, newMemberRecord: GateMembersRec) {
|
||||||
this.membersRecord.set(code, newMemberRecord);
|
this.membersRecord.set(recCode, newMemberRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
public delMemberRecord(code: string) {
|
public delMemberRecord(recCode: string) {
|
||||||
this.membersRecord.delete(code);
|
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.gateHp.delete(guildCode);
|
||||||
|
this.members.delete(guildCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ import { dicRoleFriendLv } from "./dictionary/DicRoleFriendLv";
|
|||||||
import { Attribute } from "../domain/roleField/attribute";
|
import { Attribute } from "../domain/roleField/attribute";
|
||||||
import { dicGuildActivity, DicGuildActivity } from './dictionary/DicGuildActivity';
|
import { dicGuildActivity, DicGuildActivity } from './dictionary/DicGuildActivity';
|
||||||
import { dicGateActivityPoint } from './dictionary/DicGateActivityPoint';
|
import { dicGateActivityPoint } from './dictionary/DicGateActivityPoint';
|
||||||
|
import { dicGuildAuction } from './dictionary/DicGuildAuction';
|
||||||
import { getCutDay } from "./timeUtil";
|
import { getCutDay } from "./timeUtil";
|
||||||
|
|
||||||
export const gameData = {
|
export const gameData = {
|
||||||
@@ -144,7 +145,8 @@ export const gameData = {
|
|||||||
roleFriendLv: dicRoleFriendLv,
|
roleFriendLv: dicRoleFriendLv,
|
||||||
figureCondition: figureCondition,
|
figureCondition: figureCondition,
|
||||||
guildActivity: dicGuildActivity,
|
guildActivity: dicGuildActivity,
|
||||||
gateActivityPoint: dicGateActivityPoint
|
gateActivityPoint: dicGateActivityPoint,
|
||||||
|
guildAuction: dicGuildAuction
|
||||||
};
|
};
|
||||||
|
|
||||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||||
@@ -456,3 +458,16 @@ export function getTodayGuildActivity() {
|
|||||||
}
|
}
|
||||||
return dic;
|
return dic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据军团活动排名获得奖励
|
||||||
|
* @param aid 活动id
|
||||||
|
* @param rank 排名
|
||||||
|
*/
|
||||||
|
export function getGuildAuctionRewards(aid: number, rank: number) {
|
||||||
|
let ranksReward = gameData.guildAuction.get(aid)||[];
|
||||||
|
let dic = ranksReward.find(cur => {
|
||||||
|
return rank >= cur.min && (rank <= cur.max || cur.max == 0);
|
||||||
|
});
|
||||||
|
return dic?dic.rewards: new Array<RewardInter>();
|
||||||
|
}
|
||||||
29
shared/pubUtils/dictionary/DicGuildAuction.ts
Normal file
29
shared/pubUtils/dictionary/DicGuildAuction.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
// 公会权限
|
||||||
|
import { readJsonFile, parseGoodStr } from '../util'
|
||||||
|
import { FILENAME } from '../../consts'
|
||||||
|
import { RewardInter } from '../../pubUtils/interface';
|
||||||
|
|
||||||
|
export interface DicGuildAuction {
|
||||||
|
|
||||||
|
// 活动类型 1-蛮夷入侵 2-诸侯混战 3-粮草先行
|
||||||
|
readonly id: number;
|
||||||
|
// 最低名次
|
||||||
|
readonly min: number;
|
||||||
|
// 最高名次
|
||||||
|
readonly max: number;
|
||||||
|
// 奖励
|
||||||
|
readonly rewards: RewardInter[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const str = readJsonFile(FILENAME.DIC_GUILD_AUCTION);
|
||||||
|
let arr = JSON.parse(str);
|
||||||
|
|
||||||
|
export const dicGuildAuction = new Map<number, DicGuildAuction[]>();
|
||||||
|
|
||||||
|
arr.forEach(o => {
|
||||||
|
o.rewards = parseGoodStr(o.rewards);
|
||||||
|
let rank = dicGuildAuction.get(o.id)||[];
|
||||||
|
rank.push(o);
|
||||||
|
dicGuildAuction.set(o.id, rank);
|
||||||
|
});
|
||||||
|
arr = undefined;
|
||||||
@@ -130,7 +130,6 @@ export function setCanReceiveAndCanSend(this: any, roleId: string, friendship: F
|
|||||||
let frd = outputCnt(roleId, friendship);
|
let frd = outputCnt(roleId, friendship);
|
||||||
if(frd) {
|
if(frd) {
|
||||||
let { sendHeart, receiveHeart, beSentHeart } = frd;
|
let { sendHeart, receiveHeart, beSentHeart } = frd;
|
||||||
console.log('***',sendHeart, receiveHeart, beSentHeart)
|
|
||||||
if(sendHeart >= 1) {
|
if(sendHeart >= 1) {
|
||||||
this.canSend = false;
|
this.canSend = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,13 @@ export function getFriendPointObject(count: number) {
|
|||||||
return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT), count};
|
return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT), count};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取功勋物品 { id, count }
|
||||||
|
* @param count 功勋数量
|
||||||
|
*/
|
||||||
|
export function getHonourObject(count: number) {
|
||||||
|
return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.HONOUR), count};
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 解锁头像/相框
|
* 解锁头像/相框
|
||||||
* @param roleId 玩家id
|
* @param roleId 玩家id
|
||||||
|
|||||||
@@ -172,11 +172,12 @@ export function getNextTime(date: Date, h: number, m = 0, s = 0, ms = 0): Date {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得某个时间是星期几
|
* 获得某个时间是星期几
|
||||||
|
* @param needHandle 是否处理周日
|
||||||
* @param {Date} time
|
* @param {Date} time
|
||||||
*/
|
*/
|
||||||
export function getCutDay(time?: Date) {
|
export function getCutDay( needHandle = false, time?: Date) {
|
||||||
if(!time) time = new Date();
|
if(!time) time = new Date();
|
||||||
let d = time.getDay();
|
let d = time.getDay();
|
||||||
if(d == 0) d = 7;
|
if(needHandle && d == 0) d = 7;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"id": 0,
|
|
||||||
"content": "%d",
|
|
||||||
"time": 24
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"content": "您对军团%d的申请被拒绝",
|
"content": "您对军团%d的申请被拒绝",
|
||||||
@@ -26,7 +21,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"content": "周活跃分成奖励",
|
"content": "亲爱的小将军,您昨日的军团活跃奖励忘记领取了,现已通过邮件发放,请查收",
|
||||||
"time": 24
|
"time": 24
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -68,5 +63,20 @@
|
|||||||
"id": 13,
|
"id": 13,
|
||||||
"content": "恭喜小将军,您在%d赛季最终获得了第%d名,获得如下奖励:",
|
"content": "恭喜小将军,您在%d赛季最终获得了第%d名,获得如下奖励:",
|
||||||
"time": 24
|
"time": 24
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"content": "亲爱的小将军,您昨日的军团活动奖励忘记领取了,现已通过邮件发放,请查收:",
|
||||||
|
"time": 24
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"content": "小将军很抱歉,您在拍卖行的出价已被超过,元宝退还给您,请查收:",
|
||||||
|
"time": 24
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 16,
|
||||||
|
"content": "恭喜小将军,您已在拍卖行成功拍下以下物品,请查收:",
|
||||||
|
"time": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
"outIndex": 6,
|
"outIndex": 6,
|
||||||
"dirction": 2,
|
"dirction": 2,
|
||||||
"x": 10,
|
"x": 10,
|
||||||
"y": 11,
|
"y": 4,
|
||||||
"var": 1001,
|
"var": 1001,
|
||||||
"lv": 0,
|
"lv": 0,
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
"star": 0,
|
"star": 0,
|
||||||
"spine": 0,
|
"spine": 0,
|
||||||
"bossStage": 0,
|
"bossStage": 0,
|
||||||
"enemyType": 0,
|
"enemyType": 2,
|
||||||
"dest_oppo": 1001
|
"dest_oppo": 1001
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -341,7 +341,7 @@
|
|||||||
"star": 0,
|
"star": 0,
|
||||||
"spine": 0,
|
"spine": 0,
|
||||||
"bossStage": 1,
|
"bossStage": 1,
|
||||||
"enemyType": 3,
|
"enemyType": 4,
|
||||||
"dest_oppo": 1001
|
"dest_oppo": 1001
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user