void StructureSetAccessFeeSessionImplementation::promptSetAccessFee() {

	if(!structure->isOnAdminList(player)) {
		cancelSession();
		return;
	}

	if(structure->isPrivateStructure()) {
		player->sendSystemMessage("@player_structure:public_only");
		cancelSession();
		return;
	}

	if(feeAmountBox == NULL) {
		feeAmountBox = new SuiInputBox(player, SuiWindowType::STRUCTURE_SET_ACCESS_FEE);
		feeAmountBox->setCallback(new StructureSetAccessFeeSuiCallback(player->getZoneServer()));
		feeAmountBox->setPromptTitle("@player_structure:access_fee_t"); //Access Fee
		feeAmountBox->setUsingObject(structure);
		feeAmountBox->setMaxInputSize(4);
		feeAmountBox->setPromptText("@player_structure:access_fee"); // How much would you like to charge people to enter the building
	}

	playerGhost->addSuiBox(feeAmountBox);
	player->sendMessage(feeAmountBox->generateMessage());
}
コード例 #2
0
int DestroyStructureSessionImplementation::destroyStructure() {
	creatureObject->sendSystemMessage("@player_structure:processing_destruction"); //Processing confirmed structure destruction...

	if (structureObject == NULL || structureObject->getZone() == NULL)
		return cancelSession();

	if (structureObject->isGCWBase()) {
		Zone* zone = structureObject->getZone();
		if (zone == NULL)
			return cancelSession();

		GCWManager* gcwMan = zone->getGCWManager();
		if (gcwMan == NULL)
			return cancelSession();

		gcwMan->doBaseDestruction(structureObject);
		return cancelSession();

	} else if(structureObject->isTurret() || structureObject->isMinefield()){

		Reference<DestroyFactionInstallationTask*> destroyTask = new DestroyFactionInstallationTask(cast<InstallationObject*>(structureObject.get()));
		destroyTask->execute();

		return cancelSession();

	} else {
		StructureManager::instance()->redeedStructure(creatureObject);
	}
	return 0;
}
コード例 #3
0
int PlaceStructureSessionImplementation::completeSession() {
	if (constructionBarricade != NULL)
		constructionBarricade->destroyObjectFromWorld(true);

	String serverTemplatePath = deedObject->getGeneratedObjectTemplate();

	StructureManager* structureManager = StructureManager::instance();
	ManagedReference<StructureObject*> structureObject = structureManager->placeStructure(creatureObject, serverTemplatePath, positionX, positionY, directionAngle);

	removeTemporaryNoBuildZone();

	if (structureObject == NULL) {
		ManagedReference<SceneObject*> inventory = creatureObject->getSlottedObject("inventory");

		if (inventory != NULL)
			inventory->transferObject(deedObject, -1, true);

		return cancelSession();
	}

	structureObject->setDeedObjectID(deedObject->getObjectID());

	deedObject->notifyStructurePlaced(creatureObject, structureObject);

	ManagedReference<PlayerObject*> ghost = creatureObject->getPlayerObject();

	if (ghost != NULL) {
		ghost->addOwnedStructure(structureObject);

		//Create Waypoint
		ManagedReference<WaypointObject*> waypointObject = ( zone->getZoneServer()->createObject(String("object/waypoint/world_waypoint_blue.iff").hashCode(), 1)).castTo<WaypointObject*>();
		waypointObject->setCustomObjectName(structureObject->getDisplayedName(), false);
		waypointObject->setActive(true);
		waypointObject->setPosition(positionX, 0, positionY);
		waypointObject->setPlanetCRC(zone->getZoneCRC());

		ghost->addWaypoint(waypointObject, false, true);

		//Create an email.
		ManagedReference<ChatManager*> chatManager = zone->getZoneServer()->getChatManager();

		if (chatManager != NULL) {
			UnicodeString subject = "@player_structure:construction_complete_subject";

			StringIdChatParameter emailBody("@player_structure:construction_complete");
			emailBody.setTO(structureObject->getObjectName());
			emailBody.setDI(ghost->getLotsRemaining());

			chatManager->sendMail("@player_structure:construction_complete_sender", subject, emailBody, creatureObject->getFirstName(), waypointObject);
		}

		if (structureObject->isBuildingObject() && !structureObject->isGCWBase()) {
			BuildingObject* building = cast<BuildingObject*>(structureObject.get());
			building->setCustomObjectName(creatureObject->getFirstName() + "'s House", true); //Set the house sign.
		}
	}

	return cancelSession(); //Canceling the session just removes the session from the player's map.
}
コード例 #4
0
int PlayerManagementSessionImplementation::initializeSession() {
	ManagedReference<CreatureObject*> admin = this->admin.get();

	if (admin == NULL)
		return cancelSession();

	playerManager = admin->getZoneServer()->getPlayerManager();

	if (targetAccount == NULL)
		return cancelSession();

	return 0;
}
コード例 #5
0
void ImageDesignSessionImplementation::cancelImageDesign(uint64 designer, uint64 targetPlayer, uint64 tent, int type, const ImageDesignData& data) {
	ManagedReference<CreatureObject*> designerCreature = this->designerCreature.get();
	ManagedReference<CreatureObject*> targetCreature = this->targetCreature.get();

	if (targetCreature == NULL || designerCreature == NULL)
		return;

	Locker locker(designerCreature);
	Locker clocker(targetCreature, designerCreature);

	imageDesignData = data;

	ImageDesignRejectMessage* message = new ImageDesignRejectMessage(targetCreature->getObjectID(), designer, targetPlayer,tent, type);
	imageDesignData.insertToMessage(message);
	targetCreature->sendMessage(message);

	ImageDesignRejectMessage* msg2 = new ImageDesignRejectMessage(designerCreature->getObjectID(), designer, targetPlayer,tent, type);
	imageDesignData.insertToMessage(msg2);
	designerCreature->sendMessage(msg2);


	//TODO: Needs research.

	cancelSession();
}
コード例 #6
0
void SlicingSessionImplementation::endSlicing() {
	ManagedReference<CreatureObject*> player = this->player.get();
	ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get();

	if (player == NULL || tangibleObject == NULL) {
		cancelSession();
		return;
	}

	if (tangibleObject->isMissionTerminal())
		player->addCooldown("slicing.terminal", (2 * (60 * 1000))); // 2min Cooldown


	cancelSession();

}
void DroidMaintenanceSessionImplementation::sendMaintenanceTransferBox(){
	// add result
	if (selectedStructure == NULL) {
		cancelSession();
		return;
	}
	ManagedReference<CreatureObject*> creature = this->player.get();
	ManagedReference<DroidMaintenanceModuleDataComponent*> module = this->maintModule.get();
	// create transfer box
	ManagedReference<SuiTransferBox*> sui = new SuiTransferBox(creature,SuiWindowType::DROID_ADD_STRUCTURE_AMOUNT);
	sui->setCallback(new DroidMaintenanceSessionAddCreditsSuiCallback(creature->getZoneServer()));
	sui->setPromptTitle("@pet/droid_modules:droid_maint_amount_title"); //Select Amount
	bool offplanet = false;
	if (selectedStructure->getZone()->getZoneName() != creature->getZone()->getZoneName())
		offplanet = true;
	StringBuffer promptText = "@pet/droid_modules:droid_maint_amount_prompt \n@player_structure:current_maint_pool "+ String::valueOf(selectedStructure->getSurplusMaintenance())+"cr";
	selectedFees = 0;
	if (offplanet) {
		PlanetManager* planetManager = creature->getZone()->getPlanetManager();
		if (planetManager == NULL) {
			return;
		}
		int fee = planetManager->getTravelFare(selectedStructure->getZone()->getZoneName(),creature->getZone()->getZoneName());
		selectedFees = fee;
		promptText << "\n@pet/droid_modules:droid_maint_diff_planet_prefix " << fee << " @pet/droid_modules:droid_maint_diff_planet_suffix \n";
	}
	sui->setPromptText(promptText.toString());
	// check for off planet, it has a fee
	sui->addFrom("@player_structure:total_funds",String::valueOf(availableCredits),String::valueOf(availableCredits), "1");
	sui->addTo("@player_structure:to_pay", "0", "0", "1");
	creature->getPlayerObject()->addSuiBox(sui);
	creature->sendMessage(sui->generateMessage());
}
コード例 #8
0
bool CraftingSessionImplementation::createPrototypeObject(DraftSchematic* draftschematic) {
	ManagedReference<CraftingTool*> craftingTool = this->craftingTool.get();

	// Remove all items, incase there are any
	while (craftingTool->getContainerObjectsSize() > 0) {
		craftingTool->getContainerObject(0)->destroyObjectFromWorld(true);
	}

	prototype = (crafter.get()->getZoneServer()->createObject(
			draftschematic->getTanoCRC(), 0)).castTo<TangibleObject*>();

	if (prototype == NULL) {
		crafter.get()->sendSystemMessage("@ui_craft:err_no_prototype");
		closeCraftingWindow(1);
		cancelSession();
		return false;
	}

	prototype.get()->createChildObjects();

	craftingTool->transferObject(prototype.get(), -1, false);
	prototype.get()->sendTo(crafter.get(), true);

	if(crafterGhost != NULL && crafterGhost.get()->getDebug()) {
		crafter.get()->sendSystemMessage("Prototype Created");
	}

	return true;
}
コード例 #9
0
int ImageDesignSessionImplementation::doPayment() {
	ManagedReference<CreatureObject*> designerCreature = this->designerCreature.get();
	ManagedReference<CreatureObject*> targetCreature = this->targetCreature.get();

	int targetCredits = targetCreature->getCashCredits() + targetCreature->getBankCredits();

	uint32 requiredPayment = imageDesignData.getRequiredPayment();

	// The client should prevent this, but in case it doesn't
	if (targetCredits < requiredPayment) {
		targetCreature->sendSystemMessage("You do not have enough credits to pay the required payment.");
		designerCreature->sendSystemMessage("Target does not have enough credits for the required payment.");

		cancelSession();

		return 0;
	}

	if (requiredPayment <= targetCreature->getCashCredits()) {
		targetCreature->subtractCashCredits(requiredPayment);
		designerCreature->addCashCredits(requiredPayment);
	} else {
		int requiredBankCredits = requiredPayment - targetCreature->getCashCredits();
		targetCreature->subtractCashCredits(targetCreature->getCashCredits());
		targetCreature->subtractBankCredits(requiredBankCredits);
		designerCreature->addCashCredits(requiredPayment);
	}
	return 1;
}
void StructureSetAccessFeeSessionImplementation::setAccessDuration(const int duration) {

	structure->setAccessFee(accessFee, duration);

	player->sendSystemMessage("Structure now has an access fee");

	cancelSession();
}
コード例 #11
0
void CraftingSessionImplementation::createManufactureSchematic(int clientCounter) {
	ManagedReference<CraftingTool*> craftingTool = this->craftingTool.get();
	ManagedReference<CreatureObject*> crafter = this->crafter.get();
	ManagedReference<PlayerObject*> crafterGhost = this->crafterGhost.get();
	ManagedReference<CraftingStation*> craftingStation = this->craftingStation.get();
	ManagedReference<ManufactureSchematic*> manufactureSchematic = this->manufactureSchematic.get();
	ManagedReference<TangibleObject*> prototype = this->prototype.get();
	ManagedReference<CraftingManager*> craftingManager = this->craftingManager.get();

	if (manufactureSchematic == NULL) {
		sendSlotMessage(0, IngredientSlot::NOSCHEMATIC);
		return;
	}

	if (prototype == NULL) {
		sendSlotMessage(0, IngredientSlot::PROTOTYPENOTFOUND);
		return;
	}

	if (!craftingManager.get()->allowManufactureSchematic(manufactureSchematic)){
		sendSlotMessage(0, IngredientSlot::NOSCHEMATIC);
		return;
	}

	Locker locker(_this.get());

	if (manufactureSchematic->isAssembled()
			&& !manufactureSchematic->isCompleted()) {

		//Object Controller
		ObjectControllerMessage* objMsg = new ObjectControllerMessage(
				crafter->getObjectID(), 0x1B, 0x010C);
		objMsg->insertInt(0x10B);
		objMsg->insertInt(1);
		objMsg->insertByte(clientCounter);

		crafter->sendMessage(objMsg);

		ManagedReference<SceneObject*> datapad = crafter->getSlottedObject("datapad");

		prototype->destroyObjectFromWorld(0);

		manufactureSchematic->setPersistent(2);
		prototype->setPersistent(2);

		datapad->transferObject(manufactureSchematic, -1, true);
		manufactureSchematic->setPrototype(prototype);

	} else {

		closeCraftingWindow(clientCounter);

		sendSlotMessage(clientCounter, IngredientSlot::WEIRDFAILEDMESSAGE);
	}

	cancelSession();
}
コード例 #12
0
void SlicingSessionImplementation::handleMenuSelect(CreatureObject* pl, byte menuID, SuiListBox* suiBox) {
	ManagedReference<CreatureObject*> player = this->player.get();
	ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get();

	if (tangibleObject == NULL || player == NULL || player != pl)
		return;

	uint8 progress = getProgress();

	if (progress == 0) {
		switch(menuID) {
		case 0: {
			if (hasPrecisionLaserKnife()) {
				if (firstCable != 0)
					handleSliceFailed(); // Handle failed slice attempt
				else
					cableBlue = true;
			} else
				player->sendSystemMessage("@slicing/slicing:no_knife");
			break;
		}
		case 1: {
			if (hasPrecisionLaserKnife()) {
				if (firstCable != 1)
					handleSliceFailed(); // Handle failed slice attempt
				else
					cableRed = true;
			} else
				player->sendSystemMessage("@slicing/slicing:no_knife");
			break;
		}
		case 2:
			handleUseClamp(); // Handle Use of Molecular Clamp
			break;

		case 3: {
			handleUseFlowAnalyzer(); // Handle Use of Flow Analyzer
			break;
		}
		default:
			cancelSession();
			break;
		}
	} else {
		if (hasPrecisionLaserKnife()) {
			if (firstCable != menuID)
				handleSlice(suiBox); // Handle Successful Slice
			else
				handleSliceFailed(); // Handle failed slice attempt //bugfix 820
			return;
		} else
			player->sendSystemMessage("@slicing/slicing:no_knife");
	}

	generateSliceMenu(suiBox);

}
int StructureSetAccessFeeSessionImplementation::initializeSession() {

	if(player == NULL || structure == NULL) {
		cancelSession();
		return 0;
	}

	if(!structure->isOnAdminList(player)) {
		cancelSession();
		return 0;
	}

	if(structure->isPrivateStructure()) {
		player->sendSystemMessage("@player_structure:public_only");
		cancelSession();
		return 0;
	}

	return 1;
}
void DroidMaintenanceSessionImplementation::addCreditsToCurrentStructure(int amount) {
	// WE know the current structure add it to our pay list.
	if (selectedStructure == NULL) {
		cancelSession();
		return;
	}
	this->maintenance.put(selectedStructure->getObjectID(),amount);
	if (selectedFees > 0){
		fees.add(selectedFees);
	}
}
コード例 #15
0
void CraftingSessionImplementation::createPrototype(int clientCounter, bool createItem) {
	ManagedReference<CraftingTool*> craftingTool = this->craftingTool.get();
	ManagedReference<CreatureObject*> crafter = this->crafter.get();
	ManagedReference<ManufactureSchematic*> manufactureSchematic = this->manufactureSchematic.get();

	if (manufactureSchematic == NULL) {
		sendSlotMessage(clientCounter, IngredientSlot::NOSCHEMATIC);
		return;
	}

	if (prototype == NULL) {
		sendSlotMessage(clientCounter, IngredientSlot::PROTOTYPENOTFOUND);
		return;
	}

	Locker locker(_this.get());
	Locker locker2(manufactureSchematic);


	if (manufactureSchematic->isAssembled()
			&& !manufactureSchematic->isCompleted()) {

		closeCraftingWindow(clientCounter);

		String xpType = manufactureSchematic->getDraftSchematic()->getXpType();
		int xp = manufactureSchematic->getDraftSchematic()->getXpAmount();

		if (createItem) {

			startCreationTasks(manufactureSchematic->getComplexity() * 2, false);

		} else {

			// This is for practicing
			startCreationTasks(manufactureSchematic->getComplexity() * 2, true);
			xp *= 1.05f;
		}

		Reference<PlayerManager*> playerManager = crafter->getZoneServer()->getPlayerManager();
		playerManager->awardExperience(crafter, xpType, xp, true);

		manufactureSchematic->setCompleted();

	} else {

		closeCraftingWindow(clientCounter);

		sendSlotMessage(clientCounter, IngredientSlot::WEIRDFAILEDMESSAGE);
	}

	cancelSession();
}
コード例 #16
0
void EntertainingSessionImplementation::doPerformanceAction() {
	ManagedReference<CreatureObject*> entertainer = this->entertainer.get();

	if (entertainer == NULL)
		return;

	Locker locker(entertainer);

	Performance* performance = NULL;

	PerformanceManager* performanceManager = SkillManager::instance()->getPerformanceManager();
	ManagedReference<Instrument*> instrument = getInstrument(entertainer);

	if (isDancing())
		performance = performanceManager->getDance(performanceName);
	else if (isPlayingMusic() && instrument)
		performance = performanceManager->getSong(performanceName, instrument->getInstrumentType());
	else {
		cancelSession();
		return;
	}

	if (performance == NULL) { // shouldn't happen
		StringBuffer msg;
		msg << "Performance was null.  Please report to www.swgemu.com/bugs ! Name: " << performanceName << " and Type: " << dec << instrument->getInstrumentType();

		entertainer->sendSystemMessage(msg.toString());
		return;
	}

	int actionDrain = performance->getActionPointsPerLoop();

	//Adjust cost based upon player's quickness
	actionDrain = entertainer->calculateCostAdjustment(CreatureAttribute::QUICKNESS, actionDrain);

	if (entertainer->getHAM(CreatureAttribute::ACTION) <= actionDrain) {
		if (isDancing()) {
			stopDancing();
			entertainer->sendSystemMessage("@performance:dance_too_tired");
		}

		if (isPlayingMusic()) {
			stopPlayingMusic();
			entertainer->sendSystemMessage("@performance:music_too_tired");
		}
	} else {
		entertainer->inflictDamage(entertainer, CreatureAttribute::ACTION, actionDrain, false, true);
	}
}
コード例 #17
0
int DestroyStructureSessionImplementation::initializeSession() {
	//TODO: Temporary until CreatureObject* dependency removed.
	if (!creatureObject->isPlayerCreature())
		return cancelSession();

	creatureObject->addActiveSession(SessionFacadeType::DESTROYSTRUCTURE, _this.getReferenceUnsafeStaticCast());

	Locker _lock(structureObject, creatureObject);

	CreatureObject* player = cast<CreatureObject*>( creatureObject.get());

	String no = "\\#FF6347 @player_structure:can_redeed_no_suffix \\#.";
	String yes = "\\#32CD32 @player_structure:can_redeed_yes_suffix \\#.";

	String redeed = (structureObject->isRedeedable()) ? yes : no;

	StringBuffer maint;
	maint << "@player_structure:redeed_maintenance \\#" << ((structureObject->isRedeedable()) ? "32CD32 " : "FF6347 ") << structureObject->getSurplusMaintenance() << "/" << structureObject->getRedeedCost() << "\\#.";

	StringBuffer entry;
	entry << "@player_structure:confirm_destruction_d1 ";
	entry << "@player_structure:confirm_destruction_d2 \n\n";
	entry << "@player_structure:confirm_destruction_d3a ";
	entry << "\\#32CD32 @player_structure:confirm_destruction_d3b \\#. ";
	entry << "@player_structure:confirm_destruction_d4 \n";
	entry << "@player_structure:redeed_confirmation " << redeed;

	StringBuffer cond;
	cond << "@player_structure:redeed_condition \\#32CD32 " << (structureObject->getMaxCondition() - structureObject->getConditionDamage()) << "/" << structureObject->getMaxCondition() << "\\#.";

	ManagedReference<SuiListBox*> sui = new SuiListBox(player);
	sui->setCallback(new DestroyStructureRequestSuiCallback(creatureObject->getZoneServer()));
	sui->setCancelButton(true, "@no");
	sui->setOkButton(true, "@yes");
	sui->setUsingObject(structureObject);
	sui->setPromptTitle(structureObject->getDisplayedName());
	sui->setPromptText(entry.toString());

	sui->addMenuItem("@player_structure:can_redeed_alert " + redeed);
	sui->addMenuItem(cond.toString());
	sui->addMenuItem(maint.toString());

	player->getPlayerObject()->addSuiBox(sui);
	player->sendMessage(sui->generateMessage());

	return 0;
}
void EntertainingSessionImplementation::increaseEntertainerBuff(CreatureObject* patron){
	ManagedReference<CreatureObject*> entertainer = this->entertainer.get();

	PerformanceManager* performanceManager = SkillManager::instance()->getPerformanceManager();
	Performance* performance = NULL;

	ManagedReference<Instrument*> instrument = getInstrument(entertainer);

	if (performanceName == "")
		return;

	if (dancing) {
		performance = performanceManager->getDance(performanceName);
	} else if (playingMusic && instrument != NULL) {
		performance = performanceManager->getSong(performanceName, instrument->getInstrumentType());
	} else {
		cancelSession();
		return;
	}

	if(!canGiveEntertainBuff())
		return;

	if (performance == NULL) { // shouldn't happen
		return;
	}

	ManagedReference<PlayerObject*> entPlayer = entertainer->getPlayerObject();
	//Check if the patron is a valid buff target
	//Whether it be passive(in the same group) or active (/setPerform target)
	if ((!entertainer->isGrouped() || entertainer->getGroupID() != patron->getGroupID())
			&& entPlayer->getPerformanceBuffTarget() != patron->getObjectID()) {
		return;
	}

	if(isInDenyServiceList(patron))
		return;

	float buffAcceleration = 1 + ((float)entertainer->getSkillMod("accelerate_entertainer_buff") / 100.f);

	addEntertainerBuffDuration(patron, performance->getType(), 2.0f * buffAcceleration);
	addEntertainerBuffStrength(patron, performance->getType(), performance->getHealShockWound());

}
コード例 #19
0
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;
}
コード例 #20
0
bool CraftingSessionImplementation::createManufactureSchematic(DraftSchematic* draftschematic) {

	manufactureSchematic =
			 (draftschematic->createManufactureSchematic(craftingTool.get())).castTo<ManufactureSchematic*>();

	if (manufactureSchematic == NULL) {
		crafter.get()->sendSystemMessage("@ui_craft:err_no_manf_schematic");
		closeCraftingWindow(1);
		cancelSession();
		return false;
	}

	craftingTool.get()->transferObject(manufactureSchematic.get(), 0x4, true);
	//manufactureSchematic->sendTo(crafter, true);

	if(crafterGhost != NULL && crafterGhost.get()->getDebug()) {
		crafter.get()->sendSystemMessage("ManufactureSchematic Created");
	}

	return true;
}
コード例 #21
0
ファイル: WhiteboardManager.cpp プロジェクト: swift/swift
 void WhiteboardManager::handleUIEvent(std::shared_ptr<UIEvent> event) {
     std::shared_ptr<RequestWhiteboardUIEvent> requestWhiteboardEvent = std::dynamic_pointer_cast<RequestWhiteboardUIEvent>(event);
     if (requestWhiteboardEvent) {
         requestSession(requestWhiteboardEvent->getContact());
     }
     std::shared_ptr<AcceptWhiteboardSessionUIEvent> sessionAcceptEvent = std::dynamic_pointer_cast<AcceptWhiteboardSessionUIEvent>(event);
     if (sessionAcceptEvent) {
         acceptSession(sessionAcceptEvent->getContact());
     }
     std::shared_ptr<CancelWhiteboardSessionUIEvent> sessionCancelEvent = std::dynamic_pointer_cast<CancelWhiteboardSessionUIEvent>(event);
     if (sessionCancelEvent) {
         cancelSession(sessionCancelEvent->getContact());
     }
     std::shared_ptr<ShowWhiteboardUIEvent> showWindowEvent = std::dynamic_pointer_cast<ShowWhiteboardUIEvent>(event);
     if (showWindowEvent) {
         WhiteboardWindow* window = findWhiteboardWindow(showWindowEvent->getContact());
         if (window != nullptr) {
             window->activateWindow();
         }
     }
 }
