Files
ZYZ/game-server/app/services/gvg/gvgPrepareService.ts
2023-02-17 10:58:05 +08:00

78 lines
3.1 KiB
TypeScript

import { GVG_ACTIVE_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB } from "../../consts";
import { Tech } from "../../db/GVGLeaguePrepare";
import { GVGUserDailyDataModel } from "../../db/GVGUserDailyData";
import { GVGUserDataModel, GVGUserDataType } from "../../db/GVGUserData";
import { gameData } from "../../pubUtils/data";
import { GVG } from "../../pubUtils/dicParam";
import { parseGoodStr } from "../../pubUtils/util";
import { addGVGReward } from "./gvgItemService";
import { getGVGConfig } from "./gvgService";
export function checkPreTech(techId: number, activeQueue: number[], techQueue: Tech[]) {
const dicTech = gameData.gvgTech.get(techId);
if(!dicTech) return false;
let hasOrUnlock = dicTech.prepositionId.length == 0;
for(let andArr of dicTech.prepositionId) { // or关系
let hasAndUnlock = true;
for(let id of andArr) { // and关系
if(!checkTechIsIng(id, activeQueue, techQueue)) {
hasAndUnlock = false; break;
}
}
if(hasAndUnlock) hasOrUnlock = true;
}
return hasOrUnlock;
}
export function checkTechIsIng(techId: number, activeQueue: number[], techQueue: Tech[]) {
return techQueue.findIndex(cur => cur.id == techId) != -1 || activeQueue.indexOf(techId) != -1
}
export function calProduce(obj: { food: number, mineral: number, wood: number }) {
let { food = 0, mineral = 0, wood = 0 } = obj||{};
return food + mineral + wood;
}
/**
* 获得活跃
* @param leagueCode
* @param roleId
* @param type GVG_ACTIVE_TYPE
* @returns
*/
export async function addGVGActive(leagueCode: string, roleId: string, type: GVG_ACTIVE_TYPE) {
let { configId } = getGVGConfig();
let add = gameData.gvgActive.get(type)||0;
let result = await GVGUserDataModel.addActive(configId, leagueCode, roleId, type, add);
return result.active;
}
export async function addGVGTechActive(leagueCode: string, roleId: string) {
let { configId } = getGVGConfig();
let check = await GVGUserDailyDataModel.checkGetTechActive(configId, leagueCode, roleId);
if(!check) {
await GVGUserDailyDataModel.setHasGetTechActive(configId, leagueCode, roleId);
return await addGVGActive(leagueCode, roleId, GVG_ACTIVE_TYPE.TECH_ACTIVATE);
} else {
const data = await GVGUserDataModel.findByRole(configId, leagueCode, roleId);
return data?.active||0;
}
}
export function getGVGDailyItems(job: number) {
return job == LEAGUE_JOB.PRODUCER? parseGoodStr(GVG.GVG_PRODUCER_GET): parseGoodStr(GVG.GVG_FIGHTER_GET);
}
export async function getDailyLoginReward(roleId: string, roleName: string, sid: string, leagueCode: string, job: number) {
let { configId } = getGVGConfig();
if(job && !await GVGUserDailyDataModel.checkHasLogin(configId, leagueCode, roleId)) {
// 发每日奖励
await GVGUserDailyDataModel.setHasLogin(configId, leagueCode, roleId);
let leagueGoods = await addGVGReward(roleId, roleName, leagueCode, sid, getGVGDailyItems(job), [], ITEM_CHANGE_REASON.GVG_LOGIN)
let active = await addGVGActive(leagueCode, roleId, GVG_ACTIVE_TYPE.LOGIN);
return { active, reward: leagueGoods }
}
return null;
}