Ejemplo n.º 1
0
    public MutantCharacter SpawnRandomAnimalCharacter(string name, AISquad squad, Vector3 loc)
    {
        MutantCharacter character = GameObject.Instantiate(Resources.Load("MutantAnimal") as GameObject).GetComponent <MutantCharacter>();

        character.CharacterID = name;

        character.Initialize();
        character.CharacterType      = CharacterType.Animal;
        character.MyNavAgent.enabled = false;
        character.Faction            = squad.Faction;
        character.SquadID            = squad.ID;

        GameManager.Inst.ItemManager.LoadNPCInventory(character.Inventory, squad.Faction, 0);
        character.MyAI.WeaponSystem.LoadWeaponsFromInventory(false);

        character.transform.position = loc;

        character.MyNavAgent.enabled = true;

        character.gameObject.name = character.gameObject.name + _counter.ToString();
        _counter++;



        return(character);
    }
Ejemplo n.º 2
0
 public void RemoveExplorerSquad(AISquad squad)
 {
     if (_explorerSquads.Contains(squad))
     {
         _explorerSquads.Remove(squad);
     }
 }
Ejemplo n.º 3
0
    public HumanCharacter SpawnRandomHumanCharacter(string name, AISquad squad, Vector3 loc)
    {
        HumanCharacter character = GameObject.Instantiate(Resources.Load("HumanCharacter") as GameObject).GetComponent <HumanCharacter>();



        character.CharacterID = name;

        character.Initialize();
        character.MyNavAgent.enabled = false;
        character.CharacterType      = CharacterType.Human;

        character.SquadID = squad.ID;
        character.Faction = squad.Faction;
        GameManager.Inst.ItemManager.LoadNPCInventory(character.Inventory, squad.Faction, squad.Tier);
        character.MyAI.WeaponSystem.LoadWeaponsFromInventory(false);

        character.MyStatus.MaxHealth = 100;
        character.MyStatus.Health    = 100;

        character.transform.position = loc;
        //character.transform.position = new Vector3(70.76f, 3.296f, -23.003f);

        character.MyNavAgent.enabled = true;

        character.Name = GameManager.Inst.DBManager.DBHandlerDialogue.GetRandomName();

        character.gameObject.name = character.gameObject.name + _counter.ToString();
        _counter++;



        return(character);
    }
Ejemplo n.º 4
0
    public void AssignExpFollowerRole(Character c, AISquad squad)
    {
        c.MyAI.BlackBoard.FollowTarget  = squad.Commander;
        c.MyAI.BlackBoard.PatrolLoc     = c.transform.position;
        c.MyAI.BlackBoard.PatrolRange   = new Vector3(10, 5, 10);
        c.MyAI.BlackBoard.CombatRange   = new Vector3(25, 5, 25);
        c.MyAI.BlackBoard.DefensePoint  = c.transform.position;
        c.MyAI.BlackBoard.DefenseRadius = 10;

        c.MyAI.SetDynamicyGoal(GameManager.Inst.NPCManager.DynamicGoalFollow, 5);
    }
Ejemplo n.º 5
0
    public void AssignExpCommanderRole(Character c, AISquad squad)
    {
        c.IsCommander                   = true;
        squad.Commander                 = c;
        c.MyAI.BlackBoard.PatrolLoc     = squad.NextNavNode.transform.position;
        c.MyAI.BlackBoard.PatrolRange   = new Vector3(10, 5, 10);
        c.MyAI.BlackBoard.CombatRange   = new Vector3(25, 5, 25);
        c.MyAI.BlackBoard.DefensePoint  = c.transform.position;
        c.MyAI.BlackBoard.DefenseRadius = 10;

        c.MyAI.SetDynamicyGoal(GameManager.Inst.NPCManager.DynamicGoalExplore, 5);
    }
Ejemplo n.º 6
0
    public void MergeSquad(AISquad source, AISquad target)
    {
        foreach (Character member in source.Members)
        {
            member.MyJobs.Clear();
            member.MyJobs.Add(NPCJobs.None);
            member.IsCommander = false;
            member.MyAI.SetDynamicyGoal(GameManager.Inst.NPCManager.DynamicGoalChill, 5);
            target.Members.Add(member);
            member.MyAI.Squad = target;
            member.SquadID    = target.ID;
        }

        GameManager.Inst.NPCManager.DeleteSquad(ID);
    }
Ejemplo n.º 7
0
    public AISquad SpawnHumanExplorerSquad(Faction faction, Household household)
    {
        AISquad squad = new AISquad();

        squad.ID = faction.ToString() + _randomSquadIndex.ToString();
        if (household != null && household.CurrentSquad != null)
        {
            squad.Tier = household.CurrentSquad.Tier;
        }
        else
        {
            squad.Tier = 1;
        }
        _randomSquadIndex++;
        squad.Faction   = faction;
        squad.Household = household;
        _allSquads.Add(squad.ID, squad);

        return(squad);
    }
Ejemplo n.º 8
0
    public List <AISquad> LoadLevelSquads(string levelName)
    {
        IDataReader squadReader = GameManager.Inst.DBManager.RunQuery(
            "SELECT * FROM initial_squads WHERE level='" + levelName + "'");

        List <AISquad> squads = new List <AISquad>();

        while (squadReader.Read())
        {
            AISquad squad = new AISquad();
            squad.ID        = squadReader.GetString(0);
            squad.Tier      = squadReader.GetInt32(1);
            squad.Faction   = (Faction)squadReader.GetInt32(2);
            squad.Household = GameManager.Inst.NPCManager.GetHousehold(squadReader.GetString(3));
            squad.Household.CurrentSquad = squad;

            squads.Add(squad);
        }

        return(squads);
    }
Ejemplo n.º 9
0
    public bool Load(string saveGameName)
    {
        string          fullPath = Application.persistentDataPath + "/" + saveGameName + ".dat";
        BinaryFormatter bf       = new BinaryFormatter();
        FileStream      file;

        if (File.Exists(fullPath))
        {
            file = File.Open(fullPath, FileMode.Open);
        }
        else
        {
            return(false);
        }

        CurrentSave = (SaveGame)bf.Deserialize(file);

        //load level
        GameManager.Inst.WorldManager.AllLevels = CurrentSave.Levels;
        foreach (Level level in GameManager.Inst.WorldManager.AllLevels)
        {
            Debug.Log("Loading levels " + level.Name);
            if (level.Name == CurrentSave.LevelToLoad)
            {
                GameManager.Inst.WorldManager.CurrentLevel = level;
                break;
            }
        }

        GameManager.Inst.WorldManager.CurrentDay         = CurrentSave.CurrentDay;
        GameManager.Inst.WorldManager.CurrentTime        = CurrentSave.CurrentTime;
        GameManager.Inst.WorldManager.CurrentWeather     = CurrentSave.CurrentWeather;
        GameManager.Inst.WorldManager.IsDayTime          = CurrentSave.IsDayTime;
        GameManager.Inst.WorldManager.DayNightTransition = CurrentSave.DayNightTransition;
        GameManager.Inst.WorldManager.NightDayTransition = CurrentSave.NightDayTransition;

        GameManager.Inst.WorldManager.ChangeEnvironment(CurrentSave.CurrentEnvironmentName);

        //load player basics
        GameManager.Inst.PlayerProgress.PlayerFirstName = CurrentSave.PlayerFirstName;
        GameManager.Inst.PlayerProgress.PlayerLastName  = CurrentSave.PlayerLastName;
        //load progress
        GameManager.Inst.PlayerProgress.DiscoveredTopics = new List <string>(CurrentSave.DiscoveredTopics);
        GameManager.Inst.PlayerProgress.JournalEntries   = new List <List <string> >(CurrentSave.JournalEntries);
        GameManager.Inst.PlayerProgress.IncompleteTasks  = new List <int>(CurrentSave.IncompleteTasks);
        GameManager.Inst.PlayerProgress.CompletedTasks   = new List <int>(CurrentSave.CompletedTasks);
        //load player status
        GameManager.Inst.PlayerControl.SelectedPC.MyStatus.Data = CurrentSave.PlayerStatus;
        //load player boosts
        GameManager.Inst.PlayerControl.Survival.SetStatBoosts(CurrentSave.PlayerBoosts);
        //load player inventory
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.ArmorSlot    = CurrentSave.PlayerInventory.ArmorSlot;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.HeadSlot     = CurrentSave.PlayerInventory.HeadSlot;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.RifleSlot    = CurrentSave.PlayerInventory.RifleSlot;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.SideArmSlot  = CurrentSave.PlayerInventory.SideArmSlot;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.ThrowSlot    = CurrentSave.PlayerInventory.ThrowSlot;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.ToolSlot     = CurrentSave.PlayerInventory.ToolSlot;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.BackpackCols = CurrentSave.PlayerInventory.BackpackCols;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.BackpackRows = CurrentSave.PlayerInventory.BackpackRows;
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.Backpack     = new List <GridItemData>(CurrentSave.PlayerInventory.Backpack);
        GameManager.Inst.PlayerControl.SelectedPC.Inventory.PostLoad();

        GameManager.Inst.PlayerControl.SelectedPC.ArmorSystem.SwitchToArmor(GameManager.Inst.PlayerControl.SelectedPC.Inventory.ArmorSlot);
        GameManager.Inst.PlayerControl.SelectedPC.ArmorSystem.SwitchToHelmet(GameManager.Inst.PlayerControl.SelectedPC.Inventory.HeadSlot);
        GameManager.Inst.PlayerControl.SelectedPC.MyAI.WeaponSystem.LoadWeaponsFromInventory(false);

        //place player in last saved location
        GameManager.Inst.PlayerControl.SelectedPC.transform.position = new Vector3(CurrentSave.PlayerLocation[0], CurrentSave.PlayerLocation[1], CurrentSave.PlayerLocation[2]);

        //load story conditions
        GameManager.Inst.QuestManager.StoryConditions = new Dictionary <string, StoryCondition>();
        foreach (StoryConditionItem condition in CurrentSave.ItemConditions)
        {
            GameManager.Inst.QuestManager.StoryConditions.Add(condition.ID, condition);
        }
        foreach (StoryConditionTrigger condition in CurrentSave.TriggerConditions)
        {
            GameManager.Inst.QuestManager.StoryConditions.Add(condition.ID, condition);
        }

        //load story event handler
        LinkedList <StoryEventListener> [] storyListenerLists = StoryEventHandler.Instance.AllListenerLists;

        for (int i = 0; i < storyListenerLists.Length; i++)
        {
            storyListenerLists[i].Clear();
            for (int j = 0; j < CurrentSave.StoryListenerLists[i].Count; j++)
            {
                storyListenerLists[i].AddLast(CurrentSave.StoryListenerLists[i][j]);
            }
        }

        StoryEventHandler.Instance.StoryEventQueue    = StoryEventHandler.Instance.ConvertListStoryEventToQueue(CurrentSave.StoryEventList);
        StoryEventHandler.Instance.CurrentStoryEvent  = CurrentSave.CurrentStoryEvent;
        StoryEventHandler.Instance.IsCurrentEventDone = CurrentSave.IsCurrentEventDone;


        //load pickup items
        Level currentLevel = GameManager.Inst.WorldManager.CurrentLevel;

        //remove all existing pickup items
        GameObject [] objects = GameObject.FindGameObjectsWithTag("PickupItem");

        foreach (GameObject o in objects)
        {
            GameObject.Destroy(o);
        }
        //create new ones
        foreach (PickupItemData pickupItemData in currentLevel.PickupItemDatas)
        {
            //create an Item from ItemID
            Item item     = GameManager.Inst.ItemManager.LoadItem(pickupItemData.ItemID);
            var  resource = Resources.Load(item.PrefabName + "Pickup");
            if (resource != null)
            {
                GameObject pickup = GameObject.Instantiate(resource) as GameObject;
                pickup.transform.position         = pickupItemData.Pos.ConvertToVector3();
                pickup.transform.localEulerAngles = pickupItemData.EulerAngles.ConvertToVector3();
                Transform parent = GameManager.Inst.ItemManager.FindPickupItemParent(pickup.transform);
                if (parent != null)
                {
                    pickup.transform.parent = parent;
                }
                pickup.GetComponent <PickupItem>().Item       = item;
                pickup.GetComponent <PickupItem>().Quantity   = pickupItemData.Quantity;
                pickup.GetComponent <PickupItem>().Durability = pickupItemData.Durability;
            }
        }

        //load Chests
        //clear all existing chests in this level and then add new content
        objects = GameObject.FindGameObjectsWithTag("Chest");

        foreach (GameObject o in objects)
        {
            Chest chest = o.GetComponent <Chest>();
            chest.Items.Clear();
            foreach (ChestData chestData in currentLevel.ChestDatas)
            {
                if (chest.ChestID == chestData.ChestID)
                {
                    chest.Items    = chestData.Items;
                    chest.IsLocked = chestData.IsLocked;
                    chest.KeyID    = chestData.KeyID;
                    chest.PostLoad();
                }
            }
        }

        //load doors
        GameObject [] doors = GameObject.FindGameObjectsWithTag("Door");
        foreach (GameObject o in doors)
        {
            Door door = o.GetComponent <Door>();
            foreach (DoorSaveData doorData in currentLevel.Doors)
            {
                if (door.ID == "zsk_blockadedoor")
                {
                    Debug.Log("blocade door unlocked? " + doorData.ID + " - " + doorData.IsLocked);
                }
                if (door.ID == doorData.ID)
                {
                    door.IsLocked = doorData.IsLocked;
                    door.IsOpen   = doorData.IsOpen;
                }
            }
        }

        //load factions
        GameManager.Inst.NPCManager.AllFactions.Clear();
        foreach (KeyValuePair <Faction, FactionData> factionData in CurrentSave.Factions)
        {
            GameManager.Inst.NPCManager.AllFactions.Add(factionData.Key, factionData.Value);
            factionData.Value.PostLoad();
        }


        //load household
        GameManager.Inst.NPCManager.AllSquads.Clear();
        Household [] households = (Household[])GameObject.FindObjectsOfType <Household>();
        foreach (Household household in households)
        {
            foreach (HouseholdSaveData saveData in currentLevel.Households)
            {
                if (household.name == saveData.HouseholdName)
                {
                    if (saveData.CurrentSquadID != "")
                    {
                        //create a new squad
                        AISquad squad = new AISquad();
                        squad.ID        = saveData.CurrentSquadID;
                        squad.Tier      = saveData.CurrentSquadTier;
                        squad.Faction   = saveData.OwningFaction;
                        squad.Household = household;
                        squad.Household.CurrentSquad = squad;
                        if (!GameManager.Inst.NPCManager.AllSquads.ContainsKey(squad.ID))
                        {
                            GameManager.Inst.NPCManager.AllSquads.Add(squad.ID, squad);
                        }
                    }
                    household.IsMemberAlreadyAdded = true;
                    household.SetScheduleData(saveData.IsRefilledToday, saveData.Expedition1SentToday, saveData.Expedition2SentToday,
                                              saveData.ExpeditionTime1, saveData.ExpeditionTime2);
                }
            }
        }



        //load characters
        //first remove all existing characters
        GameObject [] npcs = GameObject.FindGameObjectsWithTag("NPC");
        foreach (GameObject npc in npcs)
        {
            npc.tag = "Untagged";
            GameObject.Destroy(npc.gameObject);
        }
        //add new characters from save
        //then reinitialize NPCManager

        npcs = GameObject.FindGameObjectsWithTag("NPC");
        Debug.Log("Number of loading NPC before loading " + npcs.Length);

        foreach (CharacterSaveData characterData in currentLevel.Characters)
        {
            if (characterData.CharacterType == CharacterType.Human)
            {
                HumanCharacter character = GameObject.Instantiate(Resources.Load("HumanCharacter") as GameObject).GetComponent <HumanCharacter>();

                character.CharacterID = characterData.CharacterID;
                character.GoapID      = characterData.GoapID;

                character.Initialize();
                character.MyNavAgent.enabled = false;
                character.CharacterType      = characterData.CharacterType;
                character.SquadID            = characterData.SquadID;
                character.Faction            = characterData.Faction;
                character.IsCommander        = characterData.IsCommander;
                character.IsEssential        = characterData.IsEssential;


                character.MyStatus.Data              = characterData.StatusData;
                character.transform.position         = characterData.Pos.ConvertToVector3();
                character.transform.localEulerAngles = characterData.Angles.ConvertToVector3();

                character.MyNavAgent.enabled = true;

                character.Name            = characterData.Name;
                character.Title           = characterData.Title;
                character.gameObject.name = characterData.GOName;

                //attach job components
                if (characterData.Jobs.Contains(NPCJobs.Trader))
                {
                    character.gameObject.AddComponent <Trader>();
                }

                character.Inventory              = new CharacterInventory();
                character.Inventory.ArmorSlot    = characterData.Inventory.ArmorSlot;
                character.Inventory.HeadSlot     = characterData.Inventory.HeadSlot;
                character.Inventory.RifleSlot    = characterData.Inventory.RifleSlot;
                character.Inventory.SideArmSlot  = characterData.Inventory.SideArmSlot;
                character.Inventory.ThrowSlot    = characterData.Inventory.ThrowSlot;
                character.Inventory.ToolSlot     = characterData.Inventory.ToolSlot;
                character.Inventory.BackpackCols = characterData.Inventory.BackpackCols;
                character.Inventory.BackpackRows = characterData.Inventory.BackpackRows;
                character.Inventory.Backpack     = new List <GridItemData>(characterData.Inventory.Backpack);
                character.Inventory.PostLoad();
            }
            else if (characterData.CharacterType == CharacterType.Mutant)
            {
                MutantCharacter character = GameObject.Instantiate(Resources.Load("MutantCharacter") as GameObject).GetComponent <MutantCharacter>();
                character.CharacterID = characterData.CharacterID;
                character.GoapID      = characterData.GoapID;

                character.Initialize();
                character.MyNavAgent.enabled = false;
                character.CharacterType      = characterData.CharacterType;
                character.SquadID            = characterData.SquadID;
                character.Faction            = characterData.Faction;
                GameManager.Inst.ItemManager.LoadNPCInventory(character.Inventory, character.Faction, 0);
                character.Inventory.PostLoad();

                character.MyStatus.Data      = characterData.StatusData;
                character.transform.position = characterData.Pos.ConvertToVector3();

                character.MyNavAgent.enabled = true;

                character.Name            = characterData.Name;
                character.Title           = characterData.Title;
                character.gameObject.name = characterData.GOName;
            }
            else if (characterData.CharacterType == CharacterType.Animal)
            {
                MutantCharacter character = GameObject.Instantiate(Resources.Load("MutantAnimal") as GameObject).GetComponent <MutantCharacter>();
                character.CharacterID = characterData.CharacterID;
                character.GoapID      = characterData.GoapID;

                character.Initialize();
                character.MyNavAgent.enabled = false;
                character.CharacterType      = characterData.CharacterType;
                character.SquadID            = characterData.SquadID;
                character.Faction            = characterData.Faction;
                GameManager.Inst.ItemManager.LoadNPCInventory(character.Inventory, character.Faction, 0);
                character.Inventory.PostLoad();

                character.MyStatus.Data      = characterData.StatusData;
                character.transform.position = characterData.Pos.ConvertToVector3();

                character.MyNavAgent.enabled = true;

                character.Name            = characterData.Name;
                character.Title           = characterData.Title;
                character.gameObject.name = characterData.GOName;
            }
        }


        GameManager.Inst.NPCManager.Initialize();

        //add player to NPC manager
        GameManager.Inst.NPCManager.AddHumanCharacter(GameManager.Inst.PlayerControl.SelectedPC);

        //load traders
        foreach (HumanCharacter character in GameManager.Inst.NPCManager.HumansInScene)
        {
            Trader trader = character.GetComponent <Trader>();
            if (trader != null)
            {
                Debug.Log("loading trader, on character " + character.CharacterID);
                foreach (TraderData traderData in currentLevel.Traders)
                {
                    if (traderData.CharacterID == character.CharacterID)
                    {
                        trader.Cash             = traderData.Cash;
                        trader.Tier             = traderData.Tier;
                        trader.TraderInventory  = traderData.TraderInventory;
                        trader.SupplyRenewTimer = traderData.SupplyRenewTimer;
                        trader.PostLoad();
                    }
                }
            }
        }



        return(true);
    }
