mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-15 16:34:42 +00:00
csr-level commands for force dome manipulation
This commit is contained in:
parent
73f352490c
commit
ba266d0a3e
2 changed files with 40 additions and 2 deletions
|
|
@ -8,6 +8,7 @@ import net.psforever.actors.session.support.{ChatFunctions, ChatOperations, Sess
|
||||||
import net.psforever.objects.{GlobalDefinitions, PlanetSideGameObject, Session, TurretDeployable}
|
import net.psforever.objects.{GlobalDefinitions, PlanetSideGameObject, Session, TurretDeployable}
|
||||||
import net.psforever.objects.ce.{Deployable, DeployableCategory}
|
import net.psforever.objects.ce.{Deployable, DeployableCategory}
|
||||||
import net.psforever.objects.serverobject.affinity.FactionAffinity
|
import net.psforever.objects.serverobject.affinity.FactionAffinity
|
||||||
|
import net.psforever.objects.serverobject.dome.ForceDomeControl
|
||||||
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
import net.psforever.objects.serverobject.{CommonMessages, PlanetSideServerObject}
|
||||||
import net.psforever.objects.serverobject.hackable.Hackable
|
import net.psforever.objects.serverobject.hackable.Hackable
|
||||||
import net.psforever.objects.serverobject.structures.Building
|
import net.psforever.objects.serverobject.structures.Building
|
||||||
|
|
@ -227,6 +228,7 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext
|
||||||
case "sayspectator" => customCommandSpeakAsSpectator(params, message)
|
case "sayspectator" => customCommandSpeakAsSpectator(params, message)
|
||||||
case "setempire" => customCommandSetEmpire(params)
|
case "setempire" => customCommandSetEmpire(params)
|
||||||
case "weaponlock" => customCommandZoneWeaponUnlock(session, params)
|
case "weaponlock" => customCommandZoneWeaponUnlock(session, params)
|
||||||
|
case "forcedome" => customForceDomeCommand(session, params)
|
||||||
case _ =>
|
case _ =>
|
||||||
// command was not handled
|
// command was not handled
|
||||||
sendResponse(
|
sendResponse(
|
||||||
|
|
@ -509,6 +511,41 @@ class ChatLogic(val ops: ChatOperations, implicit val context: ActorContext) ext
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def customForceDomeCommand(session: Session, contents: Seq[String]): Boolean = {
|
||||||
|
//locate force dome
|
||||||
|
var postUsageMessage: Boolean = false
|
||||||
|
val locatedForceDomesInZone = session.zone.Buildings.values.flatMap(_.ForceDome)
|
||||||
|
if (locatedForceDomesInZone.nonEmpty) {
|
||||||
|
contents
|
||||||
|
.headOption
|
||||||
|
.map(_.toLowerCase())
|
||||||
|
.collect {
|
||||||
|
case "on" | "o" | "" =>
|
||||||
|
locatedForceDomesInZone.foreach(_.Actor ! ForceDomeControl.CustomExpand)
|
||||||
|
case "off" | "of" =>
|
||||||
|
locatedForceDomesInZone.foreach(_.Actor ! ForceDomeControl.CustomCollapse)
|
||||||
|
case "protect" =>
|
||||||
|
locatedForceDomesInZone.foreach(_.Actor ! ForceDomeControl.ApplyProtection)
|
||||||
|
case "normal" =>
|
||||||
|
locatedForceDomesInZone.foreach(_.Actor ! ForceDomeControl.NormalBehavior)
|
||||||
|
case "purge" =>
|
||||||
|
locatedForceDomesInZone.foreach(_.Actor ! ForceDomeControl.Purge)
|
||||||
|
case "help" | "usage" =>
|
||||||
|
postUsageMessage = true
|
||||||
|
case token =>
|
||||||
|
sendResponse(ChatMsg(ChatMessageType.UNK_227, s"unknown command - $token"))
|
||||||
|
postUsageMessage = true
|
||||||
|
}
|
||||||
|
if (postUsageMessage) {
|
||||||
|
sendResponse(ChatMsg(ChatMessageType.UNK_227, "!forcedome [o[n]|of[f]|protect|normal|purge]"))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//no force domes in zone
|
||||||
|
sendResponse(ChatMsg(ChatMessageType.UNK_227, "no capitol force dome(s) detected in zone"))
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
private def customCommandOnOffStateOrNone(stateOpt: Option[String]): Option[Boolean] = {
|
private def customCommandOnOffStateOrNone(stateOpt: Option[String]): Option[Boolean] = {
|
||||||
stateOpt match {
|
stateOpt match {
|
||||||
case None =>
|
case None =>
|
||||||
|
|
|
||||||
|
|
@ -396,8 +396,9 @@ class ForceDomeControl(dome: ForceDomePhysics)
|
||||||
if customState.nonEmpty =>
|
if customState.nonEmpty =>
|
||||||
customState = None
|
customState = None
|
||||||
ForceDomeControl.NormalDomeStateMessage(domeOwnerAsABuilding)
|
ForceDomeControl.NormalDomeStateMessage(domeOwnerAsABuilding)
|
||||||
ForceDomeControl.AlignForceDomeStatusAndUpdate(domeOwnerAsABuilding, dome)
|
if (!blockedByCustomStateOr(ForceDomeControl.AlignForceDomeStatusAndUpdate)) {
|
||||||
ForceDomeControl.ForceDomeKills(dome, perimeterSegments)
|
ForceDomeControl.ForceDomeKills(dome, perimeterSegments)
|
||||||
|
}
|
||||||
|
|
||||||
case ForceDomeControl.ApplyProtection
|
case ForceDomeControl.ApplyProtection
|
||||||
if dome.Energized =>
|
if dome.Energized =>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue