diff --git a/game-server/app/servers/guild/handler/gvgFightHandler.ts b/game-server/app/servers/guild/handler/gvgFightHandler.ts index 452c9b758..696e0ee8d 100644 --- a/game-server/app/servers/guild/handler/gvgFightHandler.ts +++ b/game-server/app/servers/guild/handler/gvgFightHandler.ts @@ -3,16 +3,17 @@ import { GVG_ACTIVE_TYPE, GVG_ITEM, GVG_PERIOD, ITEM_CHANGE_REASON, REDIS_KEY, R import { BattleRecordModel } from "../../../db/BattleRecord"; import { GVGLeagueModel } from "../../../db/GVGLeague"; import { GVGUserItemModel } from "../../../db/GVGUserItem"; -import GVGVestigeLeagueRank, { GVGVestigeLeagueRankModel } from "../../../db/GVGVestigeLeagueRank"; +import { GVGVestigeLeagueRankModel } from "../../../db/GVGVestigeLeagueRank"; import { GVGVestigeLockModel } from "../../../db/GVGVestigeLock"; import { GVGVestigeRankModel } from "../../../db/GVGVestigeRank"; import { GVGVestigeRecModel, GVGVestigeRecUpdate } from "../../../db/GVGVestigeRec"; +import { GVGVestigeSumRankModel } from "../../../db/GVGVestigeSumRank"; import { HeroModel } from "../../../db/Hero"; import { RoleModel } from "../../../db/Role"; import { GVGVestigeOppLineup, VestigeRank } from "../../../domain/gvgField/returnData"; import { RoleRankInfo } from "../../../domain/rank"; import { getRemoteRplFilePath, getRemoteRplPrefix } from "../../../pubUtils/battleUtils"; -import { gameData, getGVGVestigeLeagueRank } from "../../../pubUtils/data"; +import { gameData } from "../../../pubUtils/data"; import { GVG } from "../../../pubUtils/dicParam"; import { RewardInter } from "../../../pubUtils/interface"; import { resResult } from "../../../pubUtils/util"; @@ -351,9 +352,9 @@ export class GVGProduceHandler { // 更新battleRecord await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } }); - // 突破排名奖励 - let { rewards, leagueRewards } = calBreakGoods(rec.vestigeId, historyRank, atkData.rank); - let breakGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueRewards, rewards, ITEM_CHANGE_REASON.GVG_VESTIGE_END); + // 取消突破排名奖励 + // let { rewards, leagueRewards } = calBreakGoods(rec.vestigeId, historyRank, atkData.rank); + // let breakGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueRewards, rewards, ITEM_CHANGE_REASON.GVG_VESTIGE_END); await saveScoreToRank(rec); addVestigeBattleEndRec(rec); @@ -367,7 +368,7 @@ export class GVGProduceHandler { historyRank: atkData.historyRank, ...getVestigeRecStatus(rec), oppPlayers: await getOppPlayerByRanks(serverId, rec.groupId, rec.serverType, rec.vestigeId, atkData.oppRanks), - breakGoods, + // breakGoods, lineup: atkData.lineup, lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0), }); @@ -417,6 +418,7 @@ export class GVGProduceHandler { async getLeagueDetailRank(msg: {}, session: BackendSession) { const serverId = session.get('serverId'); const guildCode = session.get('guildCode'); + const roleId = session.get('roleId'); const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); @@ -427,13 +429,16 @@ export class GVGProduceHandler { let { configId } = getGVGPeriodData(); const { ranks, myRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, false, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }, serverNames); + const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, false, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, serverNames); - let yesterdayRank = await GVGVestigeLeagueRank.getYesterdayRank(myLeague.leagueCode); - let canReceiveRanks = await GVGVestigeLeagueRank.getCanReceiveRanks(configId, myLeague.leagueCode); - let { canReceiveBox, boxPreview } = calVestigeLeagueBoxRewards(canReceiveRanks); + let yesterdayRank = await GVGVestigeLeagueRankModel.getYesterdayRank(myLeague.leagueCode); + let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode); + let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId); + let { canReceiveBox, boxPreview } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks); return resResult(STATUS.SUCCESS, { ranks, myRank, + memberRank, myMemberRank, latestRank: yesterdayRank?.rank||0, canReceiveBox, boxPreview }) @@ -453,12 +458,12 @@ export class GVGProduceHandler { let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupId, serverType, vestigeId); let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupId, serverType, vestigeId }); let ranks: VestigeRank[] = [], myRank: VestigeRank; - for(let { roleId, rank, lineup } of vestigeRanks) { - let param = await r.getParam(rank, roleId, [rank]); + for(let { roleId: targetRoleId, rank, lineup } of vestigeRanks) { + let param = await r.getParam(rank, targetRoleId, [rank]); if(!param) { - let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK); - await r.generParamAndSet(REDIS_KEY.USER_INFO, { roleId }, { role }); - param = await r.getParam(rank, roleId, [rank]); + let role = await RoleModel.findByRoleId(targetRoleId, ROLE_SELECT.RANK); + await r.generParamAndSet(REDIS_KEY.USER_INFO, { roleId: targetRoleId }, { role }); + param = await r.getParam(rank, targetRoleId, [rank]); } let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0); let serverName = serverNames[param.serverId]; @@ -493,12 +498,14 @@ export class GVGProduceHandler { if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); let { configId } = getGVGPeriodData(); - let canReceiveRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode); - if(canReceiveRanks.length <= 0) return resResult(STATUS.GVG_RECEIVE_NO_RANK_REWARD); + let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode); + let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId); + if(canReceiveLeagueRanks.length <= 0 && canReceivePlayerRanks.length <= 0) return resResult(STATUS.GVG_RECEIVE_NO_RANK_REWARD); - let { leagueReward, rewards } = calVestigeLeagueBoxRewards(canReceiveRanks); + let { leagueReward, rewards } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks); let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueReward, rewards, ITEM_CHANGE_REASON.GVG_VESTIGE_RECEIVE_RANK) - await GVGVestigeLeagueRankModel.receiveRanks(canReceiveRanks.map(cur => cur._id)); + await GVGVestigeLeagueRankModel.receiveRanks(canReceiveLeagueRanks.map(cur => cur._id)); + await GVGVestigeSumRankModel.receiveRanks(canReceivePlayerRanks.map(cur => cur._id)); return resResult(STATUS.SUCCESS, { leagueGoods, diff --git a/game-server/app/services/gvg/gvgFightService.ts b/game-server/app/services/gvg/gvgFightService.ts index 68224802e..7a61c2148 100644 --- a/game-server/app/services/gvg/gvgFightService.ts +++ b/game-server/app/services/gvg/gvgFightService.ts @@ -11,13 +11,13 @@ import { GVGVestigeLeagueRankModel, GVGVestigeLeagueRankType } from "../../db/GV import { GVGVestigeLockModel } from "../../db/GVGVestigeLock"; import { GVGVestigeRankModel, GVGVestigeRankType, GVGVestigeRankUpdate } from "../../db/GVGVestigeRank"; import { GVGVestigeRecType } from "../../db/GVGVestigeRec"; -import { GVGVestigeSumRankModel } from "../../db/GVGVestigeSumRank"; +import { GVGVestigeSumRankModel, GVGVestigeSumRankType } from "../../db/GVGVestigeSumRank"; import { HeroModel, HeroType } from "../../db/Hero"; import { RoleModel } from "../../db/Role"; import { OppDetailData, OppPlayerHeroInfo, OppPlayerInfo } from "../../domain/gvgField/gvgDb"; import { GVGVestigeOppPlayer } from "../../domain/gvgField/returnData"; import { KeyNameParam, LeagueRankInfo, myIdInter, RoleRankInfo } from "../../domain/rank"; -import { gameData, getGVGVestigeLeagueRank, getGVGVestigeRange } from "../../pubUtils/data"; +import { gameData, getGVGVestigeLeagueRank, getGVGVestigePlayerRank, getGVGVestigeRange } from "../../pubUtils/data"; import { GVG } from "../../pubUtils/dicParam"; import { RewardInter } from "../../pubUtils/interface"; import { getTimeFun, nowSeconds } from "../../pubUtils/timeUtil"; @@ -344,7 +344,7 @@ export async function savePlayerRank(configId: number, groupId: number, serverTy let dicRankMap = gameData.gvgVestige.get(vestigeId); let newRank = dicRankMap?.get(playerInfo.newRank)?.score||0; let oldRank = dicRankMap?.get(playerInfo.oldRank)?.score||0; - let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, groupId, serverType, newRank - oldRank); + let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, configId, groupId, serverType, newRank - oldRank); let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { serverType, groupId, day: getDayKeyInfo() }); await r1.setRankWithRoleInfo(playerInfo.roleId, myScore.score, myScore.updatedAt.getTime()); let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupId, serverType, newRank - oldRank); @@ -355,8 +355,12 @@ export async function savePlayerRank(configId: number, groupId: number, serverTy export async function getVestigeRank(redisKey: REDIS_KEY, isSimple: boolean, keyParam: KeyNameParam, myId: myIdInter, serverNames?: any) { let r = new Rank(redisKey, keyParam); r.setGenerFieldsFun((obj => { - if(redisKey == REDIS_KEY.GVG_VESTIGE_MEMBER_ALL && isSimple && obj instanceof RoleRankInfo) { - return { rank: obj.rank, name: obj.roleName, serverName: serverNames[obj.serverId], score: obj.num } + if(redisKey == REDIS_KEY.GVG_VESTIGE_MEMBER_ALL && obj instanceof RoleRankInfo) { + if(isSimple) { + return { rank: obj.rank, name: obj.roleName, serverName: serverNames[obj.serverId], score: obj.num } + } else { + return { ...obj, serverName: serverNames[obj.serverId], score: obj.num } + } } if(redisKey == REDIS_KEY.GVG_VESTIGE_LEAGUE && obj instanceof LeagueRankInfo) { if(isSimple) { @@ -394,22 +398,39 @@ export async function saveVestigeRankSchedule() { await addVestigeLeagueRankRec(config.configId, ranks); } + let memberKeys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_MEMBER_ALL}:${day}:`); + for(let key of memberKeys) { + let [,, _groupId, _serverType] = key.split(':'); + let groupId = parseInt(_groupId); + let serverType = parseInt(_serverType); + let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { groupId, serverType, day}); + let ranks = await r.getRankByRangeRaw(); + await GVGVestigeSumRankModel.saveRank(groupId, serverType, ranks); + } let playerSumRanks = await GVGVestigeSumRankModel.findAllScores(); await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks); } -export function calVestigeLeagueBoxRewards(canReceiveRanks: GVGVestigeLeagueRankType[]) { +export function calVestigeLeagueBoxRewards(canReceiveRanks: GVGVestigeLeagueRankType[], canReceivePlayerRanks: GVGVestigeSumRankType[]) { let rewards: RewardInter[] = [], leagueReward: RewardInter[] = []; for(let { rank } of canReceiveRanks) { let dicRank = getGVGVestigeLeagueRank(rank); if(!dicRank) { console.error('dic_zyz_GVGVestigeLeagueRank error'); continue; } + console.log('###### league', rank, dicRank) combinePushItem(rewards, dicRank.rankReward); combinePushItem(leagueReward, dicRank.rankLeagueReward); } + for(let { rank } of canReceivePlayerRanks) { + let dicRank = getGVGVestigePlayerRank(rank); + if(!dicRank) { console.error('dic_zyz_GVGVestigPlayerRank error'); continue; } + console.log('###### player', rank, dicRank) + combinePushItem(rewards, dicRank.rankPlayerReward); + combinePushItem(leagueReward, dicRank.rankPlayerLeagueReward); + } let boxPreview: { id: number, count: number, itemType: number }[] = []; for(let { id, count } of rewards) boxPreview.push({ id, count, itemType: GVG_RETURN_ITEM_TYPE.NORMAL_ITEM }); for(let { id, count } of leagueReward) boxPreview.push({ id, count, itemType: GVG_RETURN_ITEM_TYPE.GVG_ITEM }); return { - leagueReward, rewards, boxPreview, canReceiveBox: canReceiveRanks.length > 0 + leagueReward, rewards, boxPreview, canReceiveBox: canReceiveRanks.length > 0 || canReceivePlayerRanks.length > 0 } } \ No newline at end of file diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 3575e4f40..a0af12a4c 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -610,6 +610,7 @@ export const FILENAME = { DIC_GVG_AREA_POINT: 'dic_zyz_GVGAreaPoint', DIC_GVG_BATTLE_RANK_REWARD: 'dic_zyz_GVGBattleRankReward', DIC_GK_GVGBATTLE: 'dic_zyz_gk_GVGBattle', + DIC_GVG_VESTIGE_PLAYER_RANK: 'dic_zyz_GVGVestigePlayerRank', } export const WAR_RELATE_TABLES = [ diff --git a/shared/db/GVGVestigeSumRank.ts b/shared/db/GVGVestigeSumRank.ts index 0e33be8ee..ea4e0b23e 100644 --- a/shared/db/GVGVestigeSumRank.ts +++ b/shared/db/GVGVestigeSumRank.ts @@ -6,6 +6,9 @@ import { getZeroPoint } from '../pubUtils/timeUtil'; @index({ roleId: 1 }) export default class GVGVestigeSumRank extends BaseModel { + @prop({ required: true }) + configId: number; // 赛期 + @prop({ required: true }) day: number; // 每天5点 @@ -24,11 +27,17 @@ export default class GVGVestigeSumRank extends BaseModel { @prop({ required: true }) score: number; // 得分 - public static async incScore(roleId: string, leagueCode: string, groupId: number, serverType: number, inc: number) { + @prop({ required: true }) + rank: number; // 最后的排名,每天22点定格 + + @prop({ required: true }) + isReceived: boolean; // 是否领取过 + + public static async incScore(roleId: string, leagueCode: string, configId: number, groupId: number, serverType: number, inc: number) { let today = getZeroPoint(); let result: GVGVestigeSumRankType = await GVGVestigeSumRankModel.findOneAndUpdate({ - day: today, groupId, serverType, roleId, leagueCode - }, { $inc: { score: inc } }, { new: true, upsert: true }).lean(); + configId, day: today, groupId, serverType, roleId, leagueCode + }, { $inc: { score: inc } , $setOnInsert: { rank: 0, isReceived: false } }, { new: true, upsert: true }).lean(); return result; } @@ -54,6 +63,23 @@ export default class GVGVestigeSumRank extends BaseModel { ]); return ranks; } + + public static async saveRank(groupId: number, serverType: number, ranks: { rank: number, field: string }[]) { + let today = getZeroPoint(); + await GVGVestigeSumRankModel.bulkWrite(ranks.map(({ field, rank }) => { + return { updateOne: { filter: { day: today, groupId, serverType, roleId: field }, update: { $set: { rank } }} } + })); + } + + public static async getCanReceiveRanks(configId: number, roleId: string) { + console.log(configId, roleId) + let result: GVGVestigeSumRankType[] = await GVGVestigeSumRankModel.find({ configId, roleId, rank: { $gt: 0 }, isReceived: false }).lean(); + return result; + } + + public static async receiveRanks(_ids: string[]) { + await GVGVestigeSumRankModel.updateMany({ _id: { $in: _ids } }, { $set: { isReceived: true } }); + } } export const GVGVestigeSumRankModel = getModelForClass(GVGVestigeSumRank); diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index fc1f76e23..d2e61e688 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -131,6 +131,7 @@ import { dicGVGVestigeByType, dicGVGVestigeName, loadGVGVestigeType } from './di import { dicGVGVestige, loadGVGVestige } from './dictionary/DicGVGVestige'; import { DicGVGVestigeRange, dicGVGVestigeRange, loadGVGVestigeRange } from './dictionary/DicGVGVestigeRange'; import { DicGVGVestigeLeagueRank, dicGVGVestigeLeagueRank, loadGVGVestigeLeagueRank } from "./dictionary/DicGVGVestigeLeagueRank"; +import { DicGVGVestigePlayerRank, dicGVGVestigePlayerRank, loadGVGVestigePlayerRank } from "./dictionary/DicGVGVestigePlayerRank"; import { dicGVGAreaPoint, loadGVGAreaPoint, dicGVGPointsByAreaId } from "./dictionary/DicGVGAreaPoint"; import { DicGVGBattleRankReward, dicGVGBattleRankReward, loadGVGBattleRankReward } from './dictionary/DicGVGBattleRankReward'; @@ -331,6 +332,7 @@ export const gameData = { gvgVestige: dicGVGVestige, gvgVestigeRange: dicGVGVestigeRange, gvgVestigeLeagueRank: dicGVGVestigeLeagueRank, + gvgVestigePlayerRank: dicGVGVestigePlayerRank, gvgVestigeName: dicGVGVestigeName, gvgAreaPoint: dicGVGAreaPoint, gvgBattleRankReward: dicGVGBattleRankReward, @@ -1197,7 +1199,19 @@ export function getGVGVestigeLeagueRank(myLeagueRank: number) { for(let dic of gameData.gvgVestigeLeagueRank) { lastRank = dic; let { rankMin, rankMax } = dic; - if(rankMin < myLeagueRank && (rankMax >= myLeagueRank || rankMax == 0)) { + if(rankMin <= myLeagueRank && (rankMax >= myLeagueRank || rankMax == 0)) { + return dic; + } + } + return lastRank +} + +export function getGVGVestigePlayerRank(myRank: number) { + let lastRank: DicGVGVestigePlayerRank; + for(let dic of gameData.gvgVestigePlayerRank) { + lastRank = dic; + let { rankMin, rankMax } = dic; + if(rankMin <= myRank && (rankMax >= myRank || rankMax == 0)) { return dic; } } @@ -1460,6 +1474,7 @@ function loadDatas() { loadGVGVestige(); loadGVGVestigeRange(); loadGVGVestigeLeagueRank(); + loadGVGVestigePlayerRank(); loadGVGAreaPoint(); loadGVGBattleRankReward(); } diff --git a/shared/pubUtils/dictionary/DicGVGVestigePlayerRank.ts b/shared/pubUtils/dictionary/DicGVGVestigePlayerRank.ts new file mode 100644 index 000000000..989c2de55 --- /dev/null +++ b/shared/pubUtils/dictionary/DicGVGVestigePlayerRank.ts @@ -0,0 +1,30 @@ +// GVG遗迹 +import { FILENAME } from '../../consts' +import { RewardInter } from '../interface'; +import { parseGoodStr, readFileAndParse } from '../util' + +export interface DicGVGVestigePlayerRank { + // id + readonly id: number; + // 最低排名 + readonly rankMin: number; + // 最高排名 + readonly rankMax: number; + // 普通奖励 + readonly rankPlayerReward: RewardInter[]; + // gvg内奖励 + readonly rankPlayerLeagueReward: RewardInter[]; +} + +export const dicGVGVestigePlayerRank: DicGVGVestigePlayerRank[] = []; +export function loadGVGVestigePlayerRank() { + dicGVGVestigePlayerRank.splice(0, dicGVGVestigePlayerRank.length); + + let arr = readFileAndParse(FILENAME.DIC_GVG_VESTIGE_PLAYER_RANK); + arr.forEach(o => { + o.rankPlayerReward = parseGoodStr(o.rankPlayerReward); + o.rankPlayerLeagueReward = parseGoodStr(o.rankPlayerLeagueReward); + dicGVGVestigePlayerRank.push(o); + }); + arr = undefined; +} \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_GVGBattleRankReward.json b/shared/resource/jsons/dic_zyz_GVGBattleRankReward.json index c7d174bfc..abe57c856 100644 --- a/shared/resource/jsons/dic_zyz_GVGBattleRankReward.json +++ b/shared/resource/jsons/dic_zyz_GVGBattleRankReward.json @@ -4,167 +4,167 @@ "type": 1, "min": 1, "max": 1, - "reward": "71058&20|71068&1|71067&5|40016&5000|31002&1000" + "reward": "71061&20|71069&20|40016&1000|31002&1000|31001&1600000" }, { "id": 102, "type": 1, "min": 2, "max": 3, - "reward": "71058&15|71068&1|71067&4|40016&4000|31002&800" + "reward": "71061&15|71069&18|40016&900|31002&800|31001&1500000" }, { "id": 103, "type": 1, "min": 4, "max": 10, - "reward": "71058&12|71068&1|71067&3|40016&3500|31002&700" + "reward": "71061&12|71069&16|40016&800|31002&700|31001&1300000" }, { "id": 104, "type": 1, "min": 11, "max": 20, - "reward": "71058&10|71068&1|71067&3|40016&3000|31002&600" + "reward": "71061&10|71069&12|40016&600|31002&600|31001&1000000" }, { "id": 105, "type": 1, "min": 21, "max": 50, - "reward": "71058&5|82003&1|71067&3|40016&2500|31002&600" + "reward": "71061&5|71069&10|40016&500|31002&600|31001&800000" }, { "id": 106, "type": 1, "min": 51, "max": 100, - "reward": "71058&1|82003&1|71067&2|40016&2000|31002&500" + "reward": "71069&9|40016&400|31002&500|31001&700000" }, { "id": 107, "type": 1, "min": 101, "max": 200, - "reward": "82002&8|71067&1|40016&2000|31002&500" + "reward": "71069&6|40016&300|31002&500|31001&500000" }, { "id": 108, "type": 1, "min": 201, "max": -1, - "reward": "82002&6|71067&1|40016&2000|31002&500" + "reward": "71069&5|40016&200|31002&500|31001&300000" }, { "id": 201, "type": 2, "min": 1, "max": 1, - "reward": "71067&5|71066&5|40005&20000|31001&3000000" + "reward": "&" }, { "id": 202, "type": 2, "min": 2, "max": 2, - "reward": "71067&4|71066&4|40005&15000|31001&2700000" + "reward": "&" }, { "id": 203, "type": 2, "min": 3, "max": 3, - "reward": "71067&3|71066&3|40005&14000|31001&2400000" + "reward": "&" }, { "id": 204, "type": 2, "min": 4, "max": 5, - "reward": "71067&2|71066&3|40005&12000|31001&2100000" + "reward": "&" }, { "id": 205, "type": 2, "min": 6, "max": 10, - "reward": "71067&2|71066&2|40005&10000|31001&1800000" + "reward": "&" }, { "id": 206, "type": 2, "min": 11, "max": 20, - "reward": "71067&2|71066&1|40005&8000|31001&1500000" + "reward": "&" }, { "id": 207, "type": 2, "min": 21, "max": 50, - "reward": "71067&1|71066&1|40005&6000|31001&1200000" + "reward": "&" }, { "id": 208, "type": 2, "min": 51, "max": -1, - "reward": "71067&1|71066&1|40005&3000|31001&800000" + "reward": "&" }, { "id": 301, "type": 3, "min": 1, "max": 1, - "reward": "71067&8|71066&9|17053&25|40016&3000|31002&800" + "reward": "71069&30|17053&50|40016&2000|40005&20000|31002&800" }, { "id": 302, "type": 3, "min": 2, "max": 2, - "reward": "71067&6|71066&8|17053&20|40016&2500|31002&600" + "reward": "71069&26|17053&40|40016&1800|40005&18000|31002&600" }, { "id": 303, "type": 3, "min": 3, "max": 3, - "reward": "71067&6|71066&7|17053&16|40016&2200|31002&500" + "reward": "71069&24|17053&32|40016&1600|40005&16000|31002&500" }, { "id": 304, "type": 3, "min": 4, "max": 5, - "reward": "71067&5|71066&6|17053&12|40016&2000|31002&500" + "reward": "71069&20|17053&24|40016&1200|40005&12000|31002&500" }, { "id": 305, "type": 3, "min": 6, "max": 10, - "reward": "71067&4|71066&5|17053&10|40016&1800|31002&400" + "reward": "71069&16|17053&20|40016&1000|40005&10000|31002&400" }, { "id": 306, "type": 3, "min": 11, "max": 20, - "reward": "71067&3|71066&4|17053&10|40016&1600|31002&400" + "reward": "71069&12|17053&20|40016&800|40005&8000|31002&400" }, { "id": 307, "type": 3, "min": 21, "max": 50, - "reward": "71067&2|71066&3|17053&8|40016&1400|31002&300" + "reward": "71069&8|17053&16|40016&600|40005&6000|31002&300" }, { "id": 308, "type": 3, "min": 51, "max": -1, - "reward": "71067&1|71066&2|17053&6|40016&1000|31002&300" + "reward": "71069&5|17053&12|40016&300|40005&5000|31002&300" } ] \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_GVGCityAdd.json b/shared/resource/jsons/dic_zyz_GVGCityAdd.json index 86afb2fa1..8e202c7cc 100644 --- a/shared/resource/jsons/dic_zyz_GVGCityAdd.json +++ b/shared/resource/jsons/dic_zyz_GVGCityAdd.json @@ -5,7 +5,7 @@ "foodAdd": 30, "mineralAdd": 30, "woodAdd": 30, - "occupyReward": "71067&3|40016&6000|40005&10000" + "occupyReward": "71061&10|71070&20|40016&6000" }, { "id": 2, @@ -13,7 +13,7 @@ "foodAdd": 60, "mineralAdd": 60, "woodAdd": 60, - "occupyReward": "71067&2|40016&3000|40005&8000" + "occupyReward": "71061&6|71070&15|40016&3000" }, { "id": 3, @@ -21,6 +21,6 @@ "foodAdd": 100, "mineralAdd": 100, "woodAdd": 100, - "occupyReward": "71067&1|40016&2000|40005&5000" + "occupyReward": "71061&3|71070&10|40016&2000" } ] \ No newline at end of file