Ejemplo n.º 10
0
    private void SpawnWave(int waveSize, Faction faction, bool isMultiSpawn)
    {
        AISquad enemySquad = new AISquad();

        enemySquad.Faction = faction;

        //select a spawn point
        GameObject [] spawnPoints = GameObject.FindGameObjectsWithTag("Respawn");
        int           point       = UnityEngine.Random.Range(0, spawnPoints.Length);



        for (int i = 0; i < waveSize; i++)
        {
            if (isMultiSpawn)
            {
                point = UnityEngine.Random.Range(0, spawnPoints.Length);
            }

            if (faction == Faction.Legionnaires)
            {
                enemySquad.AddMember(GameManager.Inst.NPCManager.SpawnRandomHumanCharacter("Bandit", enemySquad, spawnPoints[point].transform.position
                                                                                           + new Vector3(UnityEngine.Random.value * 3, 0, UnityEngine.Random.value * 3)));
            }
            else if (faction == Faction.Military)
            {
                enemySquad.AddMember(GameManager.Inst.NPCManager.SpawnRandomHumanCharacter("Military", enemySquad, spawnPoints[point].transform.position
                                                                                           + new Vector3(UnityEngine.Random.value * 3, 0, UnityEngine.Random.value * 3)));
            }
            else if (faction == Faction.Mutants)
            {
                string mutantName;
                int    goapID;

                if (this.Stage < 7)
                {
                    if (UnityEngine.Random.value > 0.6f)
                    {
                        mutantName = "Mutant1";
                        goapID     = 3;
                    }
                    else
                    {
                        mutantName = "Mutant1";
                        goapID     = 3;
                    }
                }
                else
                {
                    if (UnityEngine.Random.value < 0.3f)
                    {
                        mutantName = "Mutant1";
                        goapID     = 3;
                    }
                    else
                    {
                        if (UnityEngine.Random.value > 0.6f)
                        {
                            mutantName = "Mutant4";
                            goapID     = 2;
                        }
                        else
                        {
                            mutantName = "Mutant3";
                            goapID     = 2;
                        }
                    }
                }

                MutantCharacter mutant = GameManager.Inst.NPCManager.SpawnRandomMutantCharacter(mutantName, enemySquad, spawnPoints[point].transform.position
                                                                                                + new Vector3(UnityEngine.Random.value * 3, 0, UnityEngine.Random.value * 3));



                mutant.MyAI.BlackBoard.PatrolLoc     = new Vector3(62.7f, 0, -15);
                mutant.MyAI.BlackBoard.PatrolRange   = new Vector3(30, 5, 15);
                mutant.MyAI.BlackBoard.CombatRange   = new Vector3(40, 20, 20);
                mutant.MyAI.BlackBoard.HasPatrolInfo = true;
            }
        }



        enemySquad.IssueSquadCommand();
    }
