コード例 #1
0
ファイル: PartySpawner.cs プロジェクト: rotorist/FringeWorlds
    public void GenerateTraderParty(string factionID)
    {
        MacroAIParty party = new MacroAIParty();

        party.FactionID    = factionID;
        party.SpawnedShips = new List <ShipBase>();

        Faction faction = GameManager.Inst.NPCManager.AllFactions[party.FactionID];

        List <string> keyList = new List <string>(GameManager.Inst.WorldManager.AllSystems.Keys);

        //StarSystemData currentSystem = GameManager.Inst.WorldManager.AllSystems["washington_system"];
        //StarSystemData currentSystem = GameManager.Inst.WorldManager.AllSystems[keyList[UnityEngine.Random.Range(0, keyList.Count)]];
        StationData    currentStation = GameManager.Inst.WorldManager.GetRandomFriendlyDockableStation(party.FactionID, null);
        StarSystemData currentSystem  = GameManager.Inst.WorldManager.AllSystems[currentStation.SystemID];

        party.CurrentSystemID = currentSystem.ID;

        //StationData currentStation = currentSystem.GetStationByID("planet_colombia_landing");
        //StationData currentStation = currentSystem.Stations[UnityEngine.Random.Range(0, currentSystem.Stations.Count)];
        party.DockedStationID = currentStation.ID;
        Transform origin = GameObject.Find("Origin").transform;

        party.Location    = new RelLoc(origin.position, currentStation.Location.RealPos, origin);
        party.PartyNumber = GameManager.Inst.NPCManager.LastUsedPartyNumber + 1;
        GameManager.Inst.NPCManager.LastUsedPartyNumber = party.PartyNumber;

        //pick 1 freighter loadout for the leader
        if (faction.FreightersPool.Count > 0)
        {
            party.LeaderLoadout = new Loadout(faction.FreightersPool[UnityEngine.Random.Range(0, faction.FreightersPool.Count)]);
        }
        else
        {
            party.LeaderLoadout = new Loadout(faction.FightersPool[UnityEngine.Random.Range(0, faction.FightersPool.Count)]);
        }

        //pick 1-4 fighter loadouts for followers
        party.FollowerLoadouts = new List <Loadout>();
        int numberOfFollowers = UnityEngine.Random.Range(1, 5);

        for (int i = 0; i < numberOfFollowers; i++)
        {
            party.FollowerLoadouts.Add(new Loadout(faction.FightersPool[UnityEngine.Random.Range(0, faction.FightersPool.Count)]));
        }

        MacroAITask task = GameManager.Inst.NPCManager.MacroAI.AssignMacroAITask(MacroAITaskType.None, party);

        party.IsInTradelane = false;
        //party.DestinationCoord = GameManager.Inst.WorldManager.AllNavNodes["cambridge_station"].Location;
        party.MoveSpeed    = 10f;
        party.NextTwoNodes = new List <NavNode>();
        party.PrevNode     = null;    //CreateTempNode(party.Location, "tempstart", GameManager.Inst.WorldManager.AllSystems[party.CurrentSystemID]);

        GameManager.Inst.NPCManager.MacroAI.LoadPartyTreeset(party);

        GameManager.Inst.NPCManager.AllParties.Add(party);
    }
