void PlanetManagerImplementation::loadTravelFares() { TemplateManager* templateManager = TemplateManager::instance(); IffStream* iffStream = templateManager->openIffFile("datatables/travel/travel.iff"); if (iffStream == NULL) { warning("Travel fares could not be found."); return; } DataTableIff dtiff; dtiff.readObject(iffStream); //Initialize the rows so we can do a symmetric insert for(int i = 0; i < dtiff.getTotalRows(); i++) { VectorMap<String, int> planetFares; DataTableRow* row = dtiff.getRow(i); String departurePlanet = ""; row->getCell(0)->getValue(departurePlanet); travelFares.put(departurePlanet, planetFares); } //Insert values for(int i = 0; i < dtiff.getTotalRows(); i++) { DataTableRow* row = dtiff.getRow(i); String departurePlanet = ""; row->getCell(0)->getValue(departurePlanet); for(int j=i+1; j<dtiff.getTotalColumns(); j++) { String arrivalPlanet = dtiff.getColumnNameByIndex(j); int fare = 0; row->getCell(j)->getValue(fare); travelFares.get(departurePlanet).put(arrivalPlanet, fare); if(arrivalPlanet != departurePlanet) travelFares.get(arrivalPlanet).put(departurePlanet, fare); } } info("Loaded travel fares to " + String::valueOf(travelFares.size()) + " planets."); }
void PlanetManagerImplementation::loadSnapshotObjects() { TemplateManager* templateManager = TemplateManager::instance(); IffStream* iffStream = templateManager->openIffFile("snapshot/" + zone->getZoneName() + ".ws"); if (iffStream == NULL) { info("Snapshot wasn't found.", true); return; } WorldSnapshotIff wsiff; wsiff.readObject(iffStream); int totalObjects = 0; Vector<SceneObject*> objects(1000, 1000); for (int i = 0; i < wsiff.getNodeCount(); ++i) { WorldSnapshotNode* node = wsiff.getNode(i); if (node == NULL) continue; SceneObject* object = loadSnapshotObject(node, &wsiff, totalObjects); if (object != NULL) objects.add(object); } for (int i = 0; i < objects.size(); ++i) objects.get(i)->createChildObjects(); delete iffStream; printf("\n"); info("Loaded " + String::valueOf(totalObjects) + " client objects from world snapshot.", true); }
int PlaceStructureSessionImplementation::constructStructure(float x, float y, int angle) { positionX = x; positionY = y; directionAngle = angle; TemplateManager* templateManager = TemplateManager::instance(); String serverTemplatePath = deedObject->getGeneratedObjectTemplate(); Reference<SharedStructureObjectTemplate*> serverTemplate = dynamic_cast<SharedStructureObjectTemplate*>(templateManager->getTemplate(serverTemplatePath.hashCode())); if (serverTemplate == NULL || temporaryNoBuildZone != NULL) return cancelSession(); //Something happened, the server template is not a structure template or temporaryNoBuildZone already set. placeTemporaryNoBuildZone(serverTemplate); String barricadeServerTemplatePath = serverTemplate->getConstructionMarkerTemplate(); int constructionDuration = 100; //Set the duration for 100ms as a fall back if it doesn't have a barricade template. if (!barricadeServerTemplatePath.isEmpty()) { constructionBarricade = ObjectManager::instance()->createObject(barricadeServerTemplatePath.hashCode(), 0, ""); if (constructionBarricade != NULL) { constructionBarricade->initializePosition(x, 0, y); //The construction barricades are always at the terrain height. StructureFootprint* structureFootprint = serverTemplate->getStructureFootprint(); if (structureFootprint != NULL && (structureFootprint->getRowSize() > structureFootprint->getColSize())) { angle = angle + 180; } constructionBarricade->rotate(angle); //All construction barricades need to be rotated 180 degrees for some reason. //constructionBarricade->insertToZone(zone); zone->transferObject(constructionBarricade, -1, true); constructionDuration = serverTemplate->getLotSize() * 3000; //3 seconds per lot. } } Reference<Task*> task = new StructureConstructionCompleteTask(creatureObject); task->schedule(constructionDuration); return 0; }
void StructureDeedImplementation::fillAttributeList(AttributeListMessage* alm, CreatureObject* object) { DeedImplementation::fillAttributeList(alm, object); TemplateManager* templateManager = TemplateManager::instance(); uint32 structureCRC = generatedObjectTemplate.hashCode(); SharedStructureObjectTemplate* structureTemplate = dynamic_cast<SharedStructureObjectTemplate*>(templateManager->getTemplate(structureCRC)); if (structureTemplate == NULL) return; //Base Maintenance Rate int baseMaintenanceRate = structureTemplate->getBaseMaintenanceRate(); int basePowerRate = structureTemplate->getBasePowerRate(); if (baseMaintenanceRate > 0) alm->insertAttribute("examine_maintenance_rate", String::valueOf(baseMaintenanceRate) + " / hour"); //Base Maintenance Rate if (surplusMaintenance > 0) alm->insertAttribute("examine_maintenance", String::valueOf(surplusMaintenance)); //Surplus Maintenance if (surplusPower > 0) alm->insertAttribute("examine_power", String::valueOf(surplusPower)); //Surplus Power if (hopperSizeMax > 0) alm->insertAttribute("examine_hoppersize", String::valueOf((int)hopperSizeMax)); if (extractionRate > 0) alm->insertAttribute("examine_extractionrate", String::valueOf(Math::getPrecision(extractionRate, 2))); for (int i = 0; i < structureTemplate->getTotalAllowedZones(); ++i) { String zoneName = structureTemplate->getAllowedZone(i); if (zoneName.isEmpty()) continue; alm->insertAttribute("examine_scene", "@planet_n:" + zoneName); //Can Be Built On } }
void Template::compose( const TemplateManager & tm ) { QMapConstIterator <QString, QString> i = const_cast<QMap<QString, QString> &>( d->requestedNestedTemplates).begin(); for( ; i != const_cast<QMap<QString, QString> &>( d->requestedNestedTemplates).end(); ++i ) { //try to acquire template of a given type Template * t = tm.instantiate( i.data(), getLoggerPtr(), d->requestedNestedTemplateLibs[ i.key() ] ); if( t != NULL ) { // recursively compose even our nested templates t->compose( tm ); // and put our template to our internal hash registerNestedTemplate( i.key(), t ); } } }
void PlanetManagerImplementation::loadClientRegions() { TemplateManager* templateManager = TemplateManager::instance(); IffStream* iffStream = templateManager->openIffFile("datatables/clientregion/" + zone->getZoneName() + ".iff"); Reference<PlanetMapCategory*> cityCat = TemplateManager::instance()->getPlanetMapCategoryByName("city"); if (iffStream == NULL) { info("No client regions found."); return; } DataTableIff dtiff; dtiff.readObject(iffStream); for (int i = 0; i < dtiff.getTotalRows(); ++i) { String regionName; float x, y, radius; DataTableRow* row = dtiff.getRow(i); row->getValue(0, regionName); row->getValue(1, x); row->getValue(2, y); row->getValue(3, radius); ManagedReference<CityRegion*> cityRegion = regionMap.getRegion(regionName); if (cityRegion == NULL) { cityRegion = new CityRegion(); Locker locker(cityRegion); cityRegion->deploy(); cityRegion->setRegionName(regionName); cityRegion->setZone(zone); regionMap.addRegion(cityRegion); } Locker locker(cityRegion); ManagedReference<Region*> region = cityRegion->addRegion(x, y, radius, false); locker.release(); if (region != NULL) { Locker rlocker(region); if (cityRegion->getRegionsCount() == 1) {//Register the first region only. region->setPlanetMapCategory(cityCat); zone->registerObjectWithPlanetaryMap(region); } region->setMunicipalZone(true); ManagedReference<SceneObject*> scenery = NULL; if (gcwManager != NULL) { int strongholdFaction = gcwManager->isStrongholdCity(regionName); if (strongholdFaction == GCWManager::IMPERIALHASH || regionName.contains("imperial")) { scenery = zone->getZoneServer()->createObject(STRING_HASHCODE("object/static/particle/particle_distant_ships_imperial.iff"), 0); } else if (strongholdFaction == GCWManager::REBELHASH || regionName.contains("rebel")) { scenery = zone->getZoneServer()->createObject(STRING_HASHCODE("object/static/particle/particle_distant_ships_rebel.iff"), 0); } else { scenery = zone->getZoneServer()->createObject(STRING_HASHCODE("object/static/particle/particle_distant_ships.iff"), 0); } } else { scenery = zone->getZoneServer()->createObject(STRING_HASHCODE("object/static/particle/particle_distant_ships.iff"), 0); } Locker slocker(scenery, region); scenery->initializePosition(x, zone->getHeight(x, y) + 100, y); region->attachScenery(scenery); } ManagedReference<ActiveArea*> noBuild = zone->getZoneServer()->createObject(STRING_HASHCODE("object/active_area.iff"), 0).castTo<ActiveArea*>(); Locker areaLocker(noBuild); noBuild->initializePosition(x, 0, y); ManagedReference<CircularAreaShape*> areaShape = new CircularAreaShape(); Locker shapeLocker(areaShape); areaShape->setRadius(radius * 2); areaShape->setAreaCenter(x, y); noBuild->setAreaShape(areaShape); noBuild->setRadius(radius * 2); noBuild->setNoBuildArea(true); // Cities already have "Municipal" protection so the structure no-build should not apply to camps noBuild->setCampingPermitted(true); Locker zoneLocker(zone); zone->transferObject(noBuild, -1, true); } info("Added " + String::valueOf(regionMap.getTotalRegions()) + " client regions."); delete iffStream; }
bool PlayerCreationManager::createCharacter(MessageCallback* data) { TemplateManager* templateManager = TemplateManager::instance(); ClientCreateCharacterCallback* callback = cast< ClientCreateCharacterCallback*>(data); ZoneClientSession* client = data->getClient(); if (client->getCharacterCount(zoneServer.get()->getGalaxyID()) >= 10) { ErrorMessage* errMsg = new ErrorMessage("Create Error", "You are limited to 10 characters per galaxy.", 0x0); client->sendMessage(errMsg); return false; } PlayerManager* playerManager = zoneServer.get()->getPlayerManager(); SkillManager* skillManager = SkillManager::instance(); //Get all the data and validate it. UnicodeString characterName; callback->getCharacterName(characterName); //TODO: Replace this at some point? if (!playerManager->checkPlayerName(callback)) return false; String raceFile; callback->getRaceFile(raceFile); uint32 serverObjectCRC = raceFile.hashCode(); PlayerCreatureTemplate* playerTemplate = dynamic_cast<PlayerCreatureTemplate*>(templateManager->getTemplate( serverObjectCRC)); if (playerTemplate == NULL) { error("Unknown player template selected: " + raceFile); return false; } int raceID = playerTemplate->getRace(); String fileName = playerTemplate->getTemplateFileName(); String clientTemplate = templateManager->getTemplateFile( playerTemplate->getClientObjectCRC()); RacialCreationData* raceData = racialCreationData.get(fileName); if (raceData == NULL) raceData = racialCreationData.get(0); //Just get the first race, since they tried to create a race that doesn't exist. String profession, customization, hairTemplate, hairCustomization; callback->getSkill(profession); if (profession.contains("jedi")) profession = "crafting_artisan"; callback->getCustomizationString(customization); callback->getHairObject(hairTemplate); callback->getHairCustomization(hairCustomization); float height = callback->getHeight(); height = MAX(MIN(height, playerTemplate->getMaxScale()), playerTemplate->getMinScale()); //validate biography UnicodeString bio; callback->getBiography(bio); bool doTutorial = callback->getTutorialFlag(); //bool doTutorial = false; ManagedReference<CreatureObject*> playerCreature = zoneServer.get()->createObject( serverObjectCRC, 2).castTo<CreatureObject*>(); if (playerCreature == NULL) { error("Could not create player with template: " + raceFile); return false; } Locker playerLocker(playerCreature); playerCreature->createChildObjects(); playerCreature->setHeight(height); playerCreature->setCustomObjectName(characterName, false); //TODO: Validate with Name Manager. client->setPlayer(playerCreature); playerCreature->setClient(client); // Set starting cash and starting bank playerCreature->setCashCredits(startingCash, false); playerCreature->setBankCredits(startingBank, false); ManagedReference<PlayerObject*> ghost = playerCreature->getPlayerObject(); if (ghost != NULL) { //Set skillpoints before adding any skills. ghost->setSkillPoints(skillPoints); ghost->setStarterProfession(profession); } addCustomization(playerCreature, customization, playerTemplate->getAppearanceFilename()); addHair(playerCreature, hairTemplate, hairCustomization); if (!doTutorial) { addProfessionStartingItems(playerCreature, profession, clientTemplate, false); addStartingItems(playerCreature, clientTemplate, false); addRacialMods(playerCreature, fileName, playerTemplate->getStartingSkills(), playerTemplate->getStartingItems(), false); } else { addProfessionStartingItems(playerCreature, profession, clientTemplate, true); addStartingItems(playerCreature, clientTemplate, true); addRacialMods(playerCreature, fileName, playerTemplate->getStartingSkills(), playerTemplate->getStartingItems(), true); } // Set starting cash and starting bank playerCreature->setCashCredits(startingCash, false); playerCreature->setBankCredits(startingBank, false); if (ghost != NULL) { ghost->setAccountID(client->getAccountID()); if (!freeGodMode) { try { uint32 accID = client->getAccountID(); ManagedReference<Account*> playerAccount = playerManager->getAccount(accID); if (playerAccount == NULL) { playerCreature->destroyPlayerCreatureFromDatabase(true); return false; } int accountPermissionLevel = playerAccount->getAdminLevel(); String accountName = playerAccount->getUsername(); if(accountPermissionLevel > 0 && (accountPermissionLevel == 9 || accountPermissionLevel == 10 || accountPermissionLevel == 12 || accountPermissionLevel == 15)) { playerManager->updatePermissionLevel(playerCreature, accountPermissionLevel); /* Reference<ShipControlDevice*> shipControlDevice = zoneServer->createObject(STRING_HASHCODE("object/intangible/ship/sorosuub_space_yacht_pcd.iff"), 1).castTo<ShipControlDevice*>(); //ShipObject* ship = (ShipObject*) server->createObject(STRING_HASHCODE("object/ship/player/player_sorosuub_space_yacht.iff"), 1); Reference<ShipObject*> ship = zoneServer->createObject(STRING_HASHCODE("object/ship/player/player_basic_tiefighter.iff"), 1).castTo<ShipObject*>(); shipControlDevice->setControlledObject(ship); if (!shipControlDevice->transferObject(ship, 4)) info("Adding of ship to device failed"); ManagedReference<SceneObject*> datapad = playerCreature->getSlottedObject("datapad"); if (datapad != NULL) { if (!datapad->transferObject(shipControlDevice, -1)) { shipControlDevice->destroyObjectFromDatabase(true); } } else { shipControlDevice->destroyObjectFromDatabase(true); error("could not get datapad from player"); } */ } if (accountPermissionLevel < 9) { try { StringBuffer query; //query << "SELECT UNIX_TIMESTAMP(creation_date) FROM characters c WHERE galaxy_id = " << zoneServer.get()->getGalaxyID() << " AND account_id = " << client->getAccountID() << " ORDER BY creation_date desc;"; uint32 galaxyId = zoneServer.get()->getGalaxyID(); uint32 accountId = client->getAccountID(); query << "(SELECT UNIX_TIMESTAMP(c.creation_date) as t FROM characters as c WHERE c.account_id = " << accountId << " AND c.galaxy_id = " << galaxyId << " ORDER BY c.creation_date DESC) UNION (SELECT UNIX_TIMESTAMP(d.creation_date) FROM deleted_characters as d WHERE d.account_id = " << accountId << " AND d.galaxy_id = " << galaxyId << " ORDER BY d.creation_date DESC) ORDER BY t DESC LIMIT 1"; Reference<ResultSet*> res = ServerDatabase::instance()->executeQuery(query); if (res != NULL && res->next()) { uint32 sec = res->getUnsignedInt(0); Time timeVal(sec); if (timeVal.miliDifference() < 86400000) { ErrorMessage* errMsg = new ErrorMessage("Create Error", "You are only permitted to create one character every 24 hours. Repeat attempts prior to 24 hours elapsing will reset the timer.", 0x0); client->sendMessage(errMsg); playerCreature->destroyPlayerCreatureFromDatabase(true); return false; } //timeVal.se } } catch (DatabaseException& e) { error(e.getMessage()); } Locker locker(&charCountMutex); if (lastCreatedCharacter.containsKey(accID)) { Time lastCreatedTime = lastCreatedCharacter.get(accID); if (lastCreatedTime.miliDifference() < 86400000) { ErrorMessage* errMsg = new ErrorMessage("Create Error", "You are only permitted to create one character every 24 hours. Repeat attempts prior to 24 hours elapsing will reset the timer.", 0x0); client->sendMessage(errMsg); playerCreature->destroyPlayerCreatureFromDatabase(true); return false; } else { lastCreatedTime.updateToCurrentTime(); lastCreatedCharacter.put(accID, lastCreatedTime); } } else { lastCreatedCharacter.put(accID, Time()); } } } catch (Exception& e) { error(e.getMessage()); } } else { playerManager->updatePermissionLevel(playerCreature, PermissionLevelList::instance()->getLevelNumber("admin")); } if (doTutorial) playerManager->createTutorialBuilding(playerCreature); else playerManager->createSkippedTutorialBuilding(playerCreature); ValidatedPosition* lastValidatedPosition = ghost->getLastValidatedPosition(); lastValidatedPosition->update(playerCreature); ghost->setBiography(bio); ghost->setRaceID(raceID); ghost->setLanguageID(playerTemplate->getDefaultLanguage()); } playerCreature->setLevel(1); ClientCreateCharacterSuccess* msg = new ClientCreateCharacterSuccess( playerCreature->getObjectID()); playerCreature->sendMessage(msg); ChatManager* chatManager = zoneServer.get()->getChatManager(); chatManager->addPlayer(playerCreature); String firstName = playerCreature->getFirstName(); String lastName = playerCreature->getLastName(); try { StringBuffer query; query << "INSERT INTO `characters_dirty` (`character_oid`, `account_id`, `galaxy_id`, `firstname`, `surname`, `race`, `gender`, `template`)" << " VALUES (" << playerCreature->getObjectID() << "," << client->getAccountID() << "," << zoneServer.get()->getGalaxyID() << "," << "'" << firstName.escapeString() << "','" << lastName.escapeString() << "'," << raceID << "," << 0 << ",'" << raceFile.escapeString() << "')"; ServerDatabase::instance()->executeStatement(query); } catch (DatabaseException& e) { error(e.getMessage()); } playerManager->addPlayer(playerCreature); // Copy claimed veteran rewards from player's alt character uint32 accID = client->getAccountID(); ManagedReference<Account*> playerAccount = playerManager->getAccount(accID); if (playerAccount != NULL && ghost != NULL) { // Find the first alt character ManagedReference<CreatureObject*> altPlayer = NULL; CharacterList* characters = playerAccount->getCharacterList(); for(int i = 0; i < characters->size(); ++i) { CharacterListEntry* entry = &characters->get(i); if(entry->getGalaxyID() == zoneServer.get()->getGalaxyID() && entry->getFirstName() != playerCreature->getFirstName() ) { altPlayer = playerManager->getPlayer(entry->getFirstName()); if( altPlayer != NULL ){ break; } } } // Record the rewards if alt player was found if( altPlayer != NULL && altPlayer->getPlayerObject() != NULL){ Locker alocker( altPlayer ); for( int i = 0; i < playerManager->getNumVeteranRewardMilestones(); i++ ){ int milestone = playerManager->getVeteranRewardMilestone(i); String claimedReward = altPlayer->getPlayerObject()->getChosenVeteranReward(milestone); if( !claimedReward.isEmpty() ){ ghost->addChosenVeteranReward(milestone,claimedReward); } } } } client->addCharacter(playerCreature->getObjectID(), zoneServer.get()->getGalaxyID()); JediManager::instance()->onPlayerCreated(playerCreature); ManagedReference<SuiMessageBox*> box = new SuiMessageBox(playerCreature, SuiWindowType::NONE); box->setPromptTitle("PLEASE NOTE"); box->setPromptText("You are limited to creating one character every 24 hours. Attempting to create another character or deleting your character before the 24 hour timer expires will reset the timer."); ghost->addSuiBox(box); playerCreature->sendMessage(box->generateMessage()); ghost->recalculateCombatLevel(playerCreature); return true; }
void PlayerCreationManager::loadProfessionDefaultsInfo() { TemplateManager* templateManager = TemplateManager::instance(); IffStream* iffStream = templateManager->openIffFile( "creation/profession_defaults.iff"); if (iffStream == NULL) { error("Could not open creation profession data."); return; } SkillDataForm pfdt; pfdt.readObject(iffStream); delete iffStream; //Load the data into useful structs and store them in a map. for (int i = 0; i < pfdt.getTotalPaths(); ++i) { String name = pfdt.getSkillNameAt(i); String path = pfdt.getPathBySkillName(name); iffStream = templateManager->openIffFile(path); if (iffStream == NULL) continue; Reference<ProfessionDefaultsInfo*> pdi = new ProfessionDefaultsInfo(); pdi->readObject(iffStream); delete iffStream; professionDefaultsInfo.put(name, pdi); //info("Loading: " + pfdt.getSkillNameAt(i) + " Path: " + pfdt.getPathBySkillName(pfdt.getSkillNameAt(i)), true); } //Now we want to load the profession mods. iffStream = templateManager->openIffFile( "datatables/creation/profession_mods.iff"); DataTableIff dtiff; dtiff.readObject(iffStream); delete iffStream; for (int i = 0; i < dtiff.getTotalRows(); ++i) { DataTableRow* row = dtiff.getRow(i); String key; row->getValue(0, key); //Check if the professionInfo for this exists. Reference<ProfessionDefaultsInfo*> pdi = professionDefaultsInfo.get( key); if (pdi == NULL) continue; for (int i = 1; i < 10; ++i) { int value = 0; row->getValue(i, value); pdi->setAttributeMod(i - 1, value); } } info( "Loaded " + String::valueOf(professionDefaultsInfo.size()) + " creation professions."); }
void CameraController::executeCommand(CameraCommand* const cmd) { if (!cmd) { return; } switch (cmd->action) { case (CameraCommand::cam_connect): { sendLogMsg(i18n("Connecting to camera...")); bool result = d->camera->doConnect(); emit signalConnected(result); if (result) { sendLogMsg(i18n("Connection established.")); } else { sendLogMsg(i18n("Connection failed.")); } break; } case (CameraCommand::cam_cameraInformation): { QString summary, manual, about; d->camera->cameraSummary(summary); d->camera->cameraManual(manual); d->camera->cameraAbout(about); emit signalCameraInformation(summary, manual, about); break; } case (CameraCommand::cam_freeSpace): { unsigned long kBSize = 0; unsigned long kBAvail = 0; if (!d->camera->getFreeSpace(kBSize, kBAvail)) { sendLogMsg(i18n("Failed to get free space from camera"), DHistoryView::ErrorEntry); } emit signalFreeSpace(kBSize, kBAvail); break; } case (CameraCommand::cam_preview): { QImage preview; if (!d->camera->getPreview(preview)) { sendLogMsg(i18n("Failed to get preview from camera"), DHistoryView::ErrorEntry); } emit signalPreview(preview); break; } case (CameraCommand::cam_capture): { CamItemInfo itemInfo; if (!d->camera->capture(itemInfo)) { sendLogMsg(i18n("Failed to process capture from camera"), DHistoryView::ErrorEntry); } emit signalUploaded(itemInfo); break; } case (CameraCommand::cam_listfolders): { QString folder = cmd->map["folder"].toString(); if (!d->camera->getFolders(folder)) { sendLogMsg(i18n("Failed to list folder <filename>%1</filename>", folder), DHistoryView::ErrorEntry); } break; } case (CameraCommand::cam_listfiles): { QString folder = cmd->map["folder"].toString(); bool useMetadata = cmd->map["useMetadata"].toBool(); CamItemInfoList itemsList; if (!d->camera->getItemsInfoList(folder, useMetadata, itemsList)) { sendLogMsg(i18n("Failed to list files in <filename>%1</filename>", folder), DHistoryView::ErrorEntry); } // TODO would it be okay to pass this to the ImportImageModel and let it filter it for us? for (CamItemInfoList::iterator it = itemsList.begin() ; it != itemsList.end() ; ) { CamItemInfo &info = (*it); if (info.mime.isEmpty()) { it = itemsList.erase(it); continue; } ++it; } emit signalFileList(itemsList); break; } case (CameraCommand::cam_thumbsinfo): { QList<QVariant> list = cmd->map["list"].toList(); int thumbSize = cmd->map["thumbSize"].toInt(); for (QList<QVariant>::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) { if (d->canceled) { break; } QString folder = (*it).toStringList().at(0); QString file = (*it).toStringList().at(1); CamItemInfo info; info.folder = folder; info.name = file; QImage thumbnail; if (d->camera->getThumbnail(folder, file, thumbnail)) { thumbnail = thumbnail.scaled(thumbSize, thumbSize, Qt::KeepAspectRatio); emit signalThumbInfo(folder, file, info, thumbnail); } else { sendLogMsg(i18n("Failed to get thumbnail for <filename>%1</filename>", file), DHistoryView::ErrorEntry, folder, file); emit signalThumbInfoFailed(folder, file, info); } } break; } case (CameraCommand::cam_metadata): { QString folder = cmd->map["folder"].toString(); QString file = cmd->map["file"].toString(); DMetadata meta; if (!d->camera->getMetadata(folder, file, meta)) sendLogMsg(i18n("Failed to get Metadata for <filename>%1</filename>", file), DHistoryView::ErrorEntry, folder, file); emit signalMetadata(folder, file, meta); break; } case (CameraCommand::cam_download): { QString folder = cmd->map["folder"].toString(); QString file = cmd->map["file"].toString(); QString dest = cmd->map["dest"].toString(); bool fixDateTime = cmd->map["fixDateTime"].toBool(); QDateTime newDateTime = cmd->map["newDateTime"].toDateTime(); QString templateTitle = cmd->map["template"].toString(); bool convertJpeg = cmd->map["convertJpeg"].toBool(); QString losslessFormat = cmd->map["losslessFormat"].toString(); QString script = cmd->map["script"].toString(); int pickLabel = cmd->map["pickLabel"].toInt(); int colorLabel = cmd->map["colorLabel"].toInt(); int rating = cmd->map["rating"].toInt(); // download to a temp file emit signalDownloaded(folder, file, CamItemInfo::DownloadStarted); KUrl tempURL(dest); tempURL = tempURL.upUrl(); tempURL.addPath(QString(".digikam-camera-tmp1-%1").arg(getpid()).append(file)); kDebug() << "Downloading: " << file << " using (" << tempURL << ")"; QString temp = tempURL.toLocalFile(); bool result = d->camera->downloadItem(folder, file, tempURL.toLocalFile()); if (!result) { unlink(QFile::encodeName(tempURL.toLocalFile())); sendLogMsg(i18n("Failed to download <filename>%1</filename>", file), DHistoryView::ErrorEntry, folder, file); emit signalDownloaded(folder, file, CamItemInfo::DownloadFailed); break; } else if (JPEGUtils::isJpegImage(tempURL.toLocalFile())) { // Possible modification operations. Only apply it to JPEG for the moment. kDebug() << "Set metadata from: " << file << " using (" << tempURL << ")"; DMetadata metadata(tempURL.toLocalFile()); metadata.setExifTagString("Exif.Image.DocumentName", QFileInfo(dest).fileName()); if (fixDateTime) { metadata.setImageDateTime(newDateTime, true); } //TODO: Set image tags using DMetadata. if (colorLabel > NoColorLabel) { metadata.setImageColorLabel(colorLabel); } if (pickLabel > NoPickLabel) { metadata.setImagePickLabel(pickLabel); } if (rating > RatingMin) { metadata.setImageRating(rating); } if (!templateTitle.isNull() && !templateTitle.isEmpty()) { TemplateManager* tm = TemplateManager::defaultManager(); kDebug() << "Metadata template title : " << templateTitle; if (tm && templateTitle == Template::removeTemplateTitle()) { metadata.removeMetadataTemplate(); } else if (tm) { metadata.removeMetadataTemplate(); metadata.setMetadataTemplate(tm->findByTitle(templateTitle)); } } metadata.applyChanges(); // Convert JPEG file to lossless format if wanted, // and move converted image to destination. if (convertJpeg) { KUrl tempURL2(dest); tempURL2 = tempURL2.upUrl(); tempURL2.addPath(QString(".digikam-camera-tmp2-%1").arg(getpid()).append(file)); temp = tempURL2.toLocalFile(); // when convertnig a file, we need to set the new format extension.. // The new extension is already set in importui.cpp. kDebug() << "Convert to LossLess: " << file << " using (" << tempURL << ") destination: " << dest; if (!JPEGUtils::jpegConvert(tempURL.toLocalFile(), tempURL2.toLocalFile(), file, losslessFormat)) { kDebug() << " Convert failed?! eh"; // convert failed. delete the temp file unlink(QFile::encodeName(tempURL.toLocalFile())); unlink(QFile::encodeName(tempURL2.toLocalFile())); sendLogMsg(i18n("Failed to convert file <filename>%1</filename> to JPEG", file), DHistoryView::ErrorEntry, folder, file); } else { kDebug() << " Done, removing the temp file: " << tempURL; // Else remove only the first temp file. unlink(QFile::encodeName(tempURL.toLocalFile())); } } } // Now we need to move from temp file to destination file. // This possibly involves UI operation, do it from main thread emit signalInternalCheckRename(folder, file, dest, temp, script); break; } case (CameraCommand::cam_upload): { QString folder = cmd->map["destFolder"].toString(); // We will using the same source file name to create the dest file // name in camera. QString file = cmd->map["destFile"].toString(); // The source file path to download in camera. QString src = cmd->map["srcFilePath"].toString(); CamItemInfo itemsInfo; bool result = d->camera->uploadItem(folder, file, src, itemsInfo); if (result) { emit signalUploaded(itemsInfo); } else { emit signalInternalUploadFailed(folder, file, src); } break; } case (CameraCommand::cam_delete): { QString folder = cmd->map["folder"].toString(); QString file = cmd->map["file"].toString(); bool result = d->camera->deleteItem(folder, file); if (result) { emit signalDeleted(folder, file, true); } else { emit signalInternalDeleteFailed(folder, file); } break; } case (CameraCommand::cam_lock): { QString folder = cmd->map["folder"].toString(); QString file = cmd->map["file"].toString(); bool lock = cmd->map["lock"].toBool(); bool result = d->camera->setLockItem(folder, file, lock); if (result) { emit signalLocked(folder, file, true); } else { emit signalInternalLockFailed(folder, file); } break; } default: { kWarning() << " unknown action specified"; break; } } }
void SetUp() { // Perform setup of common constructs here. lootGroupMap->initialize(); ASSERT_TRUE( templateManager != NULL ); if( templateManager->loadedTemplatesCount == 0 ) { templateManager->loadLuaTemplates(); } commandConfigManager->registerSpecialCommands(list); commandConfigManager->loadSlashCommandsFile(); Vector<String> files; files.add("string/en/mob/creature_names.stf"); files.add("string/en/npc_name.stf"); files.add("string/en/monster_name.stf"); files.add("string/en/droid_name.stf"); files.add("string/en/npc_spawner_n.stf"); files.add("string/en/theme_park_name.stf"); files.add("string/en/event_perk.stf"); files.add("string/en/bestine.stf"); files.add("string/en/theme_park/warren/warren_system_messages.stf"); files.add("string/en/newbie_tutorial/system_messages.stf"); files.add("string/en/chassis_npc.stf"); int count = 0; for (int i = 0; i < files.size(); i++) { String file = files.get(i); ObjectInputStream* stream = templateManager->openTreFile(file); if (stream != NULL) { if (stream->size() > 4) { StringFile stringFile; if (stringFile.load(stream)) { file = file.replaceFirst("string/en/",""); file = file.replaceFirst(".stf",""); HashTable<String, UnicodeString>* hashTable = stringFile.getStringMap(); HashTableIterator<String, UnicodeString> iterator = hashTable->iterator(); while (iterator.hasNext()) { String name; UnicodeString value; iterator.getNextKeyAndValue(name, value); String full = "@" + file + ":" + name; mobNames.add(full); count++; } } } delete stream; } } ASSERT_TRUE( count > 0 ) << "Could not load creature names."; }
void PlanetManagerImplementation::loadClientRegions() { TemplateManager* templateManager = TemplateManager::instance(); IffStream* iffStream = templateManager->openIffFile("datatables/clientregion/" + zone->getZoneName() + ".iff"); Reference<PlanetMapCategory*> cityCat = TemplateManager::instance()->getPlanetMapCategoryByName("city"); if (iffStream == NULL) { info("No client regions found."); return; } DataTableIff dtiff; dtiff.readObject(iffStream); for (int i = 0; i < dtiff.getTotalRows(); ++i) { String regionName; float x, y, radius; DataTableRow* row = dtiff.getRow(i); row->getValue(0, regionName); row->getValue(1, x); row->getValue(2, y); row->getValue(3, radius); ManagedReference<CityRegion*> cityRegion = regionMap.getRegion(regionName); if (cityRegion == NULL) { cityRegion = new CityRegion(); cityRegion->deploy(); cityRegion->setRegionName(regionName); cityRegion->setZone(zone); regionMap.addRegion(cityRegion); } ManagedReference<Region*> region = cityRegion->addRegion(x, y, radius, false); if (region != NULL) { if (cityRegion->getRegionsCount() == 1) {//Register the first region only. region->setPlanetMapCategory(cityCat); zone->registerObjectWithPlanetaryMap(region); } region->setMunicipalZone(true); } ManagedReference<ActiveArea*> noBuild = zone->getZoneServer()->createObject(String("object/active_area.iff").hashCode(), 0).castTo<ActiveArea*>(); noBuild->initializePosition(x, 0, y); ManagedReference<CircularAreaShape*> areaShape = new CircularAreaShape(); areaShape->setRadius(radius * 2); areaShape->setAreaCenter(x, y); noBuild->setAreaShape(areaShape); noBuild->setRadius(radius * 2); noBuild->setNoBuildArea(true); // Cities already have "Municipal" protection so the structure no-build should not apply to camps noBuild->setCampingPermitted(true); zone->transferObject(noBuild, -1, true); } info("Added " + String::valueOf(regionMap.getTotalRegions()) + " client regions."); }
void SharedTangibleObjectTemplate::parseVariableData(const String& varName, LuaObject* data) { lua_State* state = data->getLuaState(); TemplateManager* templateManager = TemplateManager::instance(); if (varName == "certificationsRequired") { LuaObject certifications(state); certificationsRequired.removeAll(); for (int i = 1; i <= certifications.getTableSize(); ++i) { certificationsRequired.add(certifications.getStringAt(i)); } certifications.pop(); } else if (varName == "structureFootprintFileName") { structureFootprint = templateManager->loadStructureFootprint(Lua::getStringParameter(state)); } else if (varName == "targetable") { targetable = Lua::getByteParameter(state); } else if (varName == "playerUseMask") { playerUseMask = Lua::getShortParameter(state); } else if (varName == "useCount") { useCount = Lua::getIntParameter(state); } else if (varName == "factoryCrateSize") { factoryCrateSize = Lua::getIntParameter(state); } else if (varName == "maxCondition") { maxCondition = Lua::getIntParameter(state); } else if (varName == "level") { level = Lua::getIntParameter(state); } else if (varName == "optionsBitmask") { optionsBitmask = Lua::getIntParameter(state); } else if (varName == "pvpStatusBitmask") { pvpStatusBitmask = Lua::getIntParameter(state); } else if (varName == "sliceable") { sliceable = Lua::getIntParameter(state); } else if (varName == "faction") { String factionString = Lua::getStringParameter(state); faction = factionString.toLowerCase().hashCode(); } else if (varName == "playerRaces") { LuaObject races(state); // Inherited lists need to be tossed if a new list is about to be created if (playerRaces->size() != 0) { playerRaces->removeAll(); } for (int i = 1; i <= races.getTableSize(); ++i) { String race = races.getStringAt(i); if (!playerRaces->contains(race.hashCode())) { playerRaces->add(race.hashCode()); } } races.pop(); } else if (varName == "skillMods") { skillMods.removeAll(); LuaObject smods(state); for (int i = 1; i <= smods.getTableSize(); ++i) { lua_rawgeti(state, -1, i); LuaObject mod(state); String modName = mod.getStringAt(1); int modValue = mod.getIntAt(2); skillMods.put(modName, modValue); mod.pop(); } smods.pop(); } else if (varName == "numberExperimentalProperties") { LuaObject numberExperimentalPropertiesList(state); numberExperimentalProperties->removeAll(); for (int i = 1; i <= numberExperimentalPropertiesList.getTableSize(); ++i) { numberExperimentalProperties->add(numberExperimentalPropertiesList.getIntAt(i)); } numberExperimentalPropertiesList.pop(); } else if (varName == "experimentalProperties") { LuaObject experimentalPropertiesList(state); experimentalProperties->removeAll(); for (int i = 1; i <= experimentalPropertiesList.getTableSize(); ++i) { experimentalProperties->add(experimentalPropertiesList.getStringAt(i)); } experimentalPropertiesList.pop(); } else if (varName == "experimentalWeights") { LuaObject experimentalWeightsList(state); experimentalWeights->removeAll(); for (int i = 1; i <= experimentalWeightsList.getTableSize(); ++i) { experimentalWeights->add(experimentalWeightsList.getIntAt(i)); } experimentalWeightsList.pop(); } else if (varName == "experimentalGroupTitles") { LuaObject experimentalGroupTitlesList(state); experimentalGroupTitles->removeAll(); for (int i = 1; i <= experimentalGroupTitlesList.getTableSize(); ++i) { experimentalGroupTitles->add(experimentalGroupTitlesList.getStringAt(i)); } experimentalGroupTitlesList.pop(); } else if (varName == "experimentalSubGroupTitles") { LuaObject experimentalSubGroupTitlesList(state); experimentalSubGroupTitles->removeAll(); for (int i = 1; i <= experimentalSubGroupTitlesList.getTableSize(); ++i) { experimentalSubGroupTitles->add(experimentalSubGroupTitlesList.getStringAt(i)); } experimentalSubGroupTitlesList.pop(); } else if (varName == "experimentalMin") { LuaObject experimentalMinList(state); experimentalMin->removeAll(); for (int i = 1; i <= experimentalMinList.getTableSize(); ++i) { experimentalMin->add(experimentalMinList.getFloatAt(i)); } experimentalMinList.pop(); } else if (varName == "experimentalMax") { LuaObject experimentalMaxList(state); experimentalMax->removeAll(); for (int i = 1; i <= experimentalMaxList.getTableSize(); ++i) { experimentalMax->add(experimentalMaxList.getFloatAt(i)); } experimentalMaxList.pop(); } else if (varName == "experimentalPrecision") { LuaObject experimentalPrecisionList(state); experimentalPrecision->removeAll(); for (int i = 1; i <= experimentalPrecisionList.getTableSize(); ++i) { experimentalPrecision->add(experimentalPrecisionList.getIntAt(i)); } experimentalPrecisionList.pop(); } else if (varName == "experimentalCombineType") { LuaObject experimentalCombineList(state); experimentalCombineType->removeAll(); for (int i = 1; i <= experimentalCombineList.getTableSize(); ++i) { experimentalCombineType->add(experimentalCombineList.getIntAt(i)); } experimentalCombineList.pop(); } else { data->pop(); } }
bool ResourceTree::buildTreeFromClient() { TemplateManager* templateManager = TemplateManager::instance(); IffStream* iffStream = templateManager->openIffFile("datatables/resource/resource_tree.iff"); if (iffStream == NULL) { info("The Resource Tree could not be found.", true); return false; } DataTableIff dtiff; dtiff.readObject(iffStream); Vector<String> currentClasses; Vector<String> currentStfClasses; baseNode = new ResourceTreeNode("resource", "Resources", 0); String stringvalue, randomname, resourcecontainer; int intvalue; bool boolValue; for (int i = 1; i < dtiff.getTotalRows(); ++i) { DataTableRow* row = dtiff.getRow(i); row->getValue(1, stringvalue); ResourceTreeEntry* entry = new ResourceTreeEntry(stringvalue); for (int j = 3; j <= 9; ++j) { String resourceclass; row->getValue(j, resourceclass); if (resourceclass.isEmpty()) continue; while (currentStfClasses.size() > j - 3) { currentStfClasses.removeElementAt(j - 3); currentClasses.removeElementAt(j - 3); } currentStfClasses.add(stringvalue); currentClasses.add(resourceclass); } for (int j = 0; j < currentStfClasses.size(); ++j) { entry->addClass(currentClasses.get(j)); entry->addStfClass(currentStfClasses.get(j)); } row->getValue(10, intvalue); entry->setMaxtype(intvalue); row->getValue(11, intvalue); entry->setMintype(intvalue); row->getValue(12, intvalue); entry->setMinpool(intvalue); row->getValue(13, intvalue); entry->setMaxpool(intvalue); row->getValue(14, boolValue); entry->setRecycled(boolValue); for (int j = 16; j <= 26; ++j) { row->getValue(j, stringvalue); if (stringvalue == "") break; int min; row->getCell(j + 11 + (j - 16))->getValue(min); int max; row->getCell(j + 12 + (j - 16))->getValue(max); entry->addAttribute(new ResourceAttribute(stringvalue, min, max)); } row->getCell(49)->getValue(stringvalue); if(stringvalue != "") resourcecontainer = stringvalue; entry->setResourceContainerType(resourcecontainer); row->getCell(50)->getValue(stringvalue); if(stringvalue != "") randomname = stringvalue; entry->setRandomNameClass(randomname); setZoneRestriction(entry); setJtl(entry); setSurveyToolType(entry); setRecycleToolType(entry); /// Add entry to the tree baseNode->add(entry); } /// Update the Stf Entries now that the tree is built //baseNode->updateEntries(); return true; }