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; }