コード例 #2
0
ファイル: MacroAI.cs プロジェクト: rotorist/FringeWorlds
    public MacroAIParty GeneratePlayerParty()
    {
        MacroAIParty party = new MacroAIParty();

        party.FactionID    = "player";
        party.SpawnedShips = new List <ShipBase>();
        party.SpawnedShips.Add(GameManager.Inst.PlayerControl.PlayerShip);
        party.IsPlayerParty = true;

        StarSystemData currentSystem = GameManager.Inst.WorldManager.AllSystems[GameManager.Inst.WorldManager.CurrentSystem.ID];

        party.CurrentSystemID = currentSystem.ID;
        StationData currentStation = null;

        party.DockedStationID = "";
        Transform origin = GameObject.Find("Origin").transform;

        party.Location           = new RelLoc(origin.position, GameManager.Inst.PlayerControl.PlayerShip.transform.position, origin);
        party.PartyNumber        = 0;
        party.SpawnedShipsLeader = GameManager.Inst.PlayerControl.PlayerShip;
        party.ShouldEnableAI     = true;

        //generate loadout
        party.LeaderLoadout = GameManager.Inst.PlayerProgress.ActiveLoadout;

        party.FollowerLoadouts = new List <Loadout>();

        /*
         * for(int i=0; i<4; i++)
         * {
         *      Loadout loadout = new Loadout("LightFighter", ShipType.Fighter);
         *      party.FollowerLoadouts.Add(loadout);
         *      loadout.WeaponJoints = new Dictionary<string, string>()
         *      {
         *              { "GimballLeft", "Gun1" },
         *              { "GimballRight", "Gun1" },
         *      };
         * }*/

        MacroAITask task = null;

        party.IsInTradelane = false;
        //party.DestinationCoord = GameManager.Inst.WorldManager.AllNavNodes["cambridge_station"].Location;
        party.MoveSpeed    = 10f;
        party.NextTwoNodes = new List <NavNode>();
        party.PrevNode     = null;    //CreateTempNode(party.Location, "tempstart", GameManager.Inst.WorldManager.AllSystems[party.CurrentSystemID]);

        LoadPartyTreeset(party);
        GenerateFormationForParty(party);

        GameManager.Inst.NPCManager.AllParties.Add(party);

        return(party);
    }
コード例 #3
0
ファイル: AIDebugger.cs プロジェクト: rotorist/FringeWorlds
    // Update is called once per frame
    void Update()
    {
        if (!Enabled)
        {
            return;
        }

        //list all parties and their system
        AllParties = new List <string>();
        foreach (MacroAIParty party in GameManager.Inst.NPCManager.AllParties)
        {
            string entry = party.PartyNumber + " " + party.CurrentSystemID;
            AllParties.Add(entry);
        }

        if (TargetNPC != null)
        {
            NPCRunningNodesHist = new List <string>(TargetNPC.MyAI.RunningNodeHist.DeepPeek(6));
            if (TargetNPC.MyAI.MyParty != null)
            {
                PartyRunningNodesHist = new List <string>(TargetNPC.MyAI.MyParty.RunningNodeHist.DeepPeek(6));
            }

            if (TargetNPC.MyAI.MyParty != null && TargetNPC.MyAI.MyParty.CurrentTask != null)
            {
                MacroAITask task = TargetNPC.MyAI.MyParty.CurrentTask;
                TaskInfo = getTaskInfo(task);
            }
        }
        else if (TargetPartyNumber > 0)
        {
            foreach (MacroAIParty party in GameManager.Inst.NPCManager.AllParties)
            {
                if (party.PartyNumber == TargetPartyNumber)
                {
                    PartyRunningNodesHist = new List <string>(party.RunningNodeHist.DeepPeek(6));
                    if (party.CurrentTask != null)
                    {
                        TaskInfo = getTaskInfo(party.CurrentTask);
                    }
                }
            }
        }
    }
コード例 #4
0
    private void AutopilotGoTo()
    {
        if (SelectedObject != null)
        {
            Vector3 gotoDest = Vector3.zero;
            if (SelectedObjectType == SelectedObjectType.Planet)
            {
                Planet  planet   = (Planet)SelectedObject;
                Vector3 distance = planet.transform.position - PlayerShip.transform.position;
                gotoDest = planet.transform.position - distance.normalized * (40f + planet.OriginalScale.x / 2f);
            }
            else if (SelectedObjectType == SelectedObjectType.Station)
            {
                StationBase station  = (StationBase)SelectedObject;
                Vector3     distance = station.transform.position - PlayerShip.transform.position;
                gotoDest = PlayerShip.transform.position + distance.normalized * (distance.magnitude - 20f);
            }

            if (gotoDest != Vector3.zero)
            {
                MacroAITask task = new MacroAITask();
                task.TaskType           = MacroAITaskType.Travel;
                task.TravelDestSystemID = GameManager.Inst.WorldManager.CurrentSystem.ID;
                task.TravelDestNodeID   = "";
                task.IsDestAStation     = false;
                Transform origin = GameObject.Find("Origin").transform;
                task.TravelDestCoord = new RelLoc(origin.position, gotoDest, origin);

                IsAutopilot             = true;
                PlayerParty.WaitTimer   = 0;
                PlayerParty.CurrentTask = task;

                PlayerParty.HasReachedDestNode = false;
                PlayerParty.DestNode           = GameManager.Inst.NPCManager.MacroAI.GetClosestNodeToLocation(task.TravelDestCoord.RealPos, GameManager.Inst.WorldManager.AllSystems[task.TravelDestSystemID]);
                Debug.Log("Autopilot dest node " + PlayerParty.DestNode.ID);
                PlayerAutopilot.Activate();
                _isMouseFlight = false;

                InputEventHandler.Instance.InputState = InputState.Autopilot;
            }
        }
    }
