64 lines
2.5 KiB
TypeScript
64 lines
2.5 KiB
TypeScript
import { ApiCall } from "tsrpc";
|
|
import { HeroFun } from '../../public/hero';
|
|
import { PlayerFun } from '../../public/player';
|
|
import { ReqWeaponUp, ResWeaponUp } from "../../shared/protocols/hero/PtlWeaponUp";
|
|
import { PublicShared } from '../../shared/public/public';
|
|
|
|
export default async function (call: ApiCall<ReqWeaponUp, ResWeaponUp>) {
|
|
let hero = await HeroFun.getHero(call, call.req.id)
|
|
|
|
let heroConf = G.gc.hero[hero?.heroId];
|
|
|
|
if (!hero) return call.error(globalThis.lng.hero_1);
|
|
if (!heroConf.zhuanshu) return call.error(globalThis.lng.hero_16);
|
|
if (hero.lv < G.gc.herocom.zswqOpenLv) return call.error(`英雄达到${G.gc.herocom.zswqOpenLv}级开启`);
|
|
|
|
let weapon = Object.assign({}, hero.weapon || { jieji: 0, star: 0, starProbability: 0 });
|
|
let weaponConf = G.gc.zhuanshu[heroConf.zhuanshu];
|
|
|
|
if (call.req.type == 'jieji') {
|
|
if (!weaponConf[weapon.jieji + 1]) return call.error(globalThis.lng.hero_17);
|
|
if (weapon.star < Object.values(weaponConf[weapon.jieji]).slice(-1)[0].star) return call.error(globalThis.lng.hero_18);
|
|
|
|
let need = weaponConf[weapon.jieji + 1][0].need;
|
|
await PlayerFun.checkNeedIsMeet(call, need);
|
|
|
|
weapon.jieji += 1;
|
|
weapon.star = 0;
|
|
await PlayerFun.cutNeed(call, need);
|
|
await HeroFun.changeHeroAttr(call, hero, {
|
|
weapon: weapon
|
|
});
|
|
|
|
call.succ({});
|
|
} else if (call.req.type == 'star') {
|
|
if (!weaponConf[weapon.jieji][weapon.star + 1]) return call.error(globalThis.lng.hero_19);
|
|
|
|
let need = weaponConf[weapon.jieji][weapon.star + 1].need;
|
|
await PlayerFun.checkNeedIsMeet(call, need);
|
|
|
|
await PlayerFun.cutNeed(call, need);
|
|
|
|
let starFail: boolean;
|
|
let randomNum = PublicShared.randomNum(1, 100);
|
|
let vipAdd = 0;
|
|
if (G.gc.herocom.zswqVip[call.conn.gud.vip] == undefined) vipAdd += G.gc.herocom.zswqVip.last();
|
|
else vipAdd += G.gc.herocom.zswqVip[call.conn.gud.vip];
|
|
let probability = (weapon.starProbability + vipAdd + weaponConf[weapon.jieji][weapon.star + 1].probability) * 100;
|
|
if (randomNum <= probability) {
|
|
weapon.star += 1;
|
|
weapon.starProbability = 0;
|
|
starFail = false;
|
|
} else {
|
|
weapon.starProbability += 0.01;
|
|
starFail = true;
|
|
}
|
|
await HeroFun.changeHeroAttr(call, hero, {
|
|
weapon: weapon
|
|
});
|
|
|
|
call.succ({
|
|
starFail: starFail
|
|
});
|
|
}
|
|
} |