diff --git a/common/src/main/scala/net/psforever/objects/zones/InterstellarCluster.scala b/common/src/main/scala/net/psforever/objects/zones/InterstellarCluster.scala index 699e078a7..542cf98b4 100644 --- a/common/src/main/scala/net/psforever/objects/zones/InterstellarCluster.scala +++ b/common/src/main/scala/net/psforever/objects/zones/InterstellarCluster.scala @@ -75,6 +75,9 @@ class InterstellarCluster(zones : List[Zone]) extends Actor { } sender ! InterstellarCluster.PlayerList(players) + case InterstellarCluster.GetZoneIds() => + sender ! InterstellarCluster.ZoneIds(zones.map(_.Number)) + case msg @ Zone.Lattice.RequestSpecificSpawnPoint(zone_number, _, _, _) => recursiveFindWorldInCluster(zones.iterator, _.Number == zone_number) match { case Some(zone) => @@ -219,4 +222,7 @@ object InterstellarCluster { * @param zone_num the zone number to request building map updates for */ final case class ZoneMapUpdate(zone_num : Int) + + final case class GetZoneIds() + final case class ZoneIds(zoneIds : List[Int]) } diff --git a/common/src/main/scala/net/psforever/packet/game/objectcreate/ObjectClass.scala b/common/src/main/scala/net/psforever/packet/game/objectcreate/ObjectClass.scala index c55e8a3a0..92fe8eef2 100644 --- a/common/src/main/scala/net/psforever/packet/game/objectcreate/ObjectClass.scala +++ b/common/src/main/scala/net/psforever/packet/game/objectcreate/ObjectClass.scala @@ -187,6 +187,8 @@ object ObjectClass { final val katana = 421 final val lancer = 425 final val lasher = 429 + final val lasher_projectile = 430 + final val lasher_projectile_ap = 431 final val liberator_25mm_cannon = 433 final val liberator_bomb_bay = 435 final val liberator_weapon_system = 440 @@ -398,6 +400,53 @@ object ObjectClass { final val targeting_laser_dispenser = 851 final val teleportpad_terminal = 853 + // For property overrides + final val delivererv = 239 + final val apc = 62 + final val colossus = 179 + final val peregrine = 632 + final val aphelion = 79 + final val vshev = 964 + final val trhev = 884 + final val nchev = 583 + final val med_armor = 528 + final val heavy_armor = 390 + final val bfr_terminal = 143 + final val vshev_antiaircraft = 965 + final val vshev_antipersonnel = 966 + final val vshev_antivehicular = 967 + final val trhev_antiaircraft = 885 + final val trhev_antipersonnel = 886 + final val trhev_antivehicular = 887 + final val nchev_antiaircraft = 584 + final val nchev_antipersonnel = 585 + final val nchev_antivehicular = 586 + final val standard_issue_armor = 829 + final val lite_armor = 449 + final val air_vehicle_terminal = 43 + final val generic_bfr = 353 + final val stealth_armor = 837 + final val vehicle_terminal_combined = 952 + + final val objectClassMap = scala.collection.mutable.Map[String, Int]() + + def ByName(name : String) : Int = { + // This whole thing is a dirty "temporary" hack so I don't have to make a huge map out of the above object vars by hand + // Forgive me. + if(objectClassMap.size == 0) { + val objectClassMethods = ObjectClass.getClass.getDeclaredMethods + objectClassMethods.foreach(x => { + if(x.getReturnType.getName == "int" && x.getParameterTypes.isEmpty) { // ints only & Ignore functions with parameters + val objectName = x.getName + val value = ObjectClass.getClass.getMethod(objectName).invoke(ObjectClass) + objectClassMap.put(objectName, value.asInstanceOf[Int]) + } + }) + } + + objectClassMap(name.toLowerCase()) + } + //TODO refactor the following functions into another object later /** * Given an object class, retrieve the `Codec` used to parse and translate the constructor data for that type. diff --git a/common/src/main/scala/services/properties/PropertyOverrideManager.scala b/common/src/main/scala/services/properties/PropertyOverrideManager.scala new file mode 100644 index 000000000..72078c17a --- /dev/null +++ b/common/src/main/scala/services/properties/PropertyOverrideManager.scala @@ -0,0 +1,131 @@ +package services.properties + + +import akka.actor.{Actor, ActorRef, Stash} +import net.psforever.objects.zones.InterstellarCluster +import net.psforever.packet.game.{GamePropertyTarget, PropertyOverrideMessage} +import net.psforever.packet.game.PropertyOverrideMessage.GamePropertyScope +import net.psforever.packet.game.objectcreate.ObjectClass +import services.ServiceManager +import services.ServiceManager.Lookup + +import scala.collection.mutable.ListBuffer + +class PropertyOverrideManager extends Actor with Stash { + private[this] val log = org.log4s.getLogger("PropertyOverrideManager") + + private var overrides : Map[Int, Map[String, List[(String, String)]]] = Map() + private var gamePropertyScopes : List[PropertyOverrideMessage.GamePropertyScope] = List() + private var interstellarCluster : ActorRef = Actor.noSender + private var zoneIds : List[Int] = List() + + override def preStart = { + log.info(s"Starting PropertyOverrideManager") + ServiceManager.serviceManager ! Lookup("cluster") + } + + override def receive = ServiceLookup + + def ServiceLookup : Receive = { + case ServiceManager.LookupResult("cluster", endpoint) => + interstellarCluster = endpoint + + if (interstellarCluster != ActorRef.noSender) { + interstellarCluster ! InterstellarCluster.GetZoneIds() + } + + case InterstellarCluster.ZoneIds(zoneIds) => + this.zoneIds = zoneIds + + unstashAll() + LoadOverridesFromFile(zoneId = 0) // Global overrides + for(zoneId <- zoneIds) { + LoadOverridesFromFile(zoneId) + } + + ProcessGamePropertyScopes() + + context.become(ReceiveCommand) + + case _ => stash() + } + + def ReceiveCommand: Receive = { + case PropertyOverrideManager.GetOverridesMessage => { + sender ! gamePropertyScopes + } + case _ => ; + } + + private def LoadOverridesFromFile(zoneId : Int): Unit = { + val zoneOverrides = LoadFile(s"game_objects${zoneId}.adb.lst") + + if(zoneOverrides == null) { + log.info(s"No overrides found for zone ${zoneId} using filename game_objects${zoneId}.adb.lst") + return + } + + val grouped = zoneOverrides.groupBy(_._1).view.mapValues(_.map(x => (x._2, x._3)).toList).toMap + + log.info(s"Loaded property overrides for zone $zoneId: ${grouped.toString}") + overrides += (zoneId -> grouped) + } + + private def ProcessGamePropertyScopes(): Unit = { + val scopesBuffer : ListBuffer[GamePropertyScope] = ListBuffer() + + for(over <- overrides) { + val zoneId = over._1 + val overrideMap = over._2 + + val gamePropertyTargets : ListBuffer[PropertyOverrideMessage.GamePropertyTarget] = ListBuffer() + + for(propOverride <- overrideMap) { + val objectId = ObjectClass.ByName(propOverride._1) + val props = GamePropertyTarget(objectId,propOverride._2) + gamePropertyTargets += props + } + + val scope = GamePropertyScope(zoneId, gamePropertyTargets.toList) + + scopesBuffer += scope + } + + gamePropertyScopes = scopesBuffer.toList + } + + def LoadFile(path : String): ListBuffer[(String, String, String)] = { + val stream = getClass.getClassLoader.getResourceAsStream(path) + if(stream == null) { + return null + } + + val content = scala.io.Source.fromInputStream(stream).getLines().filter(x => x.startsWith("add_property")) + var data : ListBuffer[(String, String, String)] = ListBuffer() + + for(line <- content) { + val splitLine = line.split(" ") + if(splitLine.length >= 3) { + val objectName = splitLine(1) + val property = splitLine(2) + + var propertyValue = "" + for(i <- 3 to splitLine.length - 1) { + propertyValue += splitLine(i) + " " + } + propertyValue = propertyValue.trim + + data += ((objectName, property, propertyValue)) + } + } + + stream.close() + + data + } + +} + +object PropertyOverrideManager { + final case class GetOverridesMessage() +} diff --git a/pslogin/src/main/resources/game_objects0.adb.lst b/pslogin/src/main/resources/game_objects0.adb.lst new file mode 100644 index 000000000..06b76c314 --- /dev/null +++ b/pslogin/src/main/resources/game_objects0.adb.lst @@ -0,0 +1,98 @@ +add_property ace allowed false +add_property ace equiptime 500 +add_property ace holstertime 500 +add_property ace_deployable allowed false +add_property ace_deployable equiptime 500 +add_property ace_deployable holstertime 500 +add_property advanced_ace equiptime 750 +add_property advanced_ace holstertime 750 +add_property anniversary_gun equiptime 500 +add_property anniversary_gun holstertime 500 +add_property anniversary_guna equiptime 500 +add_property anniversary_guna holstertime 500 +add_property anniversary_gunb equiptime 500 +add_property anniversary_gunb holstertime 500 +add_property aphelion_flight requirement_award0 false +add_property applicator equiptime 500 +add_property applicator firemode0_refiretime 500 +add_property applicator firemode1_refiretime 500 +add_property applicator holstertime 500 +add_property bank equiptime 500 +add_property bank holstertime 500 +add_property beamer equiptime 500 +add_property beamer holstertime 500 +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 false +add_property command_detonater equiptime 500 +add_property command_detonater holstertime 500 +add_property cycler equiptime 600 +add_property cycler holstertime 600 +add_property cycler_v2 equiptime 600 +add_property cycler_v2 holstertime 600 +add_property cycler_v3 equiptime 600 +add_property cycler_v3 holstertime 600 +add_property cycler_v4 equiptime 600 +add_property cycler_v4 holstertime 600 +add_property flail_targeting_laser equiptime 500 +add_property flail_targeting_laser holstertime 500 +add_property flamethrower equiptime 1000 +add_property flamethrower holstertime 1000 +add_property flechette equiptime 600 +add_property flechette holstertime 600 +add_property forceblade equiptime 250 +add_property forceblade holstertime 250 +add_property gauss equiptime 600 +add_property gauss holstertime 600 +add_property ilc9 equiptime 500 +add_property ilc9 holstertime 500 +add_property isp equiptime 500 +add_property isp holstertime 500 +add_property katana equiptime 250 +add_property katana holstertime 250 +add_property lasher equiptime 750 +add_property lasher holstertime 750 +add_property lasher_projectile lash_delay 0.00 +add_property lasher_projectile_ap lash_delay 0.00 +add_property lasher_projectile_ap lasher_projectile_ap false +add_property lasher_projectile_ap lasher_projectile true +add_property maelstrom equiptime 1000 +add_property maelstrom holstertime 1000 +add_property magcutter equiptime 250 +add_property magcutter holstertime 250 +add_property medicalapplicator equiptime 500 +add_property medicalapplicator holstertime 500 +add_property medicalapplicator firemode0_refiretime 500 +add_property medicalapplicator firemode1_refiretime 500 +add_property mini_chaingun equiptime 750 +add_property mini_chaingun holstertime 750 +add_property nano_dispenser equiptime 750 +add_property nano_dispenser holstertime 750 +add_property pellet_gun equiptime 600 +add_property pellet_gun holstertime 600 +add_property peregrine_flight requirement_award0 false +add_property pulsar equiptime 600 +add_property pulsar holstertime 600 +add_property punisher equiptime 600 +add_property punisher holstertime 600 +add_property r_shotgun equiptime 750 +add_property r_shotgun holstertime 750 +add_property remote_electronics_kit equiptime 500 +add_property remote_electronics_kit holstertime 500 +add_property repeater equiptime 500 +add_property repeater holstertime 500 +add_property six_shooter equiptime 500 +add_property six_shooter holstertime 500 +add_property spiker equiptime 500 +add_property spiker holstertime 500 +add_property super_staminakit allowed true +add_property super_staminakit medkit_reuse_delay 300 +add_property super_staminakit nodrop false +add_property super_staminakit requirement_award0 false +add_property suppressor equiptime 600 +add_property suppressor holstertime 600 +add_property trek equiptime 500 +add_property trek holstertime 500 +add_property vulture requirement_award0 false diff --git a/pslogin/src/main/resources/game_objects29.adb.lst b/pslogin/src/main/resources/game_objects29.adb.lst new file mode 100644 index 000000000..ecf3b40df --- /dev/null +++ b/pslogin/src/main/resources/game_objects29.adb.lst @@ -0,0 +1,54 @@ +add_property ams requirement_certification0 false +add_property apc requirement_certification0 false +add_property aphelion allowed false +add_property aphelion_flight allowed false +add_property aphelion_gunner allowed false +add_property aurora requirement_certification0 false +add_property battlewagon requirement_certification0 false +add_property colossus allowed false +add_property colossus_flight allowed false +add_property colossus_gunner allowed false +add_property delivererv requirement_certification0 false +add_property dropship allowed false +add_property flail requirement_certification0 false +add_property fury requirement_certification0 false +add_property galaxy_gunship allowed false +add_property liberator allowed false +add_property lightgunship allowed false +add_property lightning requirement_certification0 false +add_property lodestar allowed false +add_property magrider purchase_tech_plant false +add_property magrider requirement_certification0 false +add_property mediumtransport requirement_certification0 false +add_property mosquito allowed false +add_property nano_dispenser requirement_certification0 false +add_property nchev_antiaircraft allowed false +add_property order_terminal forsale_nchev_antiaircraft false +add_property order_terminal forsale_trhev_antiaircraft false +add_property order_terminal forsale_vshev_antiaircraft false +add_property peregrine allowed false +add_property peregrine_flight allowed false +add_property peregrine_gunner allowed false +add_property phantasm allowed false +add_property prowler purchase_tech_plant false +add_property prowler requirement_certification0 false +add_property quadassault requirement_certification0 false +add_property quadstealth requirement_certification0 false +add_property skyguard requirement_certification0 false +add_property skyguard requirement_certification1 false +add_property threemanheavybuggy requirement_certification0 false +add_property threemanheavybuggy requirement_certification1 false +add_property thunderer requirement_certification0 false +add_property trhev_antiaircraft allowed false +add_property two_man_assault_buggy requirement_certification0 false +add_property two_man_assault_buggy requirement_certification1 false +add_property two_man_assault_buggy requirement_certification2 false +add_property twomanheavybuggy requirement_certification0 false +add_property twomanheavybuggy requirement_certification1 false +add_property twomanhoverbuggy requirement_certification0 false +add_property twomanhoverbuggy requirement_certification1 false +add_property vanguard purchase_tech_plant false +add_property vanguard requirement_certification0 false +add_property vshev_antiaircraft allowed false +add_property vulture allowed false +add_property wasp allowed false diff --git a/pslogin/src/main/resources/game_objects30.adb.lst b/pslogin/src/main/resources/game_objects30.adb.lst new file mode 100644 index 000000000..1885aa60a --- /dev/null +++ b/pslogin/src/main/resources/game_objects30.adb.lst @@ -0,0 +1,61 @@ +add_property air_vehicle_terminal forsale_dropship +add_property air_vehicle_terminal forsale_galaxy_gunship +add_property air_vehicle_terminal forsale_lodestar +add_property apc allowed false +add_property apc_nc allowed false +add_property apc_tr allowed false +add_property apc_vs allowed false +add_property aphelion allowed false +add_property aphelion_flight allowed false +add_property aurora allowed false +add_property battlewagon allowed false +add_property colossus_flight allowed false +add_property colossus_gunner allowed false +add_property dropship requirement_certification0 false +add_property flail allowed false +add_property fury allowed false +add_property galaxy_gunship requirement_certification0 false +add_property hunterseeker requirement_certification0 false +add_property lancer requirement_certification0 false +add_property liberator requirement_certification0 false +add_property liberator purchase_tech_plant false +add_property lightgunship requirement_certification0 false +add_property lightgunship purchase_tech_plant false +add_property lightning allowed false +add_property lodestar requirement_certification0 false +add_property magrider allowed false +add_property mediumtransport allowed false +add_property mosquito requirement_certification0 false +add_property mosquito requirement_certification1 false +add_property nano_dispenser requirement_certification0 false +add_property nchev_antiaircraft allowed false +add_property order_terminal forsale_nchev_antiaircraft false +add_property order_terminal forsale_trhev_antiaircraft false +add_property order_terminal forsale_vshev_antiaircraft false +add_property peregrine_flight allowed false +add_property peregrine_gunner allowed false +add_property phantasm requirement_certification0 false +add_property phoenix requirement_certification0 false +add_property prowler allowed false +add_property quadassault allowed false +add_property quadstealth allowed false +add_property skyguard allowed false +add_property striker requirement_certification0 false +add_property switchblade allowed false +add_property threemanheavybuggy allowed false +add_property thunderer allowed false +add_property trhev_antiaircraft allowed false +add_property two_man_assault_buggy allowed false +add_property twomanheavybuggy allowed false +add_property twomanhoverbuggy allowed false +add_property vanguard allowed false +add_property vehicle_terminal_combined forsale_dropship +add_property vehicle_terminal_combined forsale_galaxy_gunship +add_property vehicle_terminal_combined forsale_lodestar +add_property vshev_antiaircraft allowed false +add_property vulture requirement_award0 false +add_property vulture requirement_certification0 false +add_property vulture purchase_tech_plant false +add_property wasp purchase_tech_plant false +add_property wasp requirement_certification0 false +add_property wasp requirement_certification1 false diff --git a/pslogin/src/main/resources/game_objects31.adb.lst b/pslogin/src/main/resources/game_objects31.adb.lst new file mode 100644 index 000000000..57ab23e45 --- /dev/null +++ b/pslogin/src/main/resources/game_objects31.adb.lst @@ -0,0 +1,134 @@ +add_property ace requirement_certification0 false # combat_engineering +add_property ace_deployable requirement_certification0 false # combat_engineering +add_property advanced_ace firemode0_requirement_certification0 false # ce_defense +add_property advanced_ace firemode0_requirement_certification1 false # ce_advanced +add_property advanced_ace firemode1_requirement_certification0 false # ce_offense +add_property advanced_ace firemode1_requirement_certification1 false # ce_advanced +add_property advanced_ace firemode2_requirement_certification0 false # ce_offense +add_property advanced_ace firemode2_requirement_certification1 false # ce_advanced +add_property advanced_ace requirement_certification0 false # ce_defense +add_property advanced_ace requirement_certification1 false # ce_offense +add_property advanced_ace requirement_certification2 false # ce_advanced +add_property air_vehicle_terminal forsale_dropship +add_property air_vehicle_terminal forsale_galaxy_gunship +add_property air_vehicle_terminal forsale_lodestar +add_property ams requirement_certification0 false # ground_support +add_property anniversary_gun requirement_certification0 false # medium_assault +add_property ant requirement_certification0 false # vehicles +add_property apc requirement_certification0 false # ground_transport +add_property aphelion_flight requirement_award0 false # bfr_advanced +add_property aphelion_laser requirement_certification0 false # bfr_ai_gunnery +add_property aphelion_starfire requirement_certification0 false # bfr_aa_gunnery +add_property applicator requirement_certification0 false # Medical +add_property aurora requirement_certification0 false # ground_transport +add_property bank requirement_certification0 false # Repair +add_property beamer requirement_certification0 false # standard_assault +add_property bfr_terminal requirement_certification0 false # bfr_basic +add_property bolt_driver requirement_certification0 false # sniper +add_property boomer_trigger requirement_certification0 false # combat_engineering +add_property colossus_burster requirement_certification0 false # bfr_aa_gunnery +add_property colossus_chaingun requirement_certification0 false # bfr_ai_gunnery +add_property colossus_flight requirement_award0 false # bfr_advanced +add_property cycler requirement_certification0 false # medium_assault +add_property cycler_v2 requirement_certification0 false # medium_assault +add_property cycler_v3 requirement_certification0 false # medium_assault +add_property cycler_v4 requirement_certification0 false # medium_assault +add_property delivererv requirement_certification0 false # ground_transport +add_property dropship requirement_certification0 false # air_support +add_property flail requirement_certification0 false # flail +add_property flamethrower requirement_certification0 false # special_assault_2 +add_property flechette requirement_certification0 false # medium_assault +add_property fury requirement_certification0 false # quad_all +add_property galaxy_gunship requirement_certification0 false # gunship +add_property gauss requirement_certification0 false # medium_assault +add_property generic_bfr requirement_certification0 false # bfr_basic +add_property heavy_sniper requirement_certification0 false # sniper +add_property hunterseeker requirement_certification0 false # anti_vehicular +add_property ilc9 requirement_certification0 false # standard_assault +add_property isp requirement_certification0 false # standard_assault +add_property katana requirement_award0 false # 2007_fan_faire +add_property lancer requirement_certification0 false # anti_vehicular +add_property lasher requirement_certification0 false # heavy_assault +add_property liberator requirement_certification0 false # air_support +add_property lightgunship requirement_certification0 false # air_cavalry_assault +add_property lightning requirement_certification0 false # armored_assault1 +add_property lite_armor requirement_certification0 false # agile_armor +add_property lodestar requirement_certification0 false # air_support +add_property maelstrom requirement_certification0 false # heavy_assault +add_property magrider requirement_certification0 false # armored_assault2 +add_property med_armor requirement_certification0 false # reinforced_armor +add_property mediumtransport requirement_certification0 false # ground_transport +add_property mini_chaingun requirement_certification0 false # heavy_assault +add_property mosquito requirement_certification0 false # light_scout +add_property mosquito requirement_certification1 false # air_cavalry_scout +add_property nano_dispenser requirement_certification0 false # Repair +add_property nchev_antiaircraft requirement_certification0 false # max_anti_aircraft +add_property nchev_antiaircraft requirement_certification1 false # max_all +add_property nchev_antipersonnel requirement_certification0 false # max_anti_personnel +add_property nchev_antipersonnel requirement_certification1 false # max_all +add_property nchev_antivehicular requirement_certification0 false # max_anti_vehicular +add_property nchev_antivehicular requirement_certification1 false # max_all +add_property oicw requirement_certification0 false # special_assault_2 +add_property pellet_gun requirement_certification0 false # standard_assault +add_property peregrine_flight requirement_award0 false # bfr_advanced +add_property peregrine_mechhammer requirement_certification0 false # bfr_ai_gunnery +add_property peregrine_sparrow requirement_certification0 false # bfr_aa_gunnery +add_property phantasm requirement_certification0 false # phantasm +add_property phoenix requirement_certification0 false # anti_vehicular +add_property prowler requirement_certification0 false # armored_assault2 +add_property pulsar requirement_certification0 false # medium_assault +add_property punisher requirement_certification0 false # medium_assault +add_property quadassault requirement_certification0 false # quad_all +add_property quadstealth requirement_certification0 false # quad_all +add_property r_shotgun requirement_certification0 false # heavy_assault +add_property radiator requirement_certification0 false # special_assault +add_property repeater requirement_certification0 false # standard_assault +add_property rocklet requirement_certification0 false # special_assault +add_property router requirement_certification0 false # ground_support +add_property six_shooter requirement_certification0 false # standard_assault +add_property skyguard requirement_certification0 false # assault_buggy +add_property skyguard requirement_certification1 false # light_scout +add_property spiker requirement_certification0 false # medium_assault +add_property standard_issue_armor requirement_certification0 false # empire_issue +add_property stealth_armor requirement_certification0 false # infiltration_suit +add_property striker requirement_certification0 false # anti_vehicular +add_property super_armorkit requirement_award0 false # xmas_spirit +add_property super_medkit requirement_award0 false # xmas_snowman +add_property super_staminakit requirement_award0 false # xmas_gingerman +add_property suppressor requirement_certification0 false # standard_assault +add_property switchblade requirement_certification0 false # switchblade +add_property threemanheavybuggy requirement_certification0 false # assault_buggy +add_property threemanheavybuggy requirement_certification1 false # light_scout +add_property thumper requirement_certification0 false # special_assault +add_property thunderer requirement_certification0 false # ground_transport +add_property trek requirement_certification0 false # virus_hacking +add_property trek requirement_certification1 false # electronics_expert +add_property trhev_antiaircraft requirement_certification0 false # max_anti_aircraft +add_property trhev_antiaircraft requirement_certification1 false # max_all +add_property trhev_antipersonnel requirement_certification0 false # max_anti_personnel +add_property trhev_antipersonnel requirement_certification1 false # max_all +add_property trhev_antivehicular requirement_certification0 false # max_anti_vehicular +add_property trhev_antivehicular requirement_certification1 false # max_all +add_property two_man_assault_buggy requirement_certification0 false # light_scout +add_property two_man_assault_buggy requirement_certification1 false # harasser +add_property two_man_assault_buggy requirement_certification2 false # assault_buggy +add_property twomanheavybuggy requirement_certification0 false # assault_buggy +add_property twomanheavybuggy requirement_certification1 false # light_scout +add_property twomanhoverbuggy requirement_certification0 false # assault_buggy +add_property twomanhoverbuggy requirement_certification1 false # light_scout +add_property twomanhoverbuggy_destroyed requirement_certification0 false # buggy_assault +add_property vanguard requirement_certification0 false # armored_assault2 +add_property vehicle_terminal_combined forsale_dropship +add_property vehicle_terminal_combined forsale_galaxy_gunship +add_property vehicle_terminal_combined forsale_lodestar +add_property vshev_antiaircraft requirement_certification0 false # max_anti_aircraft +add_property vshev_antiaircraft requirement_certification1 false # max_all +add_property vshev_antipersonnel requirement_certification0 false # max_anti_personnel +add_property vshev_antipersonnel requirement_certification1 false # max_all +add_property vshev_antivehicular requirement_certification0 false # max_anti_vehicular +add_property vshev_antivehicular requirement_certification1 false # max_all +add_property vulture requirement_award0 false # bomber_ace2 +add_property vulture requirement_certification0 false # air_support +add_property wasp requirement_certification0 false # air_cavalry_interceptor +add_property wasp requirement_certification1 false # air_cavalry_interceptor +add_property winchester requirement_certification0 false # standard_assault diff --git a/pslogin/src/main/resources/game_objects32.adb.lst b/pslogin/src/main/resources/game_objects32.adb.lst new file mode 100644 index 000000000..72a6c9053 --- /dev/null +++ b/pslogin/src/main/resources/game_objects32.adb.lst @@ -0,0 +1,80 @@ +add_property ams requirement_certification0 false +add_property anniversary_gun requirement_certification0 false +add_property apc allowed false +add_property apc_nc allowed false +add_property apc_tr allowed false +add_property apc_vs allowed false +add_property aphelion allowed false +add_property aphelion_flight allowed false +add_property aphelion_gunner allowed false +add_property aurora allowed false +add_property battlewagon allowed false +add_property colossus allowed false +add_property colossus_flight allowed false +add_property colossus_gunner allowed false +add_property cycler requirement_certification0 false +add_property delivererv allowed false +add_property dropship requirement_certification0 false +add_property flail allowed false +add_property flechette requirement_certification0 false +add_property fury allowed false +add_property galaxy_gunship allowed false +add_property gauss requirement_certification0 false +add_property heavy_armor allowed false +add_property hunterseeker requirement_certification0 false +add_property lancer requirement_certification0 false +add_property lasher requirement_certification0 false +add_property liberator allowed false +add_property lightgunship allowed false +add_property lightning allowed false +add_property lodestar allowed false +add_property magrider allowed false +add_property mediumtransport allowed false +add_property mini_chaingun requirement_certification0 false +add_property mosquito allowed false +add_property nano_dispenser requirement_certification0 false +add_property nchev allowed false +add_property nchev_antiaircraft allowed false +add_property nchev_antipersonnel allowed false +add_property nchev_antivehicular allowed false +add_property order_terminal forsale_nchev_antiaircraft false +add_property order_terminal forsale_nchev_antipersonnel false +add_property order_terminal forsale_nchev_antivehicular false +add_property order_terminal forsale_trhev_antiaircraft false +add_property order_terminal forsale_trhev_antipersonnel false +add_property order_terminal forsale_trhev_antivehicular false +add_property order_terminal forsale_vshev_antiaircraft false +add_property order_terminal forsale_vshev_antipersonnel false +add_property order_terminal forsale_vshev_antivehicular false +add_property peregrine allowed false +add_property peregrine_flight allowed false +add_property peregrine_gunner allowed false +add_property phantasm purchase_tech_plant false +add_property phantasm requirement_certification0 false +add_property phoenix requirement_certification0 false +add_property prowler allowed false +add_property pulsar requirement_certification0 false +add_property punisher requirement_certification0 false +add_property quadassault allowed false +add_property quadstealth allowed false +add_property r_shotgun requirement_certification0 false +add_property router requirement_certification0 false +add_property skyguard allowed false +add_property striker requirement_certification0 false +add_property switchblade allowed false +add_property threemanheavybuggy allowed false +add_property thunderer allowed false +add_property trhev allowed false +add_property trhev_antiaircraft allowed false +add_property trhev_antipersonnel allowed false +add_property trhev_antivehicular allowed false +add_property two_man_assault_buggy allowed false +add_property twomanheavybuggy allowed false +add_property twomanhoverbuggy allowed false +add_property vanguard allowed false +add_property vshev allowed false +add_property vshev_antiaircraft allowed false +add_property vshev_antipersonnel allowed false +add_property vshev_antivehicular allowed false +add_property vulture allowed false +add_property wasp allowed false diff --git a/pslogin/src/main/scala/PsLogin.scala b/pslogin/src/main/scala/PsLogin.scala index 2502f3e3a..075b79695 100644 --- a/pslogin/src/main/scala/PsLogin.scala +++ b/pslogin/src/main/scala/PsLogin.scala @@ -30,8 +30,8 @@ import services.teamwork.SquadService import scala.collection.JavaConverters._ import scala.concurrent.Await import scala.concurrent.duration._ - import kamon.Kamon +import services.properties.PropertyOverrideManager object PsLogin { private val logger = org.log4s.getLogger @@ -279,6 +279,7 @@ object PsLogin { serviceManager ! ServiceManager.Register(Props[SquadService], "squad") serviceManager ! ServiceManager.Register(Props(classOf[InterstellarCluster], continentList), "cluster") serviceManager ! ServiceManager.Register(Props[AccountPersistenceService], "accountPersistence") + serviceManager ! ServiceManager.Register(Props[PropertyOverrideManager], "propertyOverrideManager") logger.info("Initializing loginRouter & worldRouter") /** Create two actors for handling the login and world server endpoints */ diff --git a/pslogin/src/main/scala/WorldSessionActor.scala b/pslogin/src/main/scala/WorldSessionActor.scala index 3e79fd73d..7392b05fc 100644 --- a/pslogin/src/main/scala/WorldSessionActor.scala +++ b/pslogin/src/main/scala/WorldSessionActor.scala @@ -15,6 +15,7 @@ import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global import scala.util.Success import scodec.bits.ByteVector +import services.properties.PropertyOverrideManager //project imports import csr.{CSRWarp, CSRZone, Traveler} import MDCContextAware.Implicits._ @@ -91,8 +92,9 @@ class WorldSessionActor extends Actor var chatService : ActorRef = ActorRef.noSender var galaxyService : ActorRef = ActorRef.noSender var squadService : ActorRef = ActorRef.noSender - var taskResolver : ActorRef = ActorRef.noSender - var cluster : ActorRef = ActorRef.noSender + var taskResolver : ActorRef = Actor.noSender + var propertyOverrideManager : ActorRef = Actor.noSender + var cluster : ActorRef = Actor.noSender var continent : Zone = Zone.Nowhere var account : Account = null var player : Player = null @@ -242,6 +244,7 @@ class WorldSessionActor extends Actor serviceManager ! Lookup("cluster") serviceManager ! Lookup("galaxy") serviceManager ! Lookup("squad") + serviceManager ! Lookup("propertyOverrideManager") case _ => log.error("Unknown message") @@ -286,6 +289,9 @@ class WorldSessionActor extends Actor case LookupResult("squad", endpoint) => squadService = endpoint log.info("ID: " + sessionId + " Got squad service " + endpoint) + case LookupResult("propertyOverrideManager", endpoint) => + propertyOverrideManager = endpoint + log.info("ID: " + sessionId + " Got propertyOverrideManager service " + endpoint) case ControlPacket(_, ctrl) => handleControlPkt(ctrl) @@ -1015,313 +1021,14 @@ class WorldSessionActor extends Actor StartBundlingPackets() //PropertyOverrideMessage - /* - List Of all Changes - Super Stamina Kits Enabled - Super Stamina Kit Cooldown 20min -> 5min - AP Lasher Bug Fix for Lash - Lasher Balance Change (Lash start immediately instead of 5meters) - Disable ACE and FDU (bug prevention) - Equip/Holster Time Changes for Quality of Life - Ascension, Extinction, and Nexus Battle Island Event Rulesets, Desolation is just default continent ruleset - */ - sendResponse( - PropertyOverrideMessage(List( - GamePropertyScope(0, List( - //Event Kits - Super Stamina Kit - GamePropertyTarget(ObjectClass.super_staminakit, "requirement_award0" -> "false"), - GamePropertyTarget(ObjectClass.super_staminakit, "allowed" -> "true"), - GamePropertyTarget(ObjectClass.super_staminakit, "nodrop" -> "false"), + import akka.pattern.ask + import akka.util.Timeout + implicit val timeout = Timeout(1 seconds) + val future = ask(propertyOverrideManager, PropertyOverrideManager.GetOverridesMessage).mapTo[List[PropertyOverrideMessage.GamePropertyScope]] + val overrides = Await.result(future, 1 second) - //Super Stamina Kit -- Cooldown Timer (5 minutes) - GamePropertyTarget(ObjectClass.super_staminakit, "medkit_reuse_delay" -> "300"), + sendResponse(PropertyOverrideMessage(overrides)) - //Fixes bug preventing AP Lasher from Lashing - GamePropertyTarget(431, "lasher_projectile_ap" -> "false"), - GamePropertyTarget(431, "lasher_projectile" -> "true"), - - //Lasher Balance Change (Time until Orb starts Lashing) - GamePropertyTarget(430, "lash_delay" -> "0.00"), - - //Disable ACE and FDU (bug prevention) - GamePropertyTarget(ObjectClass.ace, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.ace_deployable, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.advanced_ace, "allowed" -> "false"), - - //Equip/Holster Time Changes (Quality of Life) - //Heavy Items -- Equip/Holster Time Changes -- 0.75 seconds - GamePropertyTarget(ObjectClass.r_shotgun, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.r_shotgun, "holstertime" -> "750"), - GamePropertyTarget(ObjectClass.mini_chaingun, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.mini_chaingun, "holstertime" -> "750"), - GamePropertyTarget(ObjectClass.lasher, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.lasher, "holstertime" -> "750"), - GamePropertyTarget(ObjectClass.flamethrower, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.flamethrower, "holstertime" -> "750"), - GamePropertyTarget(ObjectClass.maelstrom, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.maelstrom, "holstertime" -> "750"), - GamePropertyTarget(ObjectClass.advanced_ace, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.advanced_ace, "holstertime" -> "750"), - - //Medium Items -- Equip/Holster Time Changes -- 0.6 seconds - GamePropertyTarget(ObjectClass.suppressor, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.suppressor, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.punisher, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.punisher, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.gauss, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.gauss, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.cycler, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.cycler, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.cycler_v2, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.cycler_v2, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.cycler_v3, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.cycler_v3, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.cycler_v4, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.cycler_v4, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.pulsar, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.pulsar, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.radiator, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.radiator, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.nano_dispenser, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.nano_dispenser, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.flechette, "equiptime" -> "600"), - GamePropertyTarget(ObjectClass.flechette, "holstertime" -> "600"), - GamePropertyTarget(ObjectClass.oicw, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.oicw, "holstertime" -> "750"), - GamePropertyTarget(ObjectClass.pellet_gun, "equiptime" -> "750"), - GamePropertyTarget(ObjectClass.pellet_gun, "holstertime" -> "750"), - - //Small Items -- Equip/Holster Time Changes -- 0.5s - GamePropertyTarget(ObjectClass.medicalapplicator, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.medicalapplicator, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.bank, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.bank, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.trek, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.trek, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.spiker, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.spiker, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.isp, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.isp, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.ilc9, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.ilc9, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.six_shooter, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.six_shooter, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.beamer, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.beamer, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.repeater, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.repeater, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.remote_electronics_kit, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.remote_electronics_kit, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.flail_targeting_laser, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.flail_targeting_laser, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.anniversary_gun, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.anniversary_gun, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.anniversary_guna, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.anniversary_guna, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.anniversary_gunb, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.anniversary_gunb, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.ace, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.ace, "holstertime" -> "500"), - GamePropertyTarget(ObjectClass.ace_deployable, "equiptime" -> "500"), - GamePropertyTarget(ObjectClass.ace_deployable, "holstertime" -> "500"), - - //Knives -- Equip/Holster Time Changes -- 0.25 seconds - GamePropertyTarget(ObjectClass.katana, "equiptime" -> "250"), - GamePropertyTarget(ObjectClass.katana, "holstertime" -> "250"), - GamePropertyTarget(ObjectClass.forceblade, "equiptime" -> "250"), - GamePropertyTarget(ObjectClass.forceblade, "holstertime" -> "250"), - GamePropertyTarget(ObjectClass.magcutter, "equiptime" -> "250"), - GamePropertyTarget(ObjectClass.magcutter, "holstertime" -> "250"), - GamePropertyTarget(ObjectClass.chainblade, "equiptime" -> "250"), - GamePropertyTarget(ObjectClass.chainblade, "holstertime" -> "250") - )), - - GamePropertyScope(29, List( - //Extinction (i1) - ground based bridge brawls! - Battle Island Event - - //Free Certification Grants - GamePropertyTarget(ObjectClass.nano_dispenser, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.ams, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.quadstealth, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.quadassault, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.fury, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.two_man_assault_buggy, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.skyguard, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.twomanhoverbuggy, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.threemanheavybuggy, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.twomanheavybuggy, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.lightning, "requirement_certification0" -> "false"), - - //No Air Vehicles - GamePropertyTarget(ObjectClass.dropship, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.galaxy_gunship, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.liberator, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.lightgunship, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.lodestar, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.mosquito, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.phantasm, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.vulture, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.wasp, "allowed" -> "false"), - - //No Tanks, no BFRs, no Flails, no Deliverer Variants - GamePropertyTarget(ObjectClass.mediumtransport, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.aurora, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.battlewagon, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.flail, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.magrider, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.prowler, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.thunderer, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.vanguard, "allowed" -> "false"), - - //A Tank, but commented out for population purposes - // GamePropertyTarget(ObjectClass.lightning, "allowed" -> "false"), - - //No BFRs - GamePropertyTarget(ObjectClass.aphelion_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.aphelion_gunner, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.colossus_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.colossus_gunner, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.peregrine_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.peregrine_gunner, "allowed" -> "false") - )), - GamePropertyScope(30, List( - //Ascension (i2) - battle for air supremacy! - Battle Island Event - //No Skyguards, no Deliverer Variants, no AA MAX, no BFRs, no Tanks, no Flails Zone specific change – Everyone has access to Empire AV weapons and can pilot air vehicles - - //Allow Galaxy Gunship and Lodestar at Vehicle Terminals on Ascension - GamePropertyTarget(952, "forsale_galaxy_gunship" -> "true"), - GamePropertyTarget(43, "forsale_galaxy_gunship" -> "true"), - GamePropertyTarget(952, "forsale_lodestar" -> "true"), - GamePropertyTarget(43, "forsale_lodestar" -> "true"), - - //Allow Tech Benefit required Aircraft Vehicles at non Tech Benefited Bases - GamePropertyTarget(ObjectClass.liberator, "purchase_tech_plant" -> "false"), - GamePropertyTarget(ObjectClass.lightgunship, "purchase_tech_plant" -> "false"), - GamePropertyTarget(ObjectClass.vulture, "purchase_tech_plant" -> "false"), - GamePropertyTarget(ObjectClass.wasp, "purchase_tech_plant" -> "false"), - - //Cert Grants - GamePropertyTarget(ObjectClass.dropship, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.galaxy_gunship, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.liberator, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.lightgunship, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.lodestar, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.mosquito, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.phantasm, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.vulture, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.wasp, "requirement_certification0" -> "false"), - - GamePropertyTarget(ObjectClass.striker, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.lancer, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.phoenix, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.hunterseeker, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.nano_dispenser, "requirement_certification0" -> "false"), - - //No AA MAXes - GamePropertyTarget(ObjectClass.order_terminal, "forsale_nchev_antiaircraft" -> "false"), - GamePropertyTarget(ObjectClass.order_terminal, "forsale_vshev_antiaircraft" -> "false"), - GamePropertyTarget(ObjectClass.order_terminal, "forsale_trhev_antiaircraft" -> "false"), - - //Custom Setup: Only AMS, Router and ANT can be purchased at the Ground Vehicle Terminals. Take to the skies! - GamePropertyTarget(ObjectClass.apc_nc, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.apc_tr, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.apc_vs, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.aurora, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.battlewagon, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.flail, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.fury, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.lightning, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.magrider, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.mediumtransport, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.prowler, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.quadassault, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.quadstealth, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.skyguard, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.switchblade, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.threemanheavybuggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.thunderer, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.two_man_assault_buggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.twomanheavybuggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.twomanhoverbuggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.vanguard, "allowed" -> "false"), - - //No BFRs - GamePropertyTarget(ObjectClass.aphelion_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.aphelion_gunner, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.colossus_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.colossus_gunner, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.peregrine_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.peregrine_gunner, "allowed" -> "false") - )), - - GamePropertyScope(32, List( - //Nexus (i4) - t3h footzerg! - Battle Island Event - - //Free Vehicle Certification Grants - GamePropertyTarget(ObjectClass.dropship, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.phantasm, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.router, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.ams, "requirement_certification0" -> "false"), - - //Free Weapon Certification Grants - GamePropertyTarget(ObjectClass.anniversary_gun, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.flechette, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.punisher, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.cycler, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.gauss, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.pulsar, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.mini_chaingun, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.r_shotgun, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.lasher, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.striker, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.lancer, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.phoenix, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.hunterseeker, "requirement_certification0" -> "false"), - GamePropertyTarget(ObjectClass.nano_dispenser, "requirement_certification0" -> "false"), - - //Only Galaxies and Phantasms can be purchased at the Dropship Terminal - GamePropertyTarget(ObjectClass.galaxy_gunship, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.liberator, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.lightgunship, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.lodestar, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.mosquito, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.vulture, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.wasp, "allowed" -> "false"), - - //Only Routers and ANTs can be purchased at the Ground Vehicle Terminal (also allowing the AMS for now) - //GamePropertyTarget(ObjectClass.ams, "allowed" -> "false"), //normally disabled - GamePropertyTarget(ObjectClass.apc_nc, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.apc_tr, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.apc_vs, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.aurora, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.battlewagon, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.flail, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.fury, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.lightning, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.magrider, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.mediumtransport, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.prowler, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.quadassault, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.quadstealth, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.skyguard, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.switchblade, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.threemanheavybuggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.thunderer, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.two_man_assault_buggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.twomanheavybuggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.twomanhoverbuggy, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.vanguard, "allowed" -> "false"), - - //No BFRs - GamePropertyTarget(ObjectClass.aphelion_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.aphelion_gunner, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.colossus_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.colossus_gunner, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.peregrine_flight, "allowed" -> "false"), - GamePropertyTarget(ObjectClass.peregrine_gunner, "allowed" -> "false") - )) - )) - ) sendResponse(PlanetsideAttributeMessage(PlanetSideGUID(0), 112, 0)) // disable festive backpacks sendResponse(ReplicationStreamMessage(5, Some(6), Vector.empty)) //clear squad list sendResponse(FriendsResponse(FriendAction.InitializeFriendList, 0, true, true, Nil))