✨ feat(活动): 小游戏添加任务
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { Application, BackendSession, HandlerService, } from 'pinus';
|
||||
import { resResult } from '../../../pubUtils/util';
|
||||
import { ITEM_CHANGE_REASON, REDIS_KEY, STATUS } from '../../../consts';
|
||||
import { ITEM_CHANGE_REASON, MINI_GAME_TYPE, REDIS_KEY, STATUS, TASK_TYPE } from '../../../consts';
|
||||
import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService';
|
||||
import { getPlayerMiniGameData, getPlayerMiniGameDataShow } from '../../../services/activity/miniGameService';
|
||||
import { ActivityMiniGameRecModel } from '../../../db/ActivityMiniGameRec';
|
||||
@@ -10,6 +10,7 @@ import { Rank } from '../../../services/rankService';
|
||||
import { nowSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { RoleRankInfo } from '../../../domain/rank';
|
||||
import { getAllServerName } from '../../../services/redisService';
|
||||
import { checkTask } from '../../../services/task/taskService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -53,8 +54,7 @@ export class ForgeHandler {
|
||||
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
if(playerData.playCnt >= playerData.buyCnt + playerData.freeCnt) return resResult(STATUS.ACTIVITY_MINI_GAME_COUNT_LACK);
|
||||
let record = await ActivityMiniGameRecModel.gameStart(serverId, activityId, playerData.roundIndex, playerData.todayIndex, roleId);
|
||||
|
||||
let record = await ActivityMiniGameRecModel.gameStart(serverId, activityId, playerData.roundIndex, playerData.todayIndex, roleId, playerData.gameType);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
activityId,
|
||||
@@ -69,8 +69,8 @@ export class ForgeHandler {
|
||||
* @param {BackendSession} session
|
||||
* @memberof ForgeHandler
|
||||
*/
|
||||
async gameEnd(msg: { activityId: number, gameCode: string, score: number }, session: BackendSession) {
|
||||
const { activityId, gameCode, score } = msg;
|
||||
async gameEnd(msg: { activityId: number, gameCode: string, score: number, params: number[] }, session: BackendSession) {
|
||||
const { activityId, gameCode, score, params } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
@@ -80,7 +80,7 @@ export class ForgeHandler {
|
||||
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
// 记录得分&次数
|
||||
let record = await ActivityMiniGameRecModel.gameEnd(activityId, roleId, gameCode, score);
|
||||
let record = await ActivityMiniGameRecModel.gameEnd(activityId, roleId, gameCode, score, params);
|
||||
if(!record) return resResult(STATUS.ACTIVITY_MINI_GAME_RECORD_NOT_FOUND);
|
||||
|
||||
let playerRecord = await ActivityMiniGameModel.incScore(serverId, activityId, playerData.roundIndex, roleId, score, playerData.nextRefreshTime);
|
||||
@@ -94,6 +94,9 @@ export class ForgeHandler {
|
||||
let r = new Rank(REDIS_KEY.ACTIVITY_MINI_GAME, { activityId, roundIndex: playerData.roundIndex });
|
||||
await r.setRankWithRoleInfo(roleId, score, nowSeconds(), null, true);
|
||||
|
||||
if(playerData.gameType == MINI_GAME_TYPE.SHOOT) await checkTask(serverId, roleId, sid, TASK_TYPE.MINI_GAME_SHOOT, { score });
|
||||
if(playerData.gameType == MINI_GAME_TYPE.ERASE) await checkTask(serverId, roleId, sid, TASK_TYPE.MINI_GAME_ERASE, { step: params[0] });
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
activityId,
|
||||
gameCode,
|
||||
|
||||
@@ -1453,6 +1453,22 @@ export class CheckSingleTask {
|
||||
result = { inc: count };
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.MINI_GAME_SHOOT: // 135. 单局射箭获得X分
|
||||
{
|
||||
let { score } = param;
|
||||
if(score >= dicTaskParam[0]) {
|
||||
result = { inc: 1 };
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TASK_TYPE.MINI_GAME_ERASE: // 136. 单局翻牌不超出X步
|
||||
{
|
||||
let { step } = param;
|
||||
if(step <= dicTaskParam[0]) {
|
||||
result = { inc: 1 };
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -260,4 +260,9 @@ export enum BIND_PHONE_STATUS {
|
||||
WAIT_BIND = 0, // 待绑定
|
||||
HAS_BIND = 1, // 已绑定待领取
|
||||
RECEIVED = 2, // 已领取
|
||||
}
|
||||
|
||||
export enum MINI_GAME_TYPE {
|
||||
ERASE = 1, // 消消乐
|
||||
SHOOT = 2, // 射箭
|
||||
}
|
||||
@@ -853,6 +853,8 @@ export enum TASK_TYPE {
|
||||
GVG_FARM = 132, // 农庄种植/矿山采集/木堆砍柴
|
||||
GVG_VESTIGE = 133, // 中原遗迹挑战
|
||||
GVG_TECH = 134, // 千机阁捐献
|
||||
MINI_GAME_SHOOT = 135, // 单局射箭获得X分
|
||||
MINI_GAME_ERASE = 136, // 单局翻牌不超出X步
|
||||
}
|
||||
|
||||
// 任务累积类型
|
||||
|
||||
@@ -16,6 +16,9 @@ export default class Activity_MiniGame_Rec extends BaseModel {
|
||||
@prop({ required: true })
|
||||
activityId: number; // 活动Id
|
||||
|
||||
@prop({ required: true })
|
||||
gameType: number; // 小游戏类型
|
||||
|
||||
@prop({ required: true })
|
||||
roundIndex: number; // 第几轮
|
||||
|
||||
@@ -34,6 +37,9 @@ export default class Activity_MiniGame_Rec extends BaseModel {
|
||||
@prop({ required: true })
|
||||
isComplete: boolean; // 是否结束
|
||||
|
||||
@prop({ required: true, type: Number, default:[] })
|
||||
params: number[]; // 是否结束
|
||||
|
||||
public static async findRecords(serverId: number, activityId: number, roundIndex: number, roleId: string) {
|
||||
let result: ActivityMiniGameRecModelType[] = await ActivityMiniGameRecModel.find({ serverId, roleId, activityId, roundIndex, isComplete: true }).lean();
|
||||
return result;
|
||||
@@ -44,14 +50,14 @@ export default class Activity_MiniGame_Rec extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async gameStart(serverId: number, activityId: number, roundIndex: number, todayIndex: number, roleId: string) {
|
||||
public static async gameStart(serverId: number, activityId: number, roundIndex: number, todayIndex: number, roleId: string, gameType: number) {
|
||||
let gameCode = genCode(10);
|
||||
let result: ActivityMiniGameRecModelType = await ActivityMiniGameRecModel.findOneAndUpdate({ gameCode }, { $set: { serverId, activityId, roundIndex, todayIndex, roleId, score: 0, isComplete: false } }, { new: true, upsert: true }).lean();
|
||||
let result: ActivityMiniGameRecModelType = await ActivityMiniGameRecModel.findOneAndUpdate({ gameCode }, { $set: { serverId, activityId, roundIndex, todayIndex, roleId, score: 0, isComplete: false, gameType } }, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async gameEnd(activityId: number, roleId: string, gameCode: string, score: number) {
|
||||
let result: ActivityMiniGameRecModelType = await ActivityMiniGameRecModel.findOneAndUpdate({ activityId, roleId, gameCode, isComplete: false }, { $set: { score, isComplete: true } }, { new: true }).lean();
|
||||
public static async gameEnd(activityId: number, roleId: string, gameCode: string, score: number, params: number[]) {
|
||||
let result: ActivityMiniGameRecModelType = await ActivityMiniGameRecModel.findOneAndUpdate({ activityId, roleId, gameCode, isComplete: false }, { $set: { score, isComplete: true, params } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,6 +61,9 @@ export class TaskParamInter {
|
||||
|
||||
skipTower?: boolean;
|
||||
debugInfo?: {condition: number};
|
||||
|
||||
score?: number; // 小游戏得分
|
||||
step?: number; // 步数
|
||||
};
|
||||
|
||||
export class TaskParam extends TaskParamInter {
|
||||
|
||||
@@ -345,14 +345,19 @@ export const ACTIVITY = {
|
||||
LOOPACTIVITYRATIO: 0.9, // 糜家商队循环活动小兵倍率
|
||||
LOOPACTIVITYRATIO_SZTM: 0.9, // 神州探秘循环活动小兵倍率
|
||||
ACTIVITY_ZHUMING_CAST_NUMLIMIT: 12, // 朱明集会神兵铸造材料数量总上限
|
||||
ACTIVITY_FLIPCARD_SCORE: '1&10|33&8|41&7|51&6|57&5', // 翻拍小游戏的得分规则(min&socre)区间下限至下一档之间的得分
|
||||
ACTIVITY_ARCHERY_SCORE: '0&1|1&2|2&3|3&3|4&4|5&5|6&6|7&7|8&8|9&9|10&12', // 射箭小游戏中的环数以及对应得分,环数&得分
|
||||
ACTIVITY_FLIPCARD_SCORE: '1&50|21&30|25&25|29&15', // 翻拍小游戏的得分规则(min(含)&socre)区间下限至下一档之间的得分
|
||||
ACTIVITY_ARCHERY_SCORE: '0&0|1&1|2&1|3&1|4&1|5&1|6&1|7&2|8&3|9&4|10&5', // 射箭小游戏中的环数以及对应得分,环数(含)&得分
|
||||
ACTIVITY_EATTING_RICEDUMPLING_SPINE_POINT: '30&0&-5|80&1&-6|100&2&-7', // 进度阶段上限&额外加分&该阶段每0.1s进度条减少进度
|
||||
ACTIVITY_EATTING_RICEDUMPLING_TOTALCOUNT: 12, // 一个粽子图片=点击X下
|
||||
ACTIVITY_EATTING_RICEDUMPLING_COUNTDOWN: 20, // 张飞吃粽子游戏倒计时(秒)
|
||||
ACTIVITY_EATTING_RICEDUMPLING_PROGRESS_SPEED: 15, // 点击1下进度条增加进度
|
||||
ACTIVITY_EATTING_RICEDUMPLING_PROGRESS_KEYPOINT: '30&80', // 张飞吃粽子进度条达到x进入狂暴模式动画
|
||||
ACTIVITY_EATTING_RICEDUMPLING_ROBOT_SPEED: '4.2&3.5', // 机器人每X秒少一个粽子图片/每X秒少一个粽子图片
|
||||
ACTIVITY_ARCHERY_SCORE_EXTRADD: '2&2&一箭双雕|3&4&连中三元|4&8&箭无虚发|5&16&百发百中', // 连续X次10环&额外加分&文字提示
|
||||
ACTIVITY_ARCHERY_ONCE_NUM: 5, // 一轮射箭可射几箭
|
||||
ACTIVITY_CATCH_ZONGZI_COUNTDOWN: 20, // 接粽子游戏倒计时(秒)
|
||||
ACTIVITY_CATCH_ZONGZI_PERSCREEN_COUNT: 10, // 接粽子小游戏一次掉落的粽子总数
|
||||
ACTIVITY_CATCH_ZONGZI_TYPE_RATIO: '1&0.8&1|2&0.2&2', // 粽子类型&掉落比例系数&得分 小粽子type=1 大粽子type=2
|
||||
};
|
||||
export const BATTLE_PREPARING = {
|
||||
CHANGE_ORDER_OPEN: 109, // 出兵界面行动顺序按钮开启关卡
|
||||
@@ -368,7 +373,7 @@ export const RECHARGE = {
|
||||
RECHARGE_RMB_RETURN_LEVEL_LIMITED: 6, // 角色到达x级后可以收到充值返还邮件
|
||||
};
|
||||
export const MINIGAME = {
|
||||
MINIGAME_ARCHER_RANGE: '0&100|29&80|69&60|104&40|143&20|177&0', // 射箭小游戏圈数积分
|
||||
MINIGAME_ARCHER_RANGE: '0&10|29&9|69&8|104&7|143&6|177&0', // 射箭小游戏圈圆心距离和环数 圆心距离(含)&环数
|
||||
MINIGAME_FLIPCARD_TYPE: 'baihe|guyuan|hongdou|huasheng|lianzi|nuomi|yimi|zao', // 翻牌游戏资源
|
||||
};
|
||||
export const JEWEL = {
|
||||
@@ -429,8 +434,8 @@ export const GVG = {
|
||||
GVG_REVIVE_GOLD: '1&100|2&100|3&100|4&100|5&100|6&100|7&100|8&100|9&100|10&100|11&200', // GVG激战期元宝购买复活的消耗,次数&元宝数
|
||||
GVG_VESTIGE_CHALLENGE_TIME: '5:00:00&22:00:00', // 征战中原遗迹可挑战时间
|
||||
GVG_DEFAULT_BATTLE_CD: 20, // 激战期战斗锁定时长,用于玩家退出时获取不到数据的情况
|
||||
GVG_VESTIGE_BUY_COST: "31002&200", // 每次购买消耗
|
||||
GVG_VESTIGE_BUY_LIMIT: 10, // 每日上限
|
||||
GVG_VESTIGE_BUY_COST: '31002&200', // 单人遗迹购买挑战每次消耗
|
||||
GVG_VESTIGE_BUY_LIMIT: 10, // 单人遗迹购买挑战次数每日上限
|
||||
};
|
||||
export const PLATFORM_CONFIG = {
|
||||
OPEN_ANIMATION: 1, // 0关,1开(开场动画视频)
|
||||
|
||||
@@ -1138,5 +1138,25 @@
|
||||
"content": 0,
|
||||
"condition": "count",
|
||||
"sumType": 2
|
||||
},
|
||||
{
|
||||
"id": 135,
|
||||
"name": "小游戏",
|
||||
"info": "单局射箭获得X分(大于等于均可)",
|
||||
"param": "score&count",
|
||||
"string": "得分&达成次数",
|
||||
"content": "(大于等于均可)",
|
||||
"condition": "count",
|
||||
"sumType": 2
|
||||
},
|
||||
{
|
||||
"id": 136,
|
||||
"name": "小游戏",
|
||||
"info": "单局翻牌不超出X步 (小于等于均可)",
|
||||
"param": "step&count",
|
||||
"string": "步数&达成次数",
|
||||
"content": "(小于等于均可)",
|
||||
"condition": "count",
|
||||
"sumType": 2
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user