コード例 #5
0
ファイル: AIDebugger.cs プロジェクト: rotorist/FringeWorlds
    private string getTaskInfo(MacroAITask task)
    {
        string taskInfo = task.TaskType.ToString();

        if (task.TaskType == MacroAITaskType.Stay)
        {
            taskInfo += " for " + task.StayDuration;
        }
        else if (task.TaskType == MacroAITaskType.Travel)
        {
            taskInfo += " to " + task.TravelDestSystemID;
            if (task.IsDestAStation)
            {
                taskInfo += "\\" + task.TravelDestNodeID;
            }
            else
            {
                taskInfo += "\\" + task.TravelDestCoord.RealPos.ToString();
            }
        }

        return(taskInfo);
    }
コード例 #6
0
    public void LoadWorldData()
    {
        GameManager.Inst.NPCManager.LastUsedPartyNumber = CurrentSave.LastUsedPartyNumber;

        //loading all NPC and player parties
        Debug.Log("Loading AI Parties, there are " + CurrentSave.AllNonPlayerParties.Count);
        foreach (MacroAIPartySaveData partyData in CurrentSave.AllNonPlayerParties)
        {
            Debug.Log("Loading Party " + partyData.PartyNumber);
            MacroAIParty party = new MacroAIParty();
            party.FactionID    = partyData.FactionID;
            party.SpawnedShips = new List <ShipBase>();

            //List<string> keyList = new List<string>(GameManager.Inst.WorldManager.AllSystems.Keys);
            StarSystemData currentSystem = GameManager.Inst.WorldManager.AllSystems[partyData.CurrentSystemID];
            party.CurrentSystemID = currentSystem.ID;
            party.DockedStationID = partyData.DockedStationID;

            if (GameManager.Inst.WorldManager.CurrentSystem != null && currentSystem.ID == GameManager.Inst.WorldManager.CurrentSystem.ID)
            {
                party.Location = new RelLoc(currentSystem.OriginPosition, partyData.Location.ConvertToVector3(), GameObject.Find("Origin").transform, 1);
            }
            else
            {
                party.Location = new RelLoc(currentSystem.OriginPosition, partyData.Location.ConvertToVector3(), null, 1);
            }
            party.PartyNumber = partyData.PartyNumber;

            //generate loadout
            party.LeaderLoadout = LoadLoadoutFromSave(partyData.LeaderLoadout);


            party.FollowerLoadouts = new List <Loadout>();
            foreach (LoadoutSaveData loadoutData in partyData.FollowerLoadouts)
            {
                Loadout loadout = LoadLoadoutFromSave(loadoutData);
                party.FollowerLoadouts.Add(loadout);
            }


            if (partyData.CurrentTask != null)
            {
                MacroAITask task = new MacroAITask();
                task.IsDestAStation = partyData.CurrentTask.IsDestAStation;
                task.StayDuration   = partyData.CurrentTask.StayDuration;
                task.TaskType       = partyData.CurrentTask.TaskType;

                if (partyData.CurrentTask.TravelDestCoord != null)
                {
                    if (currentSystem.ID == GameManager.Inst.WorldManager.CurrentSystem.ID)
                    {
                        task.TravelDestCoord = new RelLoc(currentSystem.OriginPosition, partyData.CurrentTask.TravelDestCoord.ConvertToVector3(), GameObject.Find("Origin").transform, 1);
                    }
                    else
                    {
                        task.TravelDestCoord = new RelLoc(currentSystem.OriginPosition, partyData.CurrentTask.TravelDestCoord.ConvertToVector3(), null, 1);
                    }
                }
                task.TravelDestNodeID   = partyData.CurrentTask.TravelDestNodeID;
                task.TravelDestSystemID = partyData.CurrentTask.TravelDestSystemID;
                Debug.Log("Loading task type " + task.TaskType.ToString() + " " + task.TravelDestNodeID);
                party.CurrentTask = task;

                if (party.CurrentTask.TaskType == MacroAITaskType.Travel)
                {
                    if (party.CurrentTask.IsDestAStation)
                    {
                        party.DestNode = GameManager.Inst.WorldManager.AllNavNodes[party.CurrentTask.TravelDestNodeID];
                    }
                    else
                    {
                        //party.DestNode = CreateTempNode(party.CurrentTask.TravelDestCoord, "tempdest", GameManager.Inst.WorldManager.AllSystems[party.CurrentTask.TravelDestSystemID]);
                        party.DestNode = GameManager.Inst.NPCManager.MacroAI.GetClosestNodeToLocation(party.CurrentTask.TravelDestCoord.RealPos, GameManager.Inst.WorldManager.AllSystems[party.CurrentTask.TravelDestSystemID]);
                    }
                }
            }


            party.IsInTradelane = partyData.IsInTradelane;
            party.MoveSpeed     = partyData.MoveSpeed;
            party.NextTwoNodes  = new List <NavNode>();
            foreach (string nodeID in partyData.NextTwoNodesIDs)
            {
                Debug.Log("Next node " + nodeID);
                party.NextTwoNodes.Add(GameManager.Inst.WorldManager.AllNavNodes[nodeID]);
            }
            if (partyData.PrevNodeID != "")
            {
                party.PrevNode = GameManager.Inst.WorldManager.AllNavNodes[partyData.PrevNodeID];
            }
            party.TreeSet = new Dictionary <string, BehaviorTree>();
            foreach (string treeSetName in partyData.TreeSetNames)
            {
                party.TreeSet.Add(treeSetName, GameManager.Inst.DBManager.XMLParserBT.LoadBehaviorTree(treeSetName, null, party));
            }


            GameManager.Inst.NPCManager.AllParties.Add(party);
        }

        //load station data
        GameManager.Inst.WorldManager.DockableStationDatas = new Dictionary <string, DockableStationData>();
        foreach (DockableStationSaveData saveData in CurrentSave.DockableStationDatas)
        {
            DockableStationData stationData = new DockableStationData();
            stationData.DemandResources = saveData.DemandResources;
            stationData.DockedParties   = new List <MacroAIParty>();
            foreach (int partyNumber in saveData.DockedPartiesNumbers)
            {
                stationData.DockedParties.Add(GameManager.Inst.NPCManager.GetPartyByNumber(partyNumber));
            }
            stationData.FuelPrice                    = saveData.FuelPrice;
            stationData.LifeSupportPrice             = saveData.LifeSupportPrice;
            stationData.ShipsForSale                 = saveData.ShipsForSale;
            stationData.StationID                    = saveData.StationID;
            stationData.FactionID                    = saveData.FactionID;
            stationData.TraderSaleItems              = saveData.TraderSaleItems;
            stationData.UndesiredItemPriceMultiplier = saveData.UndesiredItemPriceMultiplier;
            stationData.DemandNormalizeSpeed         = saveData.DemandNormalizeSpeed;
            if (saveData.HomeStationSaveData != null)
            {
                stationData.HomeStationData               = new HomeStationData();
                stationData.HomeStationData.HangarSize    = saveData.HomeStationSaveData.HangarSize;
                stationData.HomeStationData.VaultSize     = saveData.HomeStationSaveData.VaultSize;
                stationData.HomeStationData.ItemsInVault  = saveData.HomeStationSaveData.ItemsInVault;
                stationData.HomeStationData.ShipsInHangar = new List <Loadout>();
                foreach (LoadoutSaveData loadoutSaveData in saveData.HomeStationSaveData.ShipsInHangar)
                {
                    stationData.HomeStationData.ShipsInHangar.Add(LoadLoadoutFromSave(loadoutSaveData));
                }
            }

            GameManager.Inst.WorldManager.DockableStationDatas.Add(stationData.StationID, stationData);
        }

        //load time
        GameManager.Inst.WorldManager.CurrentTime = CurrentSave.CurrentTime;
    }
