mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-03-03 12:10:22 +00:00
Turret Fix (#267)
* created a transitional period within facility turret upgrades structured around a completion boolean; the turret upgrader responds properly to this boolean and also possesses a new task flow for GUID registration; facility turrets now have variable weapon rendering, a custom mounting function, and a back door in case they get stuck upgrading * moving the code to reset the turret upgrade process from the case for RequestDestory to ChatMsg, alongside the vehicle terminal reset
This commit is contained in:
parent
d7a950a16f
commit
242cc4f7c2
3 changed files with 94 additions and 45 deletions
|
|
@ -11,6 +11,7 @@ class FacilityTurret(tDef : TurretDefinition) extends Amenity
|
|||
with StandardResistanceProfile {
|
||||
/** some turrets can be updated; they all start without updates */
|
||||
private var upgradePath : TurretUpgrade.Value = TurretUpgrade.None
|
||||
private var middleOfUpgrade : Boolean = false
|
||||
|
||||
WeaponTurret.LoadDefinition(this)
|
||||
|
||||
|
|
@ -23,16 +24,33 @@ class FacilityTurret(tDef : TurretDefinition) extends Amenity
|
|||
def Upgrade : TurretUpgrade.Value = upgradePath
|
||||
|
||||
def Upgrade_=(upgrade : TurretUpgrade.Value) : TurretUpgrade.Value = {
|
||||
upgradePath = upgrade
|
||||
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.Weapons.foreach({ case(index, upgradePaths) =>
|
||||
if(upgradePaths.contains(upgrade)) {
|
||||
updated = true
|
||||
weapons(index).Equipment.get.asInstanceOf[TurretWeapon].Upgrade = upgrade
|
||||
}
|
||||
})
|
||||
if(updated) {
|
||||
upgradePath = upgrade
|
||||
}
|
||||
else {
|
||||
middleOfUpgrade = false //reset
|
||||
}
|
||||
Upgrade
|
||||
}
|
||||
|
||||
def ConfirmUpgrade(upgrade : TurretUpgrade.Value) : TurretUpgrade.Value = {
|
||||
if(middleOfUpgrade && upgradePath == upgrade) {
|
||||
middleOfUpgrade = false
|
||||
}
|
||||
upgradePath
|
||||
}
|
||||
|
||||
def isUpgrading : Boolean = middleOfUpgrade
|
||||
|
||||
def DamageModel = Definition.asInstanceOf[DamageResistanceModel]
|
||||
|
||||
def Definition : TurretDefinition = tDef
|
||||
|
|
|
|||
|
|
@ -176,11 +176,13 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] {
|
|||
})
|
||||
info(s"Converting manned wall turret weapon to $upgrade")
|
||||
|
||||
val oldBoxesTask = AllMountedWeaponMagazines(target)
|
||||
.map(box => GUIDTask.UnregisterEquipment(box)(guid))
|
||||
.toList
|
||||
val oldBoxes = AllMountedWeaponMagazines(target)
|
||||
target.Upgrade = upgrade //perform upgrade
|
||||
val newBoxes = AllMountedWeaponMagazines(target)
|
||||
|
||||
val oldBoxesTask = oldBoxes
|
||||
.filterNot { box => newBoxes.exists(_ eq box) }
|
||||
.map(box => GUIDTask.UnregisterEquipment(box)(guid)).toList
|
||||
val newBoxesTask = TaskResolver.GiveTask(
|
||||
new Task() {
|
||||
private val localFunc : ()=>Unit = FinishUpgradingTurret(entry)
|
||||
|
|
@ -188,17 +190,27 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] {
|
|||
override def isComplete = Task.Resolution.Success
|
||||
|
||||
def Execute(resolver : ActorRef) : Unit = {
|
||||
localFunc()
|
||||
resolver ! scala.util.Success(this)
|
||||
}
|
||||
}, AllMountedWeaponMagazines(target).map(box => GUIDTask.RegisterEquipment(box)(guid)).toList
|
||||
|
||||
override def onSuccess() : Unit = {
|
||||
super.onSuccess()
|
||||
localFunc()
|
||||
}
|
||||
},
|
||||
newBoxes
|
||||
.filterNot { box => oldBoxes.exists(_ eq box) }
|
||||
.map(box => GUIDTask.RegisterEquipment(box)(guid)).toList
|
||||
)
|
||||
taskResolver ! TaskResolver.GiveTask(
|
||||
new Task() {
|
||||
private val tasks = oldBoxesTask
|
||||
|
||||
def Execute(resolver : ActorRef) : Unit = {
|
||||
tasks.foreach { resolver ! _ }
|
||||
resolver ! scala.util.Success(this)
|
||||
}
|
||||
}, oldBoxesTask :+ newBoxesTask
|
||||
}, List(newBoxesTask)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -225,15 +237,18 @@ class TurretUpgrader extends SupportActor[TurretUpgrader.Entry] {
|
|||
val target = entry.obj.asInstanceOf[FacilityTurret]
|
||||
val zone = entry.zone
|
||||
info(s"Wall turret finished ${target.Upgrade} upgrade")
|
||||
target.ConfirmUpgrade(entry.upgrade)
|
||||
val targetGUID = target.GUID
|
||||
target.Weapons
|
||||
.map({ case (index, slot) => (index, slot.Equipment) })
|
||||
.collect { case (index, Some(tool : Tool)) =>
|
||||
context.parent ! VehicleServiceMessage(
|
||||
zone.Id,
|
||||
VehicleAction.EquipmentInSlot(PlanetSideGUID(0), targetGUID, index, tool)
|
||||
)
|
||||
}
|
||||
if(target.Health > 0) {
|
||||
target.Weapons
|
||||
.map({ case (index, slot) => (index, slot.Equipment) })
|
||||
.collect { case (index, Some(tool : Tool)) =>
|
||||
context.parent ! VehicleServiceMessage(
|
||||
zone.Id,
|
||||
VehicleAction.EquipmentInSlot(PlanetSideGUID(0), targetGUID, index, tool)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue