コード例 #1
0
        public Conflict Clone()
        {
            var clone = (Conflict)MemberwiseClone();

            clone.Faction1 = Faction1?.Clone();
            clone.Faction2 = Faction2?.Clone();
            return(clone);
        }
コード例 #2
0
        public override int GetHashCode()
        {
            //https://stackoverflow.com/a/892640/3131828
            unchecked
            {
                int h = 23;
                h *= 31 + (WarType?.GetHashCode() ?? 0);
                h *= 31 + (Status?.GetHashCode() ?? 0);
                h *= 31 + (Faction1?.GetHashCode() ?? 0);
                h *= 31 + (Faction2?.GetHashCode() ?? 0);

                return(h);
            }
        }
コード例 #3
0
        private void InitNPCFactions()
        {
            try
            {
                Diplomacy.Init();
                var FactionSystem = MyAPIGateway.Session.Factions;

                HashSet <IMyFaction> FactionsToMakePeaceWith = Diplomacy.LawfulFactions.ToHashSet();
                FactionsToMakePeaceWith.UnionWith(FactionSystem.Factions.Values.Where(x => x.IsPlayerFaction()));
                foreach (var Faction1 in Diplomacy.LawfulFactions)
                {
                    PeaceTimers.Add(Faction1, new Dictionary <IMyFaction, DateTime>());
                    foreach (var Faction2 in FactionsToMakePeaceWith)
                    {
                        if (Faction1 == Faction2)
                        {
                            continue;
                        }
                        if (Faction1.IsPeacefulTo(Faction2))
                        {
                            continue;
                        }
                        Faction1.ProposePeace(Faction2, Print: true);
                    }
                }

                #region Peace Request Delay
                PeaceRequestDelay.Interval  = 5000;
                PeaceRequestDelay.AutoReset = false;
                PeaceRequestDelay.Elapsed  += (trash1, trash2) =>
                {
                    List <IMyFaction> NewFactions = new List <IMyFaction>();
                    foreach (long ID in NewFactionsIDs)
                    {
                        NewFactions.Add(FactionSystem.TryGetFactionById(ID));
                    }

                    NewFactionsIDs.Clear();
                    foreach (IMyFaction LawfulFaction in Diplomacy.LawfulFactions)
                    {
                        foreach (IMyFaction NewFaction in NewFactions)
                        {
                            LawfulFaction.ProposePeace(NewFaction);
                        }
                    }
                    PeaceRequestDelay.Stop();
                };

                FactionSystem.FactionCreated += (FactionID) =>
                {
                    NewFactionsIDs.Add(FactionID);
                    PeaceRequestDelay.Start();
                };
                #endregion

                #region Faction Clock
                FactionClock.Interval  = 10000;
                FactionClock.AutoReset = true;
                FactionClock.Elapsed  += (trash1, trash2) =>
                {
                    if (!FactionsInited)
                    {
                        foreach (var Faction1 in Diplomacy.LawfulFactions)
                        {
                            foreach (var Faction2 in Diplomacy.LawfulFactions)
                            {
                                if (Faction1 == Faction2)
                                {
                                    continue;
                                }
                                if (Faction1.IsPeacefulTo(Faction2))
                                {
                                    continue;
                                }
                                Faction1.AcceptPeace(Faction2);
                            }
                        }
                        FactionsInited = true;
                    }

                    foreach (var NPCFactionTimer in PeaceTimers)
                    {
                        var NPCFaction           = NPCFactionTimer.Key;
                        List <IMyFaction> remove = new List <IMyFaction>();
                        foreach (var Timer in NPCFactionTimer.Value)
                        {
                            var Faction = Timer.Key;
                            if (DateTime.Now >= Timer.Value)
                            {
                                NPCFaction.ProposePeace(Faction, Print: true);
                                remove.Add(Faction);
                            }
                        }

                        foreach (var Faction in remove)
                        {
                            NPCFactionTimer.Value.Remove(Faction);
                        }
                    }
                };
                FactionClock.Start();
                #endregion
            }
            catch (Exception Scrap)
            {
                LogError("InitNPCFactions", Scrap);
            }
        }
コード例 #4
0
    private void GetVisionTargets()
    {
        if (resourceObject != null && !vision.targets.Contains(resourceObject.gameObject))
        {
            resourceObject = null;
        }
        if (droneObject != null && !vision.targets.Contains(droneObject.gameObject))
        {
            droneObject = null;
        }
        if (faction1 != null && !vision.targets.Contains(faction1.gameObject))
        {
            faction1 = null;
        }
        if (faction2 != null && !vision.targets.Contains(faction2.gameObject))
        {
            faction2 = null;
        }
        if (territoryObject != null && !vision.targets.Contains(territoryObject.gameObject))
        {
            territoryObject = null;
        }
        if (healthObject != null && !vision.targets.Contains(healthObject.gameObject))
        {
            healthObject = null;
        }

        foreach (GameObject target in vision.targets)
        {
            //Debug.Log("Inside foreach");
            // SET UP TYPES OF OBJECTS
            if (target.GetComponent <Resource>())
            {
                if (resourceObject == null)
                {
                    resourceObject = target.GetComponent <Resource>();
                }
                else if (Vector3.Distance(target.transform.position, transform.position) < Vector3.Distance(resourceObject.transform.position, transform.position))
                {
                    resourceObject = target.GetComponent <Resource>();
                }
            }
            else if (target.GetComponent <HealthResource>())
            {
                if (healthObject == null)
                {
                    healthObject = target.GetComponent <HealthResource>();
                }
                else if (Vector3.Distance(target.transform.position, transform.position) < Vector3.Distance(healthObject.transform.position, transform.position))
                {
                    healthObject = target.GetComponent <HealthResource>();
                }
            }
            else if (target.GetComponent <Drone>())
            {
                if (droneObject == null)
                {
                    droneObject = target.GetComponent <Drone>();
                }
                else if (Vector3.Distance(target.transform.position, transform.position) < Vector3.Distance(droneObject.transform.position, transform.position))
                {
                    droneObject = target.GetComponent <Drone>();
                }
            }
            else if (target.GetComponent <Faction1>())
            {
                if (faction1 == null)
                {
                    faction1 = target.GetComponent <Faction1>();
                }
                else if (Vector3.Distance(target.transform.position, transform.position) < Vector3.Distance(faction1.transform.position, transform.position))
                {
                    faction1 = target.GetComponent <Faction1>();
                }
            }
            else if (target.GetComponent <Faction2>())
            {
                if (faction2 == null)
                {
                    faction2 = target.GetComponent <Faction2>();
                }
                else if (Vector3.Distance(target.transform.position, transform.position) < Vector3.Distance(faction2.transform.position, transform.position))
                {
                    faction2 = target.GetComponent <Faction2>();
                }
            }
            else if (target.GetComponent <Territory>())
            {
                if (territoryObject == null)
                {
                    territoryObject = target.GetComponent <Territory>();
                }
                else if (Vector3.Distance(target.transform.position, transform.position) < Vector3.Distance(territoryObject.transform.position, transform.position))
                {
                    territoryObject = target.GetComponent <Territory>();
                }
            }
        }
    }