今日挑战互动接口
This commit is contained in:
@@ -36,14 +36,14 @@ export class GachaHandler {
|
||||
async getGachaList(msg: {}, session: BackendSession) {
|
||||
const { } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
|
||||
|
||||
let userGachaList = await UserGachaModel.findAllByRole(roleId);
|
||||
let list: GachaListReturn[] = [];
|
||||
for(let [id, dicGacha] of gameData.gacha) {
|
||||
if(id == GACHA_ID.TIMELIMIT) continue; // 不包括限时
|
||||
for (let [id, dicGacha] of gameData.gacha) {
|
||||
if (id == GACHA_ID.TIMELIMIT) continue; // 不包括限时
|
||||
|
||||
let userGacha = userGachaList.find(cur => cur.gachaId == id);
|
||||
if(userGacha)
|
||||
if (userGacha)
|
||||
userGacha = await refreshGacha(dicGacha, userGacha);
|
||||
let param = new GachaListReturn(dicGacha, userGacha);
|
||||
list.push(param);
|
||||
@@ -60,7 +60,7 @@ export class GachaHandler {
|
||||
*/
|
||||
async pull(msg: { gachaId: number, activityId: number, count: number }, session: BackendSession) {
|
||||
const { gachaId, activityId, count } = msg;
|
||||
if(gachaId == undefined|| activityId == undefined || count == undefined) return resResult(STATUS.WRONG_PARMS);
|
||||
if (gachaId == undefined || activityId == undefined || count == undefined) return resResult(STATUS.WRONG_PARMS);
|
||||
const roleId: string = session.get('roleId');
|
||||
const roleName: string = session.get('roleName');
|
||||
const sid: string = session.get('sid');
|
||||
@@ -70,32 +70,32 @@ export class GachaHandler {
|
||||
let { lv } = await RoleModel.findByRoleId(roleId);
|
||||
|
||||
let dicGacha = gameData.gacha.get(gachaId);
|
||||
if(!dicGacha) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if(!dicGacha.count.includes(count)) return resResult(STATUS.WRONG_PARMS);
|
||||
if (!dicGacha) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!dicGacha.count.includes(count)) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
let userGacha = await UserGachaModel.findByRole(roleId, gachaId, activityId);
|
||||
let { floor, freeCount, hope, point, pickHero, refFreeTime } = await refreshGacha(dicGacha, userGacha);
|
||||
if((gachaId == GACHA_ID.ASSIGN|| gachaId == GACHA_ID.TIMELIMIT) && !pickHero) return resResult(STATUS.GACHA_NOT_ASSIGN);
|
||||
if ((gachaId == GACHA_ID.ASSIGN || gachaId == GACHA_ID.TIMELIMIT) && !pickHero) return resResult(STATUS.GACHA_NOT_ASSIGN);
|
||||
|
||||
let userHeroes = await HeroModel.findByRole(roleId);
|
||||
|
||||
let items: RewardInter[] = [], heroInfo: CreateHeroParam[] = [], resultList: GachaResult[] = [];
|
||||
for(let i = 0; i < count; i++) {
|
||||
for (let i = 0; i < count; i++) {
|
||||
// 按照一般概率抽出
|
||||
let { dic: { id: base } } = getRandomWithWeight(dicGacha.percent);
|
||||
let contentId = getFloorResult(gachaId, base, floor);
|
||||
if(contentId == false) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (contentId == false) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let result = getResultFromContentId(contentId, lv, hope);
|
||||
|
||||
if(result.hid > 0) {
|
||||
if (result.hid > 0) {
|
||||
result.setSetPickHero(pickHero);
|
||||
let hasHero = userHeroes.find(cur => cur.hid == result.hid);
|
||||
if(hasHero) { // 已有转换为碎片
|
||||
if (hasHero) { // 已有转换为碎片
|
||||
let { pieceId, count } = transPiece(result.hid);
|
||||
result.transferToPiece(pieceId, count);
|
||||
items.push({ id: pieceId, count });
|
||||
} else {
|
||||
heroInfo.push({ hid: result.hid })
|
||||
heroInfo.push({ hid: result.hid, count: 1 })//默认1个英雄
|
||||
}
|
||||
} else {
|
||||
items.push({ id: result.id, count });
|
||||
@@ -104,8 +104,8 @@ export class GachaHandler {
|
||||
}
|
||||
|
||||
let costNum = count;
|
||||
if(count == 1 && dicGacha.free.count > 0) { // 单抽的时候免费
|
||||
if(count > dicGacha.free.count - freeCount) {
|
||||
if (count == 1 && dicGacha.free.count > 0) { // 单抽的时候免费
|
||||
if (count > dicGacha.free.count - freeCount) {
|
||||
costNum = count - dicGacha.free.count + freeCount;
|
||||
freeCount = dicGacha.free.count;
|
||||
} else {
|
||||
@@ -114,16 +114,16 @@ export class GachaHandler {
|
||||
}
|
||||
}
|
||||
// 消耗东西
|
||||
if(costNum > 0) {
|
||||
let cost = dicGacha.cost.map(cur => { return { id: cur.id, count: cur.count * costNum }});
|
||||
if (costNum > 0) {
|
||||
let cost = dicGacha.cost.map(cur => { return { id: cur.id, count: cur.count * costNum } });
|
||||
let costResult = await handleCost(roleId, sid, cost);
|
||||
if(!costResult) return resResult(STATUS.GACHA_COST_NOT_ENOUGH);
|
||||
if (!costResult) return resResult(STATUS.GACHA_COST_NOT_ENOUGH);
|
||||
}
|
||||
// 给东西
|
||||
let { heroes } = await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfo);
|
||||
await addItems(roleId, roleName, sid, items);
|
||||
// 更新数据
|
||||
point = Math.floor(count/RECRUIT.RECRUIT_BONUS);
|
||||
point = Math.floor(count / RECRUIT.RECRUIT_BONUS);
|
||||
userGacha = await UserGachaModel.updateInfo(roleId, gachaId, activityId, {
|
||||
freeCount, hope, floor, count, point
|
||||
});
|
||||
@@ -134,12 +134,12 @@ export class GachaHandler {
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.GASHA, count, true, {});
|
||||
|
||||
let resultRefFreeTime = 0;
|
||||
if(dicGacha.free.count > 0) {
|
||||
if (dicGacha.free.count > 0) {
|
||||
resultRefFreeTime = getAfterDateByDay(refFreeTime, dicGacha.free.day);
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
gachaId, activityId,
|
||||
freeCount, refFreeTime: resultRefFreeTime, count, point, floor,
|
||||
freeCount, refFreeTime: resultRefFreeTime, count, point, floor,
|
||||
heroes, result: resultList
|
||||
});
|
||||
}
|
||||
@@ -154,14 +154,14 @@ export class GachaHandler {
|
||||
const { gachaId, hope } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
|
||||
for(let { hid } of hope) {
|
||||
for (let { hid } of hope) {
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if(hid != 0 && dicHero.quality != HERO_QUALITY_TYPE.GOLD) {
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (hid != 0 && dicHero.quality != HERO_QUALITY_TYPE.GOLD) {
|
||||
return resResult(STATUS.GACHA_HOPE_NOT_GOLD);
|
||||
}
|
||||
}
|
||||
let userGacha = await UserGachaModel.updateInfo(roleId, gachaId, 0, { hope: hope.map(cur => { return {...cur, hasGet: false} }) })
|
||||
let userGacha = await UserGachaModel.updateInfo(roleId, gachaId, 0, { hope: hope.map(cur => { return { ...cur, hasGet: false } }) })
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
gachaId,
|
||||
@@ -185,16 +185,16 @@ export class GachaHandler {
|
||||
|
||||
let userGacha = await UserGachaModel.findByRole(roleId, gachaId, 0);
|
||||
let { point, turntable } = userGacha;
|
||||
if(point < RECRUIT.RECRUIT_BONUS_RECRUIT) return resResult(STATUS.GACHA_TURNTABLE_POINT_NOT_ENOUGH);
|
||||
if (point < RECRUIT.RECRUIT_BONUS_RECRUIT) return resResult(STATUS.GACHA_TURNTABLE_POINT_NOT_ENOUGH);
|
||||
|
||||
let turntablePool: { quality: number, count: number }[] = [];
|
||||
for(let { quality, count } of gameData.gachaTurntable) {
|
||||
for (let { quality, count } of gameData.gachaTurntable) {
|
||||
let myTurntable = turntable.find(cur => cur.quality == quality);
|
||||
if(myTurntable && myTurntable.hasGet) {
|
||||
if (myTurntable && myTurntable.hasGet) {
|
||||
turntablePool.push({ quality, count });
|
||||
}
|
||||
}
|
||||
if(turntablePool.length <= 0) { // 重置
|
||||
if (turntablePool.length <= 0) { // 重置
|
||||
turntable = []; turntablePool = gameData.gachaTurntable;
|
||||
}
|
||||
|
||||
@@ -207,27 +207,27 @@ export class GachaHandler {
|
||||
let contentId = gameData.gachaContentHero.get(hero[0]);
|
||||
|
||||
// 获得或者转成碎片
|
||||
let heroInfo: { hid: number }[] = [];
|
||||
for(let i = 0; i < count; i++) {
|
||||
heroInfo.push({ hid: hero[0] })
|
||||
let heroInfo: { hid: number, count: number }[] = [];
|
||||
for (let i = 0; i < count; i++) {
|
||||
heroInfo.push({ hid: hero[0], count: 1 })
|
||||
}
|
||||
let { heroes, goods } = await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfo);
|
||||
let resultList: GachaResult[] = [];
|
||||
for(let h of heroes) {
|
||||
for (let h of heroes) {
|
||||
let result = new GachaResult(contentId);
|
||||
result.setHero(h.hid);
|
||||
resultList.push(result);
|
||||
}
|
||||
for(let g of goods) {
|
||||
for (let g of goods) {
|
||||
let result = new GachaResult(contentId);
|
||||
result.setHero(hero[0]);
|
||||
result.transferToPiece(g.id, g.count);
|
||||
resultList.push(result);
|
||||
}
|
||||
|
||||
|
||||
// 记录
|
||||
let myTurntable = turntable.find(cur => cur.quality == quality);
|
||||
if(!myTurntable) {
|
||||
if (!myTurntable) {
|
||||
myTurntable = { quality, hasGet: false };
|
||||
turntable.push(myTurntable);
|
||||
}
|
||||
@@ -254,19 +254,19 @@ export class GachaHandler {
|
||||
async setPickHero(msg: { gachaId: number, activityId: number, pickHero: number }, session: BackendSession) {
|
||||
const { gachaId, activityId, pickHero } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
if(gachaId != GACHA_ID.ASSIGN && gachaId != GACHA_ID.TIMELIMIT)
|
||||
if (gachaId != GACHA_ID.ASSIGN && gachaId != GACHA_ID.TIMELIMIT)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let dicHero = gameData.hero.get(pickHero);
|
||||
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let heroes: number[] = [];
|
||||
if(gachaId == GACHA_ID.TIMELIMIT) {
|
||||
if (gachaId == GACHA_ID.TIMELIMIT) {
|
||||
let activityData = await ActivityModel.findActivity(activityId, true);
|
||||
if(!activityData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
if (!activityData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
let gachaData = new GachaData(activityData);
|
||||
heroes = gachaData.heroes;
|
||||
if(!heroes.includes(pickHero)) {
|
||||
if (!heroes.includes(pickHero)) {
|
||||
return resResult(STATUS.GACHA_CAN_NOT_PICK)
|
||||
}
|
||||
}
|
||||
@@ -287,11 +287,11 @@ export class GachaHandler {
|
||||
* @param {BackendSession} session
|
||||
* @memberof GachaHandler
|
||||
*/
|
||||
async getVisitedHero(msg: { }, session: BackendSession) {
|
||||
async getVisitedHero(msg: {}, session: BackendSession) {
|
||||
const roleId: string = session.get('roleId');
|
||||
|
||||
let { visitedHero, refVisitedTime } = await UserGachaModel.findByRole(roleId, GACHA_ID.NORMAL, 0);
|
||||
if(shouldRefresh(refVisitedTime, new Date(), REFRESH_HOUR)) {
|
||||
if (shouldRefresh(refVisitedTime, new Date(), REFRESH_HOUR)) {
|
||||
visitedHero = [];
|
||||
}
|
||||
|
||||
@@ -313,19 +313,19 @@ export class GachaHandler {
|
||||
const { hid } = msg;
|
||||
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if(!dicHero.recruit) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if (!dicHero.recruit) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let { pieceId } = dicHero;
|
||||
|
||||
let { visitedHero, refVisitedTime } = await UserGachaModel.findByRole(roleId, GACHA_ID.NORMAL, 0);
|
||||
if(shouldRefresh(refVisitedTime, new Date(), REFRESH_HOUR)) {
|
||||
if (shouldRefresh(refVisitedTime, new Date(), REFRESH_HOUR)) {
|
||||
visitedHero = [];
|
||||
refVisitedTime = getTodayZeroDate(REFRESH_HOUR);
|
||||
}
|
||||
if(visitedHero.includes(hid)) {
|
||||
if (visitedHero.includes(hid)) {
|
||||
return resResult(STATUS.GACHA_HAS_VISITED);
|
||||
}
|
||||
if(visitedHero.length >= RECRUIT.RECRUIT_DAILY_RECRUIT_SHARD) {
|
||||
if (visitedHero.length >= RECRUIT.RECRUIT_DAILY_RECRUIT_SHARD) {
|
||||
return resResult(STATUS.GACHA_VISITED_COUNT_OVER);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user