物品增加掉落

This commit is contained in:
mamengke01
2020-12-16 16:15:40 +08:00
parent d822f6b819
commit 829d43c7a8
8 changed files with 176 additions and 25770 deletions

View File

@@ -1,5 +1,5 @@
import {Application, BackendSession, createTcpMailBox, ChannelService} from 'pinus';
import { handleCost } from '../../../services/rewardService';
import { handleCost, addItems } from '../../../services/rewardService';
import { calPlayerCeAndSave, getAllAttrStage } from '../../../services/playerCeService';
import { resResult } from '../../../pubUtils/util';
import { STATUS } from '../../../consts/statusCode';
@@ -27,11 +27,12 @@ export class HeroHandler {
let {id, count} = msg;
let result = await handleCost(roleId, sid, [{id, count}] );
//let result = await handleCost(roleId, sid, [{id, count}] );
let result = await addItems(roleId, roleName, sid, [{id, count}] );
if(!result) {
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
}
return resResult(STATUS.SUCCESS);
return resResult(STATUS.SUCCESS,{result});
}
@@ -448,5 +449,4 @@ export class HeroHandler {
await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.SKIN, [id, lastSkinId]);
return resResult(STATUS.SUCCESS, {curHero: {hid : hero.hid, skins : hero.skins} });
}
}

View File

