mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-20 02:24:45 +00:00
Turret upgrading
This commit is contained in:
parent
0cb9746cbb
commit
2aa2ffc275
|
|
@ -8,6 +8,7 @@ import net.psforever.actors.session.AvatarActor
|
|||
import net.psforever.actors.zone.ZoneActor
|
||||
import net.psforever.objects.{GlobalDefinitions, PlanetSideGameObject, Player, Vehicle, Vehicles}
|
||||
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.terminals.implant.ImplantTerminalMech
|
||||
import net.psforever.objects.serverobject.turret.{FacilityTurret, WeaponTurret}
|
||||
|
|
@ -147,7 +148,8 @@ class SessionMountHandlers(
|
|||
MountingAction(tplayer, obj, 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")
|
||||
log.info(s"${player.Name} mounts the ${obj.Definition.Name}")
|
||||
sendResponse(PlanetsideAttributeMessage(obj.GUID, attribute_type=0, obj.Health))
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2020 PSForever
|
||||
package net.psforever.objects.serverobject.hackable
|
||||
|
||||
import net.psforever.objects.serverobject.turret.FacilityTurret
|
||||
import net.psforever.objects.{Player, Vehicle}
|
||||
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
||||
import net.psforever.packet.game.{HackMessage, HackState}
|
||||
|
|
@ -13,7 +14,23 @@ import scala.util.{Failure, Success}
|
|||
|
||||
object GenericHackables {
|
||||
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
|
||||
*
|
||||
|
|
@ -91,6 +108,43 @@ object GenericHackables {
|
|||
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.
|
||||
* 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.damage.{Damageable, DamageableWeaponTurret}
|
||||
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.structures.PoweredAmenityControl
|
||||
import net.psforever.objects.serverobject.terminals.capture.CaptureTerminalAwareBehavior
|
||||
|
|
@ -77,10 +78,11 @@ class FacilityTurretControl(turret: FacilityTurret)
|
|||
if turret.Upgrade != upgrade && turret.Definition.WeaponPaths.values
|
||||
.flatMap(_.keySet)
|
||||
.exists(_ == upgrade) =>
|
||||
turret.setMiddleOfUpgrade(true)
|
||||
sender() ! CommonMessages.Progress(
|
||||
1.25f,
|
||||
WeaponTurrets.FinishUpgradingMannedTurret(turret, player, item, upgrade),
|
||||
GenericHackables.HackingTickAction(progressType = 2, player, turret, item.GUID)
|
||||
GenericHackables.TurretUpgradingTickAction(progressType = 2, player, turret, item.GUID)
|
||||
)
|
||||
case _ => ;
|
||||
}
|
||||
|
|
@ -133,7 +135,8 @@ class FacilityTurretControl(turret: FacilityTurret)
|
|||
obj: PlanetSideServerObject with Mountable,
|
||||
seatNumber: Int,
|
||||
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 = {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ trait WeaponTurret
|
|||
def Upgrade: TurretUpgrade.Value = upgradePath
|
||||
|
||||
def Upgrade_=(upgrade: TurretUpgrade.Value): TurretUpgrade.Value = {
|
||||
middleOfUpgrade = true //blocking flag; block early
|
||||
var updated = false
|
||||
//upgrade each weapon as long as that weapon has a valid option for that upgrade
|
||||
Definition match {
|
||||
|
|
@ -64,8 +63,6 @@ trait WeaponTurret
|
|||
}
|
||||
if (updated) {
|
||||
upgradePath = upgrade
|
||||
} else {
|
||||
middleOfUpgrade = false //reset
|
||||
}
|
||||
Upgrade
|
||||
}
|
||||
|
|
@ -79,6 +76,10 @@ trait WeaponTurret
|
|||
|
||||
def isUpgrading: Boolean = middleOfUpgrade
|
||||
|
||||
def setMiddleOfUpgrade(value: Boolean): Unit = {
|
||||
middleOfUpgrade = value
|
||||
}
|
||||
|
||||
def Definition: TurretDefinition
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue