From 41713a941275d49e8f528fb15fb6da0e730c2238 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Tue, 18 Mar 2025 14:39:58 -0500 Subject: [PATCH] Lore Enforced Mines System --- src/engine/gameManager/LoreMineManager.java | 118 ++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/engine/gameManager/LoreMineManager.java diff --git a/src/engine/gameManager/LoreMineManager.java b/src/engine/gameManager/LoreMineManager.java new file mode 100644 index 00000000..af3e742c --- /dev/null +++ b/src/engine/gameManager/LoreMineManager.java @@ -0,0 +1,118 @@ +package engine.gameManager; + +import engine.Enum; +import engine.math.Vector3fImmutable; +import engine.objects.Guild; +import engine.objects.PlayerCharacter; +import engine.objects.Regions; + +import java.util.*; + +public class LoreMineManager { + + //Saetor Allowed Charters: + //BARBARIAN + //MILITARY + //RANGER + //AMAZON + //WIZARD + //MERCENARY + //THIEVES + //SCOURGE + //UNHOLY + + public static final Map> GUILD_RACES = new HashMap<>(); + public static final Map> GUILD_CLASSES = new HashMap<>(); + public static final Map GUILD_GENDER_RESTRICTION = new HashMap<>(); + + static { + GUILD_RACES.put(Enum.GuildType.CATHEDRAL, Arrays.asList("Aelfborn", "Centaur", "Elf", "Half Giant", "Human")); + GUILD_CLASSES.put(Enum.GuildType.CATHEDRAL, Arrays.asList("Bard", "Channeler", "Crusader", "Nightstalker", "Prelate", "Priest", "Scout", "Sentinel")); + + GUILD_RACES.put(Enum.GuildType.MILITARY, Arrays.asList("Centaur", "Half Giant", "Human", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.MILITARY, Arrays.asList("Bard", "Priest", "Scout", "Warlock", "Warrior", "Wizard")); + + GUILD_RACES.put(Enum.GuildType.TEMPLE, Arrays.asList("Half Giant", "Human")); + GUILD_CLASSES.put(Enum.GuildType.TEMPLE, Arrays.asList("Assassin", "Bard", "Channeler", "Confessor", "Nightstalker", "Priest", "Scout", "Templar")); + + GUILD_RACES.put(Enum.GuildType.BARBARIAN, Arrays.asList("Aelfborn", "Half Giant", "Human", "Minotaur", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.BARBARIAN, Arrays.asList("Barbarian", "Bard", "Doomsayer", "Fury", "Priest", "Scout", "Thief", "Warrior")); + + GUILD_RACES.put(Enum.GuildType.RANGER, Arrays.asList("Aelfborn", "Elf", "Half Giant", "Human", "Shade", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.RANGER, Arrays.asList("Bard", "Channeler", "Druid", "Priest", "Ranger", "Scout", "Warrior")); + + GUILD_RACES.put(Enum.GuildType.AMAZON, Arrays.asList("Aelfborn", "Elf", "Half Giant", "Human", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.AMAZON, Arrays.asList("Bard", "Druid", "Fury", "Huntress", "Priest", "Scout", "Warrior", "Wizard")); + GUILD_GENDER_RESTRICTION.put(Enum.GuildType.AMAZON, true); // Female only + + GUILD_RACES.put(Enum.GuildType.NOBLE, Arrays.asList("Aelfborn", "Half Giant", "Human")); + GUILD_CLASSES.put(Enum.GuildType.NOBLE, Arrays.asList("Assassin", "Bard", "Channeler", "Priest", "Scout", "Thief", "Warlock", "Warrior", "Wizard")); + + GUILD_RACES.put(Enum.GuildType.WIZARD, Arrays.asList("Aelfborn", "Elf", "Human", "Nephilim", "Shade", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.WIZARD, Arrays.asList("Assassin", "Bard", "Channeler", "Doomsayer", "Fury", "Necromancer", "Priest", "Warlock", "Wizard")); + + GUILD_RACES.put(Enum.GuildType.MERCENARY, Arrays.asList("Aelfborn", "Aracoix", "Half Giant", "Human", "Shade", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.MERCENARY, Arrays.asList("Assassin", "Bard", "Priest", "Scout", "Thief", "Warlock", "Warrior")); + + GUILD_RACES.put(Enum.GuildType.THIEVES, Arrays.asList("Aelfborn", "Aracoix", "Elf", "Human", "Irekei", "Nephilim", "Shade", "Vampire", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.THIEVES, Arrays.asList("Assassin", "Barbarian", "Bard", "Priest", "Scout", "Thief", "Wizard")); + + GUILD_RACES.put(Enum.GuildType.DWARF, Arrays.asList("Dwarf")); + GUILD_CLASSES.put(Enum.GuildType.DWARF, Arrays.asList("Crusader", "Prelate", "Priest", "Sentinel", "Warrior")); + + GUILD_RACES.put(Enum.GuildType.HIGHCOURT, Arrays.asList("Elf", "Minotaur")); + GUILD_CLASSES.put(Enum.GuildType.HIGHCOURT, Arrays.asList("Assassin", "Bard", "Channeler", "Druid", "Necromancer", "Priest", "Ranger", "Scout", "Thief", "Warrior", "Wizard")); + + GUILD_RACES.put(Enum.GuildType.VIRAKT, Arrays.asList("Irekei")); + GUILD_CLASSES.put(Enum.GuildType.VIRAKT, Arrays.asList("Assassin", "Bard", "Channeler", "Fury", "Huntress", "Nightstalker", "Priest", "Ranger", "Scout", "Thief", "Warrior", "Wizard")); + + GUILD_RACES.put(Enum.GuildType.SCOURGE, Arrays.asList("Aelfborn", "Human", "Minotaur", "Nephilim", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.SCOURGE, Arrays.asList("Bard", "Channeler", "Doomsayer", "Priest", "Scout", "Warrior", "Wizard")); + + GUILD_RACES.put(Enum.GuildType.KHREE, Arrays.asList("Aracoix")); + GUILD_CLASSES.put(Enum.GuildType.KHREE, Arrays.asList("Assassin", "Barbarian", "Bard", "Huntress", "Priest", "Ranger", "Scout", "Thief", "Warlock", "Warrior")); + + GUILD_RACES.put(Enum.GuildType.CENTAUR, Arrays.asList("Centaur")); + GUILD_CLASSES.put(Enum.GuildType.CENTAUR, Arrays.asList("Barbarian", "Crusader", "Druid", "Huntress", "Prelate", "Priest", "Ranger", "Sentinel", "Warrior")); + + GUILD_RACES.put(Enum.GuildType.UNHOLY, Arrays.asList("Human", "Shade", "Vampire", "Saetor")); + GUILD_CLASSES.put(Enum.GuildType.UNHOLY, Arrays.asList("Assassin", "Channeler", "Necromancer", "Priest", "Scout", "Thief", "Warlock", "Warrior", "Wizard")); + } + + public static void AuditPlayer(PlayerCharacter pc){ + Guild nation = pc.guild.getNation(); + int charterID = nation.getCharter(); + if(!validForCharter(pc,charterID)){ + //bounce out to SDR + Vector3fImmutable bounceLoc = Vector3fImmutable.getRandomPointOnCircle(ZoneManager.getZoneByUUID(656).getLoc(),30f); + pc.setLoc(bounceLoc); + MovementManager.translocate(pc, bounceLoc, Regions.GetRegionForTeleport(ZoneManager.getZoneByUUID(656).getLoc())); + } + } + + public static boolean validForCharter(PlayerCharacter pc, int charterID) { + if(pc.getPromotionClass() == null) + return false; + Enum.GuildType guildType = Enum.GuildType.getGuildTypeFromInt(charterID); + + // Define the races and classes for each GuildType + + + // Get the allowed races and classes for this guildType + List allowedRaces = GUILD_RACES.getOrDefault(guildType, Collections.emptyList()); + List allowedClasses = GUILD_CLASSES.getOrDefault(guildType, Collections.emptyList()); + + // Validate player's race and class + if (!allowedRaces.contains(pc.getRace().getName()) || !allowedClasses.contains(pc.getPromotionClass().getName())) { + return false; + } + + // Gender restriction check for AMAZON + if (guildType.equals(Enum.GuildType.AMAZON) && pc.isMale() && pc.getRaceID() != 1999) { + return false; + } + + return true; + } + +}