mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-19 18:44:45 +00:00
support for melee booster implant
This commit is contained in:
parent
76f283c617
commit
7f731f37d5
|
|
@ -864,8 +864,11 @@ class AvatarActor(
|
|||
Behaviors.same
|
||||
|
||||
case ConsumeStamina(stamina) =>
|
||||
assert(stamina > 0, s"consumed stamina must be larger than 0, but is: $stamina")
|
||||
consumeStamina(stamina)
|
||||
if (stamina > 0) {
|
||||
consumeStamina(stamina)
|
||||
} else {
|
||||
log.warn(s"consumed stamina must be larger than 0, but is: $stamina")
|
||||
}
|
||||
Behaviors.same
|
||||
|
||||
case SuspendStaminaRegeneration(duration) =>
|
||||
|
|
|
|||
|
|
@ -7710,19 +7710,32 @@ class SessionActor(middlewareActor: typed.ActorRef[MiddlewareActor.Command], con
|
|||
None
|
||||
} else {
|
||||
projectile.Resolve()
|
||||
val outProjectile = if (projectile.profile.ProjectileDamageTypes.contains(DamageType.Aggravated)) {
|
||||
val quality = projectile.profile.Aggravated match {
|
||||
case Some(aggravation)
|
||||
if aggravation.targets.exists(validation => validation.test(target)) &&
|
||||
aggravation.info.exists(_.damage_type == AggravatedDamage.basicDamageType(resolution)) =>
|
||||
ProjectileQuality.AggravatesTarget
|
||||
case _ =>
|
||||
ProjectileQuality.Normal
|
||||
val outProjectile =
|
||||
if (projectile.profile.ProjectileDamageTypes.contains(DamageType.Aggravated)) {
|
||||
//aggravated
|
||||
val quality = projectile.profile.Aggravated match {
|
||||
case Some(aggravation)
|
||||
if aggravation.targets.exists(validation => validation.test(target)) &&
|
||||
aggravation.info.exists(_.damage_type == AggravatedDamage.basicDamageType(resolution)) =>
|
||||
ProjectileQuality.AggravatesTarget
|
||||
case _ =>
|
||||
ProjectileQuality.Normal
|
||||
}
|
||||
projectile.quality(quality)
|
||||
} else if (projectile.tool_def.Size == EquipmentSize.Melee) {
|
||||
//melee
|
||||
val quality = player.avatar.implants.flatten.find { entry => entry.definition == GlobalDefinitions.melee_booster } match {
|
||||
case Some(booster) if booster.active && player.avatar.stamina > 9 =>
|
||||
avatarActor ! AvatarActor.ConsumeStamina(10)
|
||||
ProjectileQuality.Modified(25f)
|
||||
case _ =>
|
||||
ProjectileQuality.Normal
|
||||
}
|
||||
projectile.quality(quality)
|
||||
} else {
|
||||
//normal
|
||||
projectile
|
||||
}
|
||||
projectile.quality(quality)
|
||||
} else {
|
||||
projectile
|
||||
}
|
||||
Some(DamageInteraction(SourceEntry(target), ProjectileReason(resolution, outProjectile, target.DamageModel), pos))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2415,7 +2415,7 @@ object GlobalDefinitions {
|
|||
chainblade_projectile.InitialVelocity = 100
|
||||
chainblade_projectile.Lifespan = .02f
|
||||
ProjectileDefinition.CalculateDerivedFields(chainblade_projectile)
|
||||
chainblade_projectile.Modifiers = MaxDistanceCutoff
|
||||
chainblade_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff)
|
||||
|
||||
colossus_100mm_projectile.Name = "colossus_100mm_projectile"
|
||||
colossus_100mm_projectile.Damage0 = 58
|
||||
|
|
@ -2766,7 +2766,7 @@ object GlobalDefinitions {
|
|||
forceblade_projectile.InitialVelocity = 100
|
||||
forceblade_projectile.Lifespan = .02f
|
||||
ProjectileDefinition.CalculateDerivedFields(forceblade_projectile)
|
||||
forceblade_projectile.Modifiers = MaxDistanceCutoff
|
||||
forceblade_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff)
|
||||
|
||||
frag_cartridge_projectile.Name = "frag_cartridge_projectile"
|
||||
// TODO for later, maybe : set_resource_parent frag_cartridge_projectile game_objects frag_grenade_projectile
|
||||
|
|
@ -3243,7 +3243,7 @@ object GlobalDefinitions {
|
|||
magcutter_projectile.InitialVelocity = 100
|
||||
magcutter_projectile.Lifespan = .02f
|
||||
ProjectileDefinition.CalculateDerivedFields(magcutter_projectile)
|
||||
magcutter_projectile.Modifiers = MaxDistanceCutoff
|
||||
magcutter_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff)
|
||||
|
||||
melee_ammo_projectile.Name = "melee_ammo_projectile"
|
||||
melee_ammo_projectile.Damage0 = 25
|
||||
|
|
@ -3252,7 +3252,7 @@ object GlobalDefinitions {
|
|||
melee_ammo_projectile.InitialVelocity = 100
|
||||
melee_ammo_projectile.Lifespan = .02f
|
||||
ProjectileDefinition.CalculateDerivedFields(melee_ammo_projectile)
|
||||
melee_ammo_projectile.Modifiers = MaxDistanceCutoff
|
||||
melee_ammo_projectile.Modifiers = List(MeleeBoosted, MaxDistanceCutoff)
|
||||
|
||||
meteor_common.Name = "meteor_common"
|
||||
meteor_common.DamageAtEdge = .1f
|
||||
|
|
|
|||
|
|
@ -293,6 +293,19 @@ case object FlakBurst extends ProjectileDamageModifiers.Mod {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If the damage is resolved by way of a melee weapon,
|
||||
* the damage might be increased if the attack was initiated
|
||||
* while the attacker was under the effect of an active Melee Boost implant.
|
||||
* @see `GlobalDefinitions.melee_booster`
|
||||
* @see `ProjectileQuality`
|
||||
*/
|
||||
case object MeleeBoosted extends ProjectileDamageModifiers.Mod {
|
||||
override def calculate(damage: Int, data: DamageInteraction, cause: ProjectileReason): Int = {
|
||||
cause.projectile.quality.mod.toInt + damage
|
||||
}
|
||||
}
|
||||
|
||||
/* Functions */
|
||||
object ProjectileDamageModifierFunctions {
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue