rebase to master, after a while

This commit is contained in:
Fate-JH 2026-05-31 15:08:21 -04:00
parent 4127f28a01
commit df3eb4636e
9 changed files with 70 additions and 87 deletions

View file

@ -7,7 +7,6 @@ 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.serverobject.affinity.FactionAffinity import net.psforever.objects.serverobject.affinity.FactionAffinity
import net.psforever.objects.serverobject.environment.interaction.ResetAllEnvironmentInteractions import net.psforever.objects.serverobject.environment.interaction.ResetAllEnvironmentInteractions
import net.psforever.objects.serverobject.hackable.GenericHackables
import net.psforever.objects.serverobject.mount.Mountable import net.psforever.objects.serverobject.mount.Mountable
import net.psforever.objects.serverobject.structures.WarpGate import net.psforever.objects.serverobject.structures.WarpGate
import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech import net.psforever.objects.serverobject.terminals.implant.ImplantTerminalMech

View file

@ -43,7 +43,6 @@ import net.psforever.packet.PlanetSideGamePacket
import net.psforever.packet.game.{ActionCancelMessage, ActionResultMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestAction, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipRequestAction, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage} import net.psforever.packet.game.{ActionCancelMessage, ActionResultMessage, AvatarFirstTimeEventMessage, AvatarImplantMessage, AvatarJumpMessage, BattleplanMessage, BindPlayerMessage, BugReportMessage, ChangeFireModeMessage, ChangeShortcutBankMessage, CharacterCreateRequestMessage, CharacterRequestAction, CharacterRequestMessage, ChatMsg, CollisionIs, ConnectToWorldRequestMessage, CreateShortcutMessage, DeadState, DeployObjectMessage, DisplayedAwardMessage, DropItemMessage, EmoteMsg, FacilityBenefitShieldChargeRequestMessage, FriendsRequest, GenericAction, GenericActionMessage, GenericCollisionMsg, GenericObjectActionAtPositionMessage, GenericObjectActionMessage, GenericObjectStateMsg, HitHint, InvalidTerrainMessage, LootItemMessage, MoveItemMessage, ObjectDetectedMessage, ObjectHeldMessage, OutfitMembershipRequest, OutfitMembershipRequestAction, OutfitMembershipResponse, OutfitRequest, OutfitRequestAction, PickupItemMessage, PlanetsideAttributeMessage, PlayerStateMessageUpstream, RequestDestroyMessage, TargetingImplantRequest, TerrainCondition, TradeMessage, UnuseItemMessage, UseItemMessage, VoiceHostInfo, VoiceHostRequest, ZipLineMessage}
import net.psforever.services.account.{AccountPersistenceService, RetrieveAccountData} import net.psforever.services.account.{AccountPersistenceService, RetrieveAccountData}
import net.psforever.services.avatar.AvatarAction import net.psforever.services.avatar.AvatarAction
import net.psforever.services.base.CachedEnvelope
import net.psforever.services.base.envelope.MessageEnvelope import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.base.message.PlanetsideAttribute import net.psforever.services.base.message.PlanetsideAttribute
import net.psforever.services.local.support.CaptureFlagManager import net.psforever.services.local.support.CaptureFlagManager

View file