@@ -1,13 +1,15 @@
import { GOOD_TYPE, ITID, CURRENCY, CURRENCY_TYPE, COUNTER } from './../consts';
import { GOOD_TYPE, ITID, CURRENCY, CURRENCY_TYPE, COUNTER, CONSUME_TYPE } from './../consts/consts';
import { EquipModel } from './../db/Equip';
import { CounterModel } from './../db/Counter';
import { decodeStr, resResult } from '../pubUtils/util';
import { getGoodById } from '../pubUtils/gamedata';
import { getGoodById, getFashionsById } from '../pubUtils/gamedata';
import { RoleModel } from '../db/Role';
import { setAp } from './actionPointService';
import { ItemModel } from '../db/Item';
import { STATUS } from '../consts/statusCode';
import { pinus } from 'pinus';
import { HeroModel } from '../db/Hero';
import { treatTask } from './battleService';
const _ = require('underscore');
export async function handleFixedReward(roleId: string, roleName: string, rewardStr: string, multi: number) {
@@ -178,31 +180,135 @@ export async function handleCost(roleId: string, sid: string, goods: Array<{id:
return true;
}
export async function addItems(roleId: string, sid: string, goods: Array<{id: number, count: number}>) {
let showItems = [];
let equips = [];
let currencys = [];
interface Item {id: number, count: number};
interface Equip {id: number, name: string, quality: number, type: number};
interface Bag {id: number, itemName: string, count: number, type: number, hid:number};
export async function addItems(roleId: string, roleName: string, sid: string, goods: Array<Item>) {
let showItems: Array<Item> = [];
let currencys: Array<Item> = [];
let equips: Array<Equip> = [];
let bags: Array<Bag> = [];
let skins: Array<number> = [];
let uids = [{uid: roleId, sid}];
sortItems(goods, bags, skins, currencys, equips);
let equipInfos = [];
for (let equip of equips) {
let equipInfo = await addEquips(roleId, roleName, equip);
showItems.push({id: equip.id, count: 1});
equipInfos.push(equipInfo);
}
//装备推送
if (!!equipInfos.length) {
pinus.app.get('channelService').pushMessageByUids('onEquipAdd', resResult(STATUS.SUCCESS, {equipInfos}), uids);
}
let data = {};
for (let currency of currencys) {
await addCurrency(roleId, currency, data);
showItems.push(currency);
}
//货币推送
if (!!Object.keys(data).length) {
pinus.app.get('channelService').pushMessageByUids('onPlayerDataChange', resResult(STATUS.SUCCESS, data), uids);
}
let bagInfos = [];
for (let item of bags) {
let bagInfo = await addBags(roleId, roleName, item);
showItems.push({id: item.id, count: item.count});
bagInfos.push(bagInfo);
}
//背包除去装备推送
if (!!bagInfos.length) {
pinus.app.get('channelService').pushMessageByUids('onItemUpdate', resResult(STATUS.SUCCESS, {goods: bagInfos}), uids);
}
let skinInfos = [];
for (let skinId of skins) {//皮肤推送
let result = await addSkins(roleId, skinId);
if (!!result) {
showItems.push({id: skinId, count: 1});
skinInfos.push(result);
}
pinus.app.get('channelService').pushMessageByUids('onHeroSkinChange', resResult(STATUS.SUCCESS, {skinInfos}), uids);
}
return showItems;
}
function sortItems (goods: Array<Item>, bags: Array<Bag>, skins: Array<number>, currencys: Array<Item>, equips: Array<Equip>) {
for (let good of goods) {
let goodInfo = getGoodById(good.id);
if (goodInfo.goodType == GOOD_TYPE.EQUIP) { // 装备
equips.push({
id: good.id,
name: goodInfo.name,
quality: goodInfo.lv,
type: goodInfo.goodType
});
} else if (goodInfo.goodType == GOOD_TYPE.CONSUMES|| goodInfo.goodType == GOOD_TYPE.SCRIPT) {
for (let i = 0; i < good.count; i++) {
equips.push({id: good.id, name: goodInfo.name, quality: goodInfo.lv, type: goodInfo.goodType});
}
} else {
let {type, isCurrency} = ITID.get(goodInfo.itid);
if (!!isCurrency) { // 货币
if (!!isCurrency) {
let index = _.indexOf(currencys, {id: good.id});
if (index > 0) {
currencys[index].count = currencys[index].count + good.count;
} else {
currencys.push(good);
}
} else if (goodInfo.itid == CONSUME_TYPE.SKIN) {
let index = _.indexOf(skins, good.id);
if (index == -1) {
skins.push(good.id);
}
} else {
let index = _.indexOf(skins, {id: good.id});
if (index > 0) {
bags[index].count = bags[index].count + good.count;
} else {
bags.push({id: good.id, count: good.count, itemName: goodInfo.name, hid: goodInfo.hid||0, type});
}
}
}
}
}
}
async function addSkins(roleId: string, id: number) {
let skinInfo = getFashionsById(id);
if (!skinInfo)
return false;
let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId, false);
if (!hero)
return false;
if (!!_.findWhere(hero.skins, {id}))
return false;
hero.skins.push({id: id, enable: false});
await HeroModel.updateHeroInfo(roleId, hero.hid, hero);
return {skins: hero.skins, hid: hero.hid};
}
async function addBags(roleId: string, roleName: string, data:Bag) {
let {id, count, itemName, type, hid} = data;
let item = await ItemModel.increaseItem(roleId, id, count, {roleId, roleName, itemName, id, type, hid});
return item;
}
async function addEquips (roleId: string, roleName: string, weapon: Equip) {
const seqId = await CounterModel.getNewCounter(COUNTER.EID);
let equip = Object.assign({seqId, roleId, roleName}, weapon);
return await EquipModel.createEquip(equip);
}
async function addCurrency(roleId: string, currency: {id: number, count: number }, data: any) {
let {id, count} = currency;
let dicCurrency = CURRENCY.get(id);
let result;
if(dicCurrency.type == CURRENCY_TYPE.GOLD) { // 处理元宝
result = await RoleModel.addGoldFree(roleId, count);
data.giftGold = result.giftGold;
data.gold = result.gold;
} else if(dicCurrency.type == CURRENCY_TYPE.COIN) { // 处理铜币
result = await RoleModel.addCoin(roleId, count);
data.coin = result.coin;
} else if(dicCurrency.type == CURRENCY_TYPE.ACTION_POINT) { // 处理体力
result = await setAp(Date.now(), roleId, count);
data.ap = result.ap;
}
}

View File

@@ -57,7 +57,9 @@ export const CONSUME_TYPE = {
BLUEPRT: 3, // 藏宝图
POINT: 4, // 远征币等
EXP: 5, // 经验书
FAVOUR: 6 // 好感度道具
FAVOUR: 6, // 好感度道具
SKIN: 7 // 好感度道具
};
const itid_array = [
@@ -95,7 +97,8 @@ const itid_array = [
{ id: 31, name: '名驹', goodType: GOOD_TYPE.EQUIP },
{ id: 32, name: '典籍', goodType: GOOD_TYPE.EQUIP },
{ id: 33, name: '神兵', goodType: GOOD_TYPE.EQUIP },
{ id: 34, name: '代币', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.POINT }
{ id: 34, name: '代币', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.POINT },
{ id: 39, name: '时装', goodType: GOOD_TYPE.CONSUMES, type: CONSUME_TYPE.SKIN }
];
export const ITID = new Map<number, {id: number, name: string, goodType: number, type?: number, isCurrency?: boolean}>();

View File

@@ -44,8 +44,8 @@ export default class Item extends BaseModel {
public static async increaseItem(roleId: string, id: number, count: number, itemInfo: {roleId: string, roleName: string, id: number, itemName: string, type: number, hid?: number }, lean = true) {
const doc = new ItemModel();
const setOnInsert = Object.assign(doc.toJSON(), itemInfo);
const equips: ItemType = await ItemModel.findOneAndUpdate({roleId, id },{$setOnInsert: setOnInsert, $inc: { count }}, {new: true, upsert: true}).lean(lean);
return equips;
const items = await ItemModel.findOneAndUpdate({roleId, id },{$setOnInsert: setOnInsert, $inc: { count }}, {new: true, upsert: true}).lean(lean);
return items;
}
public static async decreaseItems(roleId: string, items: Array<{id: number, count: number}>, lean = true) {

View File

@@ -1,9 +1,9 @@
[
{
"IsTestService":true,
"OpenIosAliPay":false,
"GuideSwitch":true,
"GENERAL_EQUIPMENT_DEFAULT_LEVEL":7,
"ServiceSign":"guanfu"
}
{
"IsTestService":true,
"OpenIosAliPay":false,
"GuideSwitch":true,
"GENERAL_EQUIPMENT_DEFAULT_LEVEL":7,
"ServiceSign":"guanfu"
}
]

File diff suppressed because one or more lines are too long

View File

@@ -1,292 +1 @@
[
{
"id": 1,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&234",
"globalAttr": "1&2000|2&500",
"actorAttr": "3&200|4&100",
"actorId": 1
},
{
"id": 2,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&235",
"globalAttr": "1&2000|2&501",
"actorAttr": "3&200|4&101",
"actorId": 1
},
{
"id": 3,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&236",
"globalAttr": "1&2000|2&502",
"actorAttr": "3&200|4&102",
"actorId": 1
},
{
"id": 4,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&237",
"globalAttr": "1&2000|2&503",
"actorAttr": "3&200|4&103",
"actorId": 1
},
{
"id": 5,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&238",
"globalAttr": "1&2000|2&504",
"actorAttr": "3&200|4&104",
"actorId": 2
},
{
"id": 6,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&239",
"globalAttr": "1&2000|2&505",
"actorAttr": "3&200|4&105",
"actorId": 3
},
{
"id": 7,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&240",
"globalAttr": "1&2000|2&506",
"actorAttr": "3&200|4&106",
"actorId": 4
},
{
"id": 8,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&241",
"globalAttr": "1&2000|2&507",
"actorAttr": "3&200|4&107",
"actorId": 5
},
{
"id": 9,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&242",
"globalAttr": "1&2000|2&508",
"actorAttr": "3&200|4&108",
"actorId": 6
},
{
"id": 10,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&243",
"globalAttr": "1&2000|2&509",
"actorAttr": "3&200|4&109",
"actorId": 7
},
{
"id": 11,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&244",
"globalAttr": "1&2000|2&510",
"actorAttr": "3&200|4&110",
"actorId": 8
},
{
"id": 12,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&245",
"globalAttr": "1&2000|2&511",
"actorAttr": "3&200|4&111",
"actorId": 9
},
{
"id": 13,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&246",
"globalAttr": "1&2000|2&512",
"actorAttr": "3&200|4&112",
"actorId": 10
},
{
"id": 14,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&247",
"globalAttr": "1&2000|2&513",
"actorAttr": "3&200|4&113",
"actorId": 11
},
{
"id": 15,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&248",
"globalAttr": "1&2000|2&514",
"actorAttr": "3&200|4&114",
"actorId": 12
},
{
"id": 16,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&249",
"globalAttr": "1&2000|2&515",
"actorAttr": "3&200|4&115",
"actorId": 13
},
{
"id": 17,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&250",
"globalAttr": "1&2000|2&516",
"actorAttr": "3&200|4&116",
"actorId": 14
},
{
"id": 18,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&251",
"globalAttr": "1&2000|2&517",
"actorAttr": "3&200|4&117",
"actorId": 15
},
{
"id": 19,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&252",
"globalAttr": "1&2000|2&518",
"actorAttr": "3&200|4&118",
"actorId": 16
},
{
"id": 20,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&253",
"globalAttr": "1&2000|2&519",
"actorAttr": "3&200|4&119",
"actorId": 17
},
{
"id": 21,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&254",
"globalAttr": "1&2000|2&520",
"actorAttr": "3&200|4&120",
"actorId": 18
},
{
"id": 22,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&255",
"globalAttr": "1&2000|2&521",
"actorAttr": "3&200|4&121",
"actorId": 19
},
{
"id": 23,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&256",
"globalAttr": "1&2000|2&522",
"actorAttr": "3&200|4&122",
"actorId": 20
},
{
"id": 24,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&257",
"globalAttr": "1&2000|2&523",
"actorAttr": "3&200|4&123",
"actorId": 21
},
{
"id": 25,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&258",
"globalAttr": "1&2000|2&524",
"actorAttr": "3&200|4&124",
"actorId": 22
},
{
"id": 26,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&259",
"globalAttr": "1&2000|2&525",
"actorAttr": "3&200|4&125",
"actorId": 23
},
{
"id": 27,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&260",
"globalAttr": "1&2000|2&526",
"actorAttr": "3&200|4&126",
"actorId": 24
},
{
"id": 28,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&261",
"globalAttr": "1&2000|2&527",
"actorAttr": "3&200|4&127",
"actorId": 25
},
{
"id": 29,
"rSpine": "LH_jiaxu",
"sSpine": "jiaxu",
"skill": "1&12|2&13",
"seid": "344&456&262",
"globalAttr": "1&2000|2&528",
"actorAttr": "3&200|4&128",
"actorId": 26
}
]
[{"id":41001,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&234","globalAttr":"1&2000|2&500","actorAttr":"3&200|4&100","actorId":1},{"id":41002,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&235","globalAttr":"1&2000|2&501","actorAttr":"3&200|4&101","actorId":1},{"id":41003,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&236","globalAttr":"1&2000|2&502","actorAttr":"3&200|4&102","actorId":1},{"id":41004,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&237","globalAttr":"1&2000|2&503","actorAttr":"3&200|4&103","actorId":1},{"id":41005,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&238","globalAttr":"1&2000|2&504","actorAttr":"3&200|4&104","actorId":2},{"id":41006,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&239","globalAttr":"1&2000|2&505","actorAttr":"3&200|4&105","actorId":3},{"id":41007,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&240","globalAttr":"1&2000|2&506","actorAttr":"3&200|4&106","actorId":4},{"id":41008,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&241","globalAttr":"1&2000|2&507","actorAttr":"3&200|4&107","actorId":5},{"id":41009,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&242","globalAttr":"1&2000|2&508","actorAttr":"3&200|4&108","actorId":6},{"id":41010,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&243","globalAttr":"1&2000|2&509","actorAttr":"3&200|4&109","actorId":7},{"id":41011,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&244","globalAttr":"1&2000|2&510","actorAttr":"3&200|4&110","actorId":8},{"id":41012,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&245","globalAttr":"1&2000|2&511","actorAttr":"3&200|4&111","actorId":9},{"id":41013,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&246","globalAttr":"1&2000|2&512","actorAttr":"3&200|4&112","actorId":10},{"id":41014,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&247","globalAttr":"1&2000|2&513","actorAttr":"3&200|4&113","actorId":11},{"id":41015,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&248","globalAttr":"1&2000|2&514","actorAttr":"3&200|4&114","actorId":12},{"id":41016,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&249","globalAttr":"1&2000|2&515","actorAttr":"3&200|4&115","actorId":13},{"id":41017,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&250","globalAttr":"1&2000|2&516","actorAttr":"3&200|4&116","actorId":14},{"id":41018,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&251","globalAttr":"1&2000|2&517","actorAttr":"3&200|4&117","actorId":15},{"id":41019,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&252","globalAttr":"1&2000|2&518","actorAttr":"3&200|4&118","actorId":16},{"id":41020,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&253","globalAttr":"1&2000|2&519","actorAttr":"3&200|4&119","actorId":17},{"id":41021,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&254","globalAttr":"1&2000|2&520","actorAttr":"3&200|4&120","actorId":18},{"id":41022,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&255","globalAttr":"1&2000|2&521","actorAttr":"3&200|4&121","actorId":19},{"id":41023,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&256","globalAttr":"1&2000|2&522","actorAttr":"3&200|4&122","actorId":20},{"id":41024,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&257","globalAttr":"1&2000|2&523","actorAttr":"3&200|4&123","actorId":21},{"id":41025,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&258","globalAttr":"1&2000|2&524","actorAttr":"3&200|4&124","actorId":22},{"id":41026,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&259","globalAttr":"1&2000|2&525","actorAttr":"3&200|4&125","actorId":23},{"id":41027,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&260","globalAttr":"1&2000|2&526","actorAttr":"3&200|4&126","actorId":24},{"id":41028,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&261","globalAttr":"1&2000|2&527","actorAttr":"3&200|4&127","actorId":25},{"id":41029,"rSpine":"LH_jiaxu","sSpine":"jiaxu","skill":"1&12|2&13","seid":"344&456&262","globalAttr":"1&2000|2&528","actorAttr":"3&200|4&128","actorId":26}]

View File

@@ -0,0 +1,34 @@
[
{
"id": 1,
"name": "秘书师套装"
},
{
"id": 2,
"name": "魔法师套装"
},
{
"id": 3,
"name": "玉剑仙套装"
},
{
"id": 4,
"name": "刺客套装"
},
{
"id": 5,
"name": "耀光使套装"
},
{
"id": 6,
"name": "猎人套装"
},
{
"id": 7,
"name": "宗师套装"
},
{
"id": 8,
"name": "护盾使套装"
}
]