新武将活动:修改字段以及ur武将处理
This commit is contained in:
@@ -119,10 +119,9 @@ export class GachaHandler {
|
|||||||
const roleId: string = session.get('roleId');
|
const roleId: string = session.get('roleId');
|
||||||
|
|
||||||
for (let { hid } of hope) {
|
for (let { hid } of hope) {
|
||||||
let dicHero = gameData.hero.get(hid);
|
|
||||||
if (hid != 0) {
|
if (hid != 0) {
|
||||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
let dicRecruit = gameData.recruit.get(hid);
|
||||||
if (hid != 0 && dicHero.quality != HERO_QUALITY_TYPE.GOLD) {
|
if (!dicRecruit || !dicRecruit.canHope) {
|
||||||
return resResult(STATUS.GACHA_HOPE_NOT_GOLD);
|
return resResult(STATUS.GACHA_HOPE_NOT_GOLD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,8 +273,8 @@ export class GachaHandler {
|
|||||||
|
|
||||||
let dicHero = gameData.hero.get(hid);
|
let dicHero = gameData.hero.get(hid);
|
||||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let index = gameData.recruit.findIndex(cur => cur.actorId == hid);
|
let dicRecruit = gameData.recruit.get(hid);
|
||||||
if (index == -1) return resResult(STATUS.GACHA_CAN_NOT_PICK);
|
if (!dicRecruit || !dicRecruit.canVisit) return resResult(STATUS.GACHA_CAN_NOT_PICK);
|
||||||
let { pieceId } = dicHero;
|
let { pieceId } = dicHero;
|
||||||
|
|
||||||
let gachaId = getNormalGachaId();
|
let gachaId = getNormalGachaId();
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ export class HeroHandler {
|
|||||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||||
let dicHero = gameData.hero.get(hid);
|
let dicHero = gameData.hero.get(hid);
|
||||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
let { pieceId, quality, pieceCount } = dicHero;
|
let { pieceId, pieceCount } = dicHero;
|
||||||
// 碎片数量是否足够
|
// 碎片数量是否足够
|
||||||
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: pieceCount }], ITEM_CHANGE_REASON.COMPOSE_HERO);
|
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: pieceCount }], ITEM_CHANGE_REASON.COMPOSE_HERO);
|
||||||
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
@@ -587,7 +587,7 @@ export class HeroHandler {
|
|||||||
let dicJob = getJobByGradeAndClass(dicHero.jobClass, 0);
|
let dicJob = getJobByGradeAndClass(dicHero.jobClass, 0);
|
||||||
|
|
||||||
let newSkins = initSkinTalent(skins);
|
let newSkins = initSkinTalent(skins);
|
||||||
let dicHeroScroll = getScollByStar(dicHero.quality, dicHero.initialStars, dicHero.quality, 0);
|
let dicHeroScroll = getScollByStar(dicHero.quality, dicHero.initialStar, dicHero.quality, dicHero.initialColorStar);
|
||||||
let initInfo = HeroModel.getInitInfo(hid, {
|
let initInfo = HeroModel.getInitInfo(hid, {
|
||||||
job: dicJob.jobid, skins: newSkins, skinId, ce,
|
job: dicJob.jobid, skins: newSkins, skinId, ce,
|
||||||
scrollActive: scrollActive,
|
scrollActive: scrollActive,
|
||||||
@@ -741,7 +741,7 @@ export class HeroHandler {
|
|||||||
await RoleModel.updateRoleInfo(roleId, { jewelCount: 0 });
|
await RoleModel.updateRoleInfo(roleId, { jewelCount: 0 });
|
||||||
let heroInfos = [];
|
let heroInfos = [];
|
||||||
|
|
||||||
for(let { actorId } of gameData.recruit) {
|
for(let [actorId] of gameData.recruit) {
|
||||||
let dicHero = gameData.hero.get(actorId);
|
let dicHero = gameData.hero.get(actorId);
|
||||||
if(!dicHero) continue;
|
if(!dicHero) continue;
|
||||||
let { jobid, grade } = gameData.jobClassMaxGrades.get(dicHero.jobClass);
|
let { jobid, grade } = gameData.jobClassMaxGrades.get(dicHero.jobClass);
|
||||||
|
|||||||
@@ -302,9 +302,9 @@ export class RoleHandler {
|
|||||||
};
|
};
|
||||||
if (!scrollActive) { // 初次激活
|
if (!scrollActive) { // 初次激活
|
||||||
update.scrollActive = true;
|
update.scrollActive = true;
|
||||||
update.scrollStar = dicHero.initialStars;
|
update.scrollStar = dicHero.initialStar;
|
||||||
update.scrollQuality = dicHero.quality;
|
update.scrollQuality = dicHero.quality;
|
||||||
update.scrollColorStar = 0;
|
update.scrollColorStar = dicHero.initialColorStar;
|
||||||
} else {
|
} else {
|
||||||
if (star > scrollStar) { // 可以升星
|
if (star > scrollStar) { // 可以升星
|
||||||
update.scrollStar++;
|
update.scrollStar++;
|
||||||
|
|||||||
@@ -483,7 +483,7 @@ export class GachaPull {
|
|||||||
export function getAllHeroByQuality(quality: number) {
|
export function getAllHeroByQuality(quality: number) {
|
||||||
let allHero: number[] = [];
|
let allHero: number[] = [];
|
||||||
let allQuality: number[] = [];
|
let allQuality: number[] = [];
|
||||||
for (let { actorId } of gameData.recruit) {
|
for (let [actorId] of gameData.recruit) {
|
||||||
let dicHero = gameData.hero.get(actorId);
|
let dicHero = gameData.hero.get(actorId);
|
||||||
if (dicHero.quality == quality) {
|
if (dicHero.quality == quality) {
|
||||||
allHero.push(actorId);
|
allHero.push(actorId);
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ import { refreshGacha } from './gachaService';
|
|||||||
let userGacha: UserGachaType = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId);
|
let userGacha: UserGachaType = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId);
|
||||||
let dicGacha = gameData.gacha.get(playerData.gachaId);
|
let dicGacha = gameData.gacha.get(playerData.gachaId);
|
||||||
userGacha = await refreshGacha(dicGacha, userGacha);
|
userGacha = await refreshGacha(dicGacha, userGacha);
|
||||||
|
if(!userGacha.pickHero) {
|
||||||
|
userGacha = await UserGachaModel.updateInfo(roleId, playerData.gachaId, activityId, { pickHero: playerData.getDefaultHero() })
|
||||||
|
}
|
||||||
playerData.setPlayerRecords(userGacha, dicGacha);
|
playerData.setPlayerRecords(userGacha, dicGacha);
|
||||||
|
|
||||||
return playerData;
|
return playerData;
|
||||||
@@ -94,6 +97,15 @@ export async function challengeNewHeroGK(serverId: number, roleId: string, activ
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export async function newHeroGiftPoint(serverId: number, activityId: number, roleId: string, addPoint: number) {
|
export async function newHeroGiftPoint(serverId: number, activityId: number, roleId: string, addPoint: number) {
|
||||||
let result = await ActivityNewHeroGiftModel.addPoint(serverId, activityId, roleId, addPoint);
|
let activityData = await getActivityById(activityId);
|
||||||
return result.totalPoint;
|
|
||||||
|
let createTime = await getRoleCreateTime(roleId);
|
||||||
|
let serverTime = await getServerCreateTime(serverId);
|
||||||
|
let playerData = new NewHeroGiftData(activityData, createTime, serverTime);
|
||||||
|
|
||||||
|
if(playerData.canRecordTaskPoint()) {
|
||||||
|
let result = await ActivityNewHeroGiftModel.addPoint(serverId, activityId, roleId, addPoint);
|
||||||
|
return result.totalPoint;
|
||||||
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -621,8 +621,8 @@ export function getRandRobot(cnt = 1, withAttr = false) {
|
|||||||
heroes.push(new ComRoleStatusHero({
|
heroes.push(new ComRoleStatusHero({
|
||||||
hid: hero.actorId,
|
hid: hero.actorId,
|
||||||
skinId: hero.actorId,
|
skinId: hero.actorId,
|
||||||
star: hero.star||dicHero.initialStars,
|
star: hero.star? hero.star: dicHero.initialStar,
|
||||||
colorStar: 0,
|
colorStar: hero.star? 0: dicHero.initialColorStar,
|
||||||
lv: hero.lv,
|
lv: hero.lv,
|
||||||
quality: dicHero.quality
|
quality: dicHero.quality
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -1102,7 +1102,7 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe
|
|||||||
} else if (type == REDIS_KEY.HERO_RANK) {
|
} else if (type == REDIS_KEY.HERO_RANK) {
|
||||||
let serverId = args.serverId;
|
let serverId = args.serverId;
|
||||||
|
|
||||||
for (let { actorId: hid } of gameData.recruit) {
|
for (let [hid] of gameData.recruit) {
|
||||||
let ranks = await HeroModel.getRank(hid, serverId, HERO_SELECT.RANK_LINEUP);
|
let ranks = await HeroModel.getRank(hid, serverId, HERO_SELECT.RANK_LINEUP);
|
||||||
let r = new Rank(type, { serverId, hid });
|
let r = new Rank(type, { serverId, hid });
|
||||||
r.setIsInit(true);
|
r.setIsInit(true);
|
||||||
|
|||||||
@@ -235,6 +235,7 @@ export enum HERO_QUALITY_TYPE {
|
|||||||
BLUE = 1, // 蓝将
|
BLUE = 1, // 蓝将
|
||||||
PURPLE = 2, // 紫将
|
PURPLE = 2, // 紫将
|
||||||
GOLD = 3, // 金
|
GOLD = 3, // 金
|
||||||
|
UR = 4, // ur武将
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FIX_ATTRIBUTES_RAN = 20; // 固定属性值+-20%随机
|
export const FIX_ATTRIBUTES_RAN = 20; // 固定属性值+-20%随机
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ export const STATUS = {
|
|||||||
// 抽卡相关 31101-31200
|
// 抽卡相关 31101-31200
|
||||||
GACHA_COST_NOT_ENOUGH: { code: 31101, simStr: '招募券不足' },
|
GACHA_COST_NOT_ENOUGH: { code: 31101, simStr: '招募券不足' },
|
||||||
GACHA_NOT_ASSIGN: { code: 31102, simStr: '请选择武将' },
|
GACHA_NOT_ASSIGN: { code: 31102, simStr: '请选择武将' },
|
||||||
GACHA_HOPE_NOT_GOLD: { code: 31103, simStr: '武将品质错误' },
|
GACHA_HOPE_NOT_GOLD: { code: 31103, simStr: '该武将不可许愿' },
|
||||||
GACHA_CAN_NOT_PICK: { code: 31104, simStr: '不可选择该武将' },
|
GACHA_CAN_NOT_PICK: { code: 31104, simStr: '不可选择该武将' },
|
||||||
GACHA_TURNTABLE_POINT_NOT_ENOUGH: { code: 31105, simStr: '转盘积分不足' },
|
GACHA_TURNTABLE_POINT_NOT_ENOUGH: { code: 31105, simStr: '转盘积分不足' },
|
||||||
GACHA_HAS_VISITED: { code: 31106, simStr: '该武将已拜访过' },
|
GACHA_HAS_VISITED: { code: 31106, simStr: '该武将已拜访过' },
|
||||||
|
|||||||
+2
-2
@@ -224,9 +224,9 @@ export default class Hero extends BaseModel {
|
|||||||
|
|
||||||
public static getInitInfo(hid: number, heroInfo: HeroUpdate = {}): HeroUpdate {
|
public static getInitInfo(hid: number, heroInfo: HeroUpdate = {}): HeroUpdate {
|
||||||
let dicHero = gameData.hero.get(hid)
|
let dicHero = gameData.hero.get(hid)
|
||||||
let { quality, initialStars: star, jobid: job, name: hName } = dicHero;
|
let { quality, initialStar: star, initialColorStar: colorStar, jobid: job, name: hName } = dicHero;
|
||||||
const doc = new HeroModel();
|
const doc = new HeroModel();
|
||||||
const update = { ...doc.toJSON(), hid, skinId: hid, hName, star, quality, job, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0, ...heroInfo};
|
const update = { ...doc.toJSON(), hid, skinId: hid, hName, star, colorStar, quality, job, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0, ...heroInfo};
|
||||||
delete update._id;
|
delete update._id;
|
||||||
return update
|
return update
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,10 @@ import { ActivityBase } from './activityField';
|
|||||||
/******* 存在数据库里的数据 *******/
|
/******* 存在数据库里的数据 *******/
|
||||||
interface NewHeroGkWarInDb {
|
interface NewHeroGkWarInDb {
|
||||||
warId: number; // 关卡id
|
warId: number; // 关卡id
|
||||||
icon: string; // 图标文件名
|
|
||||||
startDay: number; // 活动第几天开启
|
startDay: number; // 活动第几天开启
|
||||||
}
|
}
|
||||||
|
|
||||||
interface NewHeroGkDataInDb {
|
interface NewHeroGkDataInDb {
|
||||||
bg: string; // 背景图
|
|
||||||
wars: NewHeroGkWarInDb[]; // 关卡
|
wars: NewHeroGkWarInDb[]; // 关卡
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,13 +17,11 @@ interface NewHeroGkDataInDb {
|
|||||||
// 每日关卡活动数据
|
// 每日关卡活动数据
|
||||||
export class NewHeroGachaWar {
|
export class NewHeroGachaWar {
|
||||||
warId: number; // 关卡id
|
warId: number; // 关卡id
|
||||||
icon: string; // 图标文件名
|
|
||||||
startTime: number; // 活动第几天开启,13位时间戳
|
startTime: number; // 活动第几天开启,13位时间戳
|
||||||
isSuccess: boolean = false; // 是否成功
|
isSuccess: boolean = false; // 是否成功
|
||||||
|
|
||||||
constructor(data: NewHeroGkWarInDb, beginTime: number) {
|
constructor(data: NewHeroGkWarInDb, beginTime: number) {
|
||||||
this.warId = data.warId;
|
this.warId = data.warId;
|
||||||
this.icon = data.icon;
|
|
||||||
this.startTime = <number>getTimeFunM(beginTime).getAfterDayWithHour(data.startDay - 1);
|
this.startTime = <number>getTimeFunM(beginTime).getAfterDayWithHour(data.startDay - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +31,6 @@ export class NewHeroGachaWar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class NewHeroGKData extends ActivityBase {
|
export class NewHeroGKData extends ActivityBase {
|
||||||
bg: string; // 背景图
|
|
||||||
wars: NewHeroGachaWar[] = []; // 关卡
|
wars: NewHeroGachaWar[] = []; // 关卡
|
||||||
|
|
||||||
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
|
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
|
||||||
@@ -45,7 +40,6 @@ export class NewHeroGKData extends ActivityBase {
|
|||||||
|
|
||||||
public initData(data: string) {
|
public initData(data: string) {
|
||||||
let dataObj: NewHeroGkDataInDb = JSON.parse(data);
|
let dataObj: NewHeroGkDataInDb = JSON.parse(data);
|
||||||
this.bg = dataObj.bg;
|
|
||||||
let arr = dataObj.wars||[];
|
let arr = dataObj.wars||[];
|
||||||
for (let obj of arr) {
|
for (let obj of arr) {
|
||||||
this.wars.push(new NewHeroGachaWar(obj, this.beginTime))
|
this.wars.push(new NewHeroGachaWar(obj, this.beginTime))
|
||||||
|
|||||||
@@ -1,33 +1,34 @@
|
|||||||
import { ActivityModelType } from '../../db/Activity';
|
import { ActivityModelType } from '../../db/Activity';
|
||||||
import { UserGachaType } from '../../db/UserGacha';
|
import { UserGachaType } from '../../db/UserGacha';
|
||||||
import { DicGacha } from '../../pubUtils/dictionary/DicGacha';
|
import { DicGacha } from '../../pubUtils/dictionary/DicGacha';
|
||||||
import { RewardInter } from '../../pubUtils/interface';
|
|
||||||
import { ActivityBase } from './activityField';
|
import { ActivityBase } from './activityField';
|
||||||
|
|
||||||
interface NewHeroGachaItemInDb {
|
interface NewHeroGachaItemInDb {
|
||||||
hid: number;
|
hid: number;
|
||||||
position: string; // x&y
|
isDefault: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface NewHeroGachaDataInDb {
|
interface NewHeroGachaDataInDb {
|
||||||
gachaId: number; // dic_zyz_gacha表的id,卡池的概率,消耗都通过这个表读取
|
gachaId: number; // dic_zyz_gacha表的id,卡池的概率,消耗都通过这个表读取
|
||||||
icon: string; // 大地图的icon图片文件名
|
|
||||||
heroes: NewHeroGachaItemInDb[]; // 本期活动pick的武将
|
heroes: NewHeroGachaItemInDb[]; // 本期活动pick的武将
|
||||||
bg: string; // 首页背景图片
|
}
|
||||||
uiType: number; // 布局格式,具体什么代表什么含义由策划和客户端定
|
|
||||||
|
class NewHeroGachaItem {
|
||||||
|
hid: number;
|
||||||
|
isDefault: boolean;
|
||||||
|
constructor(hero: NewHeroGachaItemInDb) {
|
||||||
|
this.hid = hero.hid;
|
||||||
|
this.isDefault = hero.isDefault;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 每日关卡活动数据
|
// 每日关卡活动数据
|
||||||
export class NewHeroGachaData extends ActivityBase {
|
export class NewHeroGachaData extends ActivityBase {
|
||||||
gachaId: number;
|
gachaId: number;
|
||||||
icon: string;
|
heroes: NewHeroGachaItem[] = [];
|
||||||
heroes: NewHeroGachaItemInDb[];
|
|
||||||
bg: string;
|
|
||||||
uiType: number;
|
|
||||||
pickHero: number = 0;
|
pickHero: number = 0;
|
||||||
count: number = 0;
|
count: number = 0;
|
||||||
isFree: boolean = false; // 免费次数
|
isFree: boolean = false; // 免费次数
|
||||||
cost: RewardInter[] = []; // 消耗
|
|
||||||
|
|
||||||
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
|
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
|
||||||
super(activityData, createTime, serverTime)
|
super(activityData, createTime, serverTime)
|
||||||
@@ -37,19 +38,23 @@ export class NewHeroGachaData extends ActivityBase {
|
|||||||
public initData(data: string) {
|
public initData(data: string) {
|
||||||
let dataObj: NewHeroGachaDataInDb = JSON.parse(data);
|
let dataObj: NewHeroGachaDataInDb = JSON.parse(data);
|
||||||
this.gachaId = dataObj.gachaId;
|
this.gachaId = dataObj.gachaId;
|
||||||
this.icon = dataObj.icon;
|
let heroes = dataObj.heroes||[];
|
||||||
this.heroes = dataObj.heroes;
|
for(let hero of heroes) {
|
||||||
this.bg = dataObj.bg;
|
this.heroes.push(new NewHeroGachaItem(hero))
|
||||||
this.uiType = dataObj.uiType;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public findItem(hid: number) {
|
public findItem(hid: number) {
|
||||||
return this.heroes.find(obj => { return obj && obj.hid == hid })
|
return this.heroes.find(obj => { return obj && obj.hid == hid })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getDefaultHero() {
|
||||||
|
let hero = this.heroes.find(obj => obj.isDefault)||this.heroes[0];
|
||||||
|
return hero?.hid||0;
|
||||||
|
}
|
||||||
|
|
||||||
//解析玩家记录
|
//解析玩家记录
|
||||||
public setPlayerRecords(data: UserGachaType, dic: DicGacha) {
|
public setPlayerRecords(data: UserGachaType, dic: DicGacha) {
|
||||||
if(dic) this.cost = dic.cost;
|
|
||||||
if (data) {
|
if (data) {
|
||||||
this.pickHero = data.pickHero;
|
this.pickHero = data.pickHero;
|
||||||
this.count = data.count;
|
this.count = data.count;
|
||||||
@@ -57,6 +62,7 @@ export class NewHeroGachaData extends ActivityBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public isPickHero(hid: number) {
|
public isPickHero(hid: number) {
|
||||||
return this.heroes.findIndex(cur => cur.hid == hid) != -1;
|
return this.heroes.findIndex(cur => cur.hid == hid) != -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,17 @@
|
|||||||
|
import moment = require('moment');
|
||||||
import { ActivityModelType } from '../../db/Activity';
|
import { ActivityModelType } from '../../db/Activity';
|
||||||
import { ActivityNewHeroGiftModelType } from '../../db/ActivityNewHeroGift';
|
import { ActivityNewHeroGiftModelType } from '../../db/ActivityNewHeroGift';
|
||||||
import { ActivityBase } from './activityField';
|
import { ActivityBase } from './activityField';
|
||||||
|
|
||||||
/******* 存在数据库里的数据 *******/
|
/******* 存在数据库里的数据 *******/
|
||||||
interface NewHeroGiftExplain {
|
|
||||||
index: number;
|
|
||||||
explain: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface NewHeroGiftRewardInDb {
|
interface NewHeroGiftRewardInDb {
|
||||||
index: number; // 下标
|
index: number; // 下标
|
||||||
cover: string; // 翻牌背面的图片文件名
|
|
||||||
reward: string; // 奖励 type&id&count
|
reward: string; // 奖励 type&id&count
|
||||||
countMax: number; // 最多抽出次数
|
countMax: number; // 最多抽出次数
|
||||||
}
|
}
|
||||||
|
|
||||||
interface NewHeroGiftDataInDb {
|
interface NewHeroGiftDataInDb {
|
||||||
hid: number; // 左侧的立绘武将
|
startTaskTime: string; // 开始计算任务积分的时间 hh:mm:ss
|
||||||
position: string; // 位置 x&y
|
|
||||||
explain: NewHeroGiftExplain[]; // 玩法说明
|
|
||||||
rewards: NewHeroGiftRewardInDb[]; // 奖励
|
rewards: NewHeroGiftRewardInDb[]; // 奖励
|
||||||
consumePoint: number; // 每转一次消耗的点数
|
consumePoint: number; // 每转一次消耗的点数
|
||||||
}
|
}
|
||||||
@@ -26,14 +19,12 @@ interface NewHeroGiftDataInDb {
|
|||||||
/******* 返回给客户端的数据 *******/
|
/******* 返回给客户端的数据 *******/
|
||||||
class NewHeroGiftReward {
|
class NewHeroGiftReward {
|
||||||
index: number; // 下标
|
index: number; // 下标
|
||||||
cover: string; // 翻牌背面的图片文件名
|
|
||||||
reward: string; // 奖励 type&id&count
|
reward: string; // 奖励 type&id&count
|
||||||
countMax: number; // 最多抽出次数
|
countMax: number; // 最多抽出次数
|
||||||
buyCount: number = 0; // 转出的次数
|
buyCount: number = 0; // 转出的次数
|
||||||
|
|
||||||
constructor(data: NewHeroGiftRewardInDb) {
|
constructor(data: NewHeroGiftRewardInDb) {
|
||||||
this.index = data.index;
|
this.index = data.index;
|
||||||
this.cover = data.cover;
|
|
||||||
this.reward = data.reward;
|
this.reward = data.reward;
|
||||||
this.countMax = data.countMax;
|
this.countMax = data.countMax;
|
||||||
}
|
}
|
||||||
@@ -44,11 +35,9 @@ class NewHeroGiftReward {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class NewHeroGiftData extends ActivityBase {
|
export class NewHeroGiftData extends ActivityBase {
|
||||||
hid: number; // 左侧的立绘武将
|
|
||||||
position: string; // 位置 x&y
|
|
||||||
consumePoint: number; // 每转一次消耗的点数
|
consumePoint: number; // 每转一次消耗的点数
|
||||||
explain: NewHeroGiftExplain[]; // 玩法说明
|
|
||||||
rewards: NewHeroGiftReward[] = []; // 奖励
|
rewards: NewHeroGiftReward[] = []; // 奖励
|
||||||
|
startTaskTime: number; // 开始计算任务积分的时间 时间戳
|
||||||
|
|
||||||
totalPoint: number = 0; // 已获得的点数
|
totalPoint: number = 0; // 已获得的点数
|
||||||
consumeTotalPoint: number = 0; // 总消耗的点数
|
consumeTotalPoint: number = 0; // 总消耗的点数
|
||||||
@@ -60,14 +49,12 @@ export class NewHeroGiftData extends ActivityBase {
|
|||||||
|
|
||||||
public initData(data: string) {
|
public initData(data: string) {
|
||||||
let dataObj: NewHeroGiftDataInDb = JSON.parse(data);
|
let dataObj: NewHeroGiftDataInDb = JSON.parse(data);
|
||||||
this.hid = dataObj.hid;
|
|
||||||
this.position = dataObj.position;
|
|
||||||
this.consumePoint = dataObj.consumePoint;
|
this.consumePoint = dataObj.consumePoint;
|
||||||
this.explain = dataObj.explain
|
|
||||||
let arr = dataObj.rewards||[];
|
let arr = dataObj.rewards||[];
|
||||||
for (let obj of arr) {
|
for (let obj of arr) {
|
||||||
this.rewards.push(new NewHeroGiftReward(obj))
|
this.rewards.push(new NewHeroGiftReward(obj))
|
||||||
}
|
}
|
||||||
|
this.startTaskTime = moment(moment(this.beginTime).format(`YYYY-MM-DD ${dataObj.startTaskTime}`)).valueOf();
|
||||||
}
|
}
|
||||||
|
|
||||||
public findItem(index: number) {
|
public findItem(index: number) {
|
||||||
@@ -88,4 +75,7 @@ export class NewHeroGiftData extends ActivityBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public canRecordTaskPoint() {
|
||||||
|
return Date.now() >= this.startTaskTime && Date.now() <= this.endTime
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -62,13 +62,8 @@ export class PvpHeroInfo {
|
|||||||
this.actorName = dicHero.name;
|
this.actorName = dicHero.name;
|
||||||
this.quality = dicHero.quality;
|
this.quality = dicHero.quality;
|
||||||
this.job = dicHero.jobid;
|
this.job = dicHero.jobid;
|
||||||
if(dicHero.quality == 4) {
|
this.star = dicHero.initialStar;
|
||||||
this.star = 6;
|
this.colorStar = dicHero.initialColorStar;
|
||||||
this.colorStar = dicHero.initialStars;
|
|
||||||
} else {
|
|
||||||
this.star = dicHero.initialStars;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.lv = lv;
|
this.lv = lv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ export interface DicHero {
|
|||||||
// 武将碎片
|
// 武将碎片
|
||||||
readonly pieceId: number;
|
readonly pieceId: number;
|
||||||
// 初始星级
|
// 初始星级
|
||||||
readonly initialStars: number;
|
readonly initialStar: number;
|
||||||
|
// 初始星级
|
||||||
|
readonly initialColorStar: number;
|
||||||
// 合成碎片数量
|
// 合成碎片数量
|
||||||
readonly pieceCount: number;
|
readonly pieceCount: number;
|
||||||
// 主属性
|
// 主属性
|
||||||
@@ -38,7 +40,7 @@ export interface DicHero {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||||
const DicHeroKeys: KeysEnum<DicHero> = {heroId: true, name: true, quality: true, camp: true, jobClass: true, jobid: true, skill: true, pieceId: true, initialStars: true, pieceCount: true, baseAbilityArr: true, baseAbilityUpArr: true, initialSkin: true, recruit: true, face_id: true, talentId: true};
|
const DicHeroKeys: KeysEnum<DicHero> = {heroId: true, name: true, quality: true, camp: true, jobClass: true, jobid: true, skill: true, pieceId: true, initialStar: true, initialColorStar: true, pieceCount: true, baseAbilityArr: true, baseAbilityUpArr: true, initialSkin: true, recruit: true, face_id: true, talentId: true};
|
||||||
export const dicHero = new Map<number, DicHero>();
|
export const dicHero = new Map<number, DicHero>();
|
||||||
export function loadHero() {
|
export function loadHero() {
|
||||||
dicHero.clear();
|
dicHero.clear();
|
||||||
@@ -48,6 +50,13 @@ export function loadHero() {
|
|||||||
o.baseAbilityArr = parseBaseAbilityArr(o);
|
o.baseAbilityArr = parseBaseAbilityArr(o);
|
||||||
o.baseAbilityUpArr = parseBaseAbilityUpArr(o);
|
o.baseAbilityUpArr = parseBaseAbilityUpArr(o);
|
||||||
o.recruit = parseInt(o.recruit) == 1;
|
o.recruit = parseInt(o.recruit) == 1;
|
||||||
|
if(o.quality == 4) {
|
||||||
|
o.initialStar = 6;
|
||||||
|
o.initialColorStar = o.initialStars - 6;
|
||||||
|
} else {
|
||||||
|
o.initialStar = o.initialStars;
|
||||||
|
o.initialColorStar = 0;
|
||||||
|
}
|
||||||
dicHero.set(o.heroId, _.pick(o, Object.keys(DicHeroKeys)));
|
dicHero.set(o.heroId, _.pick(o, Object.keys(DicHeroKeys)));
|
||||||
});
|
});
|
||||||
arr = undefined;
|
arr = undefined;
|
||||||
|
|||||||
@@ -10,16 +10,20 @@ export interface DicRecruit {
|
|||||||
readonly actorId: number;
|
readonly actorId: number;
|
||||||
// 权重
|
// 权重
|
||||||
readonly weight: number;
|
readonly weight: number;
|
||||||
|
// 是否可以拜访
|
||||||
|
readonly canVisit: number;
|
||||||
|
// 是否可以许愿
|
||||||
|
readonly canHope: number;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const dicRecruit = new Array<DicRecruit>();
|
export const dicRecruit = new Map<number, DicRecruit>();
|
||||||
export function loadRecruit() {
|
export function loadRecruit() {
|
||||||
dicRecruit.splice(0, dicRecruit.length);
|
dicRecruit.clear();
|
||||||
let arr = readFileAndParse(FILENAME.DIC_RECRUIT);
|
let arr = readFileAndParse(FILENAME.DIC_RECRUIT);
|
||||||
|
|
||||||
arr.forEach(o => {
|
arr.forEach(o => {
|
||||||
dicRecruit.push(o);
|
dicRecruit.set(o.actorId, o);
|
||||||
});
|
});
|
||||||
|
|
||||||
arr = undefined;
|
arr = undefined;
|
||||||
|
|||||||
Reference in New Issue
Block a user