mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-01-20 02:54:46 +00:00
command detonater is no longer allowed; spectators now hold a laze pointer
This commit is contained in:
parent
e748f45c2f
commit
fedcb1caf9
|
|
@ -23,7 +23,7 @@ add_property boomer_trigger equiptime 500
|
|||
add_property chainblade equiptime 250
|
||||
add_property chainblade holstertime 250
|
||||
add_property colossus_flight requirement_award0 false
|
||||
add_property command_detonater allowed true
|
||||
add_property command_detonater allowed false
|
||||
add_property command_detonater equiptime 500
|
||||
add_property command_detonater holstertime 500
|
||||
add_property cycler equiptime 600
|
||||
|
|
|
|||
|
|
@ -10,10 +10,8 @@ import net.psforever.actors.zone.ZoneActor
|
|||
import net.psforever.objects.Session
|
||||
import net.psforever.objects.avatar.ModePermissions
|
||||
import net.psforever.objects.avatar.scoring.{Assist, Death, EquipmentStat, KDAStat, Kill, Life, ScoreCard, SupportActivity}
|
||||
import net.psforever.objects.serverobject.affinity.FactionAffinity
|
||||
import net.psforever.objects.sourcing.{TurretSource, VehicleSource}
|
||||
import net.psforever.objects.vital.{InGameHistory, ReconstructionActivity}
|
||||
import net.psforever.objects.vehicles.MountedWeapons
|
||||
import net.psforever.objects.vital.ReconstructionActivity
|
||||
import net.psforever.types.{ChatMessageType, StatisticalCategory, StatisticalElement}
|
||||
import org.joda.time.{LocalDateTime, Seconds}
|
||||
|
||||
|
|
@ -44,7 +42,6 @@ import net.psforever.objects.inventory.{Container, InventoryItem}
|
|||
import net.psforever.objects.loadouts.{InfantryLoadout, Loadout, VehicleLoadout}
|
||||
import net.psforever.objects.locker.LockerContainer
|
||||
import net.psforever.objects.sourcing.{PlayerSource,SourceWithHealthEntry}
|
||||
import net.psforever.objects.vital.projectile.ProjectileReason
|
||||
import net.psforever.objects.vital.{DamagingActivity, HealFromImplant, HealingActivity, SpawningActivity}
|
||||
import net.psforever.packet.game.objectcreate.{BasicCharacterData, ObjectClass, RibbonBars}
|
||||
import net.psforever.packet.game.{Friend => GameFriend, _}
|
||||
|
|
@ -3205,16 +3202,7 @@ class AvatarActor(
|
|||
val zone = _session.zone
|
||||
val player = _session.player
|
||||
val playerSource = PlayerSource(player)
|
||||
val historyTranscript = {
|
||||
(killStat.info.interaction.cause match {
|
||||
case pr: ProjectileReason => pr.projectile.mounted_in.flatMap { a => zone.GUID(a._1) } //what fired the projectile
|
||||
case _ => None
|
||||
}).collect {
|
||||
case mount: PlanetSideGameObject with FactionAffinity with InGameHistory with MountedWeapons =>
|
||||
player.ContributionFrom(mount)
|
||||
}
|
||||
player.HistoryAndContributions()
|
||||
}
|
||||
val historyTranscript = Players.produceContributionTranscriptFromKill(zone, player, killStat)
|
||||
val target = killStat.info.targetAfter.asInstanceOf[PlayerSource]
|
||||
val targetMounted = target.seatedIn
|
||||
.collect {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,10 @@ package net.psforever.actors.session.spectator
|
|||
|
||||
import akka.actor.{ActorContext, typed}
|
||||
import net.psforever.actors.session.support.AvatarHandlerFunctions
|
||||
import net.psforever.actors.zone.ZoneActor
|
||||
import net.psforever.objects.Players
|
||||
import net.psforever.objects.avatar.scoring.Kill
|
||||
import net.psforever.objects.sourcing.PlayerSource
|
||||
import net.psforever.packet.game.{AvatarImplantMessage, ImplantAction}
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
|
@ -387,8 +391,13 @@ class AvatarHandlerLogic(val ops: SessionAvatarHandlers, implicit val context: A
|
|||
sessionLogic.general.kitToBeUsed = None
|
||||
sendResponse(ChatMsg(ChatMessageType.UNK_225, msg))
|
||||
|
||||
case AvatarResponse.UpdateKillsDeathsAssists(_, kda) =>
|
||||
avatarActor ! AvatarActor.UpdateKillsDeathsAssists(kda)
|
||||
case AvatarResponse.UpdateKillsDeathsAssists(_, kda: Kill) if kda.experienceEarned > 0 =>
|
||||
continent.actor ! ZoneActor.RewardOurSupporters(
|
||||
PlayerSource(player),
|
||||
Players.produceContributionTranscriptFromKill(continent, player, kda),
|
||||
kda,
|
||||
kda.experienceEarned
|
||||
)
|
||||
|
||||
case AvatarResponse.AwardBep(charId, bep, expType) =>
|
||||
//if the target player, always award (some) BEP
|
||||
|
|
|
|||
|
|
@ -112,9 +112,6 @@ class SpectatorModeLogic(data: SessionData) extends ModeLogic {
|
|||
continent,
|
||||
SquadAction.Membership(SquadRequestType.Leave, player.CharId, Some(player.CharId), player.Name, None)
|
||||
)
|
||||
val originalEvent = player.History.headOption
|
||||
player.ClearHistory()
|
||||
player.LogActivity(originalEvent)
|
||||
player.avatar
|
||||
.shortcuts
|
||||
.zipWithIndex
|
||||
|
|
@ -132,8 +129,10 @@ class SpectatorModeLogic(data: SessionData) extends ModeLogic {
|
|||
player.spectator = true
|
||||
data.chat.JoinChannel(SpectatorChannel)
|
||||
val newPlayer = SpectatorModeLogic.spectatorCharacter(player)
|
||||
val cud = new SimpleItem(GlobalDefinitions.command_detonater)
|
||||
cud.GUID = player.avatar.locker.GUID
|
||||
newPlayer.LogActivity(player.History.headOption)
|
||||
val simpleHandHeldThing = GlobalDefinitions.flail_targeting_laser
|
||||
val handheld = new SimpleItem(simpleHandHeldThing)
|
||||
handheld.GUID = player.avatar.locker.GUID
|
||||
sendResponse(ObjectCreateDetailedMessage(
|
||||
0L,
|
||||
ObjectClass.avatar,
|
||||
|
|
@ -143,10 +142,10 @@ class SpectatorModeLogic(data: SessionData) extends ModeLogic {
|
|||
))
|
||||
sendResponse(ObjectCreateDetailedMessage(
|
||||
0L,
|
||||
ObjectClass.command_detonater,
|
||||
cud.GUID,
|
||||
simpleHandHeldThing.ObjectId,
|
||||
handheld.GUID,
|
||||
Some(ObjectCreateMessageParent(pguid, 4)),
|
||||
cud.Definition.Packet.DetailedConstructorData(cud).get
|
||||
handheld.Definition.Packet.DetailedConstructorData(handheld).get
|
||||
))
|
||||
data.zoning.spawn.HandleSetCurrentAvatar(newPlayer)
|
||||
data.session = session.copy(player = player)
|
||||
|
|
@ -167,7 +166,7 @@ class SpectatorModeLogic(data: SessionData) extends ModeLogic {
|
|||
.foreach(sendResponse)
|
||||
data.chat.LeaveChannel(SpectatorChannel)
|
||||
player.spectator = false
|
||||
sendResponse(ObjectDeleteMessage(player.avatar.locker.GUID, 0)) //free up the slot (from cud)
|
||||
sendResponse(ObjectDeleteMessage(player.avatar.locker.GUID, 0)) //free up the slot
|
||||
sendResponse(ChatMsg(ChatMessageType.CMT_TOGGLESPECTATORMODE, "off"))
|
||||
sendResponse(ChatMsg(ChatMessageType.UNK_227, "@SpectatorDisabled"))
|
||||
zoning.zoneReload = true
|
||||
|
|
|
|||
|
|
@ -147,6 +147,7 @@ class WeaponAndProjectileLogic(val ops: WeaponAndProjectileOperations, implicit
|
|||
def handleUplinkRequest(packet: UplinkRequest): Unit = {
|
||||
val UplinkRequest(code, _, _) = packet
|
||||
val playerFaction = player.Faction
|
||||
//todo this is not correct
|
||||
code match {
|
||||
case UplinkRequestType.RevealFriendlies =>
|
||||
sendResponse(UplinkResponse(code.value, continent.LivePlayers.count(_.Faction == playerFaction)))
|
||||
|
|
|
|||
|
|
@ -4,14 +4,18 @@ package net.psforever.objects
|
|||
import net.psforever.objects.avatar.Certification
|
||||
import net.psforever.login.WorldSession.FindEquipmentStock
|
||||
import net.psforever.objects.avatar.PlayerControl
|
||||
import net.psforever.objects.avatar.scoring.Kill
|
||||
import net.psforever.objects.ce.Deployable
|
||||
import net.psforever.objects.definition.ExoSuitDefinition
|
||||
import net.psforever.objects.equipment.EquipmentSlot
|
||||
import net.psforever.objects.guid.{GUIDTask, TaskWorkflow}
|
||||
import net.psforever.objects.inventory.InventoryItem
|
||||
import net.psforever.objects.loadouts.InfantryLoadout
|
||||
import net.psforever.objects.serverobject.affinity.FactionAffinity
|
||||
import net.psforever.objects.sourcing.PlayerSource
|
||||
import net.psforever.objects.vital.RevivingActivity
|
||||
import net.psforever.objects.vehicles.MountedWeapons
|
||||
import net.psforever.objects.vital.projectile.ProjectileReason
|
||||
import net.psforever.objects.vital.{InGameActivity, InGameHistory, RevivingActivity}
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.packet.game._
|
||||
import net.psforever.types.{ChatMessageType, ExoSuitType, Vector3}
|
||||
|
|
@ -256,7 +260,7 @@ object Players {
|
|||
PlayerControl.sendResponse(
|
||||
zone,
|
||||
channel,
|
||||
ChatMsg(ChatMessageType.UNK_229, false, "", s"@${definition.Descriptor}OldestDestroyed", None)
|
||||
ChatMsg(ChatMessageType.UNK_229, s"@${definition.Descriptor}OldestDestroyed")
|
||||
)
|
||||
}
|
||||
true
|
||||
|
|
@ -278,7 +282,7 @@ object Players {
|
|||
PlayerControl.sendResponse(
|
||||
zone,
|
||||
channel,
|
||||
ChatMsg(ChatMessageType.UNK_229, false, "", s"@${definition.Descriptor}LimitReached", None)
|
||||
ChatMsg(ChatMessageType.UNK_229, s"@${definition.Descriptor}LimitReached")
|
||||
)
|
||||
}
|
||||
true
|
||||
|
|
@ -400,7 +404,7 @@ object Players {
|
|||
val zone = player.Zone
|
||||
zone.AvatarEvents ! AvatarServiceMessage(
|
||||
zone.id,
|
||||
AvatarAction.ObjectDelete(Service.defaultPlayerGUID, tool.GUID, 0)
|
||||
AvatarAction.ObjectDelete(Service.defaultPlayerGUID, tool.GUID)
|
||||
)
|
||||
true
|
||||
} else {
|
||||
|
|
@ -466,4 +470,22 @@ object Players {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* na
|
||||
* @param zone where the event occurred
|
||||
* @param player person attributed to the event
|
||||
* @param killStat information about the event
|
||||
* @return player-specific historical information and then related information that is inherited from other entities
|
||||
*/
|
||||
def produceContributionTranscriptFromKill(zone: Zone, player: Player, killStat: Kill): List[InGameActivity] = {
|
||||
(killStat.info.interaction.cause match {
|
||||
case pr: ProjectileReason => pr.projectile.mounted_in.flatMap { a => zone.GUID(a._1) } //what fired the projectile
|
||||
case _ => None
|
||||
}).collect {
|
||||
case mount: PlanetSideGameObject with FactionAffinity with InGameHistory with MountedWeapons =>
|
||||
player.ContributionFrom(mount)
|
||||
}
|
||||
player.HistoryAndContributions()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ object EquipmentTerminalDefinition {
|
|||
"advanced_ace" -> MakeConstructionItem(advanced_ace),
|
||||
"remote_electronics_kit" -> MakeSimpleItem(remote_electronics_kit),
|
||||
"trek" -> MakeTool(trek),
|
||||
//"command_detonater" -> MakeSimpleItem(command_detonater),
|
||||
"command_detonater" -> MakeSimpleItem(command_detonater),
|
||||
"flail_targeting_laser" -> MakeSimpleItem(flail_targeting_laser)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,28 @@ object UplinkRequestType extends IntEnum[UplinkRequestType] {
|
|||
|
||||
case object OrbitalStrike extends UplinkRequestType(value = 4)
|
||||
|
||||
case object Unknown5 extends UplinkRequestType(value = 5)
|
||||
|
||||
case object Function6 extends UplinkRequestType(value = 6)
|
||||
|
||||
case object Function7 extends UplinkRequestType(value = 7)
|
||||
|
||||
case object Function8 extends UplinkRequestType(value = 8)
|
||||
|
||||
case object Unknown9 extends UplinkRequestType(value = 9)
|
||||
|
||||
case object UnknownA extends UplinkRequestType(value = 10)
|
||||
|
||||
case object FunctionB extends UplinkRequestType(value = 11)
|
||||
|
||||
case object FunctionC extends UplinkRequestType(value = 12)
|
||||
|
||||
case object UnknownD extends UplinkRequestType(value = 13)
|
||||
|
||||
case object UnknownE extends UplinkRequestType(value = 14)
|
||||
|
||||
case object FunctionF extends UplinkRequestType(value = 15)
|
||||
|
||||
implicit val codec: Codec[UplinkRequestType] = PacketHelpers.createIntEnumCodec(this, uint4)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue