borderlands2
Version:
Borderlands 2 weapon damage and DPS calculation library
190 lines (151 loc) • 4.2 kB
text/typescript
import { Skill } from "../skill";
import { StatType } from "../../value_object/stat_type";
import { Stat } from "../../interface/stat";
import { Weapon } from "../../../weapon/interface/weapon";
import { Type } from "../../../weapon/value_object/type";
import { Context } from "../../../context";
import { EffectType } from "../../../effect";
// Geurilla
export class Ready extends Skill {
name = 'Ready'
protected stats: Stat[] = [{
type: StatType.ReloadSpeed,
value: 0.08
}]
}
export class Onslaught extends Skill {
name = 'Onslaught'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.06
}]
protected effectType = EffectType.Onslaught
}
export class CrisisManagement extends Skill {
name = 'Crisis Management'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.07
}]
}
// Gunpowder
export class Impact extends Skill {
name = 'Impact'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.04
}]
}
export class Overload extends Skill {
name = 'Overload'
protected stats: Stat[] = [{
type: StatType.MagazineSize,
value: 0.1
}]
public getStat(statType: StatType, weapon: Weapon, context: Context): number {
if(weapon.type !== Type.AssaultRifle) return 0
return super.getStat(statType, weapon, context)
}
}
export class MetalStorm extends Skill {
name = 'Metal Storm'
protected stats: Stat[] = [{
type: StatType.FireRate,
value: 0.12
}]
protected effectType = EffectType.MetalStorm
}
export class Steady extends Skill {
name = 'Steady'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.12
},{
type: StatType.GrenadeDamage,
value: 0.05
}]
public getStat(statType: StatType, weapon: Weapon, context: Context): number {
if(weapon.type !== Type.RocketLauncher && statType !== StatType.GrenadeDamage) return 0
return super.getStat(statType, weapon, context)
}
}
export class Battlefront extends Skill {
name = 'Battlefront'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.06
}]
protected effectType = EffectType.Battlefront
}
export class DutyCalls extends Skill {
name = 'Duty Calls'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.05
},{
type: StatType.FireRate,
value: 0.03
}]
public getStat(statType: StatType, weapon: Weapon, context: Context): number {
if(weapon.elementalEffect !== undefined) return 0
return super.getStat(statType, weapon, context)
}
}
export class DoOrDie extends Skill {
name = 'Do or Die'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.1
}]
public getStat(statType: StatType, weapon: Weapon, context: Context): number {
if(weapon.type !== Type.RocketLauncher) return 0
return super.getStat(statType, weapon, context)
}
}
export class Ranger extends Skill {
name = 'Ranger'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.01
},{
type: StatType.CritHitDamage,
value: 0.01
},{
type: StatType.FireRate,
value: 0.01
},{
type: StatType.MagazineSize,
value: 0.01
},{
type: StatType.ReloadSpeed,
value: 0.01
}]
}
// Survival
export class LastDitchEffort extends Skill {
name = 'Last Ditch Effort'
protected stats: Stat[] = [{
type: StatType.GunDamage,
value: 0.08
}]
public getEffectiveness(context: Context): number {
if(!context.effects) return 0
let crippledEffect = context.getEffect(EffectType.Crippled)
return crippledEffect ? 1 : 0
}
}
export class Pressure extends Skill {
name = 'Pressure'
protected stats: Stat[] = [{
type: StatType.ReloadSpeed,
value: 0.14
}]
protected getEffectiveness(context: Context): number {
if(!context.effects) return 0
let crippledEffect = context.getEffect(EffectType.Crippled)
if(crippledEffect) return 1
let healthEffect = context.getEffect(EffectType.Health)
let healthLost = healthEffect ? 1 - healthEffect.multiplier.getValue() : 0
return healthLost
}
}