Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Meridius_IX's Pirate AI Systems
- double player_detect_range = 20000; //If player is further than this value from drone, it will not execute any behavioral scripting.
- //////////////////////////////////////////////////////
- //Do Not Touch Anything Below Here
- //////////////////////////////////////////////////////
- double player_drone_distance = 0;
- double player_origin_distance = 0;
- double drone_origin_distance = 0;
- //Raycast Scan Data
- MyDetectedEntityInfo scanned_target;
- bool valid_scanned_target = false;
- double scanned_target_distance = 0;
- Vector3D scanned_target_coords = new Vector3D(0,0,0);
- IMyRemoteControl remote_control;
- IMyRadioAntenna antenna;
- IMyWarhead warhead;
- void Main(string argument){
- Vector3D world_center = new Vector3D(0,0,0);
- Vector3D player_coords = new Vector3D(0,0,0);
- Vector3D drone_coords = new Vector3D(0,0,0);
- Vector3D origin_coords = new Vector3D(0,0,0);
- //Find Remote Control Block(s)
- List<IMyTerminalBlock> remote_control_list = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyRemoteControl>(remote_control_list);
- if(remote_control_list.Count != 0){
- for(int i = 0; i < remote_control_list.Count; i++){
- if(remote_control_list[i].IsFunctional == true){
- remote_control = remote_control_list[i] as IMyRemoteControl;
- break;
- }
- }
- }else{
- Echo("No Remote Control Block Found. Script Cannot Execute.");
- return;
- }
- //Check If Drone is NPC Owned
- remote_control.GetNearestPlayer(out player_coords);
- if(player_coords == world_center){
- Echo("Drone is not owned by Hostile NPC. Script Cannot Continue.");
- return;
- }
- drone_coords = remote_control.GetPosition();
- valid_scanned_target = RaycastScan();
- //Get & Set Origin Coords
- if(this.Storage == null || this.Storage == ""){
- this.Storage = drone_coords.ToString();
- origin_coords = drone_coords;
- }else{
- Vector3D.TryParse(this.Storage, out origin_coords);
- }
- //Calculate Distances
- player_drone_distance = MeasureDistance(player_coords, drone_coords);
- player_origin_distance = MeasureDistance(player_coords, origin_coords);
- drone_origin_distance = MeasureDistance(drone_coords, origin_coords);
- scanned_target_distance = MeasureDistance(drone_coords, scanned_target_coords);
- if(player_drone_distance > player_detect_range){
- Echo("No Player Detected. Aborting Script Execution.");
- }
- //////////////////////////////////////////////////////
- //Pirate Behavior Start
- //////////////////////////////////////////////////////
- List<IMyTerminalBlock> antenna_list = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyRadioAntenna>(antenna_list);
- antenna = null;
- bool gear_locked = LandingGearCheck();
- if(antenna_list.Count != 0){
- for(int i = 0; i < antenna_list.Count; i++){
- if(antenna_list[i].IsFunctional == true){
- antenna = antenna_list[i] as IMyRadioAntenna;
- break;
- }
- }
- }
- if(player_drone_distance < 100){
- remote_control.ApplyAction("DockingMode_Off");
- }else{
- remote_control.ApplyAction("DockingMode_Off");
- }
- if(valid_scanned_target == true){
- remote_control.ClearWaypoints();
- remote_control.AddWaypoint(scanned_target_coords, "Target");
- remote_control.SetAutoPilotEnabled(true);
- }else{
- remote_control.ClearWaypoints();
- remote_control.AddWaypoint(player_coords, "Player");
- remote_control.SetAutoPilotEnabled(true);
- }
- //Reinforcements
- if(antenna != null && valid_scanned_target == true && gear_locked == true){
- antenna.ApplyAction("OnOff_On");
- antenna.SetValueBool("EnableBroadCast", true);
- antenna.CustomName = "Target Contact Confirmed";
- }
- //Explode Drone
- bool getting_hacked = HackingDetection();
- if(antenna != null || getting_hacked == true){
- BlockActivation("Warheads");
- }
- //////////////////////////////////////////////////////
- //Pirate Behavior End
- //////////////////////////////////////////////////////
- }
- bool RaycastScan(){
- List<IMyTerminalBlock> camera_list = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyCameraBlock>(camera_list);
- if(camera_list.Count != 0){
- for(int i = 0; i < camera_list.Count; i++){
- IMyCameraBlock camera = camera_list[i] as IMyCameraBlock;
- if(camera.IsFunctional == true){
- camera.EnableRaycast = true;
- if(camera.CanScan(1600)){
- scanned_target = camera.Raycast(1600, 0, 0);
- if(scanned_target.Relationship.ToString() != "Owner" || scanned_target.Relationship.ToString() != "FactionShare"){
- if(scanned_target.Type.ToString() == "LargeGrid" || scanned_target.Type.ToString() == "SmallGrid" || scanned_target.Type.ToString() == "CharacterHuman"){
- scanned_target_coords = (Vector3D)scanned_target.HitPosition;
- return true;
- }
- }
- }
- }
- }
- }else{
- Echo("No Camera Block Found. Cannot Do Raycast Scan.");
- return false;
- }
- return false;
- }
- bool HackingDetection(){
- List<IMyTerminalBlock> all_blocks = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyTerminalBlock>(all_blocks);
- for(int i = 0; i < all_blocks.Count; i++){
- if(all_blocks[i].IsBeingHacked == true){
- return true;
- }
- }
- return false;
- }
- void BlockActivation(string blocks){
- if(blocks == "Warheads"){
- List<IMyTerminalBlock> warhead_list = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyWarhead>(warhead_list);
- for(int i = 0; i < warhead_list.Count; i++){
- warhead = warhead_list[i] as IMyWarhead;
- warhead.ApplyAction("Detonate");
- }
- }
- }
- bool LandingGearCheck(){
- List<IMyTerminalBlock> landing_gear_list = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyLandingGear>(landing_gear_list);
- if(landing_gear_list.Count != 0){
- for(int i = 0; i < landing_gear_list.Count; i++){
- IMyLandingGear landing_gear = landing_gear_list[i] as IMyLandingGear;
- if(landing_gear.IsLocked == true){
- return true;
- }
- }
- }
- return false;
- }
- double MeasureDistance(Vector3D point_a, Vector3D point_b){
- double result = Math.Round( Vector3D.Distance( point_a, point_b ), 2 );
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement