Esempio n. 1
0
int StructureManager::redeedStructure(CreatureObject* creature) {
	ManagedReference<DestroyStructureSession*> session = creature->getActiveSession(SessionFacadeType::DESTROYSTRUCTURE).castTo<DestroyStructureSession*>();

	if (session == NULL)
		return 0;

	ManagedReference<StructureObject*> structureObject =
			session->getStructureObject();

	if (structureObject == NULL)
		return 0;

	Locker _locker(structureObject);

	ManagedReference<StructureDeed*> deed =
			server->getObject(
					structureObject->getDeedObjectID()).castTo<StructureDeed*>();

	int maint = structureObject->getSurplusMaintenance();
	int redeedCost = structureObject->getRedeedCost();

	if (deed != NULL && structureObject->isRedeedable()) {
		Locker _lock(deed, structureObject);

		ManagedReference<SceneObject*> inventory = creature->getSlottedObject(
				"inventory");

		if (inventory == NULL || inventory->isContainerFull()) {
			creature->sendSystemMessage("@player_structure:inventory_full"); //This installation can not be redeeded because your inventory does not have room to put the deed.
			creature->sendSystemMessage(
					"@player_structure:deed_reclaimed_failed"); //Structure destroy and deed reclaimed FAILED!
			return session->cancelSession();
		} else {
			deed->setSurplusMaintenance(maint - redeedCost);
			deed->setSurplusPower(structureObject->getSurplusPower());

			structureObject->setDeedObjectID(0); //Set this to 0 so the deed doesn't get destroyed with the structure.

			destroyStructure(structureObject);

			inventory->transferObject(deed, -1, true);
			inventory->broadcastObject(deed, true);
			creature->sendSystemMessage("@player_structure:deed_reclaimed"); //Structure destroyed and deed reclaimed.
		}
	} else {
		destroyStructure(structureObject);
		creature->sendSystemMessage("@player_structure:structure_destroyed"); //Structured destroyed.
	}

	return session->cancelSession();
}
Esempio n. 2
0
void closeWin(PLAYER* player, BACKGROUND* background, BANANA* bananaArray[MAX_NUM_OF_BANANA], BARRIER* barrierArray[MAX_NUM_OF_BARRIER])
{
	int i;
	destroyStructure (&(player->player_tex));
	destroyStructure (&(background->background_tex));

	for(i = 0; i < MAX_NUM_OF_BANANA; i++)
	{
			destroyStructure (&(bananaArray[i]->banana_tex));
	}

	for(i = 0; i < MAX_NUM_OF_BARRIER; i++)
	{
			destroyStructure (&(barrierArray[i]->barrier_tex));
	}
	SDL_DestroyRenderer (gRenderer);
	SDL_DestroyWindow (gWindow);

	IMG_Quit();
	SDL_Quit();
}
Esempio n. 3
0
int StructureManager::redeedStructure(CreatureObject* creature) {
	ManagedReference<DestroyStructureSession*> session = creature->getActiveSession(SessionFacadeType::DESTROYSTRUCTURE).castTo<DestroyStructureSession*>();

	if (session == NULL)
		return 0;

	ManagedReference<StructureObject*> structureObject =
			session->getStructureObject();

	if (structureObject == NULL)
		return 0;

	Locker _locker(structureObject);

	ManagedReference<StructureDeed*> deed =
			server->getObject(
					structureObject->getDeedObjectID()).castTo<StructureDeed*>();

	int maint = structureObject->getSurplusMaintenance();
	int redeedCost = structureObject->getRedeedCost();

	if (deed != NULL && structureObject->isRedeedable()) {
		Locker _lock(deed, structureObject);

		ManagedReference<SceneObject*> inventory = creature->getSlottedObject(
				"inventory");

		bool isSelfPoweredHarvester = false;
		HarvesterObject* harvester = structureObject.castTo<HarvesterObject*>();

		if(harvester != NULL)
			isSelfPoweredHarvester = harvester->isSelfPowered();

		if (inventory == NULL || inventory->getCountableObjectsRecursive() > (inventory->getContainerVolumeLimit() - (isSelfPoweredHarvester ? 2 : 1))) {

			if(isSelfPoweredHarvester) {
				//This installation can not be destroyed because there is no room for the Self Powered Harvester Kit in your inventory.
				creature->sendSystemMessage("@player_structure:inventory_full_selfpowered");
			} else {
				//This installation can not be redeeded because your inventory does not have room to put the deed.
				creature->sendSystemMessage("@player_structure:inventory_full");
			}

			creature->sendSystemMessage("@player_structure:deed_reclaimed_failed"); //Structure destroy and deed reclaimed FAILED!
			return session->cancelSession();
		} else {

			if(isSelfPoweredHarvester) {

				Reference<SceneObject*> rewardSceno = server->createObject(STRING_HASHCODE("object/tangible/veteran_reward/harvester.iff"), 1);
				if( rewardSceno == NULL ){
					creature->sendSystemMessage("@player_structure:deed_reclaimed_failed"); //Structure destroy and deed reclaimed FAILED!
					return session->cancelSession();
				}

				// Transfer to player
				if( !inventory->transferObject(rewardSceno, -1, false, true) ){ // Allow overflow
					creature->sendSystemMessage("@player_structure:deed_reclaimed_failed"); //Structure destroy and deed reclaimed FAILED!
					rewardSceno->destroyObjectFromDatabase(true);
					return session->cancelSession();
				}

				harvester->setSelfPowered(false);

				inventory->broadcastObject(rewardSceno, true);
				creature->sendSystemMessage("@player_structure:selfpowered");
			}

			deed->setSurplusMaintenance(maint - redeedCost);
			deed->setSurplusPower(structureObject->getSurplusPower());

			structureObject->setDeedObjectID(0); //Set this to 0 so the deed doesn't get destroyed with the structure.

			destroyStructure(structureObject);

			inventory->transferObject(deed, -1, true);
			inventory->broadcastObject(deed, true);
			creature->sendSystemMessage("@player_structure:deed_reclaimed"); //Structure destroyed and deed reclaimed.
		}
	} else {
		destroyStructure(structureObject);
		creature->sendSystemMessage("@player_structure:structure_destroyed"); //Structured destroyed.
	}

	return session->cancelSession();
}