@ -164,7 +164,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
obj.Position = position obj.Position = position
obj.Orientation = angle obj.Orientation = angle
obj.DeploymentState = if (is_crouched || !notMountedState) DriveState.Kneeling else DriveState.Mobile obj.DeploymentState = if (is_crouched || !notMountedState) DriveState.Kneeling else DriveState.Mobile
continent.VehicleEvents ! VehicleServiceMessage( continent.VehicleEvents ! MessageEnvelope(
continent.id, continent.id,
player.GUID, player.GUID,
VehicleAction.FrameVehicleState(vehicle_guid, unk1, position, angle, velocity, unk2, unk3, unk4, is_crouched, is_airborne, ascending_flight, flight_time, unk9, unkA) VehicleAction.FrameVehicleState(vehicle_guid, unk1, position, angle, velocity, unk2, unk3, unk4, is_crouched, is_airborne, ascending_flight, flight_time, unk9, unkA)
@ -217,7 +217,7 @@ class VehicleLogic(val ops: VehicleOperations, implicit val context: ActorContex
val angle = Vector3(0f, pitch, yaw) val angle = Vector3(0f, pitch, yaw)
tool.Orientation = angle tool.Orientation = angle
player.Orientation = angle player.Orientation = angle
continent.VehicleEvents ! VehicleServiceMessage( continent.VehicleEvents ! MessageEnvelope(
continent.id, continent.id,
player.GUID, player.GUID,
VehicleAction.ChildObjectState(object_guid, pitch, yaw) VehicleAction.ChildObjectState(object_guid, pitch, yaw)

View file

@ -17,8 +17,8 @@ import net.psforever.objects.sourcing.PlayerSource
import net.psforever.objects.zones.{Zone, ZoneInfo} import net.psforever.objects.zones.{Zone, ZoneInfo}
import net.psforever.packet.game.TimeOfDayMessage.GetTimeOfDayValue import net.psforever.packet.game.TimeOfDayMessage.GetTimeOfDayValue
import net.psforever.packet.game.{SetChatFilterMessage, TimeOfDayMessage} import net.psforever.packet.game.{SetChatFilterMessage, TimeOfDayMessage}
import net.psforever.services.Service import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.base.message.SendResponse
import net.psforever.services.chat.{DefaultChannel, OutfitChannel, SquadChannel} import net.psforever.services.chat.{DefaultChannel, OutfitChannel, SquadChannel}
import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor} import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor}
import net.psforever.services.teamwork.{SquadResponse, SquadService, SquadServiceResponse} import net.psforever.services.teamwork.{SquadResponse, SquadService, SquadServiceResponse}
@ -1441,10 +1441,7 @@ class ChatOperations(
val msg = TimeOfDayMessage(zone.GetTimeOfDay(), zone.GetTimeOfDaySpeed()) val msg = TimeOfDayMessage(zone.GetTimeOfDay(), zone.GetTimeOfDaySpeed())
// update players in zone // update players in zone
zone.AvatarEvents ! AvatarServiceMessage( zone.AvatarEvents ! MessageEnvelope(zone.id, SendResponse(msg))
zone.id,
AvatarAction.SendResponse(Service.defaultPlayerGUID, msg)
)
sendResponse(ChatMsg(messageType = UNK_227, contents = f"@CMT_SETTIME_OK^$hh~^$mm%02d~")) sendResponse(ChatMsg(messageType = UNK_227, contents = f"@CMT_SETTIME_OK^$hh~^$mm%02d~"))
case _ => case _ =>
@ -1479,10 +1476,7 @@ class ChatOperations(
val msg = TimeOfDayMessage(zone.GetTimeOfDay(), zone.GetTimeOfDaySpeed()) val msg = TimeOfDayMessage(zone.GetTimeOfDay(), zone.GetTimeOfDaySpeed())
// update players in zone // update players in zone
zone.AvatarEvents ! AvatarServiceMessage( zone.AvatarEvents ! MessageEnvelope(zone.id, SendResponse(msg))
zone.id,
AvatarAction.SendResponse(Service.defaultPlayerGUID, msg)
)
sendResponse(ChatMsg(messageType = UNK_227, contents = s"@CMT_SETTIMESPEED_OK^$timeSpeed~")) sendResponse(ChatMsg(messageType = UNK_227, contents = s"@CMT_SETTIMESPEED_OK^$timeSpeed~"))
case _ => case _ =>

View file

@ -6,9 +6,10 @@ import net.psforever.objects.{Default, GlobalDefinitions, Tool, Vehicle}
import net.psforever.objects.avatar.{AvatarBot, AvatarBotActor} import net.psforever.objects.avatar.{AvatarBot, AvatarBotActor}
import net.psforever.objects.guid.{GUIDTask, StraightforwardTask, TaskBundle, TaskWorkflow} import net.psforever.objects.guid.{GUIDTask, StraightforwardTask, TaskBundle, TaskWorkflow}
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.vehicle.{VehicleAction, VehicleServiceMessage} import net.psforever.services.local.LocalAction
import net.psforever.types.{CharacterSex, CharacterVoice, ExoSuitType, PlanetSideEmpire, PlanetSideGUID, Vector3} import net.psforever.services.vehicle.VehicleAction
import net.psforever.types.{CharacterSex, CharacterVoice, ExoSuitType, PlanetSideEmpire, Vector3}
import net.psforever.util.Config import net.psforever.util.Config
import scala.collection.mutable.ListBuffer import scala.collection.mutable.ListBuffer
@ -282,7 +283,6 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
* @param bot the bot to remove * @param bot the bot to remove
*/ */
private def RemoveBot(bot: AvatarBot): Boolean = { private def RemoveBot(bot: AvatarBot): Boolean = {
import net.psforever.services.Service
activeInfantryTargets.indexOf(bot) match { activeInfantryTargets.indexOf(bot) match {
case -1 => case -1 =>
log.warn(s"Failed to remove bot with GUID ${bot.GUID} from ${zone.id}'s active targets list! This shouldn't happen... and probably just caused a leak.") log.warn(s"Failed to remove bot with GUID ${bot.GUID} from ${zone.id}'s active targets list! This shouldn't happen... and probably just caused a leak.")
@ -290,9 +290,9 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
case index => case index =>
activeInfantryTargets.remove(index) activeInfantryTargets.remove(index)
} }
zone.LocalEvents ! LocalServiceMessage( zone.LocalEvents ! MessageEnvelope(
zone.id, zone.id,
LocalAction.TriggerEffectLocation(Service.defaultPlayerGUID, "bot_destroyed_effect", bot.Position, bot.Orientation) LocalAction.TriggerEffectLocation("bot_destroyed_effect", bot.Position, bot.Orientation)
) )
//spawn a replacement bot //spawn a replacement bot
context.system.scheduler.scheduleOnce( context.system.scheduler.scheduleOnce(
@ -356,10 +356,9 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
def action(): Future[Any] = { def action(): Future[Any] = {
zone.Transport ! Zone.Vehicle.Spawn(localVehicle) zone.Transport ! Zone.Vehicle.Spawn(localVehicle)
zone.VehicleEvents ! VehicleServiceMessage( zone.VehicleEvents ! MessageEnvelope(
zone.id, zone.id,
VehicleAction.LoadVehicle( VehicleAction.LoadVehicle(
PlanetSideGUID(0),
localVehicle, localVehicle,
localVehicle.Definition.ObjectId, localVehicle.Definition.ObjectId,
localVehicle.GUID, localVehicle.GUID,

View file

@ -19,8 +19,7 @@ import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse} import net.psforever.services.base.message.{GenericObjectAction, PlanetsideAttribute, SendResponse}
import net.psforever.services.galaxy.GalaxyAction import net.psforever.services.galaxy.GalaxyAction
import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor, HackClearActor, HackClearEnvelope} import net.psforever.services.local.support.{CaptureEnvelope, HackCaptureActor, HackClearActor, HackClearEnvelope}
import net.psforever.services.local.LocalAction import net.psforever.types.PlanetSideEmpire
import net.psforever.types.{PlanetSideEmpire, PlanetSideGeneratorState}
/** /**
* A package class that conveys the important information for handling facility updates. * A package class that conveys the important information for handling facility updates.

View file

@ -4,7 +4,6 @@ package net.psforever.objects.avatar
import akka.actor.{Actor, ActorRef} import akka.actor.{Actor, ActorRef}
import net.psforever.actors.zone.ShootingRangeTargetSpawner import net.psforever.actors.zone.ShootingRangeTargetSpawner
import net.psforever.objects.{GlobalDefinitions, Tool} import net.psforever.objects.{GlobalDefinitions, Tool}
import net.psforever.objects.avatar.AvatarBot
import net.psforever.objects.equipment._ import net.psforever.objects.equipment._
import net.psforever.objects.serverobject.aura.{Aura, AuraEffectBehavior} import net.psforever.objects.serverobject.aura.{Aura, AuraEffectBehavior}
import net.psforever.objects.serverobject.CommonMessages import net.psforever.objects.serverobject.CommonMessages
@ -14,18 +13,17 @@ import net.psforever.objects.vital.resolution.ResolutionCalculations.Output
import net.psforever.objects.zones._ import net.psforever.objects.zones._
import net.psforever.packet.game._ import net.psforever.packet.game._
import net.psforever.types._ import net.psforever.types._
import net.psforever.services.Service import net.psforever.services.avatar.AvatarAction
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
import net.psforever.objects.serverobject.environment.interaction.RespondsToZoneEnvironment import net.psforever.objects.serverobject.environment.interaction.RespondsToZoneEnvironment
import net.psforever.objects.serverobject.repair.Repairable import net.psforever.objects.serverobject.repair.Repairable
import net.psforever.objects.sourcing.PlayerSource import net.psforever.objects.sourcing.PlayerSource
import net.psforever.objects.vital.{HealFromEquipment, RepairFromEquipment} import net.psforever.objects.vital.{HealFromEquipment, RepairFromEquipment}
import net.psforever.objects.vital.etc.SuicideReason import net.psforever.objects.vital.etc.SuicideReason
import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult} import net.psforever.objects.vital.interaction.{DamageInteraction, DamageResult}
import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.base.message.{PlanetsideAttribute, SendResponse}
import java.util.concurrent.{Executors, TimeUnit} import java.util.concurrent.{Executors, TimeUnit}
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._ import scala.concurrent.duration._
import scala.util.Random import scala.util.Random
@ -53,7 +51,7 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
def InteractiveObject: AvatarBot = bot def InteractiveObject: AvatarBot = bot
private[this] val log = org.log4s.getLogger(bot.Name) //private[this] val log = org.log4s.getLogger(bot.Name)
private[this] val damageLog = org.log4s.getLogger(Damageable.LogChannel) private[this] val damageLog = org.log4s.getLogger(Damageable.LogChannel)
private val scheduler = Executors.newScheduledThreadPool(2) private val scheduler = Executors.newScheduledThreadPool(2)
/** suffocating, or regaining breath? */ /** suffocating, or regaining breath? */
@ -107,14 +105,13 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
if (!(bot.isMoving || user.isMoving)) { //only allow stationary heals if (!(bot.isMoving || user.isMoving)) { //only allow stationary heals
val newHealth = bot.Health = originalHealth + 10 val newHealth = bot.Health = originalHealth + 10
val magazine = item.Discharge() val magazine = item.Discharge()
events ! AvatarServiceMessage( events ! MessageEnvelope(
uname, uname,
AvatarAction.SendResponse( SendResponse(
Service.defaultPlayerGUID,
InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong) InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong)
) )
) )
events ! AvatarServiceMessage(zone.id, AvatarAction.PlanetsideAttributeToAll(guid, 0, newHealth)) events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 0, newHealth))
bot.LogActivity( bot.LogActivity(
HealFromEquipment( HealFromEquipment(
PlayerSource(user), PlayerSource(user),
@ -124,10 +121,9 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
) )
} }
//progress bar remains visible for all heal attempts //progress bar remains visible for all heal attempts
events ! AvatarServiceMessage( events ! MessageEnvelope(
uname, uname,
AvatarAction.SendResponse( SendResponse(
Service.defaultPlayerGUID,
RepairMessage(guid, bot.Health * 100 / definition.MaxHealth) RepairMessage(guid, bot.Health * 100 / definition.MaxHealth)
) )
) )
@ -150,14 +146,13 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
val newArmor = bot.Armor = val newArmor = bot.Armor =
originalArmor + Repairable.applyLevelModifier(user, item, RepairToolValue(item)).toInt + definition.RepairMod originalArmor + Repairable.applyLevelModifier(user, item, RepairToolValue(item)).toInt + definition.RepairMod
val magazine = item.Discharge() val magazine = item.Discharge()
events ! AvatarServiceMessage( events ! MessageEnvelope(
uname, uname,
AvatarAction.SendResponse( SendResponse(
Service.defaultPlayerGUID,
InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong) InventoryStateMessage(item.AmmoSlot.Box.GUID, item.GUID, magazine.toLong)
) )
) )
events ! AvatarServiceMessage(zone.id, AvatarAction.PlanetsideAttributeToAll(guid, 4, bot.Armor)) events ! MessageEnvelope(zone.id, PlanetsideAttribute(guid, 4, bot.Armor))
bot.LogActivity( bot.LogActivity(
RepairFromEquipment( RepairFromEquipment(
PlayerSource(user), PlayerSource(user),
@ -167,10 +162,9 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
) )
} }
//progress bar remains visible for all repair attempts //progress bar remains visible for all repair attempts
events ! AvatarServiceMessage( events ! MessageEnvelope(
uname, uname,
AvatarAction SendResponse(RepairMessage(guid, bot.Armor * 100 / bot.MaxArmor))
.SendResponse(Service.defaultPlayerGUID, RepairMessage(guid, bot.Armor * 100 / bot.MaxArmor))
) )
} }
@ -231,9 +225,9 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
//always do armor update //always do armor update
if (damageToArmor > 0) { if (damageToArmor > 0) {
val zone = target.Zone val zone = target.Zone
zone.AvatarEvents ! AvatarServiceMessage( zone.AvatarEvents ! MessageEnvelope(
zone.id, zone.id,
AvatarAction.PlanetsideAttributeToAll(target.GUID, 4, target.Armor) PlanetsideAttribute(target.GUID, 4, target.Armor)
) )
} }
//choose //choose
@ -280,16 +274,13 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
announceConfrontation = true //TODO should we? announceConfrontation = true //TODO should we?
} }
if (damageToHealth > 0) { if (damageToHealth > 0) {
events ! AvatarServiceMessage(zoneId, AvatarAction.PlanetsideAttributeToAll(targetGUID, 0, health)) events ! MessageEnvelope(zoneId, PlanetsideAttribute(targetGUID, 0, health))
announceConfrontation = true announceConfrontation = true
} }
val countableDamage = damageToHealth + damageToArmor val countableDamage = damageToHealth + damageToArmor
if(announceConfrontation) { if(announceConfrontation) {
if (aggravated) { if (aggravated) {
events ! AvatarServiceMessage( events ! MessageEnvelope(zoneId, targetGUID, SendResponse(AggravatedDamageMessage(targetGUID, countableDamage)))
zoneId,
AvatarAction.SendResponse(targetGUID, AggravatedDamageMessage(targetGUID, countableDamage))
)
} else { } else {
//activity on map //activity on map
zone.Activity ! Zone.HotSpot.Activity(cause) zone.Activity ! Zone.HotSpot.Activity(cause)
@ -332,22 +323,22 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
cause.adversarial match { cause.adversarial match {
case Some(a) => case Some(a) =>
damageLog.info(s"${a.defender.Name} was killed by ${a.attacker.Name}") damageLog.info(s"${a.defender.Name} was killed by ${a.attacker.Name}")
events ! AvatarServiceMessage( events ! MessageEnvelope(
zoneChannel, zoneChannel,
AvatarAction.DestroyDisplay(a.attacker, a.defender, a.implement) AvatarAction.DestroyDisplay(a.attacker, a.defender, a.implement)
) )
case _ => case _ =>
damageLog.info(s"${bot.Name} killed ${bot.Sex.pronounObject}self") damageLog.info(s"${bot.Name} killed ${bot.Sex.pronounObject}self")
events ! AvatarServiceMessage(zoneChannel, AvatarAction.DestroyDisplay(cause.interaction.target, cause.interaction.target, 0)) events ! MessageEnvelope(zoneChannel, AvatarAction.DestroyDisplay(cause.interaction.target, cause.interaction.target, 0))
} }
events ! AvatarServiceMessage(nameChannel, AvatarAction.Killed(bot_guid, cause, None)) //align client interface fields with state events ! MessageEnvelope(nameChannel, bot_guid, AvatarAction.Killed(cause, None)) //align client interface fields with state
events ! AvatarServiceMessage(zoneChannel, AvatarAction.PlanetsideAttributeToAll(bot_guid, 0, 0)) //health events ! MessageEnvelope(zoneChannel, PlanetsideAttribute(bot_guid, 0, 0)) //health
val attribute = DamageableEntity.attributionTo(cause, target.Zone, bot_guid) val attribute = DamageableEntity.attributionTo(cause, target.Zone, bot_guid)
events ! AvatarServiceMessage( events ! MessageEnvelope(
nameChannel, nameChannel,
AvatarAction.SendResponse( bot_guid,
bot_guid, SendResponse(
DestroyMessage(bot_guid, attribute, bot_guid, pos) DestroyMessage(bot_guid, attribute, bot_guid, pos)
) //how many players get this message? ) //how many players get this message?
) )
@ -402,13 +393,13 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
private def performEmote(): Unit = { private def performEmote(): Unit = {
val zone = bot.Zone val zone = bot.Zone
zone.blockMap.sector(bot).livePlayerList.collect { t => zone.blockMap.sector(bot).livePlayerList.collect { t =>
zone.LocalEvents ! LocalServiceMessage(t.Name, LocalAction.SendResponse(TriggerBotAction(bot.GUID))) zone.LocalEvents ! MessageEnvelope(t.Name, SendResponse(TriggerBotAction(bot.GUID)))
} }
} }
private def tickLogic(): Unit = { private def tickLogic(): Unit = {
val zone = bot.Zone val zone = bot.Zone
if (!bot.Destroyed && zone.AllPlayers.size > 0) { if (!bot.Destroyed && zone.AllPlayers.nonEmpty) {
bot.zoneInteractions() bot.zoneInteractions()
val rotateRNG = Random.nextDouble() val rotateRNG = Random.nextDouble()
if (canRotate) { if (canRotate) {
@ -424,10 +415,10 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
) )
} }
} }
zone.AvatarEvents ! AvatarServiceMessage( zone.AvatarEvents ! MessageEnvelope(
zone.id, zone.id,
bot.GUID,
AvatarAction.PlayerState( AvatarAction.PlayerState(
bot.GUID,
bot.Position, bot.Position,
bot.Velocity, bot.Velocity,
bot.Orientation.z, bot.Orientation.z,
@ -436,10 +427,10 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
0, 0,
bot.Crouching, bot.Crouching,
bot.Jumping, bot.Jumping,
false, jump_thrust = false,
bot.Cloaked, is_cloaked = bot.Cloaked,
false, spectator = false,
false weaponInHand = false
) )
) )
if (canEmote) { if (canEmote) {
@ -469,9 +460,9 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
override def StartJammeredSound(target: Any, dur: Int): Unit = override def StartJammeredSound(target: Any, dur: Int): Unit =
target match { target match {
case obj: AvatarBot if !jammedSound => case obj: AvatarBot if !jammedSound =>
obj.Zone.AvatarEvents ! AvatarServiceMessage( obj.Zone.AvatarEvents ! MessageEnvelope(
obj.Zone.id, obj.Zone.id,
AvatarAction.PlanetsideAttributeToAll(obj.GUID, 27, 1) PlanetsideAttribute(obj.GUID, 27, 1)
) )
super.StartJammeredSound(obj, 3000) super.StartJammeredSound(obj, 3000)
case _ => ; case _ => ;
@ -502,9 +493,9 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
override def CancelJammeredSound(target: Any): Unit = override def CancelJammeredSound(target: Any): Unit =
target match { target match {
case obj: AvatarBot if jammedSound => case obj: AvatarBot if jammedSound =>
obj.Zone.AvatarEvents ! AvatarServiceMessage( obj.Zone.AvatarEvents ! MessageEnvelope(
obj.Zone.id, obj.Zone.id,
AvatarAction.PlanetsideAttributeToAll(obj.GUID, 27, 0) PlanetsideAttribute(obj.GUID, 27, 0)
) )
super.CancelJammeredSound(obj) super.CancelJammeredSound(obj)
case _ => ; case _ => ;
@ -521,10 +512,9 @@ class AvatarBotActor(bot: AvatarBot, spawnerActor: ActorRef)
} }
def UpdateAuraEffect(target: AuraEffectBehavior.Target) : Unit = { def UpdateAuraEffect(target: AuraEffectBehavior.Target) : Unit = {
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
val zone = target.Zone val zone = target.Zone
val value = target.Aura.foldLeft(0)(_ + AvatarBotActor.auraEffectToAttributeValue(_)) val value = target.Aura.foldLeft(0)(_ + AvatarBotActor.auraEffectToAttributeValue(_))
zone.AvatarEvents ! AvatarServiceMessage(zone.id, AvatarAction.PlanetsideAttributeToAll(target.GUID, 54, value)) zone.AvatarEvents ! MessageEnvelope(zone.id, PlanetsideAttribute(target.GUID, 54, value))
} }
} }

View file

@ -14,8 +14,9 @@ import net.psforever.objects.vital.interaction.DamageInteraction
import net.psforever.objects.vital.prop.DamageWithPosition import net.psforever.objects.vital.prop.DamageWithPosition
import net.psforever.objects.zones.Zone import net.psforever.objects.zones.Zone
import net.psforever.packet.game.ChatMsg import net.psforever.packet.game.ChatMsg
import net.psforever.services.Service import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.local.{LocalAction, LocalServiceMessage} import net.psforever.services.base.message.SendResponse
import net.psforever.services.local.LocalAction
import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGeneratorState, Vector3} import net.psforever.types.{ChatMessageType, PlanetSideEmpire, PlanetSideGeneratorState, Vector3}
import scala.annotation.unused import scala.annotation.unused
@ -45,9 +46,9 @@ object ForceDomeControl {
val owner = dome.Owner val owner = dome.Owner
val zone = owner.Zone val zone = owner.Zone
owner.Actor ! BuildingActor.AmenityStateChange(dome) owner.Actor ! BuildingActor.AmenityStateChange(dome)
zone.LocalEvents ! LocalServiceMessage( zone.LocalEvents ! MessageEnvelope(
zone.id, zone.id,
LocalAction.UpdateForceDomeStatus(Service.defaultPlayerGUID, owner.GUID, activationState) LocalAction.UpdateForceDomeStatus(owner.GUID, activationState)
) )
} }
@ -124,11 +125,11 @@ object ForceDomeControl {
state: Boolean state: Boolean
): Unit = { ): Unit = {
val zone = building.Zone val zone = building.Zone
val message = LocalAction.SendResponse(ChatMsg( val message = SendResponse(ChatMsg(
ChatMessageType.UNK_229, ChatMessageType.UNK_229,
s"The Capitol force dome at ${building.Name} will remain ${if (state) "activated" else "deactivated"}." s"The Capitol force dome at ${building.Name} will remain ${if (state) "activated" else "deactivated"}."
)) ))
zone.LocalEvents ! LocalServiceMessage(zone.id, message) zone.LocalEvents ! MessageEnvelope(zone.id, message)
} }
/** /**
@ -138,12 +139,12 @@ object ForceDomeControl {
*/ */
def NormalDomeStateMessage(building: Building): Unit = { def NormalDomeStateMessage(building: Building): Unit = {
val events = building.Zone.LocalEvents val events = building.Zone.LocalEvents
val message = LocalAction.SendResponse(ChatMsg( val message = SendResponse(ChatMsg(
ChatMessageType.UNK_227, ChatMessageType.UNK_227,
"Expected capitol force dome state change will resume." "Expected capitol force dome state change will resume."
)) ))
building.PlayersInSOI.foreach { player => building.PlayersInSOI.foreach { player =>
events ! LocalServiceMessage(player.Name, message) events ! MessageEnvelope(player.Name, message)
} }
} }

View file

@ -7,7 +7,9 @@ import net.psforever.objects.avatar.{AvatarBot, CorpseControl, PlayerControl}
import net.psforever.objects.sourcing.PlayerSource import net.psforever.objects.sourcing.PlayerSource
import net.psforever.objects.vital.{InGameHistory, SpawningActivity} import net.psforever.objects.vital.{InGameHistory, SpawningActivity}
import net.psforever.objects.{Default, Player} import net.psforever.objects.{Default, Player}
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage} import net.psforever.services.avatar.AvatarAction
import net.psforever.services.base.envelope.MessageEnvelope
import net.psforever.services.base.message.ObjectDelete
import net.psforever.types.Vector3 import net.psforever.types.Vector3
import scala.collection.concurrent.TrieMap import scala.collection.concurrent.TrieMap
@ -88,9 +90,9 @@ class ZonePopulationActor(zone: Zone, playerMap: TrieMap[Int, Option[Player]], b
if (BotSpawn(bot, botList)) { if (BotSpawn(bot, botList)) {
bot.Zone = zone bot.Zone = zone
zone.actor ! ZoneActor.AddToBlockMap(bot, bot.Position) zone.actor ! ZoneActor.AddToBlockMap(bot, bot.Position)
zone.AvatarEvents ! AvatarServiceMessage( zone.AvatarEvents ! MessageEnvelope(
zone.id, zone.id, bot.GUID,
AvatarAction.LoadPlayer(bot.GUID, bot.Definition.ObjectId, bot.GUID, bot.Definition.Packet.ConstructorData(bot).get, None) AvatarAction.LoadPlayer(bot.Definition.ObjectId, bot.GUID, bot.Definition.Packet.ConstructorData(bot).get, None)
) )
} }
@ -99,9 +101,9 @@ class ZonePopulationActor(zone: Zone, playerMap: TrieMap[Int, Option[Player]], b
if (bot.Actor != null) bot.Actor ! akka.actor.PoisonPill if (bot.Actor != null) bot.Actor ! akka.actor.PoisonPill
bot.Actor = Default.Actor bot.Actor = Default.Actor
zone.actor ! ZoneActor.RemoveFromBlockMap(bot) zone.actor ! ZoneActor.RemoveFromBlockMap(bot)
zone.AvatarEvents ! AvatarServiceMessage( zone.AvatarEvents ! MessageEnvelope(
zone.id, zone.id, bot.GUID,
AvatarAction.ObjectDelete(bot.GUID, bot.GUID, unk=0) ObjectDelete(bot.GUID, unk=0)
) )
} }