コード例 #22
0
int DestroyStructureSessionImplementation::sendDestroyCode() {
	//TODO: Temporary until CreatureObject* dependency removed.
	if (!creatureObject->isPlayerCreature())
		return cancelSession();

	Locker structureLock(structureObject);

	Locker _lock(creatureObject, structureObject);

	CreatureObject* player = cast<CreatureObject*>( creatureObject.get());

	destroyCode = System::random(899999) + 100000;

	String no = "\\#FF6347 @player_structure:will_not_redeed_confirm \\#.";
	String yes = "\\#32CD32 @player_structure:will_redeed_confirm \\#.";

	String redeed = (structureObject->isRedeedable()) ? yes : no;

	StringBuffer entry;
	entry << "@player_structure:your_structure_prefix ";
	entry << redeed << " @player_structure:will_redeed_suffix \n\n";
	entry << "Code: " << destroyCode;

	ManagedReference<SuiInputBox*> sui = new SuiInputBox(player);
	sui->setCallback(new DestroyStructureCodeSuiCallback(player->getZoneServer()));
	sui->setUsingObject(structureObject);
	sui->setPromptTitle("@player_structure:confirm_destruction_t"); //Confirm Structure Deletion
	sui->setPromptText(entry.toString());
	sui->setCancelButton(true, "@cancel");
	sui->setMaxInputSize(6);

	player->getPlayerObject()->addSuiBox(sui);
	player->sendMessage(sui->generateMessage());

	return 0;
}
void DroidMaintenanceSessionImplementation::sendMaintanceRunBox(){
	// main ui
	selectedStructure = NULL;

	ManagedReference<CreatureObject*> creature = this->player.get();

	if (structures.size() == 0 && maintenance.isEmpty()) {
		creature->sendSystemMessage("@pet/droid_modules:droid_maint_no_valid_struct");
		cancelSession();
		return;
	}

	ManagedReference<DroidMaintenanceModuleDataComponent*> module = this->maintModule.get();

	ManagedReference<SuiListBox*> box = new SuiListBox(creature, SuiWindowType::DROID_MAINTENANCE_RUN_LIST, SuiListBox::HANDLETHREEBUTTON);
	box->setCallback(new DroidMaintenanceSessionRunMenuSuiCallback(creature->getZoneServer()));
	// we need to add additional text i think
	StringBuffer promptText;
	box->setPromptTitle("@pet/droid_modules:droid_maint_list_title"); // Maintenance Run
	SuiListBox* b;
	box->setOkButton(true, "@go");
	box->setOtherButton(true,"@add");
	box->setCancelButton(true, "@cancel");
	// we have all we need in the session.
	int addCount = 0;
	// we need to add a line item for every structure on this droids list, then track amount per structure + fees + interplanetary. i.e. if not interplanetary capable, dont show them.
	//Vector<StructureObject*> list = module->getStructureList(creature->getZoneServer(),creature->getZone()->getZoneCRC());
	for(int i=0;i<structures.size();i++) {
		ManagedReference<StructureObject*> obj = structures.elementAt(i);
		StringBuffer buff;
		String zoneName = "the void";
		if (obj->getZone() != NULL) {
			zoneName = obj->getZone()->getZoneName();
		}
		// assume 30 chars per section, 3 sections so 90 chars.
		int nameLength = obj->getDisplayedName().length();
		int zoneNameLength = zoneName.length();
		buff << obj->getDisplayedName();
		if (nameLength < 30) {
			// pad the diff to teh end
			for(int x=0;x<30-nameLength;x++)
				buff << " ";
			nameLength = 30;
		}
		int finalOffset = zoneName.length() + 15;

		buff << "\t" << zoneName << "(" << String::valueOf((int)obj->getPositionX()) << "," << String::valueOf((int)obj->getPositionY()) << ")";
		if (maintenance.contains(obj->getObjectID())) {
			if (addCount == 0)
				promptText << "@pet/droid_modules:droid_maint_list_header\n\n";
			addCount += 1;
			promptText << buff.toString();
			if (finalOffset < 30) {
				for(int x=0;x<30-finalOffset;x++)
					promptText << " ";
			}
			promptText << "+" << maintenance.get(obj->getObjectID()) << "\n";
		} else {
			box->addMenuItem( buff.toString(), obj->getObjectID());
		}
	}
	if (addCount > 0)
		promptText << "\n";
	promptText << "@pet/droid_modules:droid_maint_list_prompt"; // Please select a structure to perform a maintenance run on. Once all structures to be maintained have been selected, press the Go button.
	box->setPromptText(promptText.toString());
	creature->getPlayerObject()->addSuiBox(box);
	creature->sendMessage(box->generateMessage());
}
void DroidMaintenanceSessionImplementation::performMaintenanceRun(){
    // launch the task and set droid cooldown.
	ManagedReference<CreatureObject*> creature = this->player.get();
	if (maintenance.size() == 0) {
		creature->sendSystemMessage("@pet/droid_modules:droid_maint_empty_maint_run");
		sendMaintanceRunBox();
		return;
	}
	// pay all structures
	long totalCosts = 0;
	long totalFees = 0;
	for(int i=0;i<fees.size();i++)
		totalFees += fees.elementAt(i);
	for(int i =0; i< maintenance.size();i++)
		totalCosts += maintenance.elementAt(i).getValue();
	// pay fees
	if (availableCredits < totalCosts + totalFees) {
		if (availableCredits > totalCosts)
			creature->sendSystemMessage("@pet/droid_modules:droid_maint_cant_travel");
		else
			creature->sendSystemMessage("@pet/droid_modules:droid_maint_not_enough_cash");
		cancelSession();
		return;
	}
	// he had enough credits, so lets perform the run .
	ManagedReference<DroidMaintenanceModuleDataComponent*> module = this->maintModule.get();
	ManagedReference<DroidObject*> droid = module->getDroidObject();
	long time = module->calculateRunTime(maintenance);
	long powerCost = time/1000/60/15;
	// check for power now as it may hit zero while we are in the menu
	if (!droid->hasPower()) {
		creature->sendSystemMessage("@pet/droid_modules:not_enough_power"); // Your droid dosnt have enough power to do that.
		cancelSession();
		return;
	}
	// we might get killed off due to no power, do we let it run anyways and jsut leave droid as drained for later.
	// that seems ok he wont be able to touch the droid for a long time anyways so lets roleplay out it just runs out in low power situation.
	// we had enough to run.
	if (creature->getCashCredits() >= totalFees) {
		creature->subtractCashCredits(totalFees);
	} else {
		int payedSoFar = creature->getCashCredits();
		creature->subtractCashCredits(payedSoFar);
		creature->subtractBankCredits(totalFees - payedSoFar);
	}
	// now the structures.
	Locker clock(creature);
	module->payStructures(creature,maintenance);
	// calculate time
	// we got milliseconds convert to minutes
	long minutes = time/1000; // seconds
	const static String abbrvs[3] = { "seconds", "minutes, ", "hours" };
	const static int intervals[3] = { 1, 60, 3600 };
	int values[3] = { 0, 0, 0 };
	StringBuffer str;
	str << "Maintenance run started. Completion ETA: ";
	for (int i = 2; i > -1; --i) {
		values[i] = floor((float) minutes / intervals[i]);
		minutes -= values[i] * intervals[i];
		if (values[i] > 0) {
			if (str.length() > 0){
				str << " ";
			}
			str << values[i] << " " << abbrvs[i];
		}
	}

	creature->sendSystemMessage(str.toString());

	Locker droidLock(droid, creature);

	// store the pet off and set the call cooldown.
	droid->getCooldownTimerMap()->updateToCurrentAndAddMili("call_cooldown",time);
	Reference<StorePetTask*> task = new StorePetTask(this->player.get(), droid);
	droid->usePower(DroidObject::MAX_POWER); // According to what i read, doing the run drains all power from teh droid.
	task->execute();
}
コード例 #25
0
int CraftingSessionImplementation::startSession() {
	// crafter and craftingTool locked already in initializeSession
	ManagedReference<CraftingTool*> craftingTool = this->craftingTool.get();
	ManagedReference<CreatureObject*> crafter = this->crafter.get();
	ManagedReference<PlayerObject*> crafterGhost = this->crafterGhost.get();
	ManagedReference<CraftingStation*> craftingStation = this->craftingStation.get();

	if(crafter == NULL || craftingTool == NULL || crafterGhost == NULL) {
		cancelSession();
		return false;
	}

	/// Get current allowed complexity
	ManagedReference<PlayerObject*> playerObject = crafter->getPlayerObject();
	int complexityLevel = craftingTool->getComplexityLevel();

	if (craftingStation != NULL)
		complexityLevel = craftingStation->getComplexityLevel();

	/// Get filtered schematic list based on tool type and complexity
	currentSchematicList.removeAll();

	currentSchematicList =
			playerObject->filterSchematicList(crafter,
			craftingTool->getToolTabs(), complexityLevel);

	/// DPlay9 ***********************************
	PlayerObjectDeltaMessage9* dplay9 =
			new PlayerObjectDeltaMessage9(playerObject);
	dplay9->setExperimentationEnabled(craftingStation != NULL);
	dplay9->setCraftingState(1);

	if (craftingStation != NULL)
		dplay9->setClosestCraftingStation(craftingStation->getObjectID());
	else
		dplay9->setClosestCraftingStation(0);

	dplay9->setExperimentationPoints(experimentationPointsTotal);
	dplay9->close();
	crafter->sendMessage(dplay9);
	// End dplay9***********************************

	/// Object Controller Message 102 - Schematic List
	ObjectControllerMessage* ocm = new ObjectControllerMessage(
			crafter->getObjectID(), 0x0B, 0x102);

	ocm->insertLong(craftingTool->getObjectID());

	if (craftingStation != NULL)
		ocm->insertLong(craftingStation->getObjectID());
	else
		ocm->insertLong(0);

	ocm->insertInt(currentSchematicList.size());
	for (int i = 0; i < currentSchematicList.size(); ++i) {

		DraftSchematic* draftSchematic = currentSchematicList.get(i).get();

		ocm->insertInt(draftSchematic->getClientObjectCRC());
		ocm->insertInt(draftSchematic->getClientObjectCRC());
		ocm->insertInt(draftSchematic->getToolTab()); // this number decides what tab the schematic goes in (ex: 4 = food tab in crafting window)
	}
	crafter->sendMessage(ocm);
	/// ***********************************************

	/// Reset session state
	state = 1;

	if(crafterGhost != NULL && crafterGhost->getDebug()) {
		crafter->sendSystemMessage("*** Starting new crafting session ***");
	}

	return true;
}
void EntertainingSessionImplementation::doEntertainerPatronEffects() {
	ManagedReference<CreatureObject*> creo = entertainer.get();

	if (creo == NULL)
		return;

	if (performanceName == "")
		return;

	Locker locker(creo);

	//**DECLARATIONS**
	VectorMap<ManagedReference<CreatureObject*>, EntertainingData>* patrons = NULL;

	SkillManager* skillManager = creo->getZoneServer()->getSkillManager();

	PerformanceManager* performanceManager = skillManager->getPerformanceManager();
	Performance* performance = NULL;

	ManagedReference<Instrument*> instrument = getInstrument(creo);

	float woundHealingSkill = 0.0f;
	float playerShockHealingSkill = 0.0f;
	float buildingShockHealingSkill = creo->getSkillMod("private_med_battle_fatigue");
	float factionPerkSkill = creo->getSkillMod("private_faction_mind_heal");

	//**LOAD PATRONS, GET THE PERFORMANCE AND ENT'S HEALING SKILL.**
	if (dancing) {
		patrons = &watchers;
		performance = performanceManager->getDance(performanceName);
		woundHealingSkill = (float) creo->getSkillMod("healing_dance_wound");
		playerShockHealingSkill = (float) creo->getSkillMod("healing_dance_shock");
	} else if (playingMusic && instrument != NULL) {
		patrons = &listeners;
		performance = performanceManager->getSong(performanceName, instrument->getInstrumentType());
		woundHealingSkill = (float) creo->getSkillMod("healing_music_wound");
		playerShockHealingSkill = (float) creo->getSkillMod("healing_music_shock");

	} else {
		cancelSession();
		return;
	}

	if (performance == NULL) {
		return;
	}

	ManagedReference<BuildingObject*> building = creo->getRootParent().get().castTo<BuildingObject*>();

	if (building != NULL && factionPerkSkill > 0 && building->isPlayerRegisteredWithin(creo->getObjectID())) {
		unsigned int buildingFaction = building->getFaction();
		unsigned int healerFaction = creo->getFaction();
		PlayerObject* ghost = creo->getPlayerObject();

		if (ghost != NULL && healerFaction != 0 && healerFaction == buildingFaction && ghost->getFactionStatus() == FactionStatus::OVERT) {
			woundHealingSkill += factionPerkSkill;
			playerShockHealingSkill += factionPerkSkill;
		}
	}

	//**DETERMINE WOUND HEAL AMOUNTS.**
	int woundHeal = ceil(performance->getHealMindWound() * (woundHealingSkill / 100.0f));
	int shockHeal = ceil(performance->getHealShockWound() * ((playerShockHealingSkill + buildingShockHealingSkill) / 100.0f));

	//**ENTERTAINER HEALS THEIR OWN MIND.**
	healWounds(creo, woundHeal*(flourishCount+1), shockHeal*(flourishCount+1));

	//**APPLY EFFECTS TO PATRONS.**
	if (patrons != NULL && patrons->size() > 0) {

		for (int i = 0; i < patrons->size(); ++i) {
			ManagedReference<CreatureObject*> patron = patrons->elementAt(i).getKey();

			try {
				//**VERIFY THE PATRON IS NOT ON THE DENY SERVICE LIST

				if (creo->isInRange(patron, 10.0f)) {
					healWounds(patron, woundHeal*(flourishCount+1), shockHeal*(flourishCount+1));
					increaseEntertainerBuff(patron);

				} else { //patron is not in range, force to stop listening
					ManagedReference<PlayerManager*> playerManager = patron->getZoneServer()->getPlayerManager();

					Locker locker(patron, entertainer.get());

					if (dancing) {
						if (playerManager != NULL)
							playerManager->stopWatch(patron, creo->getObjectID(), true, false, false, true);

						if (!patron->isListening())
							sendEntertainmentUpdate(patron, 0, "", true);

					} else if (playingMusic) {
						if (playerManager != NULL)
							playerManager->stopListen(patron, creo->getObjectID(), true, false, false, true);

						if (!patron->isWatching())
							sendEntertainmentUpdate(patron, 0, "", true);
					}
				}

			} catch (Exception& e) {
				error("Unreported exception caught in EntertainingSessionImplementation::doEntertainerPatronEffects()");
			}
		}
	} //else
	//System::out << "There are no patrons.\n";


	info("EntertainingSessionImplementation::doEntertainerPatronEffects() end");
}
void EntertainingSessionImplementation::doFlourish(int flourishNumber) {
	ManagedReference<CreatureObject*> entertainer = this->entertainer.get();

	int fid = flourishNumber;

	if (!dancing && !playingMusic) {
		entertainer->sendSystemMessage("@performance:flourish_not_performing");
		return;
	}

	PerformanceManager* performanceManager = SkillManager::instance()->getPerformanceManager();
	Performance* performance = NULL;
	ManagedReference<Instrument*> instrument = getInstrument(entertainer);

	if (dancing)
		performance = performanceManager->getDance(performanceName);
	else if (playingMusic && instrument)
		performance = performanceManager->getSong(performanceName, instrument->getInstrumentType());
	else {
		cancelSession();
		return;
	}

	if (!performance) { // shouldn't happen
		StringBuffer msg;
		msg << "Performance was null.  Please report to www.swgemu.com/bugs ! Name: " << performanceName << " and Type: " << dec << instrument->getInstrumentType();

		entertainer->sendSystemMessage(msg.toString());
		return;
	}

	float baseActionDrain = performance->getActionPointsPerLoop() - (int)(entertainer->getHAM(CreatureAttribute::QUICKNESS)/35.f);

	//float baseActionDrain = -40 + (getQuickness() / 37.5);
	float flourishActionDrain = baseActionDrain / 2.0;

	int actionDrain = (int)round((flourishActionDrain * 10 + 0.5) / 10.0); // Round to nearest dec for actual int cost

	if (entertainer->getHAM(CreatureAttribute::ACTION) <= actionDrain) {
		entertainer->sendSystemMessage("@performance:flourish_too_tired");
	} else {
		entertainer->inflictDamage(entertainer, CreatureAttribute::ACTION, actionDrain, false, true);

		if (dancing) {
			StringBuffer msg;
			msg << "skill_action_" << fid;
			entertainer->doAnimation(msg.toString());
		} else if (playingMusic) {
			Flourish* flourish = new Flourish(entertainer, fid);
			entertainer->broadcastMessage(flourish, true);
		}

		//check to see how many flourishes have occurred this tick
		if(flourishCount < 5) {
			// Add buff
			addEntertainerFlourishBuff();

			// Grant Experience
			if(flourishCount < 2)
				flourishXp += performance->getBaseXp() + performance->getFlourishXpMod();

			flourishCount++;
		}
		entertainer->notifyObservers(ObserverEventType::FLOURISH, entertainer, fid);

		entertainer->sendSystemMessage("@performance:flourish_perform");
	}
}
コード例 #28
0
void SlicingSessionImplementation::handleMenuSelect(CreatureObject* pl, byte menuID, SuiListBox* suiBox) {
	ManagedReference<CreatureObject*> player = this->player.get();
	ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get();

	if (tangibleObject == NULL || player == NULL || player != pl)
		return;

	ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory");
	if (inventory == NULL)
		return;

	if(!isBaseSlice() && tangibleObject->getGameObjectType() != SceneObjectType::STATICLOOTCONTAINER && tangibleObject->getGameObjectType() != SceneObjectType::MISSIONTERMINAL){
		if (!inventory->hasObjectInContainer(tangibleObject->getObjectID())) {
			player->sendSystemMessage("The object must be in your inventory in order to perform the slice.");
			return;
		}
	}

	uint8 progress = getProgress();

	if (progress == 0) {
		switch(menuID) {
		case 0: {
			if (hasPrecisionLaserKnife()) {
				if (firstCable != 0)
					handleSliceFailed(); // Handle failed slice attempt
				else
					cableBlue = true;
			} else
				player->sendSystemMessage("@slicing/slicing:no_knife");
			break;
		}
		case 1: {
			if (hasPrecisionLaserKnife()) {
				if (firstCable != 1)
					handleSliceFailed(); // Handle failed slice attempt
				else
					cableRed = true;
			} else
				player->sendSystemMessage("@slicing/slicing:no_knife");
			break;
		}
		case 2:
			handleUseClamp(); // Handle Use of Molecular Clamp
			break;

		case 3: {
			handleUseFlowAnalyzer(); // Handle Use of Flow Analyzer
			break;
		}
		default:
			cancelSession();
			break;
		}
	} else {
		if (hasPrecisionLaserKnife()) {
			if (firstCable != menuID)
				handleSlice(suiBox); // Handle Successful Slice
			else
				handleSliceFailed(); // Handle failed slice attempt //bugfix 820
			return;
		} else
			player->sendSystemMessage("@slicing/slicing:no_knife");
	}

	generateSliceMenu(suiBox);

}
コード例 #29
0
void CraftingSessionImplementation::selectDraftSchematic(int index) {
	ManagedReference<CreatureObject*> crafter = this->crafter.get();
	ManagedReference<PlayerObject*> crafterGhost = this->crafterGhost.get();
	ManagedReference<CraftingTool*> craftingTool = this->craftingTool.get();

	if (index >= currentSchematicList.size()) {
		crafter->sendSystemMessage("Invalid Schematic Index");
		closeCraftingWindow(1);
		cancelSession();
		return;
	}

	DraftSchematic* draftschematic = currentSchematicList.get(index);

	if (draftschematic == NULL) {
		crafter->sendSystemMessage("@ui_craft:err_no_draft_schematic");
		closeCraftingWindow(1);
		cancelSession();
		return;
	}

	clearSession();

	Locker slocker(_this.get());

	if(crafterGhost != NULL && crafterGhost->getDebug()) {
		crafter->sendSystemMessage("Selected DraftSchematic: " + draftschematic->getCustomName());
	}

	state = 2;

	if (craftingTool != NULL) {
		Locker locker(craftingTool);

		if (createSessionObjects(draftschematic)) {

			if (prototype == NULL) {
				crafter->sendSystemMessage("@ui_craft:err_no_prototype");
				closeCraftingWindow(1);
				cancelSession();
				return;
			}

			// Dplay9 ********************************************************
			// Sets the Crafting state to 2, which is the Resource screen
			PlayerObjectDeltaMessage9* dplay9 = new PlayerObjectDeltaMessage9(
					crafter->getPlayerObject());
			dplay9->setExperimentationPoints(0xFFFFFFFF);
			dplay9->setCraftingState(2);
			dplay9->close();

			crafter->sendMessage(dplay9);
			// End Dplay9 *****************************************************

		} else {
			crafter->sendSystemMessage("This type of object has not yet been implemented");
		}
	} else {
		crafter->sendSystemMessage("@ui_craft:err_no_crafting_tool");
		closeCraftingWindow(1);
		cancelSession();
	}
}
コード例 #30
0
void PlayerManagementSessionImplementation::completeBan() {
	ManagedReference<CreatureObject*> admin = this->admin.get();

	if (admin == NULL)
		return;

	Reference<PlayerObject*> ghost = admin->getPlayerObject();

	if (ghost == NULL)
		return;

	String message = "";

	/// Update account to check for changes
	Locker locker(targetAccount);
	targetAccount->updateAccount();

	if (banMode == ACCOUNT) {

		/// Check for account status changes
		if ((banType == BAN && targetAccount->isBanned()) ||
				(banType == UNBAN && !targetAccount->isBanned())) {

			admin->sendSystemMessage("This account has been changed since you started modifying it, please check changes and try again");

			admin->sendMessage(accountBox->generateCloseMessage());
			cancelSession();
			return;
		}

		if (targetAccount->isBanned()) {
			StringBuffer reason;
			reason << targetAccount->getBanAdmin() << "=" << targetAccount->getBanReason() << "|" << ghost->getAccountID() << "=" << banReason;
			message = playerManager->unbanAccount(ghost, targetAccount, reason.toString());
		} else
			message = playerManager->banAccount(ghost, targetAccount, banExpiration - time(0), banReason);

	} else if (banMode == GALAXY) {

		GalaxyBanEntry* galaxyBan = targetAccount->getGalaxyBan(galaxyID);

		/// Check for galaxy ban status changes
		if ((banType == BAN && galaxyBan != NULL) ||
				(banType == UNBAN && galaxyBan == NULL)) {

			admin->sendSystemMessage("This account has been changed since you started modifying it, please check changes and try again");

			admin->sendMessage(accountBox->generateCloseMessage());
			cancelSession();
			return;
		}

		if (galaxyBan != NULL) {
			StringBuffer reason;
			reason << galaxyBan->getBanAdmin() << "=" << galaxyBan->getBanReason() << "|" << ghost->getAccountID() << "=" << banReason;
			message = playerManager->unbanFromGalaxy(ghost, targetAccount, galaxyID, reason.toString());
		} else
			message = playerManager->banFromGalaxy(ghost, targetAccount, galaxyID, banExpiration - time(0), banReason);

	} else if (banMode == CHARACTER){

		CharacterListEntry* entry = targetAccount->getCharacterBan(galaxyID, targetName);

		/// Check for player ban status changes
		if ((banType == BAN && entry != NULL) ||
				(banType == UNBAN && entry == NULL)) {

			admin->sendSystemMessage("This account has been changed since you started modifying it, please check changes and try again");

			admin->sendMessage(accountBox->generateCloseMessage());
			cancelSession();
			return;
		}

		if (entry != NULL) {
			StringBuffer reason;
			reason << entry->getBanAdmin() << "=" << entry->getBanReason() << "|" << ghost->getAccountID() << "=" << banReason;
			message = playerManager->unbanCharacter(ghost, targetAccount, targetName, galaxyID, reason.toString());
		} else
			message = playerManager->banCharacter(ghost, targetAccount, targetName, galaxyID, banExpiration - time(0), banReason);

	}

	admin->sendSystemMessage(message);
	//sendAccountInfo();
	admin->sendMessage(accountBox->generateCloseMessage());
	cancelSession();
}