Ejemplo n.º 11
0
    private void SendHumanExplorer(NavNode destNavNode, int squadSize)
    {
        NavNode currentNode = GameManager.Inst.NPCManager.GetNavNodeByHousehold(this);

        if (currentNode == null || destNavNode == null)
        {
            Debug.LogError("No current node or no destNavNode");
            return;
        }

        NavNode nextNavNode = AI.FindNextNavNode(currentNode, destNavNode);

        if (nextNavNode == null)
        {
            Debug.LogError("can't find next nav node");
            return;
        }

        //Debug.Log("GOTO setting new destinatoin " + nextNavNode.name + " currentNode " + currentNode.name);

        //create a squad
        AISquad squad = GameManager.Inst.NPCManager.SpawnHumanExplorerSquad(CurrentSquad.Faction, this);

        squad.NextNavNode = nextNavNode;
        squad.DestNavNode = destNavNode;

        _explorerSquads.Add(squad);

        //decide a max participant number
        int participants = squadSize;

        //loop through all members and pick ones who don't have job
        foreach (Character c in CurrentSquad.Members)
        {
            if (participants <= 0)
            {
                break;
            }

            if (c.MyJobs.Contains(NPCJobs.None) && !c.IsEssential)
            {
                squad.Members.Add(c);
                participants--;
                c.MyJobs.Clear();
                c.MyJobs.Add(NPCJobs.Explore);
                c.MyAI.Squad = squad;
                if (squad.Commander == null)
                {
                    //Debug.Log("Assigned commander to " + c.name);
                    //assign commander job
                    squad.AssignExpCommanderRole(c, squad);
                }
                else
                {
                    //Debug.Log("Assigned follower to " + c.name);
                    squad.AssignExpFollowerRole(c, squad);
                }
            }
        }

        //Debug.LogError("Sending expedition - squad " + squad.ID + " to " + destNavNode.name + " commander " + squad.Commander.name);

        //remove squad member from current squad
        foreach (Character c in squad.Members)
        {
            if (CurrentSquad.Members.Contains(c))
            {
                CurrentSquad.RemoveMember(c);
            }

            c.MyAI.Squad = squad;
            c.SquadID    = squad.ID;
        }
    }
