public Conflict Clone() { var clone = (Conflict)MemberwiseClone(); clone.Faction1 = Faction1?.Clone(); clone.Faction2 = Faction2?.Clone(); return(clone); }
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); } }
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); } }
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>(); } } } }