军团活动:诸侯混战初始

This commit is contained in:
luying
2021-03-22 20:52:17 +08:00
parent d733210c3a
commit a56a6cf2f3
12 changed files with 201 additions and 34 deletions
@@ -146,7 +146,7 @@ export function getRecordScore(aid: number, record: { round: number, dataId: num
*/
export async function getGuildActivityRank(guildCode: string, serverId: number, roleId?: string, roleName?: string) {
let guildRankResult = await getUnionRank(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
let guildRankResult = await getUnionRank(REDIS_KEY.GATE_ACTIVITY, serverId, guildCode);
let guildRank = new Array<SimpleGuildRankParam>();
for(let { rank, code, name, num } of guildRankResult.ranks) {
let param = new SimpleGuildRankParam(rank, code, name, num);
@@ -161,7 +161,7 @@ export async function getGuildActivityRank(guildCode: string, serverId: number,
myGuildRank = new SimpleGuildRankParam(0, guildCode, guild.name, 0);
}
let memberRankResult = await getRank(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, roleId);
let memberRankResult = await getRank(getGuildKeyName(REDIS_KEY.USER_GATE_ACTIVITY, guildCode), serverId, roleId);
let memberRank = new Array<SimpleRoleRankParam>();
for(let { rank, roleId, roleName, num } of memberRankResult.ranks) {
let param = new SimpleRoleRankParam(rank, roleId, roleName, num);
@@ -236,8 +236,8 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
let { gateHp, members } = obj.getObj(guildCode, serverId);
members = uniq(members, cur => cur.roleId);
let rank = await getMyUnionRank(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
let guildScore = await getRankScore(REDIS_KEY.GUILD_ACTIVITY, serverId, guildCode);
let rank = await getMyUnionRank(REDIS_KEY.GATE_ACTIVITY, serverId, guildCode);
let guildScore = await getRankScore(REDIS_KEY.GATE_ACTIVITY, serverId, guildCode);
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, rank);
@@ -251,7 +251,7 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
});
// 结算功勋等奖励
let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
let memberRankResult = await getRank(getGuildKeyName(REDIS_KEY.USER_GUILD_ACTIVITY, guildCode), serverId, '');
let memberRankResult = await getRank(getGuildKeyName(REDIS_KEY.USER_GATE_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));
+33 -8
View File
@@ -37,13 +37,13 @@ export async function initAllRank() {
export async function initRank(serverId: number) {
// console.log('*****', 'initRank')
const client: Redis.RedisClient = redisClient();
await setRankRedisFromDb(REDIS_KEY.TOWER_RANK, serverId);
await setRankRedisFromDb(REDIS_KEY.GUILD_ACTIVE_RANK, serverId);
await client.expireAsync(getKeyName(REDIS_KEY.TOWER_RANK, serverId), 30 * 24 * 60 * 60);
await client.expireAsync(REDIS_KEY.PVP_RANK, 30 * 24 * 60 * 60);
await client.expireAsync(REDIS_KEY.USER_INFO, 30 * 24 * 60 * 60);
await client.expireAsync(REDIS_KEY.GUILD_INFO, 30 * 24 * 60 * 60);
await client.expireAsync(getKeyName(REDIS_KEY.GUILD_ACTIVE_RANK, serverId), 30 * 24 * 60 * 60);
await setRankRedisFromDb(REDIS_KEY.TOWER_RANK, serverId);
await setRankRedisFromDb(REDIS_KEY.GUILD_ACTIVE_RANK, serverId);
}
@@ -66,8 +66,8 @@ export async function initSingleRank(key: string) {
export async function initSingleRankWithServer(key: string, serverId: number) {
await redisClient().delAsync(getKeyName(key, serverId));
await redisClient().expireAsync(key, 30 * 24 * 60 * 60);
await setRankRedisFromDb(key, serverId);
await redisClient().expireAsync(key, 30 * 24 * 60 * 60);
}
/**
@@ -110,7 +110,7 @@ export async function existsRank(key: string, serverId: number) {
* @param serverId 服务器id
* @param plus 后面再加
*/
export function getKeyName(key: string, serverId?: number, plus: string = '') {
function getKeyName(key: string, serverId?: number, plus: string = '') {
let newKey = '';
if(serverId) {
newKey = `${key}:${serverId}`;
@@ -564,14 +564,16 @@ function redisClient() {
async function updateRankAtom(key: string, serverId: number, field: string, score: number, timestamp: number) {
let originKey = getKeyName(key, serverId);
let timeKey = getKeyName(key, serverId, 'time');
await redisClient().expireatAsync(originKey, getNextHourPoint(5));
await redisClient().expireatAsync(timeKey, getNextHourPoint(5));
let timelen = 10;
let pow = Math.pow(10, timelen + 1);
let newScore = await redisClient().zincrbyAsync(originKey, score, field);
await redisClient().zaddAsync(timeKey, pow - 1 - Math.floor(timestamp/1000), field);
await redisClient().expireatAsync(originKey, getNextHourPoint(5));
await redisClient().expireatAsync(timeKey, getNextHourPoint(5));
return newScore;
}
@@ -579,13 +581,13 @@ async function generateUnionRank(key: string, serverId: number) {
let unionKey = getKeyName(key, serverId, 'union'); // 联合的key
let existsKey = await redisClient().existsAsync(unionKey);
if(!existsKey) {
await redisClient().expireatAsync(unionKey, 10); // 10秒更新一次
let originKey = getKeyName(key, serverId);
let timeKey = getKeyName(key, serverId, 'time');
let timelen = 10;
let pow = Math.pow(10, timelen + 1);
await redisClient().zunionstoreAsync(unionKey, 2, originKey, timeKey, 'WEIGHTS', pow, 1);
await redisClient().expireAsync(unionKey, 10); // 10秒更新一次
}
return unionKey;
}
@@ -640,7 +642,14 @@ export async function getRankScore(key: string, serverId: number, field: string,
if(needDecode) {
score = decodeScoreWithTime(score.toString());
}
return score;
return parseInt(score.toString());
}
export async function setGuildActivityRank(key: string, guildCode: string, serverId: number, roleId: string, score: number, time: number, userParam: RankParam) {
let nkey = getGuildKeyName(key, guildCode);
let nScore = await setRank(nkey, serverId, roleId, score, time, userParam);
await redisClient().expireatAsync(getKeyName(nkey, serverId), getNextHourPoint(5))
return nScore
}
/**
@@ -651,4 +660,20 @@ export async function getRankScore(key: string, serverId: number, field: string,
export function getGuildKeyName(key: string, guildCode: string) {
return `${key}:${guildCode}`;
}
/**
* debug接口使用,直接删除排行榜数据
* @param params serverId => guildCodes
*/
export async function delGuildActivityRank(params: Map<number, string[]>) {
for(let [serverId, guildCodes] of params) {
await redisClient().delAsync(getKeyName(REDIS_KEY.GATE_ACTIVITY, serverId));
await redisClient().delAsync(getKeyName(REDIS_KEY.GATE_ACTIVITY, serverId, 'time'));
await redisClient().delAsync(getKeyName(REDIS_KEY.GATE_ACTIVITY, serverId, 'union'));
for(let guildCode of guildCodes) {
await redisClient().delAsync(getKeyName(getGuildKeyName(REDIS_KEY.USER_GATE_ACTIVITY, guildCode), serverId));
}
}
}
/**************** 军团活动排行end */