Merge pull request #1141 from ScrawnyRonnie/no_charge_cargo

A few more fix attempts
This commit is contained in:
Fate-JH 2023-11-21 03:22:26 -05:00 committed by GitHub
commit 60989f488a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 69 additions and 7 deletions

View file

@ -969,11 +969,13 @@ class SessionData(
continent
.GUID(vehicleGuid)
.foreach {
case obj: Vehicle if !obj.Destroyed => //vehicle will try to charge even if destroyed
case obj: Vehicle if !obj.Destroyed && obj.MountedIn.isEmpty => // vehicle will try to charge even if destroyed & cargo vehicles need to be excluded
obj.Actor ! CommonMessages.ChargeShields(
15,
Some(continent.blockMap.sector(obj).buildingList.maxBy(_.Definition.SOIRadius))
)
case obj: Vehicle if obj.MountedIn.nonEmpty =>
false
case _ if vehicleGuid.nonEmpty =>
log.warn(
s"FacilityBenefitShieldChargeRequest: ${player.Name} can not find vehicle ${vehicleGuid.get.guid} in zone ${continent.id}"

View file

@ -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))

View file

@ -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.

View file

@ -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 = {

View file

@ -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
}