✨ feat(任务): 添加稷下学宫任务
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Application, BackendSession, pinus, HandlerService, } from 'pinus';
|
||||
import { RougelikeRecordModel } from '../../../db/RougelikeRecord';
|
||||
import { genCode, getRandEelmWithWeight, resResult } from '../../../pubUtils/util';
|
||||
import { COLLECTION_TYPE, ITEM_CHANGE_REASON, REST_POINT_TYPE, ROUGE_LIKE_CARD_TYPE, ROUGE_LIKE_CHOOSE_REWARD, ROUGE_LIKE_NODE_TYPE, ROUGE_LIKE_STATUS, TASK_TYPE } from '../../../consts';
|
||||
import { COLLECTION_TYPE, ITEM_CHANGE_REASON, REST_POINT_TYPE, ROUGE_LIKE_CARD_TYPE, ROUGE_LIKE_CHOOSE_REWARD, ROUGE_LIKE_NODE_TYPE, ROUGE_LIKE_STATUS, TASK_ROUGE_CARD_TYPE, TASK_TYPE } from '../../../consts';
|
||||
import { Quest, RestPoint, RougelikeRecordDetailModel } from '../../../db/RougelikeRecordDetail';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
import { RougelikeCardModel, RougelikeCardPara, RougelikeCardType } from '../../../db/RougelikeCard';
|
||||
@@ -95,7 +95,7 @@ export class RougeHandler {
|
||||
|
||||
const charaCards = getInitCharaCard() || [];
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode);
|
||||
for (let ele of charaCards) {
|
||||
handleAddFun.pushChara(ele.id, await getMaxHp(roleId, gameCode, ele.id, type, grade), []);
|
||||
}
|
||||
@@ -120,6 +120,7 @@ export class RougeHandler {
|
||||
async startGame(msg: { gameCode: string, authorType: number }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
const { gameCode, authorType } = msg;
|
||||
|
||||
@@ -150,10 +151,16 @@ export class RougeHandler {
|
||||
|
||||
let { addCoin, cardIds } = await getEffectWhenGameStart(roleId, gameCode, authorType);
|
||||
dbRecord = await RougelikeRecordModel.updateByGameCode(gameCode, { $inc: { coin: addCoin, coinTotal: addCoin } });
|
||||
//任务
|
||||
if (addCoin > 0) {
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_GET_COIN, { addCoin });
|
||||
}
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_GAME_COUNT, { count: 1 });
|
||||
|
||||
|
||||
|
||||
const charas: CommonChara[] = formateCharasOrCards(await RougelikeCharaModel.findByGameCode(gameCode), ROUGE_LIKE_CARD_TYPE.CHARA)?.charas || [];
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode);
|
||||
handleAddFun.pushHolyCards(cardIds);
|
||||
let result = await handleAddFun.save();
|
||||
result = await handleAddFun.getHolyEffect();
|
||||
@@ -187,7 +194,7 @@ export class RougeHandler {
|
||||
|
||||
let takeoutRewardMap = takeoutReward.reduce((map, cur) => { map.set(cur.id, cur.count); return map; }, new Map<number, number>());
|
||||
let spiritIds: number[] = [];
|
||||
let addCoin = 0, addScore = 0, addTech = 0, isPass = true;
|
||||
let addScore = 0, addTech = 0, isPass = true;
|
||||
if (dbLayers.length == 0) isPass = false;
|
||||
for (const { layer, hasPass = false, layerNodes } of dbLayers) {
|
||||
if (layer > dbRecord.curLayer) {
|
||||
@@ -208,8 +215,8 @@ export class RougeHandler {
|
||||
nodeType = dbDetail?.questType || 0;
|
||||
}
|
||||
const layerReward = getLayerRewardOneData(type, grade, layer, nodeType);
|
||||
const { takeoutReward = [], coin = 0, score = 0, tech = 0, spiritPlan } = clone(layerReward);
|
||||
addCoin += coin, addScore += score, addTech += tech;
|
||||
const { takeoutReward = [], score = 0, tech = 0, spiritPlan } = clone(layerReward);
|
||||
addScore += score, addTech += tech;
|
||||
for (const { id, count } of takeoutReward) takeoutRewardMap.set(id, takeoutRewardMap.get(id) || 0 + count);
|
||||
spiritIds.push(...getRandomSpirit(spiritPlan));
|
||||
}
|
||||
@@ -222,9 +229,9 @@ export class RougeHandler {
|
||||
|
||||
|
||||
if (!dbRecord) return resResult(STATUS.NO_ROUGELIKE_GAME);
|
||||
dbRecord = await RougelikeRecordModel.updateByGameCode(gameCode, { $set: { status, takeoutReward }, $inc: { score: addScore, coin: addCoin, techScore: addTech } });
|
||||
dbRecord = await RougelikeRecordModel.updateByGameCode(gameCode, { $set: { status, takeoutReward }, $inc: { score: addScore, techScore: addTech } });
|
||||
|
||||
let { score = 0, coin = 0, techScore = 0 } = dbRecord;
|
||||
let { score = 0, techScore = 0 } = dbRecord;
|
||||
let dbScore = await RougelikeScoreModel.incScore(roleId, score);
|
||||
let goods = await addItems(roleId, roleName, sid, [getRougeTechScoreObject(techScore)], ITEM_CHANGE_REASON.ROUGE_TECH_SCORE);
|
||||
|
||||
@@ -237,12 +244,11 @@ export class RougeHandler {
|
||||
firstReward = await addItems(roleId, roleName, sid, typeGradeData?.firstReward || [], ITEM_CHANGE_REASON.ROUGE_FIRST_REWARD);
|
||||
await RougelikeExtendModel.update(roleId, typeGradeData.id, firstReward, gameCode);
|
||||
}
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.FUND_ROUGE, { rougeId: typeGradeData.id });
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.FUND_ROUGE, { rougeId: typeGradeData.id, count: 1 });
|
||||
}
|
||||
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
gameCode, goods, score, techScore, coin, hasReceivedTakeout, firstReward,
|
||||
gameCode, goods, score, techScore, hasReceivedTakeout, firstReward,
|
||||
takeoutReward, weeklyScore: dbScore?.score || 0, takeoutRewardCnt: dbScore?.takeoutRewardCnt || 0
|
||||
});
|
||||
|
||||
@@ -366,7 +372,7 @@ export class RougeHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
let sid = session.get('sid');
|
||||
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
let { gameCode, detailCode, battleCode, warId, status, round, rougeDamage } = msg;
|
||||
let dbDetail = await RougelikeRecordDetailModel.findByCode(gameCode, detailCode);
|
||||
@@ -386,13 +392,19 @@ export class RougeHandler {
|
||||
|
||||
const dbCharaMap = dbCharas.reduce((result, cur) => { result.set(cur.charaCode, { ...cur }); return result; }, new Map<string, RougelikeCharaType>());
|
||||
|
||||
let isAp: boolean = false, isRound: boolean = false;
|
||||
let isAp: boolean = false, isRound: boolean = false, arrAuthorType: number[] = [];
|
||||
for (let obj of rougeDamage) {
|
||||
if (obj.isAp) isAp = true;
|
||||
if (obj.isRound) isRound = true;
|
||||
const chara = dbCharaMap.get(obj.charaCode);
|
||||
if (!chara) return resResult(STATUS.BATTLE_ABNORMAL)
|
||||
obj.maxHp = (chara.maxHp || 0);
|
||||
|
||||
if (!chara.cards || chara.cards.length == 0) console;
|
||||
for (const { cardId } of chara.cards) {
|
||||
const passiveCardData = gameData.rougePassiveCard.get(cardId);
|
||||
if (nodeType == ROUGE_LIKE_NODE_TYPE.BOSS && passiveCardData && passiveCardData.authorType) arrAuthorType.push(passiveCardData.authorType);
|
||||
}
|
||||
}
|
||||
await updateChalleng(dbRecord, roleId, sid, gameCode, layer, rougeDamage, isAp, isRound);
|
||||
|
||||
@@ -450,10 +462,18 @@ export class RougeHandler {
|
||||
|
||||
if (incCoin > 0) {
|
||||
charas = await updateMaxHp(roleId, gameCode, dbRecord.type, dbRecord.grade, updateCharasMap)
|
||||
|
||||
//任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_GET_COIN, { addCoin: incCoin });
|
||||
|
||||
} else {
|
||||
await RougelikeCharaModel.bulkWriteUpdate(updateCharas);
|
||||
}
|
||||
|
||||
if (status == 1 && arrAuthorType.length > 0 && arrAuthorType.every(cur => cur == arrAuthorType[0])) {
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_BOSS_PASS, { authorType: arrAuthorType[0], count: 1 });
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, { status, gameCode, detailCode, charas, incCoin });
|
||||
}
|
||||
|
||||
@@ -522,7 +542,7 @@ export class RougeHandler {
|
||||
|
||||
// if (groupStatus == ROUGE_LIKE_CHOOSE_REWARD.CHOOSE) return resResult(STATUS.REWARD_NO_CHOOSE);
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode, dbDetail);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode, dbDetail);
|
||||
let incCoin = 0, redCoin = 0;
|
||||
// //处理下试炼币
|
||||
// if (rewardType == 0) {
|
||||
@@ -638,7 +658,7 @@ export class RougeHandler {
|
||||
await RougelikeRecordDetailModel.updateShopByCode(gameCode, detailCode, optionIndex, shop.optionStatus);
|
||||
await RougelikeRecordModel.updateByGameCode(gameCode, { $set: { coin: (dbRecord.coin || 0) - shop.price } });
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode, dbDetail);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode, dbDetail);
|
||||
handleAddFun.pushCard(shop.rewardId, shop.rewardType);
|
||||
let result = await handleAddFun.save();
|
||||
result = await handleAddFun.getHolyEffect();
|
||||
@@ -682,6 +702,8 @@ export class RougeHandler {
|
||||
async chooseOption(msg: { gameCode: string, detailCode: string, eventOptions: number[] }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
const { gameCode, detailCode, eventOptions } = msg;
|
||||
|
||||
let dbDetail = await RougelikeRecordDetailModel.findByCode(gameCode, detailCode);
|
||||
@@ -690,7 +712,7 @@ export class RougeHandler {
|
||||
if (status == 1) return resResult(STATUS.NODE_NO_CHOOSE);
|
||||
|
||||
let checkAfterGroup = 0, optionGroupIds: number[] = [];
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, gameCode, dbDetail);
|
||||
let handleAddFun = new HandleAddCard(session, gameCode, dbDetail);
|
||||
for (let [index, id] of eventOptions.entries()) {
|
||||
const rougeEventOptionData = gameData.rougeEventOption.get(id);
|
||||
if (!rougeEventOptionData) return resResult(STATUS.NODE_NO_CHOOSE);
|
||||
@@ -723,6 +745,8 @@ export class RougeHandler {
|
||||
result = await handleAddFun.getHolyEffect();
|
||||
|
||||
await addSameTypeCollect(roleId, sid, gameCode, COLLECTION_TYPE.EVENT, optionGroupIds);
|
||||
//任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_EVENT_COLLECT, { eventGroups: optionGroupIds });
|
||||
|
||||
return resResult(STATUS.SUCCESS, { ...result })
|
||||
}
|
||||
@@ -843,6 +867,7 @@ export class RougeHandler {
|
||||
async chooseSkillCard(msg: { gameCode: string, charaCode: string, skillType: number, id: number }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
const { gameCode, charaCode, skillType, id } = msg;
|
||||
|
||||
@@ -864,6 +889,10 @@ export class RougeHandler {
|
||||
// 更新图鉴
|
||||
await addSingleCollect(roleId, sid, gameCode, COLLECTION_TYPE.SKILL_CARD, id);
|
||||
|
||||
// 任务
|
||||
let dicSkillCard = gameData.rougeSkillCard.get(id);
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_AUTHOR_CARD_COLLECT, { authorType: dicSkillCard.authorType, cardType: TASK_ROUGE_CARD_TYPE.SKILL, cardIds: [id] });
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
curChara: new CommonChara(chara)
|
||||
})
|
||||
@@ -990,6 +1019,8 @@ export class RougeHandler {
|
||||
async unlockTech(msg: { techId: number }, session: BackendSession) {
|
||||
let roleId: string = session.get('roleId');
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
const { techId } = msg;
|
||||
|
||||
let dicTech = gameData.rougeTech.get(techId);
|
||||
@@ -1009,6 +1040,9 @@ export class RougeHandler {
|
||||
await updateEffectId(techRecord);
|
||||
|
||||
let resultData = getCurTechData(techRecord, techId);
|
||||
//任务
|
||||
await checkTask(serverId, roleId, sid, TASK_TYPE.ROUGE_TECH_OPEN, { count: 1 });
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
...resultData
|
||||
});
|
||||
@@ -1141,7 +1175,7 @@ export class RougeHandler {
|
||||
return resResult(STATUS.NO_ROUGELIKE_GAME);
|
||||
}
|
||||
|
||||
let handleAddFun = new HandleAddCard(roleId, sid, dbRecord.gameCode);
|
||||
let handleAddFun = new HandleAddCard(session, dbRecord.gameCode);
|
||||
if (type == ROUGE_LIKE_CARD_TYPE.CHARA) {
|
||||
handleAddFun.pushChara(id, await getMaxHp(roleId, dbRecord?.gameCode || '', id, dbRecord.type, dbRecord.grade), []);
|
||||
} else if (type == ROUGE_LIKE_CARD_TYPE.HOLY) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { RougelikeRecordDetailType } from '../../db/RougelikeRecordDetail';
|
||||
import { COLLECTION_TYPE, PUSH_ROUTE, ROUGE_LIKE_CARD_TYPE } from '../../consts';
|
||||
import { COLLECTION_TYPE, PUSH_ROUTE, ROUGE_LIKE_CARD_TYPE, TASK_ROUGE_CARD_TYPE, TASK_TYPE } from '../../consts';
|
||||
import { genCode } from '../../pubUtils/util';
|
||||
import { Card, RougelikeCharaModel, RougelikeCharaPara, RougelikeCharaType } from '../../db/RougelikeChara';
|
||||
import { RougelikeCardPara, RougelikeCardModel } from '../../db/RougelikeCard';
|
||||
@@ -9,10 +9,13 @@ import { sendMessageToUserWithSuc } from '../pushService';
|
||||
import { gameData } from '../../pubUtils/data';
|
||||
import { clone } from 'underscore';
|
||||
import { RougeEffect, getSlotUnlockPoint } from './rougeEffectService';
|
||||
import { BackendSession } from 'pinus';
|
||||
import { checkTask } from '../task/taskService';
|
||||
|
||||
export class HandleAddCard {
|
||||
roleId: string;
|
||||
sid: string;
|
||||
serverId: number;
|
||||
gameCode: string;
|
||||
getLayer: number = 0;
|
||||
getWay: number = 0;
|
||||
@@ -21,9 +24,10 @@ export class HandleAddCard {
|
||||
addHolyCards: RougelikeCardPara[] = []; // 需要更新的圣物
|
||||
addCoin: number = 0; // 需要增加的试炼币
|
||||
|
||||
constructor(roleId: string, sid: string, gameCode: string, recordDetail?: RougelikeRecordDetailType) {
|
||||
this.roleId = roleId;
|
||||
this.sid = sid;
|
||||
constructor(session: BackendSession, gameCode: string, recordDetail?: RougelikeRecordDetailType) {
|
||||
this.roleId = session.get('roleId');
|
||||
this.sid = session.get('sid');
|
||||
this.serverId = session.get('serverId');
|
||||
this.gameCode = gameCode;
|
||||
if (recordDetail) {
|
||||
this.getLayer = recordDetail.layer;
|
||||
@@ -107,6 +111,22 @@ export class HandleAddCard {
|
||||
}
|
||||
if (collections.length > 0) await addCollection(this.roleId, this.sid, this.gameCode, collections);
|
||||
|
||||
//任务
|
||||
if (this.addPassiveCards.length > 0) {
|
||||
let passiveCardMap = new Map<number, number>();
|
||||
for (const { cardId } of this.addPassiveCards) {
|
||||
const passiveCardData = gameData.rougePassiveCard.get(cardId);
|
||||
let count = passiveCardMap.get(passiveCardData.authorType) || 0;
|
||||
passiveCardMap.set(passiveCardData.authorType, count + 1);
|
||||
}
|
||||
for (const [authorType, count] of passiveCardMap) {
|
||||
await checkTask(this.serverId, this.roleId, this.sid, TASK_TYPE.ROUGE_AUTHOR_CARD_COLLECT, { authorType, cardType: TASK_ROUGE_CARD_TYPE.PASSIVE, cardIds:this.addPassiveCards.map(cur => cur.cardId) });
|
||||
}
|
||||
}
|
||||
if (this.addHolyCards.length > 0) {
|
||||
await checkTask(this.serverId, this.roleId, this.sid, TASK_TYPE.ROUGE_HOLY_COLLECT, {cardIds:this.addHolyCards.map(cur => cur.cardId)});
|
||||
}
|
||||
|
||||
if (this.addCharas.length > 0) {
|
||||
result.addCharas = await this.getCharasByHolyEffect();
|
||||
}
|
||||
|
||||
@@ -1503,6 +1503,83 @@ export class CheckSingleTask {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.FUND_ROUGE: //143 通关XX试炼几
|
||||
{
|
||||
let { rougeId, count } = param;
|
||||
if (rougeId == dicTaskParam[0]) {
|
||||
result = { inc: count };
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.FUND_AUTHOR: //144 列传收集进度
|
||||
{
|
||||
let { authorProgress } = param;
|
||||
result = { set: authorProgress };
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.ROUGE_GET_COIN: // 145. 学宫积累x个试炼币
|
||||
{
|
||||
let { addCoin } = param;
|
||||
result = { inc: addCoin }
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.ROUGE_AUTHOR_CARD_COLLECT: // 146.流派卡收集
|
||||
{
|
||||
let records = await getRecord();
|
||||
let { authorType, cardType, cardIds } = param;
|
||||
if (authorType == dicTaskParam[0] && cardType == dicTaskParam[1]) {
|
||||
for (let cardId of cardIds) {
|
||||
if (records.indexOf(`${cardId}`) == -1) {
|
||||
records.push(`${cardId}`);
|
||||
}
|
||||
}
|
||||
result = { records, set: records.length };
|
||||
}
|
||||
break;;
|
||||
}
|
||||
case TASK_TYPE.ROUGE_HOLY_COLLECT: // 147.圣物卡收集
|
||||
{
|
||||
let records = await getRecord();
|
||||
let { cardIds } = param;
|
||||
for (let cardId of cardIds) {
|
||||
if (records.indexOf(`${cardId}`) == -1) {
|
||||
records.push(`${cardId}`);
|
||||
}
|
||||
}
|
||||
result = { records, set: records.length };
|
||||
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.ROUGE_EVENT_COLLECT: // 148.事件收集
|
||||
{
|
||||
let records = await getRecord();
|
||||
let { eventGroups } = param;
|
||||
for (let eventGroup of eventGroups){
|
||||
records.push(`${eventGroup}`);
|
||||
}
|
||||
result = { records, set: records.length };
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.ROUGE_TECH_OPEN: // 149.法阵开启数量
|
||||
{
|
||||
let { count } = param;
|
||||
result = { inc: count };
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.ROUGE_GAME_COUNT: // 150.肉鸽次数
|
||||
{
|
||||
let { count } = param;
|
||||
result = { inc: count };
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.ROUGE_BOSS_PASS: // 151.试炼通过boss关
|
||||
{
|
||||
let { authorType, count } = param;
|
||||
if (authorType == dicTaskParam[0]) {
|
||||
result = { inc: count };
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -932,6 +932,21 @@ export enum TASK_TYPE {
|
||||
FUND_ROUGE = 143, // 学宫密卷
|
||||
FUND_AUTHOR = 144, // 列传密卷
|
||||
|
||||
// 学宫相关
|
||||
ROUGE_GET_COIN = 145, // 累计获得x个试炼币
|
||||
ROUGE_AUTHOR_CARD_COLLECT = 146, // 流派卡收集
|
||||
ROUGE_HOLY_COLLECT = 147, // 圣物卡收集
|
||||
ROUGE_EVENT_COLLECT = 148, // 事件收集
|
||||
ROUGE_TECH_OPEN = 149, // 法阵开启
|
||||
ROUGE_GAME_COUNT = 150, // rouge次数
|
||||
ROUGE_BOSS_PASS = 151, // 试炼通过boss关
|
||||
//
|
||||
|
||||
|
||||
}
|
||||
export enum TASK_ROUGE_CARD_TYPE {
|
||||
PASSIVE = 1, // 特性卡
|
||||
SKILL = 2, // 技能卡(怒气技+回合技)
|
||||
}
|
||||
|
||||
// 任务累积类型
|
||||
|
||||
@@ -65,8 +65,18 @@ export class TaskParamInter {
|
||||
score?: number; // 小游戏得分
|
||||
step?: number; // 步数
|
||||
gameType?: number; // 小游戏类型
|
||||
|
||||
rougeId?:number; //学宫
|
||||
authorProgress?:number; // 列传
|
||||
|
||||
//学宫相关
|
||||
addCoin?:number; // 积累试炼币
|
||||
authorType?:number; // 流派类型
|
||||
cardType?:number; // 卡类型
|
||||
cardIds?:number[]; // 圣物id
|
||||
eventGroups?:number[]; // 事件组
|
||||
|
||||
|
||||
};
|
||||
|
||||
export class TaskParam extends TaskParamInter {
|
||||
|
||||
@@ -1198,5 +1198,115 @@
|
||||
"content": "(小于等于均可)",
|
||||
"condition": "count",
|
||||
"sumType": 2
|
||||
},
|
||||
{
|
||||
"id": 141,
|
||||
"name": "王者争霸",
|
||||
"info": "匹配x次",
|
||||
"param": "count&",
|
||||
"string": "匹配次数&",
|
||||
"content": "开始挑战就算",
|
||||
"condition": "count",
|
||||
"sumType": 2
|
||||
},
|
||||
{
|
||||
"id": 142,
|
||||
"name": "王者争霸",
|
||||
"info": "匹配战斗胜利x次",
|
||||
"param": "count&",
|
||||
"string": "匹配胜利次数&",
|
||||
"content": "必须挑战且结算胜利才算",
|
||||
"condition": "count",
|
||||
"sumType": 2
|
||||
},
|
||||
{
|
||||
"id": 143,
|
||||
"name": "稷下学宫",
|
||||
"info": "通关XX试炼几",
|
||||
"param": "id&count",
|
||||
"string": "XX试炼难度几的唯一id&通关几次",
|
||||
"content": "dic_rougeType_grade表的id字段",
|
||||
"condition": "count",
|
||||
"sumType": 2
|
||||
},
|
||||
{
|
||||
"id": 144,
|
||||
"name": "列传密卷",
|
||||
"info": "收集进度达X",
|
||||
"param": "value&",
|
||||
"string": "收集进度值",
|
||||
"content": "&",
|
||||
"condition": "count",
|
||||
"sumType": 1
|
||||
},
|
||||
{
|
||||
"id": 145,
|
||||
"name": "稷下学宫",
|
||||
"info": "累积获得过X个试炼币",
|
||||
"param": "value&",
|
||||
"string": "试炼币总值",
|
||||
"content": "包括用掉的试炼币",
|
||||
"condition": "value",
|
||||
"sumType": 1
|
||||
},
|
||||
{
|
||||
"id": 146,
|
||||
"name": "稷下学宫",
|
||||
"info": "XX流派XX卡全收集",
|
||||
"param": "authorType&type&count",
|
||||
"string": "百家流派的type&卡片type&该卡片在流派中的数量",
|
||||
"content": "卡片type 1:特性卡 2:传人卡(怒气技+回合技)",
|
||||
"condition": "count",
|
||||
"sumType": 1
|
||||
},
|
||||
{
|
||||
"id": 147,
|
||||
"name": "稷下学宫",
|
||||
"info": "圣物卡全收集",
|
||||
"param": "count&",
|
||||
"string": "圣物卡总数量",
|
||||
"content": 0,
|
||||
"condition": "count",
|
||||
"sumType": 1
|
||||
},
|
||||
{
|
||||
"id": 148,
|
||||
"name": "稷下学宫",
|
||||
"info": "事件全收集",
|
||||
"param": "count&",
|
||||
"string": "事件总数量",
|
||||
"content": 0,
|
||||
"condition": "count",
|
||||
"sumType": 1
|
||||
},
|
||||
{
|
||||
"id": 149,
|
||||
"name": "稷下学宫",
|
||||
"info": "学宫法阵开启至XX",
|
||||
"param": "count&",
|
||||
"string": "开启法阵数量&",
|
||||
"content": 0,
|
||||
"condition": "count",
|
||||
"sumType": 1
|
||||
},
|
||||
{
|
||||
"id": 150,
|
||||
"name": "稷下学宫",
|
||||
"info": "试炼挑战X次",
|
||||
"param": "count&",
|
||||
"string": "挑战总次数&",
|
||||
"content": "不论输赢",
|
||||
"condition": "count",
|
||||
"sumType": 1
|
||||
},
|
||||
{
|
||||
"id": 151,
|
||||
"name": "稷下学宫",
|
||||
"info": "全部装配XX流派特性卡通关X次",
|
||||
"param": "authorType&count&",
|
||||
"string": "流派type&通关次数",
|
||||
"content": "试炼通关时检测上阵学员装配的特性卡流派",
|
||||
"condition": "count",
|
||||
"sumType": 1
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user