Ejemplo n.º 12
0
    private void AISquadManager_TryActivateSquad(On.AISquadManager.orig_TryActivateSquad orig, AISquadManager self, AISquad _squad, bool _resetPositions)
    {
        List <AISquad> _reserve           = (List <AISquad>)AccessTools.Field(typeof(AISquadManager), "m_squadsInReserve").GetValue(self);
        List <AISquad> _play              = (List <AISquad>)AccessTools.Field(typeof(AISquadManager), "m_squadsInPlay").GetValue(self);
        DictionaryExt <UID, AISquad> _all = (DictionaryExt <UID, AISquad>)AccessTools.Field(typeof(AISquadManager), "m_allSquads").GetValue(self);

        OLogger.Log($"TryActivateSquad {(_squad != null ? _squad.name : "(null)")}");
        OLogger.Log($" > All={_all.Count} Play={_play.Count} Reserve={_reserve.Count}");
        OLogger.Log($" > InReserve={_reserve.Contains(_squad)}");

        /*if (_squad != null && !_reserve.Contains(_squad))
         * {
         *  _reserve.Add(_squad);
         *  AccessTools.Field(typeof(AISquadManager), "m_squadsInReserve").SetValue(self, _reserve);
         * }*/
        orig(self, _squad, _resetPositions);
    }
