package core; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Arrays; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import entity.AbilityEntity; import entity.ArmorEntity; import entity.ClassEntity; import entity.FeatEntity; import entity.ItemEntity; import entity.RaceEntity; import entity.SkillEntity; import entity.SpellEntity; import entity.WeaponEntity; public class LoadCharacter { private File stocks; private DocumentBuilderFactory dbFactory; private DocumentBuilder dBuilder; private Document doc; private Element element; private String delims = "[/]+"; private String spellDelims = "[$]+"; private String regex = "[;]+"; private String str; private BufferedReader lrgR; public LoadCharacter(String xmlLocation, character loadChar){ try { character c = loadChar; c.setFilename(xmlLocation); stocks = new File(c.getFilename()); dbFactory = DocumentBuilderFactory.newInstance(); dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(stocks); doc.getDocumentElement().normalize(); String temp, name, description; String[] tempArr; String[] tempMiniArr; lrgR = new BufferedReader(new FileReader(stocks)); NodeList nodes = doc.getElementsByTagName("Character"); Node node = nodes.item(0); if (node.getNodeType() == Node.ELEMENT_NODE) { element = (Element) node; str = getValue("Armor", element); if (!str.equals(" ")) { c.setCurrArmor((ItemEntity) Main.gameState.armor.get(str)); } str = getValue("Shield", element); if (!str.equals(" ")) { c.setCurrShield((ItemEntity) Main.gameState.armor.get(str)); } str = getValue("Exp", element); if (str.equals(" ")) { str = "0"; } c.setExp(Integer.parseInt(str)); str = getValue("Race", element); if (!str.equals(" ")) { c.setCharRace((RaceEntity) Main.gameState.races.get(str)); } str = getValue("Alignment", element); if (!str.equals(" ")) { c.setAlignment(str); } str = getValue("Deity", element); if (!str.equals(" ")) { c.setDeity(str); } str = getValue("Size", element); if (str.equals(" ")) { str = "0"; } c.setSize(Integer.parseInt(str)); str = getValue("Age", element); //if (str.equals(" ")) { str = "0"; } c.setAge(str); str = getValue("Gender", element); //if (str.equals(" ")) { str = "0"; } c.setGender(str); str = getValue("Height", element); //if (str.equals(" ")) { str = "0"; } c.setHeight(getValue("Height", element)); str = getValue("Weight", element); //if (str.equals(" ")) { str = "0"; } c.setWeight(str); str = getValue("Eyes", element); //if (str.equals(" ")) { str = "0"; } c.setEyes(str); str = getValue("Hair", element); //if (str.equals(" ")) { str = "0"; } c.setHair(str); str = getValue("Skin", element); //if (str.equals(" ")) { str = "0"; } c.setSkin(str); str = getValue("Description", element); //if (str.equals(" ")) { str = "0"; } c.setDescription(str); str = getValue("SpecialAbilities", element); if (!str.equals(" ")) { tempArr = str.split(delims); for(int i = 0; i < tempArr.length; i ++){ name = tempArr[i].split(regex)[0]; description = tempArr[i].split(regex)[1]; AbilityEntity ae = new AbilityEntity(name, description); c.addSpecialAbility(ae); } } String line; /*while((line = lrgR.readLine()) != null) { if (line.startsWith("<Spells>")) { str = line.substring(8, line.length()-9); System.out.println(str); } }*/ str = getValue("Spells", element); if (!str.equals(" ")) { tempArr = str.split(spellDelims); for(int i = 0; i < tempArr.length; i ++) { c.addSpell((SpellEntity) Main.gameState.spells.get(tempArr[i].trim())); } } str = getValue("PreparedSpells", element); if (!str.equals(" ")) { tempArr = str.split(spellDelims); for(int i = 0; i < tempArr.length; i ++) { c.prepSpell((SpellEntity) Main.gameState.spells.get(tempArr[i])); } } String[] acString = getValue("AC", element).split(delims); int[] ac = new int[acString.length]; for (int i = 0; i < acString.length; i++) { ac[i] = Integer.parseInt(acString[i]); } c.setAC(ac); String[] initString = getValue("Init", element).split(delims); int[] init = new int[initString.length]; for (int i = 0; i < initString.length; i++) { init[i] = Integer.parseInt(initString[i]); } c.setInitMod(init); String[] fortString = getValue("Fortitude", element).split(delims); int[] fort = new int[fortString.length]; for (int i = 0; i < fortString.length; i++) { fort[i] = Integer.parseInt(fortString[i]); } String[] reflexString = getValue("Reflex", element).split(delims); int[] reflex = new int[reflexString.length]; for (int i = 0; i < reflexString.length; i++) { reflex[i] = Integer.parseInt(reflexString[i]); } String[] willString = getValue("Will", element).split(delims); int[] will = new int[willString.length]; for (int i = 0; i < willString.length; i++) { will[i] = Integer.parseInt(willString[i]); } c.setSavingThrows(fort, reflex, will); // TODO str = getValue("BaseAttack", element); if (!str.equals(" ")) { c.setBaseAttackBonus(Integer.parseInt(str)); } str = getValue("SpellResistance", element); if (!str.equals(" ")) { c.setSpellResistance(Integer.parseInt(str)); } String[] grappleString = getValue("Grapple", element).split(delims); int[] grapple = new int[grappleString.length]; for (int i = 0; i < grappleString.length; i++) { grapple[i] = Integer.parseInt(grappleString[i]); } c.setGrappleMod(grapple); str = getValue("Speed", element); if (str.equals(" ")) { str = "30"; } c.setSpeed(Integer.parseInt(str)); str = getValue("DamageReduction", element); if (str.equals(" ")) { str = "0"; } c.setDamageReduction(Integer.parseInt(str)); str = getValue("ClericDomains", element); if (!str.equals(" ")) { tempArr = str.split(delims); c.setClericDomains(tempArr); } str = getValue("DruidCompanion", element); if (!str.equals(" ")) { c.setDruidAnimalCompanion(str); } str = getValue("RangerFavoredEnemy", element); if (!str.equals(" ")) { c.setRangerFavoredEnemy(str); } str = getValue("Familiar", element); if (!str.equals(" ")) { c.setFamiliar(str); } str = getValue("WizardSpecialty", element); if (!str.equals(" ")) { c.setWizardSpecialtySchool(str); } str = getValue("WizardProhibitedSchools", element); if (!str.equals(" ")) { tempArr= str.split(delims); c.setWizardProhibitedSchools(tempArr); } str = getValue("Image", element); c.setImage(str); str = getValue("Name", element); c.setName(str); str = getValue("Level", element); if (str.equals(" ")) { str = "1"; } c.setLevel(Integer.parseInt(str)); str = getValue("Class", element); if (!str.equals(" ")) { c.setCharClass((ClassEntity) Main.gameState.classes.get(str)); } str = getValue("SecLevel", element); if (!str.equals(" ")) { str = "0"; } c.setSecLevel(Integer.parseInt(str)); str = getValue("SecClass", element); if (!str.equals(" ")) { c.setCharSecClass((ClassEntity) Main.gameState.classes.get(str)); } // Should be fine c.setAbilityScores(Integer.parseInt(getValue("STR", element)), Integer.parseInt(getValue("DEX", element)), Integer.parseInt(getValue("CON", element)), Integer.parseInt(getValue("INT", element)), Integer.parseInt(getValue("WIS", element)), Integer.parseInt(getValue("CHA", element))); c.setHitPoints(Integer.parseInt(getValue("HP", element))); str = getValue("PrimaryWeapon", element); if (!str.equals(" ")) { c.setPrimaryWeapon((WeaponEntity) Main.gameState.weapons.get(str)); } str = getValue("SecondaryWeapon", element); if (!str.equals(" ")) { c.setSecondaryWeapon((WeaponEntity) Main.gameState.weapons.get(str)); } c.setNotes(getValue("Notes", element)); c.setDamageTaken(Integer.parseInt(getValue("DamageTaken", element))); c.setPP(Integer.parseInt(getValue("PP", element))); c.setGP(Integer.parseInt(getValue("GP", element))); c.setSP(Integer.parseInt(getValue("SP", element))); c.setCP(Integer.parseInt(getValue("CP", element))); str = getValue("Items", element); if (!str.equals(" ")) { tempArr = str.split(delims); // itemname;count for(int i = 0; i < tempArr.length; i++){ tempMiniArr = tempArr[i].split(regex); String itemName = tempMiniArr[0]; ItemEntity item = (ItemEntity)Main.gameState.items.get(itemName); int count = Integer.parseInt(tempMiniArr[1]); CharItem ci = new CharItem(item, count); c.addItem(ci); } } // Going to assume this is good temp = getValue("Languages", element); c.setLanguages(new ArrayList<String>(Arrays.asList(temp.split(delims)))); str = getValue("Weapons", element); if (!str.equals(" ")) { tempArr = str.split(delims); // weaponname;quantity for(int i = 0; i < tempArr.length; i++){ tempMiniArr = tempArr[i].split(regex); temp = tempMiniArr[0]; int count = Integer.parseInt(tempMiniArr[1]); WeaponEntity we = (WeaponEntity) (Main.gameState.weapons.get(temp)); CharItem ci = new CharItem(we, count); c.addWeapon(ci); } } str = getValue("Armors", element); if (!str.equals(" ")) { tempArr = str.split(delims); // armorname;quantity for(int i = 0; i < tempArr.length; i++){ tempMiniArr = tempArr[i].split(regex); temp = tempMiniArr[0]; int count = Integer.parseInt(tempMiniArr[1]); ItemEntity ae = (ItemEntity) (Main.gameState.armor.get(temp)); // some in armor list are weapons CharItem ci = new CharItem(ae,count); c.addArmor(ci); } } str = getValue("Skills", element); if (!str.equals(" ")) { tempArr = str.split(delims); // skillname:abilitymod+miscmod+rank for(int i = 0; i < tempArr.length; i++){ tempMiniArr = tempArr[i].split(regex); temp = tempMiniArr[0]; int rank = Integer.parseInt(tempMiniArr[3]); int miscMod = Integer.parseInt(tempMiniArr[2]); CharSkill cs = new CharSkill((SkillEntity) (Main.gameState.skills.get(temp)),c); cs.setRank(rank); cs.setMiscMod(miscMod); c.addSkill(cs); } } str = getValue("Shields", element); if (!str.equals(" ")) { tempArr = str.split(delims); // shieldname;quantity for(int i = 0; i < tempArr.length; i++){ tempMiniArr = tempArr[i].split(regex); temp = tempMiniArr[0]; int count = Integer.parseInt(tempMiniArr[1]); ItemEntity ae = (ItemEntity) (Main.gameState.armor.get(temp)); // some in armor list are weapons CharItem ci = new CharItem(ae, count); c.addShield(ci); } } str = getValue("Feats", element); if (!str.equals(" ")) { tempArr = str.split(delims); // featName;special;count for(int i = 0; i < tempArr.length; i++){ tempMiniArr = tempArr[i].split(regex); int size = tempMiniArr.length; String featName = tempMiniArr[0]; FeatEntity feat = (FeatEntity)Main.gameState.feats.get(featName); int count = Integer.parseInt(tempMiniArr[size-1]); if (size == 3) { String special = tempMiniArr[1]; c.addFeat(new CharFeat(feat, special, count)); } else c.addFeat(new CharFeat(feat, count)); } } } } catch (Exception ex) { ex.printStackTrace(); } } private static String getValue(String tag, Element element) { NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes(); Node node = (Node) nodes.item(0); return node.getNodeValue(); } }