private static bool DamageFaction(MyFactionCollection __instance, long playerIdentityId, long attackedIdentityId, MyReputationDamageType repDamageType) { if (MySession.Static.Players.IdentityIsNpc(playerIdentityId) || MySession.Static.Players.IdentityIsNpc(attackedIdentityId)) { return(true); } return((Config.Instance.EnableConflict && ConflictPairModule.InConflict(playerIdentityId, attackedIdentityId, out var foundPair) && foundPair.CurrentConflictState == ConflictPairModule.ConflictState.Active) || MySession.Static.Factions.GetNpcFactions().Any(x => x.Members.ContainsKey(playerIdentityId) || x.Members.ContainsKey(attackedIdentityId))); }
public void RecheckReputations() { var playerFactions = new HashSet <MyFaction>(MySession.Static.Factions.Select(x => x.Value).Where(x => !x.IsEveryoneNpc())); if (playerFactions.Count == 0) { return; } var players = new HashSet <MyIdentity>(MySession.Static.Players.GetAllIdentities().Where(x => !MySession.Static.Players.IdentityIsNpc(x.IdentityId))); int count = 0; foreach (var player in players) { var playerFaction = MySession.Static.Factions.GetPlayerFaction(player.IdentityId); foreach (var faction in playerFactions) { var relation = MySession.Static.Factions.GetRelationBetweenPlayerAndFaction(player.IdentityId, faction.FactionId); if (relation == null || !MySession.Static.Factions.HasRelationWithPlayer(player.IdentityId, faction.FactionId)) { continue; } count++; if (MySession.Static.Factions.GetRelationBetweenPlayerAndFaction(player.IdentityId, faction.FactionId) == null) { if (!Config.Instance.EnableConflict || !ConflictPairModule.InConflict(playerFaction.FactionId, faction.FactionId, out var foundPair) || foundPair.CurrentConflictState == ConflictPairModule.ConflictState.PendingConflict) { MySession.Static.Factions.SetReputationBetweenPlayerAndFaction(player.IdentityId, faction.FactionId, 0); continue; } } MySession.Static.Factions.SetReputationBetweenPlayerAndFaction(player.IdentityId, faction.FactionId, -500); } } Log.Warn($"{count} reputation changes made"); }
private static bool ChangeRequest(MyFactionStateChange action, long fromFactionId, long toFactionId, long playerId) { if (MySession.Static.Factions.IsNpcFaction(fromFactionId) || MySession.Static.Factions.IsNpcFaction(toFactionId) || MySession.Static.Players.IdentityIsNpc(playerId)) { return(true); } if (action != MyFactionStateChange.DeclareWar) { return(true); } if (Config.Instance.EnableConflict && ConflictPairModule.InConflict(fromFactionId, toFactionId, out var foundPair) && foundPair.CurrentConflictState == ConflictPairModule.ConflictState.Active) { return(true); } ConflictPairModule.IssueChallenge(fromFactionId, toFactionId, ConflictPairModule.ConflictType.Faction, MyEventContext.Current.Sender.Value); Core.RequestFactionChange(MyFactionStateChange.AcceptPeace, fromFactionId, toFactionId, playerId); return(false); }
private static void ProcessDamage(object target, ref MyDamageInformation info) { if (!Config.Instance.EnablePlugin) { return; } long id; var attackerId = info.AttackerId; switch (target) { case MySlimBlock block: id = block.CubeGrid.BigOwners.Count > 0 ? block.CubeGrid.BigOwners[0]:0; if (Config.Instance.PvpZones?.Count > 0) { foreach (var zone in Config.Instance.PvpZones) { if (!zone.IsWithinZoneRadius(block.CubeGrid)) { continue; } return; } } break; case MyCharacter _: return; case MyCubeGrid grid: id = grid.BigOwners.Count > 0 ? grid.BigOwners[0]:0; if (Config.Instance.PvpZones?.Count > 0) { foreach (var zone in Config.Instance.PvpZones) { if (!zone.IsWithinZoneRadius(grid)) { continue; } return; } } break; default: id = 0; break; } if (MyEntities.TryGetEntityById(attackerId, out var attacker, true)) { if (attacker is MyVoxelBase) { return; } if (attacker is MyCubeBlock block) { attackerId = block.CubeGrid.BigOwners.Count > 0 ? block.CubeGrid.BigOwners[0] : 0; } if (attacker is MyHandToolBase handTool) { attackerId = handTool.OwnerIdentityId; } if (attacker is MyAngleGrinder grinder) { attackerId = grinder.OwnerIdentityId; } if (attacker is MyUserControllableGun controllableGun) { attackerId = controllableGun.CubeGrid.BigOwners.Count > 0 ? controllableGun.CubeGrid.BigOwners[0] : 0; } if (attacker is MyAutomaticRifleGun gun) { attackerId = gun.OwnerIdentityId; } if (attacker is MyShipToolBase tool) { attackerId = tool.CubeGrid.BigOwners.Count > 0 ?tool.CubeGrid.BigOwners[0]:0; } if (attacker is MyAutomaticRifleGun characterWeapon) { attackerId = characterWeapon.OwnerIdentityId; } if (attacker is MyCubeGrid grid) { attackerId = grid.BigOwners.Count > 0 ? grid.BigOwners[0]:0; } if (attacker is MyLargeTurretBase turret) { attackerId = turret.CubeGrid.BigOwners.Count > 0 ? turret.CubeGrid.BigOwners[0] : 0; } } if (id == 0 || MySession.Static.Players.IdentityIsNpc(id) || MySession.Static.Players.IdentityIsNpc(attackerId) || id == attackerId) { return; } if (attackerId == 0 && Config.Instance.EnableNoOwner) { return; } var attackerSteamId = MySession.Static.Players.TryGetSteamId(attackerId); var targetSteamId = MySession.Static.Players.TryGetSteamId(id); if (ConflictPairModule.InConflict(attackerId, id, out var foundPair) && (foundPair == null || foundPair.CurrentConflictState == ConflictPairModule.ConflictState.Active)) { return; } if (Config.Instance.EnableFactionDamage) { var fac1 = MySession.Static.Factions.TryGetPlayerFaction(attackerId); var fac2 = MySession.Static.Factions.TryGetPlayerFaction(id); if (fac2 != null && fac1 != null && fac2 == fac1) { return; } } if (attackerSteamId == targetSteamId) { return; } info.Amount = 0; }
private static bool AttachCheck(ref bool __result, MyLandingGear __instance, MyEntity entity, Vector3D worldPos) { if (!Config.Instance.EnablePlugin || Config.Instance.AllowLandingGear) { return(true); } var lgGrid = __instance.CubeGrid; if (lgGrid == entity || entity.MarkedForClose) { return(true); } var firstOwner = lgGrid != null && lgGrid.BigOwners.Count > 0 ? lgGrid.BigOwners[0] : __instance.OwnerId; if (firstOwner == 0) { __result = false; return(false); } long secondOwner; switch (entity) { case MyCubeGrid grid: secondOwner = grid.BigOwners[0]; if (Config.Instance.PvpZones?.Count > 0) { foreach (var zone in Config.Instance.PvpZones) { if (!zone.IsWithinZoneRadius(grid)) { continue; } return(true); } } break; case MyCubeBlock block: secondOwner = block.CubeGrid.BigOwners[0]; if (Config.Instance.PvpZones?.Count > 0) { foreach (var zone in Config.Instance.PvpZones) { if (!zone.IsWithinZoneRadius(block.CubeGrid)) { continue; } return(true); } } break; default: return(true); } if (secondOwner == firstOwner || secondOwner == 0) { return(true); } var attackerSteamId = MySession.Static.Players.TryGetSteamId(firstOwner); var targetSteamId = MySession.Static.Players.TryGetSteamId(secondOwner); if (attackerSteamId == targetSteamId) { return(true); } if (Config.Instance.EnableFactionDamage) { var firstOwnerFaction = MySession.Static.Factions.GetPlayerFaction(firstOwner); var secondOwnerFaction = MySession.Static.Factions.GetPlayerFaction(secondOwner); if (firstOwnerFaction != null && secondOwnerFaction != null && firstOwnerFaction == secondOwnerFaction) { return(true); } } if (ConflictPairModule.InConflict(firstOwner, secondOwner, out var foundPair) && (foundPair == null || foundPair.CurrentConflictState == ConflictPairModule.ConflictState.Active)) { return(true); } __result = false; return(false); }