xy-server/game/utils/RoleUtil.ts
2025-04-23 09:34:08 +08:00

146 lines
6.1 KiB
TypeScript

import GameConf from "../../conf/GameConf";
import SKDataUtil from "../gear/SKDataUtil";
import SKLogger from "../gear/SKLogger";
import AIMgr from "../core/AIMgr";
import GameUtil from "../core/GameUtil";
import MapMgr from "../core/MapMgr";
import Player from "../object/Player";
import {ERaceType, EAttrTypeL2} from "../role/EEnum";
import PetMgr from "../core/PetMgr";
import ExpUtil from "../core/ExpUtil";
export default class RoleUtil {
static checkRace(race: number, resid: number): number {
let conf = GameUtil.game_conf.role;
let data = conf[resid];
if (data) {
if (data.race != race) {
let result = data.race;
SKLogger.debug(`修正1:种族[${race}->${result}]`);
return result;
}
}
let result = SKDataUtil.clamp(race, ERaceType.HUMEN, ERaceType.DRAGON);
if (result != result) {
SKLogger.debug(`修正2:种族[${race}->${result}]`);
}
return result;
}
static checkSex(sex: number, resid: number): number {
let conf = GameUtil.game_conf.role;
let data = conf[resid];
if (data) {
if (data.sex != sex) {
let result = data.sex;
SKLogger.debug(`修正1:性别[${sex}->${result}]`);
return result;
}
}
let result = SKDataUtil.clamp(sex, 1, 2);
if (result != sex) {
SKLogger.debug(`修正2:性别[${sex}->${result}]`);
}
return result;
}
// 模拟机器人数据
static randomRole(player: Player) {
let mapList = [1000, 1001, 1002, 1003, 1004, 1005, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1202, 1206, 1207, 1209, 1212, 2000, 2001, 2002, 4002];
player.name = this.getRandomName();
let conf = GameUtil.game_conf.role;
let list = [];
for (let key in conf) {
let item = conf[key];
if (item.relive < 1) {
list.push(item);
}
}
let data = SKDataUtil.randomList(list);
player.sex = SKDataUtil.random(1, 2);
player.race = data.race;
player.resid = data.res_id;
player.relive = data.relive;
player.level = SKDataUtil.random(50, 100);
let index = Math.floor((Math.random() * mapList.length))
player.mapid = mapList[index];
let mapModel = MapMgr.shared.getMapById(player.mapid);
let pos = mapModel.getARandomPos();
player.x = pos.x;
player.y = pos.y;
player.loaded = true;
let titles: any = { onload: false, titles: [{ type: 0, titlei: 30, value: "", onload: true }] };
player.setTitles(titles);
// 离线状态
player.offline = true;
let rows = [
{ role_id: player.roleid, position: 1, name: "", level: 1, exp: 0 },
{ role_id: player.roleid, position: 2, name: "", level: 1, exp: 0 },
{ role_id: player.roleid, position: 3, name: "", level: 1, exp: 0 },
{ role_id: player.roleid, position: 4, name: "", level: 1, exp: 0 },
];
player.horseList.setDB(rows);
if (GameConf.horseEnabled) {
player.horseList.horseIndex = SKDataUtil.random(0, 4);
} else {
player.horseList.horseIndex = 0;
}
player.dir = SKDataUtil.random(1, 4);
player.teamid = 0;
player.ai = new AIMgr(player);
player.ai_flag = 1;
}
// 数据库创建机器人
static createDataRobot(player: Player, data: any){
player.name = data.name;
player.sex = data.sex;
player.race = data.race;
player.resid = data.res_id;
player.relive = data.relive;
player.level = data.data;
player.mapid = data.mapid;
let mapModel = MapMgr.shared.getMapById(player.mapid);
let pos = mapModel.getARandomPos();
player.x = pos.x;
player.y = pos.y;
player.loaded = true;
let titles: any = { onload: false, titles: [{ type: 0, titlei: 30, value: "", onload: true }] };
player.setTitles(titles);
// 离线状态
player.offline = true;
let rows = [
{ role_id: player.roleid, position: 1, name: "", level: 1, exp: 0 },
{ role_id: player.roleid, position: 2, name: "", level: 1, exp: 0 },
{ role_id: player.roleid, position: 3, name: "", level: 1, exp: 0 },
{ role_id: player.roleid, position: 4, name: "", level: 1, exp: 0 },
];
player.bangid = data.bangid;
player.horseList.setDB(rows);
if (GameConf.horseEnabled) {
player.horseList.horseIndex = SKDataUtil.random(0, 4);
} else {
player.horseList.horseIndex = 0;
}
player.dir = SKDataUtil.random(1, 4);
player.teamid = 0;
player.ai = new AIMgr(player);
player.ai_flag = 1;
}
static getRandomName(): string {
let v1 = ["思", "烟", "冰", "琴", "夜", "蓝", "痴", "梦", "依", "丹", "小", "柳", "香", "冬", "绿", "萍", "向", "菱", "映", "寒", "阳", "含", "曼", "霜", "春", "白", "南", "醉", "丝", "之", "新", "真", "雨", "露", "天", "云", "寄", "芙", "如", "筠", "容", "若", "涵", "荷", "风", "亦", "儿", "采", "雪", "谷", "巧", "凌", "山", "安", "蕾", "从", "芷", "芹", "绮", "雅", "柔", "飞",
"锦", "程", "修", "杰", "烨", "伟", "尔", "曼", "立", "辉", "致", "远", "天", "思", "友", "绿", "聪", "健", "洁", "访", "琴", "初", "彤", "谷", "雪", "平", "灵", "源", "智", "华", "振", "家", "越", "彬", "乞", "子", "轩", "宸", "晋", "鹏", "觅", "松", "海", "亦", "戾", "嵩", "邑", "瑛", "鸿", "卿", "裘", "契", "涛", "疾", "驳", "凛", "逊", "鹰", "威", "紊", "阁", "哈"];
let name = v1[Math.floor(Math.random() * v1.length)];
name += v1[Math.floor(Math.random() * v1.length)];
if (Math.random() > 0.1) {
name += v1[Math.floor(Math.random() * v1.length)];
}
if (Math.random() > 0.6) {
name += v1[Math.floor(Math.random() * v1.length)];
}
return name;
};
}