mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-04-29 15:55:23 +00:00
Turret upgrading
This commit is contained in:
parent
0cb9746cbb
commit
2aa2ffc275
4 changed files with 66 additions and 6 deletions
|
|
@ -8,6 +8,7 @@ import net.psforever.actors.session.AvatarActor
|
||||||
import net.psforever.actors.zone.ZoneActor
|
import net.psforever.actors.zone.ZoneActor
|
||||||
import net.psforever.objects.{GlobalDefinitions, PlanetSideGameObject, Player, Vehicle, Vehicles}
|
import net.psforever.objects.{GlobalDefinitions, PlanetSideGameObject, Player, Vehicle, Vehicles}
|
||||||
import net.psforever.objects.definition.{BasicDefinition, ObjectDefinition}
|
import net.psforever.objects.definition.{BasicDefinition, ObjectDefinition}
|
||||||
|
import net.psforever.objects.serverobject.hackable.GenericHackables.getTurretUpgradeTime
|
||||||
import net.psforever.objects.serverobject.mount.Mountable
|
import net.psforever.objects.serverobject.mount.Mountable
|
||||||
import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech
|
import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech
|
||||||
import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret}
|
import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret}
|
||||||
|
|
@ -147,7 +148,8 @@ class SessionMountHandlers(
|
||||||
MountingAction(tplayer, obj, seatNumber)
|
MountingAction(tplayer, obj, seatNumber)
|
||||||
|
|
||||||
case Mountable.CanMount(obj: FacilityTurret, seatNumber, _)
|
case Mountable.CanMount(obj: FacilityTurret, seatNumber, _)
|
||||||
if !obj.isUpgrading =>
|
if !obj.isUpgrading || System.currentTimeMillis() - getTurretUpgradeTime >= 1500L =>
|
||||||
|
obj.setMiddleOfUpgrade(false)
|
||||||
sessionData.zoning.CancelZoningProcessWithDescriptiveReason("cancel_mount")
|
sessionData.zoning.CancelZoningProcessWithDescriptiveReason("cancel_mount")
|
||||||
log.info(s"${player.Name} mounts the ${obj.Definition.Name}")
|
log.info(s"${player.Name} mounts the ${obj.Definition.Name}")
|
||||||
sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health))
|
sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health))
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) 2020 PSForever
|
// Copyright (c) 2020 PSForever
|
||||||
package net.psforever.objects.serverobject.hackable
|
package net.psforever.objects.serverobject.hackable
|
||||||
|
|
||||||
|
import net.psforever.objects.serverobject.turret.FacilityTurret
|
||||||
import net.psforever.objects.{Player, Vehicle}
|
import net.psforever.objects.{Player, Vehicle}
|
||||||
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
||||||
import net.psforever.packet.game.{HackMessage, HackState}
|
import net.psforever.packet.game.{HackMessage, HackState}
|
||||||
|
|
@ -13,7 +14,23 @@ import scala.util.{Failure, Success}
|
||||||
|
|
||||||
object GenericHackables {
|
object GenericHackables {
|
||||||
private val log = org.log4s.getLogger("HackableBehavior")
|
private val log = org.log4s.getLogger("HackableBehavior")
|
||||||
|
private var turretUpgradeTime: Long = System.currentTimeMillis()
|
||||||
|
private var turretUpgradeTimeSet: Boolean = false
|
||||||
|
|
||||||
|
def updateTurretUpgradeTime(): Long = {
|
||||||
|
turretUpgradeTime = System.currentTimeMillis()
|
||||||
|
turretUpgradeTimeSet = true
|
||||||
|
turretUpgradeTime
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used for checking the time without updating it
|
||||||
|
def getTurretUpgradeTime: Long = {
|
||||||
|
if (!turretUpgradeTimeSet) {
|
||||||
|
turretUpgradeTime = System.currentTimeMillis()
|
||||||
|
turretUpgradeTimeSet = true
|
||||||
|
}
|
||||||
|
turretUpgradeTime
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* na
|
* na
|
||||||
*
|
*
|
||||||
|
|
@ -91,6 +108,43 @@ object GenericHackables {
|
||||||
vis != HackState.Cancelled
|
vis != HackState.Cancelled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Evaluate the progress of the user applying a tool to upgrade a facility turret.
|
||||||
|
* This action is using the nano dispenser and requires separate handling from REK hacking.
|
||||||
|
* Largely a copy/paste of the above, but some of it was removed as it doesn't work/apply with upgrading a turret.
|
||||||
|
* @see `HackMessage`
|
||||||
|
* @see `HackState`
|
||||||
|
* @param progressType 1 - remote electronics kit hack (various ...);
|
||||||
|
* 2 - nano dispenser (upgrade canister) turret upgrade
|
||||||
|
* @param tplayer the player performing the action
|
||||||
|
* @param turret the object being affected
|
||||||
|
* @param tool_guid the tool being used to affest the object
|
||||||
|
* @param progress the current progress value
|
||||||
|
* @return `true`, if the next cycle of progress should occur;
|
||||||
|
* `false`, otherwise
|
||||||
|
*/
|
||||||
|
def TurretUpgradingTickAction(progressType: Int, tplayer: Player, turret: FacilityTurret, tool_guid: PlanetSideGUID)(
|
||||||
|
progress: Float
|
||||||
|
): Boolean = {
|
||||||
|
//hack state for progress bar visibility
|
||||||
|
val vis = if (progress <= 0L) {
|
||||||
|
HackState.Start
|
||||||
|
} else if (progress >= 100L) {
|
||||||
|
HackState.Finished
|
||||||
|
} else {
|
||||||
|
updateTurretUpgradeTime()
|
||||||
|
HackState.Ongoing
|
||||||
|
}
|
||||||
|
turret.Zone.AvatarEvents ! AvatarServiceMessage(
|
||||||
|
tplayer.Name,
|
||||||
|
AvatarAction.SendResponse(
|
||||||
|
Service.defaultPlayerGUID,
|
||||||
|
HackMessage(progressType, turret.GUID, tplayer.GUID, progress.toInt, 0L, vis, 8L)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
vis != HackState.Cancelled
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The process of hacking an object is completed.
|
* The process of hacking an object is completed.
|
||||||
* Pass the message onto the hackable object and onto the local events system.
|
* Pass the message onto the hackable object and onto the local events system.
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import net.psforever.objects.serverobject.mount.{Mountable, MountableBehavior}
|
||||||
import net.psforever.objects.serverobject.affinity.FactionAffinityBehavior
|
import net.psforever.objects.serverobject.affinity.FactionAffinityBehavior
|
||||||
import net.psforever.objects.serverobject.damage.{Damageable, DamageableWeaponTurret}
|
import net.psforever.objects.serverobject.damage.{Damageable, DamageableWeaponTurret}
|
||||||
import net.psforever.objects.serverobject.hackable.GenericHackables
|
import net.psforever.objects.serverobject.hackable.GenericHackables
|
||||||
|
import net.psforever.objects.serverobject.hackable.GenericHackables.getTurretUpgradeTime
|
||||||
import net.psforever.objects.serverobject.repair.{AmenityAutoRepair, RepairableWeaponTurret}
|
import net.psforever.objects.serverobject.repair.{AmenityAutoRepair, RepairableWeaponTurret}
|
||||||
import net.psforever.objects.serverobject.structures.PoweredAmenityControl
|
import net.psforever.objects.serverobject.structures.PoweredAmenityControl
|
||||||
import net.psforever.objects.serverobject.terminals.capture.CaptureTerminalAwareBehavior
|
import net.psforever.objects.serverobject.terminals.capture.CaptureTerminalAwareBehavior
|
||||||
|
|
@ -77,10 +78,11 @@ class FacilityTurretControl(turret: FacilityTurret)
|
||||||
if turret.Upgrade != upgrade && turret.Definition.WeaponPaths.values
|
if turret.Upgrade != upgrade && turret.Definition.WeaponPaths.values
|
||||||
.flatMap(_.keySet)
|
.flatMap(_.keySet)
|
||||||
.exists(_ == upgrade) =>
|
.exists(_ == upgrade) =>
|
||||||
|
turret.setMiddleOfUpgrade(true)
|
||||||
sender() ! CommonMessages.Progress(
|
sender() ! CommonMessages.Progress(
|
||||||
1.25f,
|
1.25f,
|
||||||
WeaponTurrets.FinishUpgradingMannedTurret(turret, player, item, upgrade),
|
WeaponTurrets.FinishUpgradingMannedTurret(turret, player, item, upgrade),
|
||||||
GenericHackables.HackingTickAction(progressType = 2, player, turret, item.GUID)
|
GenericHackables.TurretUpgradingTickAction(progressType = 2, player, turret, item.GUID)
|
||||||
)
|
)
|
||||||
case _ => ;
|
case _ => ;
|
||||||
}
|
}
|
||||||
|
|
@ -133,7 +135,8 @@ class FacilityTurretControl(turret: FacilityTurret)
|
||||||
obj: PlanetSideServerObject with Mountable,
|
obj: PlanetSideServerObject with Mountable,
|
||||||
seatNumber: Int,
|
seatNumber: Int,
|
||||||
player: Player): Boolean = {
|
player: Player): Boolean = {
|
||||||
(!turret.Definition.FactionLocked || player.Faction == obj.Faction) && !obj.Destroyed
|
(!turret.Definition.FactionLocked || player.Faction == obj.Faction) && !obj.Destroyed && !turret.isUpgrading ||
|
||||||
|
System.currentTimeMillis() - getTurretUpgradeTime >= 1500L
|
||||||
}
|
}
|
||||||
|
|
||||||
override protected def DamageAwareness(target: Damageable.Target, cause: DamageResult, amount: Any) : Unit = {
|
override protected def DamageAwareness(target: Damageable.Target, cause: DamageResult, amount: Any) : Unit = {
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,6 @@ trait WeaponTurret
|
||||||
def Upgrade: TurretUpgrade.Value = upgradePath
|
def Upgrade: TurretUpgrade.Value = upgradePath
|
||||||
|
|
||||||
def Upgrade_=(upgrade: TurretUpgrade.Value): TurretUpgrade.Value = {
|
def Upgrade_=(upgrade: TurretUpgrade.Value): TurretUpgrade.Value = {
|
||||||
middleOfUpgrade = true //blocking flag; block early
|
|
||||||
var updated = false
|
var updated = false
|
||||||
//upgrade each weapon as long as that weapon has a valid option for that upgrade
|
//upgrade each weapon as long as that weapon has a valid option for that upgrade
|
||||||
Definition match {
|
Definition match {
|
||||||
|
|
@ -64,8 +63,6 @@ trait WeaponTurret
|
||||||
}
|
}
|
||||||
if (updated) {
|
if (updated) {
|
||||||
upgradePath = upgrade
|
upgradePath = upgrade
|
||||||
} else {
|
|
||||||
middleOfUpgrade = false //reset
|
|
||||||
}
|
}
|
||||||
Upgrade
|
Upgrade
|
||||||
}
|
}
|
||||||
|
|
@ -79,6 +76,10 @@ trait WeaponTurret
|
||||||
|
|
||||||
def isUpgrading: Boolean = middleOfUpgrade
|
def isUpgrading: Boolean = middleOfUpgrade
|
||||||
|
|
||||||
|
def setMiddleOfUpgrade(value: Boolean): Unit = {
|
||||||
|
middleOfUpgrade = value
|
||||||
|
}
|
||||||
|
|
||||||
def Definition: TurretDefinition
|
def Definition: TurretDefinition
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue