拍卖行:价格修改

This commit is contained in:
luying
2021-09-24 11:38:41 +08:00
parent f3c73ade66
commit 1384074736
8 changed files with 98 additions and 56 deletions

View File

@@ -1,6 +1,6 @@
import { DividendModel } from './../../../db/Dividend';
import { Application, BackendSession, ChannelService, HandlerService, } from "pinus";
import { AUCTION_STAGE, DEBUG_MAGIC_WORD, STATUS, OFFER_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE, DATA_NAME, LOT_STATUS } from "../../../consts";
import { AUCTION_STAGE, DEBUG_MAGIC_WORD, STATUS, CURRENCY_BY_TYPE, CURRENCY_TYPE, DATA_NAME, LOT_STATUS } from "../../../consts";
import { LotModel } from "../../../db/Lot";
import { ItemReward } from "../../../domain/dbGeneral";
import { resResult } from "../../../pubUtils/util";
@@ -15,6 +15,8 @@ import { openGuildRefine } from '../../../services/guildRefineService';
import { unlockTrain } from '../../../services/guildTrainService';
import { UserGuildModel } from '../../../db/UserGuild';
import { UserGuildApplyModel } from '../../../db/UserGuildApply';
import * as dicParam from '../../../pubUtils/dicParam';
import { getAuctionRewardByPoolId } from '../../../pubUtils/data';
export default function (app: Application) {
new HandlerService(app, {});
@@ -67,7 +69,7 @@ export class AuctionHandler {
res.releaseCallback();
return resResult(STATUS.LOT_OFFER_SERIAL);
}
let newPrice = Math.floor(curPrice * OFFER_RATIO);
let newPrice = Math.floor(curPrice * dicParam.GUILD_AUCTION.AUCTION_PRICE_RISE);
let maxFlag = max;
if (newPrice >= maxPrice) {
newPrice = maxPrice;
@@ -214,8 +216,8 @@ export class AuctionHandler {
}
// ! 测试接口
async debugAddLots(msg: { magicWord: string, sourceType: number, sourceCode: string, rewards: ItemReward[] }, session: BackendSession) {
const { magicWord, sourceType, sourceCode, rewards } = msg;
async debugAddLots(msg: { magicWord: string, sourceType: number, sourceCode: string, poolId: number }, session: BackendSession) {
const { magicWord, sourceType, sourceCode, poolId } = msg;
if (magicWord !== DEBUG_MAGIC_WORD) {
return resResult(STATUS.TOKEN_ERR);
}
@@ -242,6 +244,8 @@ export class AuctionHandler {
await UserGuildApplyModel.deleteApply(roleId); // 删除玩家所有对其他公会的申请
}
let rewards = getAuctionRewardByPoolId(poolId);
if(!rewards) return resResult(STATUS.WRONG_PARMS);
const result = await genAuction(guildCode, sourceType, sourceCode, serverId, rewards);
if (!result) {
return resResult(STATUS.WRONG_PARMS);

View File

@@ -1,17 +1,17 @@
import { MailModel, MailType } from './../db/Mail';
import { DividendModel } from './../db/Dividend';
import { LOT_CODE_LEN, AUCTION_STAGE, AUCTION_TIME, DIVIDEND_CODE_LEN, DIVIDEND_STATUS, LOT_STATUS, MAIL_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, STATUS, DIVIDENDWEEKENDRATE, DIVIDENDMAXRATIO, DIVIDENDPOSITIONMAXRATIO, ROLE_RECEIVE_STATUS, AUCTION_BID_STATUS, DEBUG_MAGIC_WORD, AUCTION_SOURCE } from './../consts';
import { LOT_CODE_LEN, AUCTION_STAGE, AUCTION_TIME, DIVIDEND_CODE_LEN, DIVIDEND_STATUS, LOT_STATUS, MAIL_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, DIVIDENDMAXRATIO, DIVIDENDPOSITIONMAXRATIO, ROLE_RECEIVE_STATUS, AUCTION_BID_STATUS, DEBUG_MAGIC_WORD, AUCTION_SOURCE } from './../consts';
import { DividendRec, ItemReward } from "../domain/dbGeneral";
import { genCode, resResult } from '../pubUtils/util';
import { genCode } from '../pubUtils/util';
import { LotModel, LotParam } from '../db/Lot';
import { getZeroPointD, getTimeFunD } from '../pubUtils/timeUtil';
import { getTimeFunD } from '../pubUtils/timeUtil';
import { gameData, getGoodById } from '../pubUtils/data';
import { DividendParam, DividendType } from '../db/Dividend';
import { pushMail } from '../pubUtils/interface';
import { sendMailByContent } from './mailService';
import { pinus, BackendSession, FrontendOrBackendSession } from 'pinus';
import { FrontendOrBackendSession } from 'pinus';
import { participants } from './guildActivityService';
import { Member } from '../domain/battleField/guildActivity';
import * as dicParam from '../pubUtils/dicParam';
import { RewardInter } from '../pubUtils/interface';
// ! 获取底价,假数据
export function getBasePrice(gid: number, count: number) {
@@ -142,7 +142,7 @@ export function getBossAuctionEnd() {
* @param {number} serverId
* @param {ItemReward[]} rewards
*/
export async function genAuction(guildCode: string, sourceType: number, sourceCode: string, serverId: number, rewards: ItemReward[]) {
export async function genAuction(guildCode: string, sourceType: number, sourceCode: string, serverId: number, rewards: { goods: RewardInter, basePrice: number, maxPrice: number}[]) {
let begin = auctionBegin();
let end = auctionEnd();
if(sourceType == AUCTION_SOURCE.BOSS) { // 军团boss本
@@ -150,13 +150,13 @@ export async function genAuction(guildCode: string, sourceType: number, sourceCo
end = getBossAuctionEnd();
}
const guildEnd = guildAuctionEnd();
const lotsData: LotParam[] = rewards.map(reward => {
const { id, count } = reward;
const lotsData: LotParam[] = rewards.map(({ goods, basePrice, maxPrice }) => {
const { id, count } = goods;
const code = genCode(LOT_CODE_LEN);
return {
auctionStage: AUCTION_STAGE.DEFAULT, sourceType,
sourceCode, serverId, guildCode, code, gid: id, count, begin, end, status: LOT_STATUS.DEFAULT,
maxPrice: getMaxPrice(id, count), curPrice: getBasePrice(id, count),
maxPrice, curPrice: basePrice,
}
});
const lots = await LotModel.createRecs(lotsData);
@@ -179,7 +179,7 @@ function posDividend(totalPrice: number, roleRatio: number, totalRatio: number)
function weekendDividend(posNum: number, date: Date) {
const day = date.getDay();
return (day === 0 || day === 6) ? Math.floor(posNum * DIVIDENDWEEKENDRATE) : 0;
return (day === 0 || day === 6) ? Math.floor(posNum * dicParam.GUILD_AUCTION.DIVIDEND_WEEKEND_RATE) : 0;
}
function dividendRate(data: Member) {
@@ -197,7 +197,7 @@ export async function calculateDividend(dividend: DividendType) {
if (!dividend) return null;
const { code, guildCode, sourceType, sourceCode, lots, totalPrice, status, begin } = dividend;
if (status === DIVIDEND_STATUS.SENT) return dividend;
const calcuTotalPrice = lots.reduce((acc, lot) => { return acc + lot.price }, 0);
const calcuTotalPrice = lots.reduce((acc, lot) => { return acc + lot.price }, 0) * dicParam.GUILD_AUCTION.DIVIDEND_RATE;
if (calcuTotalPrice !== totalPrice) {
await DividendModel.updateDividend(code, { totalPrice: calcuTotalPrice });
// 更新 totalPrice

View File

@@ -393,7 +393,7 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb
rank, score: guildScore, remainGateHp: gateHp,
members, memberCnt: members.length,
auctionType: AUCTION_SOURCE.GATE,
rewards
rewards: rewards.map(cur => cur.goods)
});
// 结算功勋等奖励
let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
@@ -455,7 +455,7 @@ export async function cityActivitySettleReward(cityId: number, serverId: number)
memberCnt: members.length, members,
isSuccess, isCompleted: true,
rank: guildRank, damage: num, remainGateHp: gateHp,
rewards,
rewards: rewards.map(cur => cur.goods),
auctionType: AUCTION_SOURCE.CITY,
});
@@ -690,7 +690,7 @@ export async function raceActivitySettleReward(guildCode: string, woodenHorse: W
let rec = await GuildActivityRecordModel.updateInfo(guildCode, {
memberCnt: members.length, members,
isSuccess, isCompleted: true, rank: myGuildRank,
rewards,
rewards: rewards.map(cur => cur.goods),
woodenHorse,
});
if (rec) {

View File

@@ -50,9 +50,7 @@ export const AUCTION_BID_STATUS = {
SUC: 2, // 竞拍成功
}
export const OFFER_RATIO = 1.1;
export const BID_REC_COUNT = 100;
export const GUILD_LOTS_REC_COUNT = 100;
export const DIVIDENDWEEKENDRATE = 0.2;
export const DIVIDENDMAXRATIO = 0.1;
export const DIVIDENDPOSITIONMAXRATIO = 3;

View File

@@ -92,7 +92,7 @@ import { dicQuenchByQuality, dicQuenchRangeByQuality, dicQuenchRangeByQualityAnd
import { dicQuenchConsume, loadQuenchConsume } from './dictionary/DicQuenchConsume';
import { dicHoliday, loadHoliday } from './dictionary/DicHoliday';
import { dicExpeditionSubAttr, loadExpeditionSubAttr } from './dictionary/DicExpeditionSubAttr';
import { dicAuctionPool, loadAuctionReward } from './dictionary/DicAuctionReward';
import { DicAuctionBasicPool, dicAuctionPool, loadAuctionReward } from './dictionary/DicAuctionReward';
import { dicGuildTrainInfo, loadGuildTrainInfo } from './dictionary/DicGuildTrainInfo';
import { pick } from "underscore";
@@ -596,12 +596,13 @@ export function getGuildAuctionRewards(aid: number, rank: number) {
export function getAuctionRewardByPoolId(poolId: number) {
let pools = gameData.auctionPool.get(poolId);
let rewards: RewardInter[] = [];
let rewards: { goods: RewardInter, basePrice: number, maxPrice: number }[] = [];
for(let { count, basicPool } of pools) {
let { rewardBasicPool, basePrice, maxPrice } = basicPool
for(let i = 0; i < count; i++) {
let result = getRandEelmWithWeight(basicPool);
let result = getRandEelmWithWeight(rewardBasicPool);
if(result && result.dic) {
rewards.push(pick(result.dic, ['id', 'count']));
rewards.push({ goods: pick(result.dic, ['id', 'count']), basePrice, maxPrice });
}
}
}

View File

@@ -1,4 +1,4 @@
import { readFileAndParse } from '../util'
import { parseNumberList, readFileAndParse } from '../util'
import { FILENAME } from '../../consts'
import { decodeArrayListStr } from '../../pubUtils/util';
@@ -11,6 +11,8 @@ export interface AuctionBasicPool {
export interface DicAuctionBasicPool {
readonly id: number; // 唯一id
readonly rewardBasicPool: AuctionBasicPool[];
readonly basePrice: number;
readonly maxPrice: number;
}
export interface DicAuctionReward {
@@ -23,17 +25,20 @@ export interface DicAuctionReward {
interface DicAuctionPool {
readonly id: number; // basicPool的id
readonly count: number; // 份数
readonly basicPool: AuctionBasicPool[]; // 随机池
readonly basicPool: DicAuctionBasicPool; // 随机池
}
export const dicAuctionPool = new Map<number, DicAuctionPool[]>(); // poolId => DicAuctionPool
export function loadAuctionReward() {
dicAuctionPool.clear();
let basicPoolMap = new Map<number, AuctionBasicPool[]>(); // id => AuctionBasicPool
let basicPoolMap = new Map<number, DicAuctionBasicPool>(); // id => AuctionBasicPool
let arr = readFileAndParse(FILENAME.DIC_AUCTION_BASIC_POOL);
arr.forEach(o => {
let rewardBasicPool = parseRewardBasicPool(o.rewardBasicPool);
basicPoolMap.set(o.id, rewardBasicPool);
console.log(o)
o.rewardBasicPool = parseRewardBasicPool(o.rewardBasicPool);
o.basePrice = parsePrice(o.basePrice);
o.maxPrice = parsePrice(o.maxPrice);
basicPoolMap.set(o.id, o);
});
arr = undefined;
let arr2 = readFileAndParse(FILENAME.DIC_AUCTION_REWARD);
@@ -60,6 +65,14 @@ function parseRewardBasicPool(str: string) {
return result
}
function parsePrice(str: string) {
let arr = str.split('&');
if(arr.length != 2) return 0;
let price = parseInt(arr[1]);
if(isNaN(price)) throw new Error('price format wrong');
return price;
}
function parseRewardId(str: string) {
let result = new Array<{id: number, count: number}>();
if (!str) return result;

30
shared/resource/jsons/dic_army_bossBase.json Executable file → Normal file
View File

@@ -13,7 +13,8 @@
"killReward": "40005&1000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "21013&80|21016&80|21031&80|21042&80|21054&80|21055&80|21062&80|21063&80|21008&60|21009&60|21010&60|42124&1|42128&1|42132&1|42136&1|42140&1|42144&1"
},
{
"id": 2,
@@ -29,7 +30,8 @@
"killReward": "40005&2000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "21013&80|21016&80|21031&80|21042&80|21054&80|21055&80|21062&80|21063&80|21008&60|21009&60|21010&60|42124&1|42128&1|42132&1|42136&1|42140&1|42144&1"
},
{
"id": 3,
@@ -45,7 +47,8 @@
"killReward": "40005&3000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "21013&80|21016&80|21031&80|21042&80|21054&80|21055&80|21062&80|21063&80|21008&60|21009&60|21010&60|42124&1|42128&1|42132&1|42136&1|42140&1|42144&1"
},
{
"id": 4,
@@ -61,7 +64,8 @@
"killReward": "40005&4000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "42136&1|42140&1|42144&1|33123&1|33127&1|33131&1|33135&1|33139&1|33143&1"
},
{
"id": 5,
@@ -77,7 +81,8 @@
"killReward": "40005&5000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "42136&1|42140&1|42144&1|33123&1|33127&1|33131&1|33135&1|33139&1|33143&1"
},
{
"id": 6,
@@ -93,7 +98,8 @@
"killReward": "40005&6000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "42136&1|42140&1|42144&1|33123&1|33127&1|33131&1|33135&1|33139&1|33143&1"
},
{
"id": 7,
@@ -109,7 +115,8 @@
"killReward": "40005&7000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "33131&1|33135&1|33139&1|33143&1|50169&1|50170&1|50171&1"
},
{
"id": 8,
@@ -125,7 +132,8 @@
"killReward": "40005&8000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "33131&1|33135&1|33139&1|33143&1|50169&1|50170&1|50171&1"
},
{
"id": 9,
@@ -141,7 +149,8 @@
"killReward": "40005&9000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "33131&1|33135&1|33139&1|33143&1|50169&1|50170&1|50171&1"
},
{
"id": 10,
@@ -157,6 +166,7 @@
"killReward": "40005&10000",
"ratio": 1,
"damageReward": "40005&1",
"encourageSum": 300
"encourageSum": 300,
"rewardsPreview": "33131&1|33135&1|33139&1|33143&1|50169&1|50170&1|50171&1"
}
]

View File

@@ -5,7 +5,8 @@
"rewardBasicPool": "21013&80&1|21016&80&1|21031&80&1|21042&80&1|21054&80&1|21055&80&1|21062&80&1|21063&80&1",
"totalCount": 8,
"itid": 25,
"value": "31002&800"
"basePrice": "31002&800",
"maxPrice": "31002&1500"
},
{
"id": 2,
@@ -13,7 +14,8 @@
"rewardBasicPool": "21008&60&1|21009&60&1|21010&60&1|21011&60&1|21012&60&1|21014&60&1|21015&60&1|21025&60&1|21026&60&1|21027&60&1|21028&60&1|21029&60&1|21030&60&1|21036&60&1|21037&60&1|21038&60&1|21039&60&1|21050&60&1|21051&60&1|21052&60&1|21053&60&1|21064&60&1",
"totalCount": 22,
"itid": 25,
"value": "31002&1500"
"basePrice": "31002&1500",
"maxPrice": "31002&3000"
},
{
"id": 3,
@@ -21,7 +23,8 @@
"rewardBasicPool": "21001&30&1|21002&30&1|21003&30&1|21004&30&1|21005&30&1|21006&30&1|21007&30&1|21017&30&1|21018&30&1|21019&30&1|21020&30&1|21021&30&1|21022&30&1|21023&30&1|21024&30&1|21032&30&1|21033&30&1|21034&30&1|21035&30&1|21040&30&1|21041&30&1|21043&30&1|21044&30&1|21045&30&1|21046&30&1|21047&30&1|21048&30&1|21049&30&1|21056&30&1|21057&30&1|21059&30&1",
"totalCount": 31,
"itid": 25,
"value": "31002&3000"
"basePrice": "31002&3000",
"maxPrice": "31002&5000"
},
{
"id": 4,
@@ -29,7 +32,8 @@
"rewardBasicPool": "42124&1&1|42128&1&1|42132&1&1|42136&1&1|42140&1&1|42144&1&1",
"totalCount": 6,
"itid": 40,
"value": "31002&800"
"basePrice": "31002&800",
"maxPrice": "31002&1500"
},
{
"id": 5,
@@ -37,7 +41,8 @@
"rewardBasicPool": "42123&1&1|42127&1&1|42131&1&1|42135&1&1|42139&1&1|42143&1&1",
"totalCount": 6,
"itid": 40,
"value": "31002&400"
"basePrice": "31002&400",
"maxPrice": "31002&800"
},
{
"id": 6,
@@ -45,7 +50,8 @@
"rewardBasicPool": "42100&1&1|42104&1&1|42108&1&1|42112&1&1|42116&1&1|42120&1&1",
"totalCount": 6,
"itid": 40,
"value": "31002&300"
"basePrice": "31002&300",
"maxPrice": "31002&600"
},
{
"id": 7,
@@ -53,7 +59,8 @@
"rewardBasicPool": "42099&1&1|42103&1&1|42107&1&1|42111&1&1|42115&1&1|42119&1&1",
"totalCount": 6,
"itid": 40,
"value": "31002&150"
"basePrice": "31002&150",
"maxPrice": "31002&200"
},
{
"id": 8,
@@ -61,7 +68,8 @@
"rewardBasicPool": "33123&1&1|33127&1&1|33131&1&1|33135&1&1|33139&1&1|33143&1&1",
"totalCount": 6,
"itid": 28,
"value": "31002&2000"
"basePrice": "31002&2000",
"maxPrice": "31002&4000"
},
{
"id": 9,
@@ -69,7 +77,8 @@
"rewardBasicPool": "33099&1&1|33103&1&1|33107&1&1|33111&1&1|33115&1&1|33119&1&1",
"totalCount": 6,
"itid": 28,
"value": "31002&1000"
"basePrice": "31002&1000",
"maxPrice": "31002&2000"
},
{
"id": 10,
@@ -77,7 +86,8 @@
"rewardBasicPool": "50169&1&1|50170&1&1|50171&1&1|50172&1&1|50173&1&1|50174&1&1|50175&1&1|50176&1&1|50177&1&1|50178&1&1|50179&1&1|50180&1&1|50181&1&1|50182&1&1|50183&1&1|50184&1&1|50185&1&1|50186&1&1|50187&1&1|50188&1&1|50189&1&1|50190&1&1|50191&1&1|50192&1&1|50193&1&1|50194&1&1|50195&1&1|50196&1&1|50197&1&1|50198&1&1|50199&1&1|50200&1&1|50201&1&1|50202&1&1|50203&1&1|50204&1&1|50205&1&1|50206&1&1|50207&1&1|50208&1&1|50209&1&1|50210&1&1",
"totalCount": 42,
"itid": 41,
"value": "31002&5000"
"basePrice": "31002&5000",
"maxPrice": "31002&7000"
},
{
"id": 11,
@@ -85,7 +95,8 @@
"rewardBasicPool": "50127&1&1|50128&1&1|50129&1&1|50130&1&1|50131&1&1|50132&1&1|50133&1&1|50134&1&1|50135&1&1|50136&1&1|50137&1&1|50138&1&1|50139&1&1|50140&1&1|50141&1&1|50142&1&1|50143&1&1|50144&1&1|50145&1&1|50146&1&1|50147&1&1|50148&1&1|50149&1&1|50150&1&1|50151&1&1|50152&1&1|50153&1&1|50154&1&1|50155&1&1|50156&1&1|50157&1&1|50158&1&1|50159&1&1|50160&1&1|50161&1&1|50162&1&1|50163&1&1|50164&1&1|50165&1&1|50166&1&1|50167&1&1|50168&1&1",
"totalCount": 42,
"itid": 41,
"value": "31002&3000"
"basePrice": "31002&3000",
"maxPrice": "31002&6000"
},
{
"id": 12,
@@ -93,7 +104,8 @@
"rewardBasicPool": "17001&1&1",
"totalCount": 1,
"itid": 38,
"value": "31002&800"
"basePrice": "31002&800",
"maxPrice": "31002&1600"
},
{
"id": 13,
@@ -101,7 +113,8 @@
"rewardBasicPool": "17042&1&1",
"totalCount": 1,
"itid": 38,
"value": "31002&800"
"basePrice": "31002&800",
"maxPrice": "31002&1600"
},
{
"id": 14,
@@ -109,7 +122,8 @@
"rewardBasicPool": "17049&1&1|17049&1&1|17050&1&1|17050&1&1|17050&1&1|17053&1&1|17053&1&1",
"totalCount": 7,
"itid": 38,
"value": "31002&800"
"basePrice": "31002&800",
"maxPrice": "31002&1600"
},
{
"id": 15,
@@ -117,7 +131,8 @@
"rewardBasicPool": "17049&1&1|17049&1&1|17050&1&1|17050&1&1|17053&1&1|17053&1&1",
"totalCount": 6,
"itid": 38,
"value": "31002&800"
"basePrice": "31002&800",
"maxPrice": "31002&1600"
},
{
"id": 16,
@@ -125,6 +140,7 @@
"rewardBasicPool": "17049&1&1|17049&1&1|17050&1&1|17050&1&1|17053&1&1",
"totalCount": 5,
"itid": 38,
"value": "31002&800"
"basePrice": "31002&800",
"maxPrice": "31002&1600"
}
]