146 lines
3.4 KiB
TypeScript
146 lines
3.4 KiB
TypeScript
|
import GameUtil from "./GameUtil";
|
||
|
import Monster from "./Monster";
|
||
|
import SKDataUtil from "../gear/SKDataUtil";
|
||
|
|
||
|
export default class MonsterMgr{
|
||
|
|
||
|
static shared=new MonsterMgr();
|
||
|
|
||
|
monster_data_list:any;
|
||
|
monster_group:any;
|
||
|
monster_list:any;
|
||
|
bb_list:any;
|
||
|
constructor(){
|
||
|
this.monster_data_list = {};
|
||
|
this.monster_group = {};
|
||
|
this.monster_list = {};
|
||
|
this.bb_list = {};
|
||
|
}
|
||
|
|
||
|
launch(){
|
||
|
let propMon = GameUtil.require_ex('../../conf/prop_data/prop_monster');
|
||
|
let propMonGroup = GameUtil.require_ex('../../conf/prop_data/prop_monster_group');
|
||
|
for (let monsterid in propMon) {
|
||
|
if (propMon.hasOwnProperty(monsterid)) {
|
||
|
const mondata = propMon[monsterid];
|
||
|
this.monster_data_list[monsterid] = mondata;
|
||
|
// let mon = this.makeMon(monsterid);
|
||
|
// this.monster_list[monsterid] = mon;
|
||
|
if (mondata.catch == 1){
|
||
|
this.bb_list[monsterid] = mondata;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (let id in propMonGroup) {
|
||
|
if (propMonGroup.hasOwnProperty(id)) {
|
||
|
const mongroupdata = propMonGroup[id];
|
||
|
let monsterlist = mongroupdata.monsterlist;
|
||
|
let monlist = monsterlist.split(';');
|
||
|
let mon_list = [];
|
||
|
for (let moninfo of monlist) {
|
||
|
if(moninfo.length > 0){
|
||
|
let mon = moninfo.split(':');
|
||
|
mon_list.push({
|
||
|
monid: mon[0],
|
||
|
pos: mon[1],
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
mongroupdata.monsterlist = mon_list;
|
||
|
if (mongroupdata.item != null && mongroupdata.item.length > 0) {
|
||
|
let items = [];
|
||
|
try{
|
||
|
let itemlist = SKDataUtil.jsonBy(mongroupdata.item);
|
||
|
for (const iteminfo of itemlist) {
|
||
|
let t:any = {}
|
||
|
t.per = iteminfo[0];
|
||
|
let ts = [];
|
||
|
let tlist = iteminfo[1];
|
||
|
for (let i = 0; i < tlist.length;) {
|
||
|
let itemid = tlist[i];
|
||
|
let itemnum = tlist[i + 1];
|
||
|
let item:any = {};
|
||
|
item.itemid = itemid;
|
||
|
item.itemnum = itemnum;
|
||
|
ts.push(item);
|
||
|
i += 2;
|
||
|
}
|
||
|
t.items = ts;
|
||
|
items.push(t);
|
||
|
}
|
||
|
mongroupdata.item = items;
|
||
|
}catch(e){
|
||
|
console.error(mongroupdata.item);
|
||
|
}
|
||
|
mongroupdata.item = items;
|
||
|
}else{
|
||
|
mongroupdata.item = [];
|
||
|
}
|
||
|
this.monster_group[id] = mongroupdata;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getMonsterData(monid:any):any{
|
||
|
return this.monster_data_list[monid];
|
||
|
}
|
||
|
|
||
|
makeMon(monid:any):any{
|
||
|
let mondata = this.monster_data_list[monid];
|
||
|
if(mondata){
|
||
|
let mon = new Monster(mondata);
|
||
|
return mon;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
getRandomBB(){
|
||
|
let list = Object.keys(this.bb_list);
|
||
|
let r = GameUtil.random(0, list.length - 1);
|
||
|
let mondata = this.bb_list[list[r]];
|
||
|
if (mondata) {
|
||
|
let mon = new Monster(mondata);
|
||
|
return mon;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
getGroupData(groupid:any):any{
|
||
|
return this.monster_group[groupid];
|
||
|
}
|
||
|
|
||
|
getMonGroup(groupid:any):any{
|
||
|
let mongroupdata = this.monster_group[groupid];
|
||
|
if (mongroupdata == null){
|
||
|
return null;
|
||
|
}
|
||
|
let mon_list = mongroupdata.monsterlist;
|
||
|
let list = [];
|
||
|
for (const mondata of mon_list) {
|
||
|
let monster = this.makeMon(mondata.monid);
|
||
|
if (null == monster)
|
||
|
continue;
|
||
|
|
||
|
if(monster){
|
||
|
monster.pos = mondata.pos;
|
||
|
list.push(monster);
|
||
|
}
|
||
|
}
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
makeGroupDrop(groupid:any):any{
|
||
|
let data = this.getGroupData(groupid);
|
||
|
if(data && data.item.length > 0){
|
||
|
let t = 0;
|
||
|
let r = GameUtil.random(0, 100);
|
||
|
for (const info of data.item) {
|
||
|
if (r >= t && r < info.per) {
|
||
|
return info.items;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return [];
|
||
|
}
|
||
|
}
|