コード例 #7
0
ファイル: MacroAI.cs プロジェクト: rotorist/FringeWorlds
    public MacroAITask AssignMacroAITask(MacroAITaskType prevTaskType, MacroAIParty party)
    {
        MacroAITask task = new MacroAITask();

        if (prevTaskType == MacroAITaskType.None)
        {
            if (UnityEngine.Random.value > 0.0f)
            {
                prevTaskType = MacroAITaskType.Stay;
            }
            else
            {
                prevTaskType = MacroAITaskType.Travel;
            }
        }

        party.PrevNode = null;
        if (party.NextTwoNodes != null)
        {
            party.NextTwoNodes.Clear();
        }
        if (prevTaskType == MacroAITaskType.Travel)
        {
            if (!string.IsNullOrEmpty(party.DockedStationID) && UnityEngine.Random.value < 0.75f)
            {
                task.TaskType     = MacroAITaskType.Trade;
                task.StayDuration = UnityEngine.Random.Range(10f, 30f);
                party.WaitTimer   = 0;
                party.RunningNodeHist.UniquePush("Trading for " + task.StayDuration);
                Debug.LogError("Party " + party.PartyNumber + " Task has been assigned to party: Trade, current station" + party.DockedStationID);

                TradeCommodity(party, GameManager.Inst.WorldManager.DockableStationDatas[party.DockedStationID]);
            }
            else
            {
                task.TaskType     = MacroAITaskType.Stay;
                task.StayDuration = UnityEngine.Random.Range(15f, 35f);
                party.WaitTimer   = 0;
                party.RunningNodeHist.UniquePush("Stay for " + task.StayDuration);
                Debug.LogError("Party " + party.PartyNumber + " Task has been assigned to party: " + task.TaskType + " for " + task.StayDuration);
            }
        }
        else if (prevTaskType == MacroAITaskType.Stay || prevTaskType == MacroAITaskType.Trade)
        {
            task.TaskType = MacroAITaskType.Travel;
            List <string> keyList = new List <string>(GameManager.Inst.WorldManager.AllSystems.Keys);
            if (Time.time < 0)
            {
                Debug.LogError("new task for initial test");
                StarSystemData destSystem = GameManager.Inst.WorldManager.AllSystems[keyList[UnityEngine.Random.Range(0, keyList.Count)]];
                //StarSystemData destSystem = GameManager.Inst.WorldManager.AllSystems["washington_system"];
                //StarSystemData destSystem = GameManager.Inst.WorldManager.AllSystems["new_england_system"];
                task.TravelDestSystemID = destSystem.ID;

                task.TravelDestNodeID = destSystem.Stations[UnityEngine.Random.Range(0, destSystem.Stations.Count)].ID;
                //task.TravelDestNodeID = "annandale_station";//"planet_colombia_landing";//"bethesda_station";
                task.IsDestAStation = true;
                //task.TravelDestCoord = new RelLoc(destSystem.OriginPosition, new Vector3(-28.3f, 5f, 418.8f), null);
            }
            else
            {
                Debug.LogError("new task to random station in random system");
                StarSystemData destSystem = GameManager.Inst.WorldManager.AllSystems[keyList[UnityEngine.Random.Range(0, keyList.Count)]];
                //StarSystemData destSystem = GameManager.Inst.WorldManager.AllSystems["washington_system"];

                task.TravelDestSystemID = destSystem.ID;
                task.TravelDestNodeID   = destSystem.Stations[UnityEngine.Random.Range(0, destSystem.Stations.Count)].ID;
                //task.TravelDestNodeID = "planet_colombia_landing";
                task.IsDestAStation = true;
            }

            party.WaitTimer = 0;
            Debug.LogError("Party " + party.PartyNumber + " Task has been assigned to party: " + task.TaskType + " to " + (task.IsDestAStation ? task.TravelDestNodeID : task.TravelDestCoord.ToString()));
        }

        party.CurrentTask        = task;
        party.HasReachedDestNode = false;

        if (party.CurrentTask.TaskType == MacroAITaskType.Travel)
        {
            if (party.CurrentTask.IsDestAStation)
            {
                party.DestNode = GameManager.Inst.WorldManager.AllNavNodes[party.CurrentTask.TravelDestNodeID];
            }
            else
            {
                //party.DestNode = CreateTempNode(party.CurrentTask.TravelDestCoord, "tempdest", GameManager.Inst.WorldManager.AllSystems[party.CurrentTask.TravelDestSystemID]);
                party.DestNode = GetClosestNodeToLocation(party.CurrentTask.TravelDestCoord.RealPos, GameManager.Inst.WorldManager.AllSystems[party.CurrentTask.TravelDestSystemID]);
            }
        }



        return(task);
    }
