Person* DsaDataLoader::processPerson(DOMElement* personXml) { XMLCh* TALENT = XMLString::transcode("Talent"); XMLCh* ID = XMLString::transcode("ID"); XMLCh* ABGELEITETER_WERT = XMLString::transcode("AbgeleiteterWert"); XMLCh* EIGENSCHAFT = XMLString::transcode("Eigenschaft"); CeGuiString name = XmlHelper::getValueAsUtf8(XmlHelper::getChildNamed(personXml, "Name")); CeGuiString desc = XmlHelper::getValueAsUtf8(XmlHelper::getChildNamed(personXml, "Beschreibung")); Person* rval = new Person(name, desc); // Eigenschaften laden DOMNodeList* eigensch = XmlHelper::getChildNamed(personXml, "Eigenschaften")-> getElementsByTagName(EIGENSCHAFT); // Die Eigenschaftsnamen müssen durch ihre Abkürzung ersetzt werden. for (unsigned int idx = 0; idx < eigensch->getLength(); idx++) { DOMElement* eigenschXml = reinterpret_cast<DOMElement*>(eigensch->item(idx)); CeGuiString eigName = XmlHelper::transcodeToString(eigenschXml->getAttribute(ID)); if (eigName == DsaManager::getSingleton().getEigenschaft(E_MUT)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_MUT)->getNameAbbreviation(); if (eigName == DsaManager::getSingleton().getEigenschaft(E_KLUGHEIT)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_KLUGHEIT)->getNameAbbreviation(); if (eigName == DsaManager::getSingleton().getEigenschaft(E_INTUITION)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_INTUITION)->getNameAbbreviation(); if (eigName == DsaManager::getSingleton().getEigenschaft(E_CHARISMA)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_CHARISMA)->getNameAbbreviation(); if (eigName == DsaManager::getSingleton().getEigenschaft(E_FINGERFERTIGKEIT)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_FINGERFERTIGKEIT)->getNameAbbreviation(); if (eigName == DsaManager::getSingleton().getEigenschaft(E_GEWANDTHEIT)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_GEWANDTHEIT)->getNameAbbreviation(); if (eigName == DsaManager::getSingleton().getEigenschaft(E_KONSTITUTION)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_KONSTITUTION)->getNameAbbreviation(); if (eigName == DsaManager::getSingleton().getEigenschaft(E_KOERPERKRAFT)->getName()) eigName = DsaManager::getSingleton().getEigenschaft(E_KOERPERKRAFT)->getNameAbbreviation(); int wert = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(eigenschXml, "Wert")); rval->setEigenschaft(eigName, wert); } // Abgeleitete Werte laden DOMNodeList* werte = XmlHelper::getChildNamed(personXml, "AbgeleiteteWerte")-> getElementsByTagName(ABGELEITETER_WERT); for (unsigned int idx = 0; idx < werte->getLength(); idx++) { DOMElement* wertXml = reinterpret_cast<DOMElement*>(werte->item(idx)); int basis = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(wertXml, "Basiswert")); int wert = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(wertXml, "Wert")); char* wertId = XMLString::transcode(wertXml->getAttribute(ID)); if (strcmp(wertId, "Lebensenergie") == 0) rval->setWert(WERT_MOD_LE, wert - basis); else if (strcmp(wertId, "Ausdauer") == 0) rval->setWert(WERT_MOD_AU, wert - basis); else if (strcmp(wertId, "AttackeBasis") == 0) rval->setWert(WERT_MOD_AT, wert - basis); else if (strcmp(wertId, "ParadeBasis") == 0) rval->setWert(WERT_MOD_PA, wert - basis); else if (strcmp(wertId, "FernkampfBasis") == 0) rval->setWert(WERT_MOD_FK, wert - basis); else if (strcmp(wertId, "InitiativeBasis") == 0) rval->setWert(WERT_MOD_INI, wert - basis); else if (strcmp(wertId, "Magieresistenz") == 0) rval->setWert(WERT_MOD_MR, wert - basis); else if (strcmp(wertId, "Astralenergie") == 0) rval->setWert(WERT_MOD_AE, wert - basis); else if (strcmp(wertId, "Sozialstatus") == 0) rval->setWert(WERT_SOZIALSTATUS, wert); XMLString::release(&wertId); } // Talente laden // Talente, die direkt unter <Person> angeordnet sind, ergeben bereits die zusammengefassten Werte DOMNodeList* talente = XmlHelper::getChildNamed(personXml, "Talente")-> getElementsByTagName(TALENT); for (unsigned int idx = 0; idx < talente->getLength(); idx++) { DOMElement* talentXml = reinterpret_cast<DOMElement*>(talente->item(idx)); CeGuiString talentName = XmlHelper::transcodeToString(talentXml->getAttribute(ID)); Talent* tal = DsaManager::getSingleton().getTalent(talentName); rval->addTalent(talentName); rval->setTalent( talentName, XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(talentXml, "Wert"))); } XMLString::release(&TALENT); XMLString::release(&ID); XMLString::release(&ABGELEITETER_WERT); XMLString::release(&EIGENSCHAFT); return rval; }