任务:添加每日主公经验

This commit is contained in:
luying
2021-07-01 19:02:39 +08:00
parent 0903959d5d
commit c94e2a40e5
8 changed files with 70 additions and 31 deletions
@@ -11,6 +11,9 @@ import { getMainTask, refDailyTaskBox, removeHistoryTask, getCurTask, checkTask
import { TASK } from "../../../pubUtils/dicParam"; import { TASK } from "../../../pubUtils/dicParam";
import { newHeroGiftPoint } from "../../../services/activity/newHeroGiftsService"; import { newHeroGiftPoint } from "../../../services/activity/newHeroGiftsService";
import { ActivityTaskPointModel } from "../../../db/ActivityTaskPoint"; import { ActivityTaskPointModel } from "../../../db/ActivityTaskPoint";
import { ItemInter } from "../../../pubUtils/interface";
import { RoleModel } from "../../../db/Role";
import { roleLevelup } from "../../../services/normalBattleService";
export default function (app: Application) { export default function (app: Application) {
return new ShopHandler(app); return new ShopHandler(app);
@@ -47,7 +50,7 @@ export class ShopHandler {
rec = await UserTaskRecModel.receiveTask(roleId, type, taskType, group, id); rec = await UserTaskRecModel.receiveTask(roleId, type, taskType, group, id);
// 每日、成就增加积分 // 每日、成就增加积分
let point = 0, weeklyPoint = 0; let point = 0, weeklyPoint = 0, expItem: ItemInter;
if (type == TASK_FUN_TYPE.DAILY) { // 增加积分 if (type == TASK_FUN_TYPE.DAILY) { // 增加积分
let userTask = await UserTaskModel.findByRole(roleId); let userTask = await UserTaskModel.findByRole(roleId);
let dic = <DicDailyTask>dicTask; let dic = <DicDailyTask>dicTask;
@@ -59,6 +62,8 @@ export class ShopHandler {
} }
point = userTask.dailyTaskPoint; point = userTask.dailyTaskPoint;
weeklyPoint = userTask.dailyTaskPointWeekly; weeklyPoint = userTask.dailyTaskPointWeekly;
let { lv } = await RoleModel.findByRoleId(roleId, 'lv');
expItem = { id: dic.exp.id, count: dic.exp.count * gameData.taskExp.get(lv)};
} else if (type == TASK_FUN_TYPE.ACHIEVEMENT) { } else if (type == TASK_FUN_TYPE.ACHIEVEMENT) {
let dic = <DicAchievement>dicTask; let dic = <DicAchievement>dicTask;
let userTask = await UserTaskModel.incInfo(roleId, { achievementPoint: dic.point }); let userTask = await UserTaskModel.incInfo(roleId, { achievementPoint: dic.point });
@@ -74,6 +79,10 @@ export class ShopHandler {
} }
let goods = await addItems(roleId, roleName, sid, taskReward); let goods = await addItems(roleId, roleName, sid, taskReward);
if(expItem) {
await roleLevelup(roleId, expItem.count, session);
goods.push(expItem);
}
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
type, id, count: rec.count, received: rec.received.includes(id), type, id, count: rec.count, received: rec.received.includes(id),
@@ -4,14 +4,15 @@ import Role, { RoleModel, RoleType } from '../db/Role'
import { getLvByExp, getExpByLv, gameData, getDicApByLv } from '../pubUtils/data'; import { getLvByExp, getExpByLv, gameData, getDicApByLv } from '../pubUtils/data';
import { updateUserInfo } from './redisService'; import { updateUserInfo } from './redisService';
import { switchOnFunc } from './funcSwitchService'; import { switchOnFunc } from './funcSwitchService';
import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE } from '../consts'; import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS } from '../consts';
import { BackendSession } from 'pinus'; import { BackendSession, pinus } from 'pinus';
import { REDIS_KEY } from '../consts'; import { REDIS_KEY } from '../consts';
import { Rank } from './rankService'; import { Rank } from './rankService';
import { checkActivityTask, checkTask } from './taskService'; import { checkActivityTask, checkTask } from './taskService';
import { accomplishTask } from '../pubUtils/taskUtil'; import { accomplishTask } from '../pubUtils/taskUtil';
import { RScriptRecordModel } from '../db/RScriptRecord'; import { RScriptRecordModel } from '../db/RScriptRecord';
import { setAp } from './actionPointService'; import { setAp } from './actionPointService';
import { resResult } from '../pubUtils/util';
export async function roleLevelup(roleId: string, kingExp: number, session: BackendSession) { export async function roleLevelup(roleId: string, kingExp: number, session: BackendSession) {
const serverId = session.get('serverId'); const serverId = session.get('serverId');
@@ -65,6 +66,15 @@ export async function roleLevelup(roleId: string, kingExp: number, session: Back
await setAp(roleId, i, dicAp.restoreAp, sid, funcs); await setAp(roleId, i, dicAp.restoreAp, sid, funcs);
} }
} }
// 推送
if(canGetExp && kingExp >= 0) {
let uids = [{ uid: roleId, sid }];
pinus.app.get('channelService').pushMessageByUids('onPlayerExpChange', resResult(STATUS.SUCCESS, {
isLvUp: newLv > lv,
lv: newLv,
exp: newExp
}), uids);
}
return { actordata, lv: newLv, exp: newExp, kingExp: newExp - exp }; return { actordata, lv: newLv, exp: newExp, kingExp: newExp - exp };
} }
+1 -1
View File
@@ -87,7 +87,7 @@ function sortConsumes(goods: Array<ItemInter>, bags: Array<ItemInter>, currencys
} else if (table == ITEM_TABLE.ROLE) { } else if (table == ITEM_TABLE.ROLE) {
let curname = getCurNameById(goodInfo.good_id); let curname = getCurNameById(goodInfo.good_id);
if (!!curname) { if (!!curname) {
if (curname != 'ap') { if (curname != 'ap' && curname != 'kingExp') {
currencysMap[curname] = (currencysMap[curname] || 0) + good.count; currencysMap[curname] = (currencysMap[curname] || 0) + good.count;
} else { } else {
return false; return false;
+14 -24
View File
@@ -147,6 +147,7 @@ const itid_array = [
{ id: 55, name: '回复体力道具', table: 'item', type: CONSUME_TYPE.AP }, { id: 55, name: '回复体力道具', table: 'item', type: CONSUME_TYPE.AP },
{ id: 56, name: '普通骰子', table: 'item', type: CONSUME_TYPE.DICE }, { id: 56, name: '普通骰子', table: 'item', type: CONSUME_TYPE.DICE },
{ id: 57, name: '天机骰子', table: 'item', type: CONSUME_TYPE.DICE }, { id: 57, name: '天机骰子', table: 'item', type: CONSUME_TYPE.DICE },
{ id: 58, name: '主公经验', table: 'role' },
]; ];
@@ -162,12 +163,13 @@ export const CURRENCY_TYPE = {
TREASURE_POINT: "treasurePoint", TREASURE_POINT: "treasurePoint",
EXPEDITION_POINT: "expeditionPoint", EXPEDITION_POINT: "expeditionPoint",
DUNGEON_POINT: "dungeonPoint", DUNGEON_POINT: "dungeonPoint",
FRIEND_POINT: "friendPoint", FRIEND_POINT: "frdCnt",
HONOUR: "honour", HONOUR: "honour",
SKIN_COIN: "skinCoin", SKIN_COIN: "skinCoin",
DUNGEON: "dungeon", DUNGEON: "dungeon",
NORMAL_DICE: "normalDice", NORMAL_DICE: "normalDice",
SPECIAL_DICE: "specialDice" SPECIAL_DICE: "specialDice",
KING_EXP: 'kingExp'
} }
@@ -187,7 +189,8 @@ const currencyArr = [
{ "gid": 40006, "name": "蜀锦", "type": CURRENCY_TYPE.SKIN_COIN }, { "gid": 40006, "name": "蜀锦", "type": CURRENCY_TYPE.SKIN_COIN },
{ "gid": 40007, "name": "秘境币", "type": CURRENCY_TYPE.DUNGEON }, { "gid": 40007, "name": "秘境币", "type": CURRENCY_TYPE.DUNGEON },
{ "gid": 72011, "name": "普通骰子", "type": CURRENCY_TYPE.NORMAL_DICE }, { "gid": 72011, "name": "普通骰子", "type": CURRENCY_TYPE.NORMAL_DICE },
{ "gid": 72021, "name": "天机骰子", "type": CURRENCY_TYPE.SPECIAL_DICE } { "gid": 72021, "name": "天机骰子", "type": CURRENCY_TYPE.SPECIAL_DICE },
{ "gid": 72030, "name": "主公经验", "type": CURRENCY_TYPE.KING_EXP }
]; ];
export const CURRENCY = new Map<number, { gid: number, name: string, type: string }>(); export const CURRENCY = new Map<number, { gid: number, name: string, type: string }>();
export const CURRENCY_BY_TYPE = new Map<string, number>(); export const CURRENCY_BY_TYPE = new Map<string, number>();
@@ -196,6 +199,14 @@ for (let obj of currencyArr) {
CURRENCY_BY_TYPE.set(obj.type, obj.gid); CURRENCY_BY_TYPE.set(obj.type, obj.gid);
} }
export function getCurNameById(gid: number) {
let currency = CURRENCY.get(gid);
if (!currency) {
return '';
}
return currency.name;
}
export enum QUALITY_TYPE { export enum QUALITY_TYPE {
BLUE = 1, // 蓝 BLUE = 1, // 蓝
PURPLE = 2, // 紫 PURPLE = 2, // 紫
@@ -225,27 +236,6 @@ export enum HERO_QUALITY_TYPE {
export const FIX_ATTRIBUTES_RAN = 20; // 固定属性值+-20%随机 export const FIX_ATTRIBUTES_RAN = 20; // 固定属性值+-20%随机
export function getCurNameById(gid) {
let currency = CURRENCY.get(gid);
if (!currency) {
return;
}
if (currency.type == CURRENCY_TYPE.COIN) {
return 'coin';
} else if (currency.type == CURRENCY_TYPE.GOLD) {
return 'gold';
} else if (currency.type == CURRENCY_TYPE.ACTION_POINT) {
return 'ap';
} else if (currency.type == CURRENCY_TYPE.FRIEND_POINT) {
return 'frdCnt';
} else if (currency.type == CURRENCY_TYPE.EXPEDITION_POINT) {
return 'expeditionPoint';
} else if (currency.type == CURRENCY_TYPE.HONOUR) {
return 'honour'
}
}
export function getDropItems() { export function getDropItems() {
let items = [ let items = [
{ id: 25, count: 1 }, { id: 225, count: 1 }, { id: 625, count: 1 }, { id: 2025, count: 1 }, { id: 3025, count: 1 }, { id: 4025, count: 1 }, { id: 5025, count: 1 }, { id: 6025, count: 1 }, { id: 25, count: 1 }, { id: 225, count: 1 }, { id: 625, count: 1 }, { id: 2025, count: 1 }, { id: 3025, count: 1 }, { id: 4025, count: 1 }, { id: 5025, count: 1 }, { id: 6025, count: 1 },
+2 -1
View File
@@ -452,7 +452,8 @@ export const FILENAME = {
DIC_GK_FES: 'dic_zyz_gk_activity_festival', DIC_GK_FES: 'dic_zyz_gk_activity_festival',
DIC_AP: 'dic_zyz_ap', DIC_AP: 'dic_zyz_ap',
DIC_AP_BUY_COST: 'dic_zyz_daliyAP', DIC_AP_BUY_COST: 'dic_zyz_daliyAP',
DIC_GK_NEWHERO: 'dic_zyz_gk_newhero' DIC_GK_NEWHERO: 'dic_zyz_gk_newhero',
DIC_TASK_EXP: 'dic_zyz_mainTaskExp'
} }
export const WAR_RELATE_TABLES = [ export const WAR_RELATE_TABLES = [
+4 -1
View File
@@ -87,6 +87,7 @@ import { dicTaskTypeDesc, loadTaskType } from './dictionary/DicTaskType';
import { dicServerName, dicServerGroupName, loadServerName } from "./dictionary/DicServerName"; import { dicServerName, dicServerGroupName, loadServerName } from "./dictionary/DicServerName";
import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp'; import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp';
import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy"; import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy";
import { dicTaskExp, loadTskExp} from './dictionary/DicTaskExp';
export const gameData = { export const gameData = {
blurprtCompose: dicBlueprtCompose, blurprtCompose: dicBlueprtCompose,
@@ -213,7 +214,8 @@ export const gameData = {
ap: dicAp, ap: dicAp,
apMaxLevel: dicApMaxLevel, apMaxLevel: dicApMaxLevel,
apBuy: dicApBuy, apBuy: dicApBuy,
apMaxBuyTimes: dicApMaxBuyTimes apMaxBuyTimes: dicApMaxBuyTimes,
taskExp: dicTaskExp
}; };
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
@@ -815,6 +817,7 @@ function loadDatas() {
loadServerName(); loadServerName();
loadAp(); loadAp();
loadApBuy(); loadApBuy();
loadTskExp();
} }
// 重载dicParam // 重载dicParam
+7 -1
View File
@@ -52,7 +52,7 @@ export interface DicDailyTask extends DicTaskBase {
// 活跃 // 活跃
readonly point: number; readonly point: number;
// 经验基数 // 经验基数
readonly exp: number; readonly exp: RewardInter;
// 获得积分关联的活动id // 获得积分关联的活动id
readonly addPointActivityId: number; readonly addPointActivityId: number;
} }
@@ -112,6 +112,7 @@ export function loadTask() {
arrDailyTask.forEach(o => { arrDailyTask.forEach(o => {
o.taskParam = parseNumberList(o.taskParam); o.taskParam = parseNumberList(o.taskParam);
o.taskReward = parseGoodStr(o.taskReward); o.taskReward = parseGoodStr(o.taskReward);
o.exp = parseExp(o.exp);
dicDailyTask.set(o.id, _.pick(o, Object.keys(DicDailyTaskKeys))); dicDailyTask.set(o.id, _.pick(o, Object.keys(DicDailyTaskKeys)));
pushDicTaskType(o.taskType, TASK_FUN_TYPE.DAILY, o); pushDicTaskType(o.taskType, TASK_FUN_TYPE.DAILY, o);
}); });
@@ -133,4 +134,9 @@ function pushDicTaskType(taskType: number, type: number, o: any) {
let newObj = _.pick(o, Object.keys(DicTaskKeys)); let newObj = _.pick(o, Object.keys(DicTaskKeys));
newObj.type = type; newObj.type = type;
dicTaskType.get(taskType).push(newObj) dicTaskType.get(taskType).push(newObj)
}
function parseExp(exp: string) {
let [ id, count ] = parseNumberList(exp);
return {id, count}
} }
+20
View File
@@ -0,0 +1,20 @@
// 任务奖励主公经验
import {readFileAndParse, parseGoodStr} from '../util'
import { FILENAME, TASK_FUN_TYPE } from '../../consts'
export interface DicTaskExp {
// 主公等级
readonly lv: number;
// 主公经验
readonly exp: number;
}
export const dicTaskExp = new Map<number, number>();
export function loadTskExp() {
let arr1 = readFileAndParse(FILENAME.DIC_TASK_EXP);
arr1.forEach(o => {
dicTaskExp.set(o.lv, o.exp);
});
arr1 = undefined;
}