军团优化:军团上次排行榜
This commit is contained in:
@@ -3,7 +3,7 @@ import { RoleModel } from "../../db/Role";
|
||||
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
|
||||
import { gameData, getGuildAuctionRewards, getCityActivityRewards, getGuildAuctionBasicNum } from "../../pubUtils/data";
|
||||
import { getCurDay, nowSeconds, getTimeFun, getZeroPoint } 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, CITY_ACTIVITY_DOOR, ABI_TYPE, PUSH_ROUTE, RACE_ACTIVITY_STATUS, SHOP_REFRESH_TYPE } from "../../consts";
|
||||
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, CITY_ACTIVITY_DOOR, ABI_TYPE, PUSH_ROUTE, RACE_ACTIVITY_STATUS, SHOP_REFRESH_TYPE, COUNTER } from "../../consts";
|
||||
import { Record, UserGuildActivityRecModel } from "../../db/UserGuildActivityRec";
|
||||
import { GateMembersRec, CityParam, Member, WoodenHorse, RaceActivityRankParam } from "../../domain/battleField/guildActivity";
|
||||
import { DicGuildActivity } from "../../pubUtils/dictionary/DicGuildActivity";
|
||||
@@ -29,6 +29,7 @@ import { sendMessageToCityWithSuc, sendMessageToGuildWithSuc, sendMessageToServe
|
||||
import { saveGuildGateHpLog } from "../../pubUtils/logUtil";
|
||||
import { GuildActivityCityDeclareModel } from "../../db/GuildActivityCityDeclare";
|
||||
import { getRandSingleEelm } from "../../pubUtils/util";
|
||||
import { CounterModel } from "../../db/Counter";
|
||||
|
||||
let gateActivityObj: GateActivityObject;
|
||||
let cityActivityObj: CityActivityObject;
|
||||
@@ -116,10 +117,11 @@ export function getGuildActivityStatus(id: number) {
|
||||
export async function getAllGuildActivityStatus(guildCode: string, serverId: number) {
|
||||
let guildActivities: { aid: number, status: number, time: number, isOpen: boolean, isCompleted?: boolean }[] = [];
|
||||
for(let [ aid, dicGuildActivity ] of gameData.guildActivity) {
|
||||
let index = getGAIndexInPinus(aid);
|
||||
let res = getGuildActivityByDic(dicGuildActivity);
|
||||
let isCompleted = res.isOpen;
|
||||
if(res.status == GUILD_ACTIVITY_STATUS.START && guildCode) {
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, aid);
|
||||
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, aid, index);
|
||||
if(guildActivityRec) isCompleted = guildActivityRec.isCompleted;
|
||||
}
|
||||
guildActivities.push({aid, ...res, isCompleted});
|
||||
@@ -193,14 +195,15 @@ export function getRecordScore(aid: number, round: number, record: { round: numb
|
||||
|
||||
export async function getGateActivityRank(guildCode: string, serverId: number, roleId?: string, roleName?: string) {
|
||||
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
|
||||
let index = getGAIndexInPinus(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId, index }, true);
|
||||
r.setGenerFieldsFun(generGuildActivityRankField);
|
||||
let { ranks: guildRank, myRank: myGuildRank } = await r.getRankListWithMyRank({ guildCode });
|
||||
if (!myGuildRank) {
|
||||
myGuildRank = await r.generMyRankWithGuild(guildCode, 0, 0);
|
||||
}
|
||||
|
||||
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }, true);
|
||||
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode, index }, true);
|
||||
myR.setGenerFieldsFun(generGuildActivityMemberRankField);
|
||||
let { ranks: memberRank, myRank: myMemberRank } = await myR.getRankListWithMyRank({ roleId });
|
||||
if (roleName && !myMemberRank) {
|
||||
@@ -212,14 +215,18 @@ export async function getGateActivityRank(guildCode: string, serverId: number, r
|
||||
|
||||
export async function getCityActivityRank(guildCode: string, serverId: number, cityId: number, roleId?: string, roleName?: string) {
|
||||
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true);
|
||||
if(!cityId) {
|
||||
return { guildRank: [], myGuildRank: undefined, memberRank: [], myMemberRank: undefined }
|
||||
}
|
||||
let index = getGAIndexInPinus(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId, index }, true);
|
||||
r.setGenerFieldsFun(generGuildActivityRankField);
|
||||
let { ranks: guildRank, myRank: myGuildRank } = await r.getRankListWithMyRank({ guildCode });
|
||||
if (!myGuildRank) {
|
||||
myGuildRank = await r.generMyRankWithGuild(guildCode, 0, 0);
|
||||
}
|
||||
|
||||
let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode }, true);
|
||||
let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode, index }, true);
|
||||
myR.setGenerFieldsFun(generGuildActivityMemberRankField);
|
||||
let { ranks: memberRank, myRank: myMemberRank } = await myR.getRankListWithMyRank({ roleId });
|
||||
if (roleName && !myMemberRank) {
|
||||
@@ -306,6 +313,7 @@ export async function settleGuildActivityReward(aid: number) {
|
||||
}
|
||||
} else if (aid == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) {
|
||||
let obj = getCityActivityObj();
|
||||
obj.endActivity();
|
||||
let { cities } = obj.getAllCities();
|
||||
for (let { serverId, cityId } of cities) {
|
||||
await cityActivitySettleReward(cityId, serverId);
|
||||
@@ -376,7 +384,8 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
|
||||
let { members } = obj.getObj(guildCode, serverId);
|
||||
// console.log('***** gateHp', gateHp, 'members', members);
|
||||
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
|
||||
let index = getGAIndexInPinus(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId, index }, true);
|
||||
let rank = await r.getMyRank({ guildCode });
|
||||
let guildScore = await r.getMyScore({ guildCode });
|
||||
// console.log('****** ranks', rank, 'guildScore', guildScore);
|
||||
@@ -384,7 +393,7 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
|
||||
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, rank);
|
||||
// console.log('***** rewards', JSON.stringify(rewards));
|
||||
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, {
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, index, {
|
||||
isSuccess: true,
|
||||
isCompleted: true,
|
||||
rank, score: guildScore,
|
||||
@@ -395,7 +404,7 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
|
||||
// 结算功勋等奖励
|
||||
let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
|
||||
|
||||
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }, true);
|
||||
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode, index }, true);
|
||||
|
||||
let hasSentMember: string[] = [];
|
||||
let ranks = <RoleRankInfo[]>await myR.getRankByRange();
|
||||
@@ -444,21 +453,23 @@ export async function cityActivitySettleReward(cityId: number, serverId: number)
|
||||
let {gateHp} = await obj.getGateHpAndInc(serverId, cityId);
|
||||
let isSuccess = gateHp <= 0; // 血条未击破则没有占领军团
|
||||
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true);
|
||||
let index = getGAIndexInPinus(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
|
||||
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId, index }, true);
|
||||
let ranks = <GuildRankInfo[]>await r.getRankByRange();
|
||||
console.log('###### cityActivitySettleReward', ranks)
|
||||
for (let { rank: guildRank, code: guildCode, name, num } of ranks) {
|
||||
if (guildRank == 1) {
|
||||
if (isSuccess) {
|
||||
await GuildActivityCityModel.guard(serverId, cityId, guildCode, name); // 占领
|
||||
await declareCity(serverId, "", guildCode, dicCity.nextCity, true);
|
||||
await GuildActivityCityModel.guard(serverId, cityId, guildCode, name, index + 1); // 占领
|
||||
await declareCity(serverId, "", guildCode, dicCity.nextCity, true, index + 1);
|
||||
} else {
|
||||
await GuildActivityCityModel.guard(serverId, cityId, "", ""); // 无人能占领
|
||||
await GuildActivityCityModel.guard(serverId, cityId, "", "", index + 1); // 无人能占领
|
||||
}
|
||||
}
|
||||
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY, guildRank, cityId);
|
||||
let members = obj.getMembersOfGuild(guildCode);
|
||||
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY, {
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY, index, {
|
||||
memberCnt: members.length, members,
|
||||
isSuccess, isCompleted: true,
|
||||
rank: guildRank, damage: num, remainGateHp: gateHp,
|
||||
@@ -470,7 +481,7 @@ export async function cityActivitySettleReward(cityId: number, serverId: number)
|
||||
await genAuction(guildCode, AUCTION_SOURCE.CITY, rec.code, serverId, rewards);
|
||||
|
||||
let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
|
||||
let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode }, true);
|
||||
let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode, index }, true);
|
||||
let ranks = <RoleRankInfo[]>await myR.getRankByRange();
|
||||
let userRank = 0;
|
||||
let hasSentMember: string[] = [];
|
||||
@@ -496,12 +507,7 @@ export async function cityActivitySettleReward(cityId: number, serverId: number)
|
||||
obj.delCityRecord(cityId, serverId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空完declareGuilds之后,做下一次活动的自动宣战
|
||||
*/
|
||||
export async function autoDeclare(serverId: number) {
|
||||
await GuildActivityCityModel.clearGuardAndStartNext(serverId);
|
||||
await GuildActivityCityDeclareModel.clearDeclare(serverId);
|
||||
for(let [ cityId ] of gameData.cityActivity) {
|
||||
let msg = { cityId, declareGuildCode: "", declareCount: 0 };
|
||||
await sendMessageToCityWithSuc(cityId, PUSH_ROUTE.GUILD_CITY_DECLARE, msg);
|
||||
@@ -533,7 +539,7 @@ export async function participants(guildCode: string, sourceType: number, source
|
||||
let rec = await GuildActivityRecordModel.findBySourceCode(guildCode, sourceType, sourceCode);
|
||||
if (!rec) return [];
|
||||
|
||||
let baseNum = getGuildAuctionBasicNum(rec.aid, rec.rank, rec.cityId);
|
||||
let baseNum = getGuildAuctionBasicNum(rec.aid, rec.rank, rec.challengeCityId);
|
||||
let members = rec.members || [];
|
||||
return members.map(cur => {
|
||||
return { roleId: cur.roleId, job: cur.job, baseNum }
|
||||
@@ -594,7 +600,7 @@ export function getCityStatus(guildCode: string, cityId: number, dic: DicCityAct
|
||||
if (curCity) {
|
||||
if (curCity.guardGuildCode == guildCode) {
|
||||
status = CITY_STATUS.GUARD;
|
||||
} else if (curCity.declareGuilds.includes(guildCode)) {
|
||||
} else if (curCity.declareGuilds?.includes(guildCode)) {
|
||||
status = CITY_STATUS.DECLARED;
|
||||
}
|
||||
}
|
||||
@@ -640,14 +646,15 @@ export async function sendRaceStartMsg(serverId: number) {
|
||||
await calWoodenHorseAndSend(serverId);
|
||||
}
|
||||
|
||||
export async function cityActivityStart() {
|
||||
let obj = getCityActivityObj();
|
||||
obj.startActivity();
|
||||
}
|
||||
|
||||
export async function gateActivityStart() {
|
||||
let obj = getGateActivityObj();
|
||||
obj.startActivity();
|
||||
export async function guildActivityStart(aid: number) {
|
||||
if(aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
|
||||
let obj = getGateActivityObj();
|
||||
obj.startActivity();
|
||||
} else if (aid == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) {
|
||||
let obj = getCityActivityObj();
|
||||
obj.startActivity();
|
||||
} else if (aid == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -663,16 +670,17 @@ export async function raceActivitySettleReward(guildCode: string, woodenHorse: W
|
||||
let { guildRank, myGuildRank } = await obj.getRanks(serverId, guildCode);
|
||||
let rank = myGuildRank?.rank||0;
|
||||
|
||||
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId });
|
||||
let index = getGAIndexInPinus(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY);
|
||||
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId, index });
|
||||
await r.setRankWithGuildInfo2(guildCode, myGuildRank.num, myGuildRank.sortTime, myGuildRank.durability);
|
||||
let tomorrow = <number>getTimeFun().getAfterDayWithHour();
|
||||
await r.setExpire(tomorrow);
|
||||
let nextWeek = <number>getTimeFun().getAfterDayWithHour(7);
|
||||
await r.setExpire(nextWeek);
|
||||
|
||||
let isSuccess = distance >= GUILDACTIVITY.RACEACTIVITY_LENGTH; // 血条未击破则没有占领军团
|
||||
let members = obj.getMembersOfGuild(guildCode);
|
||||
|
||||
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, rank);
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, {
|
||||
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, index, {
|
||||
memberCnt: members.length, members,
|
||||
isSuccess, isCompleted: true, rank,
|
||||
rewards: rewards.map(cur => cur.goods),
|
||||
@@ -788,11 +796,11 @@ export async function getCityActivityGateHp(serverId: number, cityId: number) {
|
||||
return gateHp;
|
||||
}
|
||||
|
||||
export async function declareCity(serverId: number, roleId: string, guildCode: string, cityId: number, isAutoDeclare: boolean) {
|
||||
export async function declareCity(serverId: number, roleId: string, guildCode: string, cityId: number, isAutoDeclare: boolean, declareIndex: number) {
|
||||
let declareTime = Date.now();
|
||||
let declareInfo = await GuildActivityCityDeclareModel.declareIfNot(serverId, guildCode, cityId, roleId, declareTime, isAutoDeclare);
|
||||
let declareInfo = await GuildActivityCityDeclareModel.declareIfNot(serverId, guildCode, cityId, roleId, declareTime, isAutoDeclare, declareIndex);
|
||||
if(!!declareInfo && declareInfo.declareTime == declareTime) { // 确实没有人宣战过,自己是第一个
|
||||
let cityRec = await GuildActivityCityModel.declare(serverId, cityId, guildCode);
|
||||
let cityRec = await GuildActivityCityModel.declare(serverId, cityId, guildCode, declareIndex);
|
||||
await sendGuildCityDeclare(cityId, guildCode, cityRec.declareCount);
|
||||
return true;
|
||||
}
|
||||
@@ -800,17 +808,66 @@ export async function declareCity(serverId: number, roleId: string, guildCode: s
|
||||
}
|
||||
|
||||
// 非军团长的团员自动宣战
|
||||
export async function autoDeclareMyCity(serverId: number, roleId: string, guildCode: string) {
|
||||
let checkResult = await GuildActivityCityDeclareModel.checkDeclartion(serverId, guildCode);
|
||||
export async function autoDeclareMyCity(serverId: number, roleId: string, guildCode: string, declareIndex: number) {
|
||||
let checkResult = await GuildActivityCityDeclareModel.checkDeclartion(serverId, guildCode, declareIndex);
|
||||
if(checkResult) return false
|
||||
|
||||
let cityIds = gameData.juniorCities;
|
||||
let cities = await GuildActivityCityModel.findMinDeclareCountCity(serverId, cityIds);
|
||||
let cities = await GuildActivityCityModel.findMinDeclareCountCity(serverId, cityIds, declareIndex);
|
||||
let notDeclaredCitites = cityIds.filter(curCityId => {
|
||||
return cities.findIndex(city => city.cityId == curCityId) == -1;
|
||||
});
|
||||
let cityId = notDeclaredCitites.length > 0? getRandSingleEelm(notDeclaredCitites): cities[0].cityId;
|
||||
if(!cityId) return false;
|
||||
|
||||
return declareCity(serverId, roleId, guildCode, cityId, true);
|
||||
return declareCity(serverId, roleId, guildCode, cityId, true, declareIndex);
|
||||
}
|
||||
|
||||
function getCounterName(aid: GUILD_ACTIVITY_TYPE) {
|
||||
switch(aid) {
|
||||
case GUILD_ACTIVITY_TYPE.GATE_ACTIVITY:
|
||||
return COUNTER.GATE_ACTIVITY;
|
||||
case GUILD_ACTIVITY_TYPE.CITY_ACTIVITY:
|
||||
return COUNTER.CITY_ACTIVITY;
|
||||
case GUILD_ACTIVITY_TYPE.RACE_ACTIVITY:
|
||||
return COUNTER.RACE_ACTIVITY;
|
||||
}
|
||||
}
|
||||
|
||||
export async function incCurGuildActivityIndex(aid: number) {
|
||||
let name = getCounterName(aid);
|
||||
let index = await CounterModel.getNewCounter(name);
|
||||
setGuildActivityIndexInPinus(aid, index); // systime
|
||||
pinus.app.rpc.guild.guildActivityRemote.setGuildActivityIndex.broadcast(aid, index);
|
||||
}
|
||||
|
||||
export async function initGuildActivityIndexInPinus() {
|
||||
for(let aid = GUILD_ACTIVITY_TYPE.GATE_ACTIVITY; aid <= GUILD_ACTIVITY_TYPE.RACE_ACTIVITY; aid++){
|
||||
let index = await getCurGuildActivityIndexByDb(aid);
|
||||
setGuildActivityIndexInPinus(aid, index);
|
||||
}
|
||||
}
|
||||
|
||||
export async function getCurGuildActivityIndexByDb(aid: number) {
|
||||
let name = getCounterName(aid);
|
||||
return await CounterModel.getCounter(name);
|
||||
}
|
||||
|
||||
export function getGAPinusName(aid: number) {
|
||||
return `guildact${aid}`;
|
||||
}
|
||||
|
||||
export function setGuildActivityIndexInPinus(aid: number, index: number) {
|
||||
pinus.app.set(getGAPinusName(aid), index);
|
||||
}
|
||||
|
||||
export function getGAIndexInPinus(aid: number) {
|
||||
return pinus.app.get(getGAPinusName(aid));
|
||||
}
|
||||
|
||||
export function getDeclareIndex() {
|
||||
let index = getGAIndexInPinus(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
|
||||
let obj = getCityActivityObj();
|
||||
if(obj.guildActivityStatus == GUILD_ACTIVITY_STATUS.START) return index;
|
||||
return index + 1;
|
||||
}
|
||||
Reference in New Issue
Block a user