From bcf1d28f0c146311f19a1985827e2fd7ace37763 Mon Sep 17 00:00:00 2001 From: FateJH Date: Sat, 9 May 2020 17:41:57 -0400 Subject: [PATCH] grouped first time event strings; gave Avatar and Player data structure supporting fte's; loaded basic fte's to suppress bangs --- .../scala/net/psforever/objects/Avatar.scala | 12 + .../scala/net/psforever/objects/Player.scala | 2 + .../objects/avatar/FirstTimeEvents.scala | 320 ++++++++++++++++++ .../converter/AvatarConverter.scala | 2 +- .../src/main/scala/WorldSessionActor.scala | 13 +- 5 files changed, 346 insertions(+), 3 deletions(-) create mode 100644 common/src/main/scala/net/psforever/objects/avatar/FirstTimeEvents.scala diff --git a/common/src/main/scala/net/psforever/objects/Avatar.scala b/common/src/main/scala/net/psforever/objects/Avatar.scala index 59f2a10f..02c83a26 100644 --- a/common/src/main/scala/net/psforever/objects/Avatar.scala +++ b/common/src/main/scala/net/psforever/objects/Avatar.scala @@ -46,6 +46,9 @@ class Avatar(private val char_id : Long, val name : String, val faction : Planet } private val deployables : DeployableToolbox = new DeployableToolbox + + private var firstTimeEvents : List[String] = List[String]() + /** * Looking For Squad:
* Indicates both a player state and the text on the marquee under the player nameplate. @@ -192,6 +195,15 @@ class Avatar(private val char_id : Long, val name : String, val faction : Planet def Deployables : DeployableToolbox = deployables + def FirstTimeEvents : List[String] = firstTimeEvents + + def FirstTimeEvents_=(event : String) : List[String] = FirstTimeEvents_=(List(event)) + + def FirstTimeEvents_=(events : List[String]) : List[String] = { + firstTimeEvents ++= events + FirstTimeEvents + } + def LFS : Boolean = lfs def LFS_=(looking : Boolean) : Boolean = { diff --git a/common/src/main/scala/net/psforever/objects/Player.scala b/common/src/main/scala/net/psforever/objects/Player.scala index 41a62c1b..5ba47533 100644 --- a/common/src/main/scala/net/psforever/objects/Player.scala +++ b/common/src/main/scala/net/psforever/objects/Player.scala @@ -591,6 +591,8 @@ class Player(private val core : Avatar) extends PlanetSideServerObject isBackpack && (backpackAccess.isEmpty || backpackAccess.contains(player.GUID)) } + def FirstTimeEvents : List[String] = core.FirstTimeEvents + def VehicleSeated : Option[PlanetSideGUID] = vehicleSeated def VehicleSeated_=(guid : PlanetSideGUID) : Option[PlanetSideGUID] = VehicleSeated_=(Some(guid)) diff --git a/common/src/main/scala/net/psforever/objects/avatar/FirstTimeEvents.scala b/common/src/main/scala/net/psforever/objects/avatar/FirstTimeEvents.scala new file mode 100644 index 00000000..1a88cca2 --- /dev/null +++ b/common/src/main/scala/net/psforever/objects/avatar/FirstTimeEvents.scala @@ -0,0 +1,320 @@ +// Copyright (c) 2020 PSForever +package net.psforever.objects.avatar + +object FirstTimeEvents { + object TR { + val InfantryWeapons : Set[String] = Set( + "used_chainblade","used_repeater","used_cycler","used_mini_chaingun","used_striker", + "used_anniversary_guna" + ) + + val Vehicles : Set[String] = Set( + "used_heavy_grenade_launcher", + "used_apc_tr_weapon", + "used_15mm_chaingun", + "used_105mm_cannon", + "used_colossus_burster", + "used_colossus_chaingun", + "used_colossus_cluster_bomb_pod", + "used_colossus_dual_100mm_cannons", + "used_colossus_tank_cannon", + "visited_threemanheavybuggy","visited_battlewagon","visited_apc_tr","visited_prowler", + "visited_colossus_flight","visited_colossus_gunner" + ) + + val Other : Set[String] = Set( + "used_trhev_dualcycler","used_trhev_pounder","used_trhev_burster", + "used_colossus_dual_100mm_cannons","used_colossus_tank_cannon", + "used_energy_gun_tr", + "visited_portable_manned_turret_tr" + ) + + val All : Set[String] = InfantryWeapons ++ Vehicles ++ Other + } + + object NC { + val InfantryWeapons : Set[String] = Set( + "used_magcutter","used_isp","used_gauss","used_r_shotgun","used_hunterseeker", + "used_anniversary_gun" + ) + + val Vehicles : Set[String] = Set( + "used_firebird", + "used_gauss_cannon", + "used_apc_nc_weapon", + "used_vanguard_weapons", + "used_peregrine_dual_machine_gun", + "used_peregrine_dual_rocket_pods", + "used_peregrine_mechhammer", + "used_peregrine_particle_cannon", + "used_peregrine_sparrow", + "visited_twomanheavybuggy","visited_thunderer","visited_apc_nc","visited_vanguard", + "visited_peregrine_flight","visited_peregrine_gunner" + ) + + val Other : Set[String] = Set( + "used_nchev_scattercannon","used_nchev_falcon","used_nchev_sparrow", + "used_energy_gun_nc", + "visited_portable_manned_turret_nc" + ) + + val All : Set[String] = InfantryWeapons ++ Vehicles ++ Other + } + + object VS { + val InfantryWeapons : Set[String] = Set( + "used_forceblade","used_beamer","used_pulsar","used_lasher","used_lancer", + "used_anniversary_gunb" + ) + + val Vehicles : Set[String] = Set( + "used_fluxpod", + "used_apc_vs_weapon", + "used_heavy_rail_beam", + "used_pulsed_particle_accelerator", + "used_flux_cannon", + "used_aphelion_laser", + "used_aphelion_starfire", + "used_aphelion_immolation_cannon", + "used_aphelion_plasma_rocket_pod", + "used_aphelion_ppa", + "visited_twomanhoverbuggy","visited_aurora","visited_apc_vs","visited_magrider", + "visited_aphelion_flight","visited_aphelion_gunner" + ) + + val Other : Set[String] = Set( + "used_vshev_quasar","used_vshev_comet","used_vshev_starfire", + "used_energy_gun_vs", + "visited_portable_manned_turret_vs" + ) + + val All : Set[String] = InfantryWeapons ++ Vehicles ++ Other + } + + object Standard { + val InfantryWeapons : Set[String] = Set( + "used_grenade_plasma","used_grenade_jammer","used_grenade_frag", + "used_katana", + "used_ilc9","used_suppressor","used_punisher","used_flechette","used_phoenix","used_thumper","used_rocklet","used_bolt_driver","used_heavy_sniper","used_oicw","used_flamethrower" + ) + + val Vehicles : Set[String] = Set( + "used_armor_siphon", + "used_ntu_siphon", + "used_ballgun", + "used_skyguard_weapons", + "used_reaver_weapons", + "used_lightning_weapons", + "used_wasp_weapon_system", + "used_20mm_cannon", + "used_25mm_cannon", + "used_35mm_cannon", + "used_35mm_rotarychaingun", + "used_75mm_cannon", + "used_rotarychaingun", + "used_vulture_bombardier", + "used_vulture_nose_cannon", + "used_vulture_tail_cannon", + "used_liberator_bombardier", + "visited_ams","visited_ant", + "visited_quadassault","visited_fury","visited_quadstealth", + "visited_two_man_assault_buggy","visited_skyguard", + "visited_mediumtransport","visited_apc","visited_lightning", + "visited_mosquito","visited_lightgunship","visited_wasp", + "visited_liberator","visited_vulture","visited_dropship","visited_galaxy_gunship", + "visited_phantasm","visited_lodestar" + ) + + val Facilities : Set[String] = Set( + "visited_broadcast_warpgate","visited_warpgate_small", + "visited_respawn_terminal","visited_deconstruction_terminal", + "visited_capture_terminal","visited_secondary_capture","visited_LLU_socket","visited_resource_silo", + "visited_med_terminal","visited_adv_med_terminal","visited_repair_silo", + "visited_order_terminal","visited_certification_terminal","visited_implant_terminal","visited_locker", + "visited_ground_vehicle_terminal","visited_bfr_terminal","visited_air_vehicle_terminal","visited_galaxy_terminal", + "visited_generator","visited_generator_terminal", + "visited_wall_turret","used_phalanx","used_phalanx_avcombo","used_phalanx_flakcombo", + "visited_external_door_lock" + ) + + val Other : Set[String] = Set( + "used_command_uplink", + "used_med_app","used_nano_dispenser","used_bank","used_ace","used_advanced_ace","used_rek","used_trek","used_laze_pointer","used_telepad", + "visited_motion_sensor","visited_sensor_shield", + "visited_spitfire_turret","visited_spitfire_cloaked","visited_spitfire_aa", + "visited_shield_generator","visited_tank_traps" + ) + + val All : Set[String] = InfantryWeapons ++ Vehicles ++ Facilities ++ Other + } + + object Cavern { + val InfantryWeapons : Set[String] = Set( + "used_spiker","used_radiator","used_maelstrom" + ) + + val Vehicles : Set[String] = Set( + "used_scythe", + "used_flail_weapon", + "visited_switchblade","visited_flail","visited_router" + ) + + val Facilities : Set[String] = Set( + "used_ancient_turret_weapon", + "visited_vanu_control_console", + "visited_ancient_air_vehicle_terminal", + "visited_ancient_equipment_terminal", + "visited_ancient_ground_vehicle_terminal", + "visited_health_crystal", + "visited_repair_crystal", + "visited_vehicle_crystal", + "visited_damage_crystal", + "visited_energy_crystal" + ) + + val Other : Set[String] = Set( + "visited_vanu_module" + ) + + val All : Set[String] = InfantryWeapons ++ Vehicles ++ Facilities ++ Other + } + + val Maps : Set[String] = Set( + "map01","map02","map03","map04","map05","map06","map07","map08","map09","map10", + "map11","map12","map13","map14","map15","map16", + "ugd01","ugd02","ugd03","ugd04","ugd05","ugd06", + "map96","map97","map98","map99" + ) + + val Monoliths : Set[String] = Set( + "visited_monolith_amerish", + "visited_monolith_ceryshen", + "visited_monolith_cyssor", + "visited_monolith_esamir", + "visited_monolith_forseral", + "visited_monolith_hossin", + "visited_monolith_ishundar", + "visited_monolith_searhus", + "visited_monolith_solsar" + ) + + val Gingerman : Set[String] = Set( + "visited_gingerman_atar", + "visited_gingerman_dahaka", + "visited_gingerman_hvar", + "visited_gingerman_izha", + "visited_gingerman_jamshid", + "visited_gingerman_mithra", + "visited_gingerman_rashnu", + "visited_gingerman_sraosha", + "visited_gingerman_yazata", + "visited_gingerman_zal" + ) + + val Sled : Set[String] = Set( + "visited_sled01", + "visited_sled02", + "visited_sled04", + "visited_sled05", + "visited_sled06", + "visited_sled07", + "visited_sled08", + "visited_sled09" + ) + + val Snowman : Set[String] = Set( + "visited_snowman_amerish", + "visited_snowman_ceryshen", + "visited_snowman_cyssor", + "visited_snowman_esamir", + "visited_snowman_forseral", + "visited_snowman_hossin", + "visited_snowman_ishundar", + "visited_snowman_searhus", + "visited_snowman_solsar" + ) + + val Charlie : Set[String] = Set( + "visited_charlie01", + "visited_charlie02", + "visited_charlie03", + "visited_charlie04", + "visited_charlie05", + "visited_charlie06", + "visited_charlie07", + "visited_charlie08", + "visited_charlie09" + ) + + val BattleRanks : Set[String] = Set( + "xpe_battle_rank_1","xpe_battle_rank_2","xpe_battle_rank_3","xpe_battle_rank_4","xpe_battle_rank_5", + "xpe_battle_rank_6","xpe_battle_rank_7","xpe_battle_rank_8","xpe_battle_rank_9","xpe_battle_rank_10", + "xpe_battle_rank_11","xpe_battle_rank_12","xpe_battle_rank_13","xpe_battle_rank_14","xpe_battle_rank_15", + "xpe_battle_rank_16","xpe_battle_rank_17","xpe_battle_rank_18","xpe_battle_rank_19","xpe_battle_rank_20", + "xpe_battle_rank_21","xpe_battle_rank_22","xpe_battle_rank_23","xpe_battle_rank_24","xpe_battle_rank_25", + "xpe_battle_rank_26","xpe_battle_rank_27","xpe_battle_rank_28","xpe_battle_rank_29","xpe_battle_rank_30", + "xpe_battle_rank_31","xpe_battle_rank_32","xpe_battle_rank_33","xpe_battle_rank_34","xpe_battle_rank_35", + "xpe_battle_rank_36","xpe_battle_rank_37","xpe_battle_rank_38","xpe_battle_rank_39","xpe_battle_rank_40" + ) + + val CommandRanks : Set[String] = Set( + "xpe_command_rank_1","xpe_command_rank_2","xpe_command_rank_3","xpe_command_rank_4","xpe_command_rank_5" + ) + + val Training : Set[String] = Set( + "training_welcome", + "training_map", + "training_hart", + "training_warpgates", + "training_weapons01", + "training_armors", + "training_healing", + "training_certifications", + "training_inventory", + "training_vehicles", + "training_implants" + ) + + val OldTraining : Set[String] = Set( + "training_start_tr", + "training_start_nc", + "training_start_vs" + ) + + val Generic : Set[String] = Set( + "xpe_overhead_map", + "xpe_mail_alert", + "xpe_join_platoon", + "xpe_form_platoon", + "xpe_join_outfit", + "xpe_form_outfit", + "xpe_join_squad", + "xpe_form_squad", + "xpe_blackops", + "xpe_instant_action", + "xpe_orbital_shuttle", + "xpe_drop_pod", + "xpe_sanctuary_help", + "xpe_bind_facility", + "xpe_warp_gate", + "xpe_warp_gate_usage", + "xpe_bind_ams", + "xpe_th_nonsanc", + "xpe_th_ammo", + "xpe_th_firemodes", + "xpe_th_cloak", + "xpe_th_max", + "xpe_th_ant", + "xpe_th_ams", + "xpe_th_ground", + "xpe_th_ground_p", + "xpe_th_air", + "xpe_th_air_p", + "xpe_th_afterburner", + "xpe_th_hover", + "xpe_th_switchblade", + "xpe_th_router", + "xpe_th_flail", + "xpe_th_bfr" + ) +} diff --git a/common/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala b/common/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala index a2d28f02..fec77889 100644 --- a/common/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala +++ b/common/src/main/scala/net/psforever/objects/definition/converter/AvatarConverter.scala @@ -148,7 +148,7 @@ object AvatarConverter { None, MakeImplantEntries(obj), Nil, Nil, - firstTimeEvents = List.empty[String], //TODO fte list + obj.FirstTimeEvents, tutorials = List.empty[String], //TODO tutorial list 0L, 0L, 0L, 0L, 0L, Some(DCDExtra2(0, 0)), diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index 3f6f461c..66e8ab68 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -17,7 +17,7 @@ import scodec.bits.ByteVector import csr.{CSRWarp, CSRZone, Traveler} import MDCContextAware.Implicits._ import net.psforever.objects._ -import net.psforever.objects.avatar.{Certification, DeployableToolbox} +import net.psforever.objects.avatar.{Certification, DeployableToolbox, FirstTimeEvents} import net.psforever.objects.ballistics.{PlayerSource, Projectile, ProjectileResolution, ResolvedProjectile, SourceEntry} import net.psforever.objects.ce.{ComplexDeployable, Deployable, DeployableCategory, DeployedItem, SimpleDeployable, TelepadLike} import net.psforever.objects.definition._ @@ -3736,6 +3736,7 @@ class WorldSessionActor extends Actor whenUsedLastMAXName(2) = faction + "hev_antipersonnel" whenUsedLastMAXName(3) = faction + "hev_antivehicular" whenUsedLastMAXName(1) = faction + "hev_antiaircraft" + avatar.FirstTimeEvents = ftes accountPersistence ! AccountPersistenceService.Login(lName) case _ => log.error(s"CharacterRequest/Select: no character for $charId found") @@ -5990,7 +5991,8 @@ class WorldSessionActor extends Actor } case msg @ AvatarFirstTimeEventMessage(avatar_guid, object_guid, unk1, event_name) => - log.info("AvatarFirstTimeEvent: " + msg) + log.info(s"AvatarFirstTimeEvent: $event_name") + avatar.FirstTimeEvents += event_name case msg @ WarpgateRequest(continent_guid, building_guid, dest_building_guid, dest_continent_guid, unk1, unk2) => log.info(s"WarpgateRequest: $msg") @@ -11227,6 +11229,13 @@ object WorldSessionActor { private final case class VehicleLoaded(vehicle : Vehicle) private final case class ZoningReset() + final val ftes = ( + FirstTimeEvents.Maps ++ FirstTimeEvents.Monoliths ++ + FirstTimeEvents.Standard.All ++ FirstTimeEvents.Cavern.All ++ + FirstTimeEvents.TR.All ++ FirstTimeEvents.NC.All ++ FirstTimeEvents.VS.All ++ + FirstTimeEvents.Generic + ).toList + /** * The message that progresses some form of user-driven activity with a certain eventual outcome * and potential feedback per cycle.