军团fix:领取活跃宝箱记录
This commit is contained in:
@@ -169,7 +169,9 @@ export class GuildHandler {
|
|||||||
|
|
||||||
let managerCntInc = 0;
|
let managerCntInc = 0;
|
||||||
if(auth == GUILD_AUTH.LEADER) { // 转让团长
|
if(auth == GUILD_AUTH.LEADER) { // 转让团长
|
||||||
managerCntInc = -1;
|
if(hisUserGuild.auth == GUILD_AUTH.MANAGER) {
|
||||||
|
managerCntInc = -1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
managerCntInc = auth == GUILD_AUTH.MANAGER? 1: -1;
|
managerCntInc = auth == GUILD_AUTH.MANAGER? 1: -1;
|
||||||
}
|
}
|
||||||
@@ -815,12 +817,13 @@ export class GuildHandler {
|
|||||||
return resResult(STATUS.GUILD_ACTIVE_POINT_NOT_REACH);
|
return resResult(STATUS.GUILD_ACTIVE_POINT_NOT_REACH);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(userGuild.receivedActive >= activeDayReward.activeDayPoint) {
|
if(userGuild.receivedActive.includes(id)) {
|
||||||
return resResult(STATUS.GUILD_ACTIVE_BOX_HAS_RECEIVED);
|
return resResult(STATUS.GUILD_ACTIVE_BOX_HAS_RECEIVED);
|
||||||
}
|
}
|
||||||
|
userGuild.receivedActive.push(id);
|
||||||
|
|
||||||
let goods = await addItems(roleId, roleName, sid, activeDayReward.reward);
|
let goods = await addItems(roleId, roleName, sid, activeDayReward.reward);
|
||||||
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive: activeDayReward.activeDayPoint }, {}, 'receivedActive');
|
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive: userGuild.receivedActive }, {}, 'receivedActive');
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { goods, receivedActive: userGuild.receivedActive });
|
return resResult(STATUS.SUCCESS, { goods, receivedActive: userGuild.receivedActive });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export async function joinGuild(code: string, lv: number, roleId: string, server
|
|||||||
return { status: 0, resResult: resResult(STATUS.DIC_DATA_NOT_FOUND) };
|
return { status: 0, resResult: resResult(STATUS.DIC_DATA_NOT_FOUND) };
|
||||||
}
|
}
|
||||||
const maxMemberCnt = dicCenterBase.peopleNum;
|
const maxMemberCnt = dicCenterBase.peopleNum;
|
||||||
const guild = await GuildModel.addGuild(code, roleId, maxMemberCnt, serverId);
|
const guild = await GuildModel.addGuild(code, roleId, maxMemberCnt, serverId, result.ce);
|
||||||
if(!guild) {
|
if(!guild) {
|
||||||
return { status: 0, resResult: resResult(STATUS.GUILD_MEMBER_MAX) };
|
return { status: 0, resResult: resResult(STATUS.GUILD_MEMBER_MAX) };
|
||||||
}
|
}
|
||||||
@@ -123,13 +123,14 @@ export async function addActive(roleId: string, serverId: number, id: number, ac
|
|||||||
*/
|
*/
|
||||||
export async function getUserGuildWithRefActive(roleId: string, select: string) {
|
export async function getUserGuildWithRefActive(roleId: string, select: string) {
|
||||||
let userGuild = await UserGuildModel.getMyGuild(roleId, select? select + ' +refTimeDaily': '+refTimeDaily');
|
let userGuild = await UserGuildModel.getMyGuild(roleId, select? select + ' +refTimeDaily': '+refTimeDaily');
|
||||||
|
console.log(JSON.stringify(userGuild))
|
||||||
if(!userGuild) return false;
|
if(!userGuild) return false;
|
||||||
let { receivedActive, refTimeDaily, activeDaily, activeRecord } = userGuild;
|
let { receivedActive, refTimeDaily, activeDaily, activeRecord } = userGuild;
|
||||||
|
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
let isRefDaily = shouldRefresh(refTimeDaily, now, 0);
|
let isRefDaily = shouldRefresh(refTimeDaily, now, 0);
|
||||||
if(isRefDaily) {
|
if(isRefDaily) {
|
||||||
receivedActive = 0; refTimeDaily = now; activeDaily = 0; activeRecord = [];
|
receivedActive = []; refTimeDaily = now; activeDaily = 0; activeRecord = [];
|
||||||
|
|
||||||
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord }, {}, select);
|
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord }, {}, select);
|
||||||
if(!userGuild) return false;
|
if(!userGuild) return false;
|
||||||
@@ -149,9 +150,9 @@ export async function settleGuildWeekly() {
|
|||||||
for(let { code, activeWeekly, memberCnt } of guildList) {
|
for(let { code, activeWeekly, memberCnt } of guildList) {
|
||||||
const userGuildList = await UserGuildModel.getListByGuild(code, 'roleId auth activeWeekly', { activeWeekly: -1, activeUpdateTime: 1 });
|
const userGuildList = await UserGuildModel.getListByGuild(code, 'roleId auth activeWeekly', { activeWeekly: -1, activeUpdateTime: 1 });
|
||||||
|
|
||||||
let activeMemberCnt = 0; // 活跃度高于100的成员人数
|
let activeMemberCnt = 0; // 活跃度高于1000的成员人数
|
||||||
let otherMemberNum = 0; // 除了大将军以外从活跃高到底成员人数,用户计算活跃排名百分比
|
let otherMemberCnt = 0; // 除了大将军以外从活跃高到底成员人数,用户计算活跃排名百分比
|
||||||
let jobCnt = new Map<number, number>();
|
let jobNum = 0; // 职位分配权重加成
|
||||||
let members = new Map<string, {job: number, active: boolean}>();
|
let members = new Map<string, {job: number, active: boolean}>();
|
||||||
|
|
||||||
for(let {roleId, auth, activeWeekly} of userGuildList) {
|
for(let {roleId, auth, activeWeekly} of userGuildList) {
|
||||||
@@ -168,17 +169,15 @@ export async function settleGuildWeekly() {
|
|||||||
} else if (activeWeekly <= ARMY.ARMY_WEEKHONOUR_LIMIT) {
|
} else if (activeWeekly <= ARMY.ARMY_WEEKHONOUR_LIMIT) {
|
||||||
job = GUILD_JOB.SHIBING;
|
job = GUILD_JOB.SHIBING;
|
||||||
} else {
|
} else {
|
||||||
otherMemberNum++;
|
otherMemberCnt++;
|
||||||
for(let [id, {rankProportion}] of gameData.guildPosition) {
|
for(let [id, {rankProportion}] of gameData.guildPosition) {
|
||||||
let rankCnt = Math.ceil(memberCnt * rankProportion / 100);
|
let rankCnt = Math.ceil(memberCnt * rankProportion / 100);
|
||||||
console.log('*', id, memberCnt, rankProportion, otherMemberNum, rankCnt)
|
|
||||||
job = id;
|
job = id;
|
||||||
if(otherMemberNum < rankCnt) break;
|
if(otherMemberCnt < rankCnt) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await UserGuildModel.updateInfo(roleId, { job, activeWeekly: 0 });
|
await UserGuildModel.updateInfo(roleId, { job, activeWeekly: 0 });
|
||||||
if(!jobCnt.has(job)) jobCnt.set(job, 0);
|
jobNum += gameData.guildPosition.get(job).activeRatio;
|
||||||
jobCnt.set(job, jobCnt.get(job) + 1);
|
|
||||||
|
|
||||||
members.set(roleId, {job, active});
|
members.set(roleId, {job, active});
|
||||||
}
|
}
|
||||||
@@ -190,8 +189,8 @@ export async function settleGuildWeekly() {
|
|||||||
let positionBase = ratio * ARMY.ARMY_POSITION_WEEKREWARD / 100; // 30% 职位均分
|
let positionBase = ratio * ARMY.ARMY_POSITION_WEEKREWARD / 100; // 30% 职位均分
|
||||||
for(let [roleId, {job, active}] of members) {
|
for(let [roleId, {job, active}] of members) {
|
||||||
let myAverageRatio = active? (averageBase / activeMemberCnt): 0;
|
let myAverageRatio = active? (averageBase / activeMemberCnt): 0;
|
||||||
let jobActiveRatio = gameData.guildPosition.get(job).activeRatio / 100;
|
let jobActiveRatio = gameData.guildPosition.get(job).activeRatio / jobNum;
|
||||||
let myJobRewardRatio = positionBase * jobActiveRatio / jobCnt.get(job);
|
let myJobRewardRatio = positionBase * jobActiveRatio;
|
||||||
let reward = allWeeklyReward.map(cur => {
|
let reward = allWeeklyReward.map(cur => {
|
||||||
return {
|
return {
|
||||||
id: cur.id,
|
id: cur.id,
|
||||||
|
|||||||
+8
-3
@@ -126,8 +126,8 @@ export default class Guild extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async addGuild(code: string, roleId: string, maxMemberCnt: number, serverId: number) {
|
public static async addGuild(code: string, roleId: string, maxMemberCnt: number, serverId: number, ce: number) {
|
||||||
let result: GuildType = await GuildModel.findOneAndUpdate({ code, memberCnt: {$lt: maxMemberCnt }, serverId }, { $inc: { memberCnt: 1 }, $push: { members: roleId } }, { new: true }).lean();
|
let result: GuildType = await GuildModel.findOneAndUpdate({ code, memberCnt: {$lt: maxMemberCnt }, serverId }, { $inc: { memberCnt: 1, guildCe: ce }, $push: { members: roleId } }, { new: true }).lean();
|
||||||
if(result && result.memberCnt >= maxMemberCnt) {
|
if(result && result.memberCnt >= maxMemberCnt) {
|
||||||
result = await GuildModel.findOneAndUpdate({ code }, { $set: { isMemberMax: true } }).lean();
|
result = await GuildModel.findOneAndUpdate({ code }, { $set: { isMemberMax: true } }).lean();
|
||||||
}
|
}
|
||||||
@@ -166,7 +166,12 @@ export default class Guild extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async findGuild(code: string, serverId: number, select?: string, lean = true) {
|
public static async findGuild(code: string, serverId: number, select?: string, lean = true) {
|
||||||
const result = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId }).select(select).lean(lean);
|
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId }).select(select).lean(lean);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateCe(roleId: string, inc: number ) {
|
||||||
|
const result = await GuildModel.findOneAndUpdate({ $elemMatch: {members: roleId}, status: GUILD_STATUS.RUNNING}, {$inc: {guildCe: inc}}, {new: true}).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ export default class UserGuild extends BaseModel {
|
|||||||
@prop({ required: true, type: ActiveRecord, default: [], _id: false })
|
@prop({ required: true, type: ActiveRecord, default: [], _id: false })
|
||||||
activeRecord: ActiveRecord[];
|
activeRecord: ActiveRecord[];
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, type: Number, default: [] })
|
||||||
receivedActive: number;
|
receivedActive: number[];
|
||||||
|
|
||||||
@prop({ required: true, default: new Date(), select: false })
|
@prop({ required: true, default: new Date(), select: false })
|
||||||
refTimeDaily: Date;
|
refTimeDaily: Date;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import { getTeraphAttr, HEROTARIN } from '../consts/constModules/abilityConst'
|
|||||||
import { PvpDefenseModel } from '../db/PvpDefense';
|
import { PvpDefenseModel } from '../db/PvpDefense';
|
||||||
const HERO_CE_RATIO = 100;
|
const HERO_CE_RATIO = 100;
|
||||||
import { findIndex } from 'underscore';
|
import { findIndex } from 'underscore';
|
||||||
|
import { GuildModel } from '../db/Guild';
|
||||||
//战力计算TODO
|
//战力计算TODO
|
||||||
export function calPlayerCe(globalCeAttr: CeAttrRole, hero: HeroType, type: number, args: Array<number> = []) {
|
export function calPlayerCe(globalCeAttr: CeAttrRole, hero: HeroType, type: number, args: Array<number> = []) {
|
||||||
let heroCe = 0;
|
let heroCe = 0;
|
||||||
@@ -118,6 +119,7 @@ export async function calPlayerCeAndSave(roleId: string, heros: Array<HeroType>,
|
|||||||
role.ce += incPlayerCe;
|
role.ce += incPlayerCe;
|
||||||
let { topFive, topFiveCe } = role;
|
let { topFive, topFiveCe } = role;
|
||||||
await RoleModel.updateRoleInfo(roleId, { globalCeAttr: role.globalCeAttr, ce: role.ce, topFive, topFiveCe });
|
await RoleModel.updateRoleInfo(roleId, { globalCeAttr: role.globalCeAttr, ce: role.ce, topFive, topFiveCe });
|
||||||
|
await GuildModel.updateCe(roleId, incPlayerCe);
|
||||||
return { pushHeros, role, topFiveCe }
|
return { pushHeros, role, topFiveCe }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -138,5 +138,10 @@
|
|||||||
"id": 28,
|
"id": 28,
|
||||||
"name": "被弹劾",
|
"name": "被弹劾",
|
||||||
"authority": "1&"
|
"authority": "1&"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 29,
|
||||||
|
"name": "领取活跃宝箱",
|
||||||
|
"authority": "1&2&3"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user