コード例 #8
0
ファイル: MacroAI.cs プロジェクト: rotorist/FringeWorlds
    public void GenerateTestParty(string factionID)
    {
        MacroAIParty party = new MacroAIParty();

        party.FactionID    = factionID;
        party.SpawnedShips = new List <ShipBase>();

        List <string> keyList = new List <string>(GameManager.Inst.WorldManager.AllSystems.Keys);

        //StarSystemData currentSystem = GameManager.Inst.WorldManager.AllSystems["washington_system"];
        StarSystemData currentSystem = GameManager.Inst.WorldManager.AllSystems[keyList[UnityEngine.Random.Range(0, keyList.Count)]];

        party.CurrentSystemID = currentSystem.ID;

        //StationData currentStation = currentSystem.GetStationByID("planet_colombia_landing");
        StationData currentStation = currentSystem.Stations[UnityEngine.Random.Range(0, currentSystem.Stations.Count)];

        party.DockedStationID = "planet_colombia_landing";
        Transform origin = GameObject.Find("Origin").transform;

        party.Location    = new RelLoc(origin.position, currentStation.Location.RealPos, origin);
        party.PartyNumber = GameManager.Inst.NPCManager.LastUsedPartyNumber + 1;
        GameManager.Inst.NPCManager.LastUsedPartyNumber = party.PartyNumber;

        Item        item1     = new Item(GameManager.Inst.ItemManager.GetItemStats("wc_VikoWeaponCapacitorMK1"));
        InvItemData itemData1 = new InvItemData();

        itemData1.Item     = item1;
        itemData1.Quantity = 1;


        Item        item2     = new Item(GameManager.Inst.ItemManager.GetItemStats("scn_RadianTekShortRangeScanner"));
        InvItemData itemData2 = new InvItemData();

        itemData2.Item     = item2;
        itemData2.Quantity = 1;


        Item        item3     = new Item(GameManager.Inst.ItemManager.GetItemStats("thr_StrelskyThrusterMK1"));
        InvItemData itemData3 = new InvItemData();

        itemData3.Item     = item3;
        itemData3.Quantity = 1;


        Item        item4     = new Item(GameManager.Inst.ItemManager.GetItemStats("shd_NCPTransporterShieldMK1"));
        InvItemData itemData4 = new InvItemData();

        itemData4.Item     = item4;
        itemData4.Quantity = 1;


        Item        item5     = new Item(GameManager.Inst.ItemManager.GetItemStats("dfs_CMDispenser"));
        InvItemData itemData5 = new InvItemData();

        itemData5.Item          = item5;
        itemData5.Quantity      = 1;
        itemData5.RelatedItemID = "ammo_LongDurationCM";


        Item        item10     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_SDCStomperAutocannon"));
        InvItemData itemData10 = new InvItemData();

        itemData10.Item          = item10;
        itemData10.Quantity      = 1;
        itemData10.RelatedItemID = "ammo_20mmTitaniumSlugs";


        Item        item11     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_StrelskyScreamerMissileLauncher"));
        InvItemData itemData11 = new InvItemData();

        itemData11.Item          = item11;
        itemData11.Quantity      = 1;
        itemData11.RelatedItemID = "ammo_StrelskySeekerMissile";


        Item        item12     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_AlFasadIonFluxTurretMK1"));
        InvItemData itemData12 = new InvItemData();

        itemData12.Item     = item12;
        itemData12.Quantity = 1;


        Item        item13     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_CGGAnnihilatorTurretMK2"));
        InvItemData itemData13 = new InvItemData();

        itemData13.Item     = item13;
        itemData13.Quantity = 1;


        Item        item14     = new Item(GameManager.Inst.ItemManager.GetItemStats("shd_KeslerFighterShieldMK1"));
        InvItemData itemData14 = new InvItemData();

        itemData14.Item     = item14;
        itemData14.Quantity = 1;

        Item        item15     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_AlFasadStingerPulseCannon"));
        InvItemData itemData15 = new InvItemData();

        itemData15.Item     = item15;
        itemData15.Quantity = 1;


        Item        item20     = new Item(GameManager.Inst.ItemManager.GetItemStats("ammo_LongDurationCM"));
        InvItemData itemData20 = new InvItemData();

        itemData20.Item     = item20;
        itemData20.Quantity = UnityEngine.Random.Range(1, 3);


        Item        item21     = new Item(GameManager.Inst.ItemManager.GetItemStats("ammo_20mmTitaniumSlugs"));
        InvItemData itemData21 = new InvItemData();

        itemData21.Item     = item21;
        itemData21.Quantity = 500;


        Item        item101     = new Item(GameManager.Inst.ItemManager.GetItemStats("wc_VikoWeaponCapacitorMK1"));
        InvItemData itemData101 = new InvItemData();

        itemData101.Item     = item101;
        itemData101.Quantity = 1;


        Item        item102     = new Item(GameManager.Inst.ItemManager.GetItemStats("scn_RadianTekShortRangeScanner"));
        InvItemData itemData102 = new InvItemData();

        itemData102.Item     = item102;
        itemData102.Quantity = 1;


        Item        item103     = new Item(GameManager.Inst.ItemManager.GetItemStats("thr_StrelskyThrusterMK1"));
        InvItemData itemData103 = new InvItemData();

        itemData103.Item     = item103;
        itemData103.Quantity = 1;


        Item        item104     = new Item(GameManager.Inst.ItemManager.GetItemStats("shd_NCPTransporterShieldMK1"));
        InvItemData itemData104 = new InvItemData();

        itemData104.Item     = item104;
        itemData104.Quantity = 1;


        Item        item105     = new Item(GameManager.Inst.ItemManager.GetItemStats("dfs_CMDispenser"));
        InvItemData itemData105 = new InvItemData();

        itemData105.Item          = item105;
        itemData105.Quantity      = 1;
        itemData105.RelatedItemID = "ammo_LongDurationCM";


        Item        item110     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_SDCStomperAutocannon"));
        InvItemData itemData110 = new InvItemData();

        itemData110.Item          = item110;
        itemData110.Quantity      = 1;
        itemData110.RelatedItemID = "ammo_20mmTitaniumSlugs";


        Item        item111     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_StrelskyScreamerMissileLauncher"));
        InvItemData itemData111 = new InvItemData();

        itemData111.Item          = item111;
        itemData111.Quantity      = 1;
        itemData111.RelatedItemID = "ammo_StrelskySeekerMissile";


        Item        item112     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_AlFasadIonFluxTurretMK1"));
        InvItemData itemData112 = new InvItemData();

        itemData112.Item     = item112;
        itemData112.Quantity = 1;


        Item        item113     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_CGGAnnihilatorTurretMK2"));
        InvItemData itemData113 = new InvItemData();

        itemData113.Item     = item113;
        itemData113.Quantity = 1;


        Item        item114     = new Item(GameManager.Inst.ItemManager.GetItemStats("shd_KeslerFighterShieldMK1"));
        InvItemData itemData114 = new InvItemData();

        itemData114.Item     = item114;
        itemData114.Quantity = 1;

        Item        item115     = new Item(GameManager.Inst.ItemManager.GetItemStats("wpn_AlFasadStingerPulseCannon"));
        InvItemData itemData115 = new InvItemData();

        itemData115.Item     = item115;
        itemData115.Quantity = 1;


        Item        item120     = new Item(GameManager.Inst.ItemManager.GetItemStats("ammo_LongDurationCM"));
        InvItemData itemData120 = new InvItemData();

        itemData120.Item     = item120;
        itemData120.Quantity = UnityEngine.Random.Range(1, 3);


        Item        item121     = new Item(GameManager.Inst.ItemManager.GetItemStats("ammo_20mmTitaniumSlugs"));
        InvItemData itemData121 = new InvItemData();

        itemData121.Item     = item121;
        itemData121.Quantity = 500;

        //generate loadout
        party.LeaderLoadout = new Loadout("Trimaran", ShipType.Transport);

        party.LeaderLoadout.HullAmount        = GameManager.Inst.ItemManager.GetShipStats(party.LeaderLoadout.ShipID).Hull;
        party.LeaderLoadout.FuelAmount        = GameManager.Inst.ItemManager.GetShipStats(party.LeaderLoadout.ShipID).MaxFuel;
        party.LeaderLoadout.LifeSupportAmount = GameManager.Inst.ItemManager.GetShipStats(party.LeaderLoadout.ShipID).LifeSupport;

        party.LeaderLoadout.Defensives = new List <InvItemData>();

        party.LeaderLoadout.ShipMods = new InvItemData[GameManager.Inst.ItemManager.GetShipStats(party.LeaderLoadout.ShipID).ModSlots];



        party.LeaderLoadout.WeaponCapacitor = itemData1;
        party.LeaderLoadout.Shield          = itemData4;
        party.LeaderLoadout.Defensives.Add(itemData5);
        party.LeaderLoadout.Thruster = itemData3;
        party.LeaderLoadout.Scanner  = itemData2;
        party.LeaderLoadout.AmmoBayItems.Add(itemData20);
        party.LeaderLoadout.AmmoBayItems.Add(itemData21);

        party.LeaderLoadout.WeaponJoints = new Dictionary <string, InvItemData>()
        {
            { "GimballLeft", itemData10 },
            { "GimballRight", itemData10 },
            { "TurretLeft", itemData12 },
            { "TurretRight", itemData12 },
            { "TurretTop", itemData13 },
        };



        party.FollowerLoadouts = new List <Loadout>();
        for (int i = 0; i < UnityEngine.Random.Range(1, 5); i++)
        {
            Loadout loadout = new Loadout("Spitfire", ShipType.Fighter);
            party.FollowerLoadouts.Add(loadout);
            loadout.WeaponJoints = new Dictionary <string, InvItemData>()
            {
                { "GimballLeft", itemData115 },
                { "GimballRight", itemData115 },
                { "GimballFront", itemData111 },
            };

            loadout.HullAmount        = GameManager.Inst.ItemManager.GetShipStats(loadout.ShipID).Hull;
            loadout.FuelAmount        = GameManager.Inst.ItemManager.GetShipStats(loadout.ShipID).MaxFuel;
            loadout.LifeSupportAmount = GameManager.Inst.ItemManager.GetShipStats(loadout.ShipID).LifeSupport;

            loadout.Defensives = new List <InvItemData>();

            loadout.WeaponCapacitor = itemData1;
            if (UnityEngine.Random.value > 0.6f)
            {
                loadout.Defensives.Add(itemData5);
            }
            loadout.Shield   = itemData114;
            loadout.Thruster = itemData103;
            loadout.Scanner  = itemData102;
            loadout.AmmoBayItems.Add(itemData120);
            loadout.AmmoBayItems.Add(itemData121);

            loadout.ShipMods = new InvItemData[GameManager.Inst.ItemManager.GetShipStats(loadout.ShipID).ModSlots];
        }


        MacroAITask task = AssignMacroAITask(MacroAITaskType.None, party);

        party.IsInTradelane = false;
        //party.DestinationCoord = GameManager.Inst.WorldManager.AllNavNodes["cambridge_station"].Location;
        party.MoveSpeed    = 10f;
        party.NextTwoNodes = new List <NavNode>();
        party.PrevNode     = null;    //CreateTempNode(party.Location, "tempstart", GameManager.Inst.WorldManager.AllSystems[party.CurrentSystemID]);

        LoadPartyTreeset(party);

        GameManager.Inst.NPCManager.AllParties.Add(party);
    }