init
This commit is contained in:
@@ -1,106 +1,106 @@
|
||||
import { GVG_RETURN_ITEM_TYPE, ITEM_CHANGE_REASON, LEAGUE_ITEM_REFRESH_TYPE, GVG_ITEM, PUSH_ROUTE } from "../../consts";
|
||||
import { GVGUserItemModel } from "../../db/GVGUserItem";
|
||||
import { gameData } from "../../pubUtils/data";
|
||||
import { RewardInter } from "../../pubUtils/interface";
|
||||
import { saveGVGItemChangeLog } from "../../pubUtils/logUtil";
|
||||
import { DAY_TO_SECOND, getZeroPoint, getFutureTime } from "../../pubUtils/timeUtil";
|
||||
import { sendMessageToUserWithSuc } from "../pushService";
|
||||
import { addItems, handleCost } from "../role/rewardService";
|
||||
import { getGVGConfig } from "./gvgService";
|
||||
|
||||
/**
|
||||
* 获取道具(必须在guild进程下使用)
|
||||
* @param roleId
|
||||
* @param roleName
|
||||
* @param leagueCode
|
||||
* @param sid
|
||||
* @param leagueItems GVG内专用道具
|
||||
* @param items 普通道具
|
||||
* @param reason
|
||||
* @returns
|
||||
*/
|
||||
export async function addGVGReward(roleId: string, roleName: string, leagueCode: string, sid: string, leagueItems: RewardInter[], items: RewardInter[], reason: ITEM_CHANGE_REASON) {
|
||||
let returnGoods: { id: number, count: number, itemType: number }[] = [], pushGoods: { id: number, count: number, expireTime: number, inc: number, reason: number }[] = [];
|
||||
let { configId } = getGVGConfig();
|
||||
if(items.length > 0) {
|
||||
const goods = await addItems(roleId, roleName, sid, items, reason);
|
||||
for(let { id, count } of goods) {
|
||||
returnGoods.push({ id, count, itemType: GVG_RETURN_ITEM_TYPE.NORMAL_ITEM });
|
||||
}
|
||||
}
|
||||
for(let { id, count } of leagueItems) {
|
||||
let dicItem = gameData.gvgItem.get(id);
|
||||
if(!dicItem) continue;
|
||||
let item = await GVGUserItemModel.increaseItem(configId, leagueCode, roleId, id, count, getExpireTime(dicItem.refreshType));
|
||||
returnGoods.push({ id, count, itemType: GVG_RETURN_ITEM_TYPE.GVG_ITEM });
|
||||
pushGoods.push({ id, count: item.count, inc: count, expireTime: item.expireTime, reason });
|
||||
}
|
||||
if(pushGoods.length > 0) {
|
||||
await sendMessageToUserWithSuc(roleId, PUSH_ROUTE.LEAGUE_ITEM_UPDATE, { items: pushGoods }, sid);
|
||||
saveGVGItemChangeLog(roleId, leagueCode, pushGoods, reason);
|
||||
}
|
||||
return returnGoods;
|
||||
}
|
||||
|
||||
function getExpireTime(refreshType: number) {
|
||||
if(refreshType == LEAGUE_ITEM_REFRESH_TYPE.DAILY) {
|
||||
return getZeroPoint() + DAY_TO_SECOND;
|
||||
}
|
||||
return getFutureTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* 消耗道具
|
||||
* @param roleId
|
||||
* @param leagueCode
|
||||
* @param sid
|
||||
* @param leagueItems GVG内专用道具
|
||||
* @param items 普通背包道具
|
||||
* @param reason
|
||||
* @returns
|
||||
*/
|
||||
export async function handleGVGCost(roleId: string, leagueCode: string, sid: string, leagueItems: RewardInter[], items: RewardInter[], reason: ITEM_CHANGE_REASON) {
|
||||
let { configId } = getGVGConfig();
|
||||
// 检查本地道具数量
|
||||
const curItems = await GVGUserItemModel.findByRoleAndIds(configId, leagueCode, roleId, leagueItems.map(cur => cur.id));
|
||||
for(let { id, count } of leagueItems) {
|
||||
let curItem = curItems.find(cur => cur.id == id);
|
||||
if(!curItem || curItem.count < count) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const itemResult = await handleCost(roleId, sid, items, reason);
|
||||
if(!itemResult) return false;
|
||||
|
||||
const decreaseResult = await GVGUserItemModel.decreaseItem(configId, leagueCode, roleId, leagueItems);
|
||||
const pushGoods = decreaseResult.map(item => {
|
||||
let leagueItem = leagueItems.find(cur => cur.id == item.id);
|
||||
return { id: item.id, count: item.count, expireTime: item.expireTime, inc: leagueItem?.count }
|
||||
});
|
||||
if(pushGoods.length > 0) {
|
||||
await sendMessageToUserWithSuc(roleId, PUSH_ROUTE.LEAGUE_ITEM_UPDATE, { items: pushGoods }, sid);
|
||||
saveGVGItemChangeLog(roleId, leagueCode, pushGoods, reason);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export function getProduceCoinCnt(items: RewardInter[]) {
|
||||
let produceCoinCnt = 0;
|
||||
for(let { id, count } of items) {
|
||||
if(id == GVG_ITEM.PRODUCE_COIN) {
|
||||
produceCoinCnt = count; break;
|
||||
}
|
||||
}
|
||||
return produceCoinCnt;
|
||||
}
|
||||
|
||||
export function combinePushItem(targetItems: RewardInter[], dicItems: RewardInter[]) {
|
||||
for(let { id, count } of dicItems) {
|
||||
let obj = targetItems.find(obj => obj.id == id);
|
||||
if(!obj) {
|
||||
targetItems.push({ id, count });
|
||||
} else {
|
||||
obj.count += count;
|
||||
}
|
||||
}
|
||||
}
|
||||
import { GVG_RETURN_ITEM_TYPE, ITEM_CHANGE_REASON, LEAGUE_ITEM_REFRESH_TYPE, GVG_ITEM, PUSH_ROUTE } from "@consts";
|
||||
import { GVGUserItemModel } from "@db/GVGUserItem";
|
||||
import { gameData } from "@pubUtils/data";
|
||||
import { RewardInter } from "@pubUtils/interface";
|
||||
import { saveGVGItemChangeLog } from "@pubUtils/logUtil";
|
||||
import { DAY_TO_SECOND, getZeroPoint, getFutureTime } from "@pubUtils/timeUtil";
|
||||
import { sendMessageToUserWithSuc } from "../pushService";
|
||||
import { addItems, handleCost } from "../role/rewardService";
|
||||
import { getGVGConfig } from "./gvgService";
|
||||
|
||||
/**
|
||||
* 获取道具(必须在guild进程下使用)
|
||||
* @param roleId
|
||||
* @param roleName
|
||||
* @param leagueCode
|
||||
* @param sid
|
||||
* @param leagueItems GVG内专用道具
|
||||
* @param items 普通道具
|
||||
* @param reason
|
||||
* @returns
|
||||
*/
|
||||
export async function addGVGReward(roleId: string, roleName: string, leagueCode: string, sid: string, leagueItems: RewardInter[], items: RewardInter[], reason: ITEM_CHANGE_REASON) {
|
||||
let returnGoods: { id: number, count: number, itemType: number }[] = [], pushGoods: { id: number, count: number, expireTime: number, inc: number, reason: number }[] = [];
|
||||
let { configId } = getGVGConfig();
|
||||
if(items.length > 0) {
|
||||
const goods = await addItems(roleId, roleName, sid, items, reason);
|
||||
for(let { id, count } of goods) {
|
||||
returnGoods.push({ id, count, itemType: GVG_RETURN_ITEM_TYPE.NORMAL_ITEM });
|
||||
}
|
||||
}
|
||||
for(let { id, count } of leagueItems) {
|
||||
let dicItem = gameData.gvgItem.get(id);
|
||||
if(!dicItem) continue;
|
||||
let item = await GVGUserItemModel.increaseItem(configId, leagueCode, roleId, id, count, getExpireTime(dicItem.refreshType));
|
||||
returnGoods.push({ id, count, itemType: GVG_RETURN_ITEM_TYPE.GVG_ITEM });
|
||||
pushGoods.push({ id, count: item.count, inc: count, expireTime: item.expireTime, reason });
|
||||
}
|
||||
if(pushGoods.length > 0) {
|
||||
await sendMessageToUserWithSuc(roleId, PUSH_ROUTE.LEAGUE_ITEM_UPDATE, { items: pushGoods }, sid);
|
||||
saveGVGItemChangeLog(roleId, leagueCode, pushGoods, reason);
|
||||
}
|
||||
return returnGoods;
|
||||
}
|
||||
|
||||
function getExpireTime(refreshType: number) {
|
||||
if(refreshType == LEAGUE_ITEM_REFRESH_TYPE.DAILY) {
|
||||
return getZeroPoint() + DAY_TO_SECOND;
|
||||
}
|
||||
return getFutureTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* 消耗道具
|
||||
* @param roleId
|
||||
* @param leagueCode
|
||||
* @param sid
|
||||
* @param leagueItems GVG内专用道具
|
||||
* @param items 普通背包道具
|
||||
* @param reason
|
||||
* @returns
|
||||
*/
|
||||
export async function handleGVGCost(roleId: string, leagueCode: string, sid: string, leagueItems: RewardInter[], items: RewardInter[], reason: ITEM_CHANGE_REASON) {
|
||||
let { configId } = getGVGConfig();
|
||||
// 检查本地道具数量
|
||||
const curItems = await GVGUserItemModel.findByRoleAndIds(configId, leagueCode, roleId, leagueItems.map(cur => cur.id));
|
||||
for(let { id, count } of leagueItems) {
|
||||
let curItem = curItems.find(cur => cur.id == id);
|
||||
if(!curItem || curItem.count < count) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const itemResult = await handleCost(roleId, sid, items, reason);
|
||||
if(!itemResult) return false;
|
||||
|
||||
const decreaseResult = await GVGUserItemModel.decreaseItem(configId, leagueCode, roleId, leagueItems);
|
||||
const pushGoods = decreaseResult.map(item => {
|
||||
let leagueItem = leagueItems.find(cur => cur.id == item.id);
|
||||
return { id: item.id, count: item.count, expireTime: item.expireTime, inc: leagueItem?.count }
|
||||
});
|
||||
if(pushGoods.length > 0) {
|
||||
await sendMessageToUserWithSuc(roleId, PUSH_ROUTE.LEAGUE_ITEM_UPDATE, { items: pushGoods }, sid);
|
||||
saveGVGItemChangeLog(roleId, leagueCode, pushGoods, reason);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export function getProduceCoinCnt(items: RewardInter[]) {
|
||||
let produceCoinCnt = 0;
|
||||
for(let { id, count } of items) {
|
||||
if(id == GVG_ITEM.PRODUCE_COIN) {
|
||||
produceCoinCnt = count; break;
|
||||
}
|
||||
}
|
||||
return produceCoinCnt;
|
||||
}
|
||||
|
||||
export function combinePushItem(targetItems: RewardInter[], dicItems: RewardInter[]) {
|
||||
for(let { id, count } of dicItems) {
|
||||
let obj = targetItems.find(obj => obj.id == id);
|
||||
if(!obj) {
|
||||
targetItems.push({ id, count });
|
||||
} else {
|
||||
obj.count += count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user