Ejemplo n.º 13
0
    private void AISquadManager_TryDeactivateSquad(On.AISquadManager.orig_TryDeactivateSquad orig, AISquadManager self, AISquad _squad)
    {
        List <AISquad> _reserve           = (List <AISquad>)AccessTools.Field(typeof(AISquadManager), "m_squadsInReserve").GetValue(self);
        List <AISquad> _play              = (List <AISquad>)AccessTools.Field(typeof(AISquadManager), "m_squadsInPlay").GetValue(self);
        DictionaryExt <UID, AISquad> _all = (DictionaryExt <UID, AISquad>)AccessTools.Field(typeof(AISquadManager), "m_allSquads").GetValue(self);

        OLogger.Log($"TryDeactivateSquad {(_squad != null ? _squad.name : "(null)")}");
        OLogger.Log($" > All={_all.Count} Play={_play.Count} Reserve={_reserve.Count}");
        orig(self, _squad);
    }
Ejemplo n.º 14
0
	private void Initialize()
	{
		

		Inst = this;

		//Initializing CsDebug
		CsDebug debug = GetComponent<CsDebug>();
		debug.Initialize();

		//Initializing DBManager
		DBManager = new DBManager();
		DBManager.Initialize();

		//Initializing Event Manager
		EventManager = new EventManager();
		EventManager.Initialize();

		ItemManager = new ItemManager();
		ItemManager.Initialize();

		//Initializing NPC Manager
		NPCManager = new NPCManager();
		NPCManager.Initialize();



		PlayerControl = new PlayerControl();
		PlayerControl.Initialize();



		UIManager = new UIManager();
		UIManager.Initialize();


		MutantCharacter mutant1 = GameObject.Find("MutantCharacter").GetComponent<MutantCharacter>();
		mutant1.Initialize();
		mutant1.MyStatus.MaxHealth = 200;
		mutant1.MyStatus.Health = 200;
		mutant1.MyAI.BlackBoard.PatrolLoc = new Vector3(70, 0, -54);
		mutant1.MyAI.BlackBoard.PatrolRange = new Vector3(10, 5, 10);
		mutant1.MyAI.BlackBoard.CombatRange = new Vector3(20, 5, 20);
		mutant1.MyAI.BlackBoard.HasPatrolInfo = true;




		//HumanCharacter enemy1 = GameObject.Find("HumanCharacter2").GetComponent<HumanCharacter>();
		HumanCharacter enemy2 = GameObject.Find("HumanCharacter4").GetComponent<HumanCharacter>();
		//HumanCharacter enemy3 = GameObject.Find("HumanCharacter5").GetComponent<HumanCharacter>();
		//HumanCharacter enemy4 = GameObject.Find("HumanCharacter6").GetComponent<HumanCharacter>();

		AISquad enemySquad = new AISquad();
		//enemySquad.Members.Add(enemy1);
		enemySquad.Members.Add(enemy2);
		//enemySquad.Members.Add(enemy3);
		//enemySquad.Members.Add(enemy4);

		/*
		enemy1.Initialize();
		enemy1.MyAI.Squad = enemySquad;
		ItemManager.LoadNPCInventory(enemy1.Inventory);
		enemy1.MyAI.WeaponSystem.LoadWeaponsFromInventory();
		*/
		enemy2.Initialize();
		enemy2.MyAI.Squad = enemySquad;
		ItemManager.LoadNPCInventory(enemy2.Inventory);
		enemy2.MyAI.WeaponSystem.LoadWeaponsFromInventory();

		/*
		enemy3.Initialize();
		enemy3.MyAI.Squad = enemySquad;
		ItemManager.LoadNPCInventory(enemy3.Inventory);
		enemy3.MyAI.WeaponSystem.LoadWeaponsFromInventory();


		enemy4.Initialize();
		enemy4.MyAI.Squad = enemySquad;
		ItemManager.LoadNPCInventory(enemy4.Inventory);
		enemy4.MyAI.WeaponSystem.LoadWeaponsFromInventory();
		*/

		//enemy1.MyStatus.MaxHealth = 160;
		//enemy1.MyStatus.Health = 160;
		enemy2.MyStatus.MaxHealth = 100;
		enemy2.MyStatus.Health = 100;

		/*
		enemy3.MyStatus.MaxHealth = 80;
		enemy3.MyStatus.Health = 80;

		enemy4.MyStatus.MaxHealth = 100;
		enemy4.MyStatus.Health = 100;
		*/
		enemySquad.IssueSquadCommand();


		CameraController = GameObject.Find("CameraController").GetComponent<CameraController>();
		CameraController.Initialize();

		CameraShaker = CameraController.GetComponent<CameraShaker>();
		CameraShaker.Initialize();

		FXManager = new FXManager();
		FXManager.Initialize(50);

		AIScheduler = new AIScheduler();
		AIScheduler.Initialize();



		CursorManager = new CursorManager();
		CursorManager.Initialize();

		StartCoroutine(DoPerSecond());
		StartCoroutine(DoPerHalfSecond());
	}