后台添加装备时可以选择武将穿上

This commit is contained in:
luying
2020-12-18 15:15:01 +08:00
parent b39c9bdc8b
commit f2c124a6e4
9 changed files with 592 additions and 267 deletions
@@ -83,11 +83,11 @@ export class EntryHandler {
let equips = await EquipModel.findbyRole(role.roleId); let equips = await EquipModel.findbyRole(role.roleId);
let items = await ItemModel.findbyRole(role.roleId); let items = await ItemModel.findbyRole(role.roleId);
for(let i of heros) { // for(let i of heros) {
for(let j of i.ePlace) { // for(let j of i.ePlace) {
console.log(j.equip) // console.log(j.equip)
} // }
} // }
role['heros'] = heros; role['heros'] = heros;
role['equips'] = equips; role['equips'] = equips;
@@ -160,6 +160,12 @@ export class EquipHandler {
if(!dicRefine) { if(!dicRefine) {
return resResult(STATUS.ROLE_INFO_NOT_FOUND) return resResult(STATUS.ROLE_INFO_NOT_FOUND)
} }
// let {successRate} = dicRefine;
// for(let {id, count} of material) {
// }
let ran = Math.floor(Math.random() * 100) let ran = Math.floor(Math.random() * 100)
let isSuccess = ran <= dicRefine.successRate; let isSuccess = ran <= dicRefine.successRate;
// 消耗道具提升成功率 每个道具提升10%成功率 // 消耗道具提升成功率 每个道具提升10%成功率
@@ -173,7 +179,7 @@ export class EquipHandler {
} }
// TODO 消耗 // TODO 消耗
let cost = []; let cost = dicRefine.material;
let result = await handleCost(roleId, sid, cost); let result = await handleCost(roleId, sid, cost);
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
@@ -235,18 +241,13 @@ export class EquipHandler {
let {randomEffect} = dicGoods; let {randomEffect} = dicGoods;
let pool = randomEffect.map(cur => gameData.randomEffectPool.get(cur)); let pool = randomEffect.map(cur => gameData.randomEffectPool.get(cur));
let chosen = randSe.map(cur => cur.seid); // 上一轮和这一轮随机出来的 let chosen = randSe.map(cur => cur.seid); // 上一轮和这一轮随机出来的
let newTurnChosen = new Array<number>(); // 这一轮随机出来的
let hasReset = false; let hasReset = false;
for(let i = 0; i < randSe.length; i++) { for(let i = 0; i < randSe.length; i++) {
if(!randSe[i].locked) { if(!randSe[i].locked) {
let newPool = pool.filter(cur => !chosen.includes(cur.id)); let newPool = pool.filter(cur => !chosen.includes(cur.id));
if(newPool.length <= 0) newPool = pool.filter(cur => !newTurnChosen.includes(cur.id));
let random = getRandomByLen(newPool); let random = getRandomByLen(newPool);
if(!random) {break}; if(!random) {break};
chosen.push(random.id);
newTurnChosen.push(random.id);
let rand = 0; let rand = 0;
console.log(Math.random(), random.Max, random.Min)
if(random.id > 0) rand = Math.floor(Math.random() * (random.Max - random.Min) + random.Min); if(random.id > 0) rand = Math.floor(Math.random() * (random.Max - random.Min) + random.Min);
randSe[i].seid = random.id; randSe[i].seid = random.id;
randSe[i].rand = rand; randSe[i].rand = rand;
+2 -2
View File
@@ -30,11 +30,11 @@ export default class UserController extends Controller {
public async createRoleData() { public async createRoleData() {
const { ctx } = this; const { ctx } = this;
const { hid, hlv, eid, ecount, itemid, itemcount, count, lv, skinid, selectedRowKeys: uids, optType } = ctx.request.body; const { hid, hlv, eid, ecount, itemid, itemcount, count, lv, skinid, selectedRowKeys: uids, optType, ehid } = ctx.request.body;
if(optType == 'hero') { if(optType == 'hero') {
ctx.body = await ctx.service.users.createHero(uids, hid, hlv); ctx.body = await ctx.service.users.createHero(uids, hid, hlv);
} else if(optType == 'equip') { } else if(optType == 'equip') {
ctx.body = await ctx.service.users.createEquip(uids, eid, ecount); ctx.body = await ctx.service.users.createEquip(uids, eid, ecount, ehid);
} else if (optType == 'item') { } else if (optType == 'item') {
ctx.body = await ctx.service.users.createItem(uids, itemid, itemcount); ctx.body = await ctx.service.users.createItem(uids, itemid, itemcount);
} else if (optType == 'gold') { } else if (optType == 'gold') {
+5 -4
View File
@@ -218,12 +218,13 @@ export default class GMUsers extends Service {
} }
} }
public async createEquip(uids: Array<string>, _eid: string, _ecount: string) { public async createEquip(uids: Array<string>, _eid: string, _ecount: string, _ehid: string) {
const {ctx} = this; const {ctx} = this;
console.log('gm createEquip', uids, _eid, _ecount); console.log('gm createEquip', uids, _eid, _ecount, _ehid);
let eid = parseInt(_eid); let eid = parseInt(_eid);
let ecount = parseInt(_ecount); let ecount = parseInt(_ecount);
if(isNaN(eid) || isNaN(ecount)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); let ehid = parseInt(_ehid);
if(isNaN(eid) || isNaN(ecount) || isNaN(ehid)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
let flag = 0, msg = '创建失败'; let flag = 0, msg = '创建失败';
for(let roleId of uids) { for(let roleId of uids) {
@@ -236,7 +237,7 @@ export default class GMUsers extends Service {
flag = 1, msg = "未找到装备" + eid; flag = 1, msg = "未找到装备" + eid;
break; break;
} }
await ctx.service.utils.addEquips(roleId, role.roleName, {id: eid, ...dicEquip}); await ctx.service.utils.addEquips(roleId, role.roleName, {id: eid, ...dicEquip, hid: ehid});
} }
} else { } else {
flag = 1, msg = '未找到角色' + roleId; flag = 1, msg = '未找到角色' + roleId;
+9 -2
View File
@@ -2,6 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
import { COUNTER } from '../consts'; import { COUNTER } from '../consts';
import { CounterModel } from './Counter'; import { CounterModel } from './Counter';
import { HeroModel } from './Hero';
export class RandSe { export class RandSe {
@prop({ required: true }) @prop({ required: true })
@@ -48,7 +49,7 @@ export default class Equip extends BaseModel {
id: number; // 装备 id id: number; // 装备 id
@prop({ required: true }) @prop({ required: true })
name: string; // 装备名称 name: string; // 装备名称
@prop({ required: false }) @prop({ required: false, default: 0 })
hid: number; // 装备此装备的武将 id hid: number; // 装备此装备的武将 id
@prop({ required: false, default: 0 }) @prop({ required: false, default: 0 })
ePlaceId: number; // 武将装备的部位 ePlaceId: number; // 武将装备的部位
@@ -77,12 +78,18 @@ export default class Equip extends BaseModel {
return equip; return equip;
} }
public static async createEquip(equipInfo: {roleId: string, roleName: string, id: number, name: string, quality: number, suitId: number, ePlaceId: number, randSe: RandSe[], randRange: number, holes: Holes[]}, lean = true) { public static async createEquip(equipInfo: {roleId: string, roleName: string, id: number, name: string, quality: number, suitId: number, ePlaceId: number, randSe: RandSe[], randRange: number, holes: Holes[], hid?: number}, lean = true) {
const seqId = await CounterModel.getNewCounter(COUNTER.EID); const seqId = await CounterModel.getNewCounter(COUNTER.EID);
const doc = new EquipModel(); const doc = new EquipModel();
const update = Object.assign(doc.toJSON(), seqId, equipInfo); const update = Object.assign(doc.toJSON(), seqId, equipInfo);
const equip: EquipType = await EquipModel.findOneAndUpdate({ seqId }, update, {upsert: true, new: true}).lean(lean); const equip: EquipType = await EquipModel.findOneAndUpdate({ seqId }, update, {upsert: true, new: true}).lean(lean);
if(equipInfo.hid > 0) {
await HeroModel.findOneAndUpdate(
{ roleId: equipInfo.roleId, hid: equipInfo.hid, 'ePlace.id': 1 },
{$set: {'ePlace.$.equip': equip._id}},
{new: true}).lean(lean);
}
return equip; return equip;
} }
+1 -1
View File
@@ -152,7 +152,7 @@ export default class Hero extends BaseModel {
{$set: {'ePlace.$.equip': equipId}}, {$set: {'ePlace.$.equip': equipId}},
{new: true}).lean(lean); {new: true}).lean(lean);
if (hero) { if (hero) {
await Equip.putOn(hero.hid, equipId); await Equip.putOn(hero.hid, equipId);
} }
return hero; return hero;
} }
+1
View File
@@ -34,6 +34,7 @@ export interface EquipInter {
hole: number; hole: number;
randomEffect: Array<number>; randomEffect: Array<number>;
itid: number; itid: number;
hid?: number;
}; };
+3 -3
View File
@@ -31,7 +31,7 @@ export async function addBags(roleId: string, roleName: string, data: BagInter)
} }
export async function addEquips(roleId: string, roleName: string, weapon: EquipInter) { export async function addEquips(roleId: string, roleName: string, weapon: EquipInter) {
let { id, name, quality, suitId, hole, randomEffect, itid } = weapon; let { id, name, quality, suitId, hole, randomEffect, itid, hid } = weapon;
let {type} = ITID.get(itid); let {type} = ITID.get(itid);
let randomNum = RANDOM_SE_COUNT.get(quality); let randomNum = RANDOM_SE_COUNT.get(quality);
@@ -40,9 +40,9 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI
let randSe = new Array<RandSe>(); let randSe = new Array<RandSe>();
for(let i = 0; i < randomNum; i++) { for(let i = 0; i < randomNum; i++) {
pool = pool.filter(cur => !chosen.includes(cur.id)); pool = pool.filter(cur => !chosen.includes(cur.id));
console.log(JSON.stringify(pool))
let random = getRandomByLen(pool); let random = getRandomByLen(pool);
if(!random) break; if(!random) break;
chosen.push(random.id);
let rand = 0; let rand = 0;
if(random.id > 0) rand = Math.floor(Math.random() * (random.Max - random.Min) + random.Min); if(random.id > 0) rand = Math.floor(Math.random() * (random.Max - random.Min) + random.Min);
randSe.push({ randSe.push({
@@ -58,6 +58,6 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI
holes.push({id: i+1, isOpen: false, jewel: 0}) holes.push({id: i+1, isOpen: false, jewel: 0})
} }
const equip = await EquipModel.createEquip({roleId, roleName, id, name, quality, suitId, randRange, ePlaceId: type, randSe, holes}); const equip = await EquipModel.createEquip({roleId, roleName, id, name, quality, suitId, randRange, ePlaceId: type, randSe, holes, hid});
return equip return equip
} }
File diff suppressed because it is too large Load Diff