예제 #1
0
    def populate(self, seed, system_min, system_max, planet_min, planet_max):
        """\
		--populate <game> <random seed> <min systems> <max systems> <min planets> <max planets>
		
			Populate a universe with a number of systems and planets.
			The number of systems in the universe is dictated by min/max systems.
			The number of planets per system is dictated by min/max planets.
		"""
        # Convert arguments to integers
        seed, system_min, system_max, planet_min, planet_max = (
            int(seed), int(system_min), int(system_max), int(planet_min),
            int(planet_max))

        dbconn.use(self.game)
        trans = dbconn.begin()
        try:
            RulesetBase.populate(self, seed)

            r = Resource(Resource.byname('Ship Parts Factory'))

            # FIXME: Assuming that the Universe and the Galaxy exist.
            r = random.Random()
            r.seed(seed)

            # Create the actual systems and planets.
            for i in range(0, r.randint(system_min, system_max)):
                pos = r.randint(SIZE * -1, SIZE) * 1000, r.randint(
                    SIZE * -1, SIZE) * 1000, r.randint(SIZE * -1, SIZE) * 1000

                # Add system
                system = Object(type='tp.server.rules.base.objects.System')
                system.name = "System %s" % i
                system.size = r.randint(800000, 2000000)
                system.posx = pos[0]
                system.posy = pos[1]
                system.insert()
                ReparentOne(system)
                system.save()
                print "Created system (%s) with the id: %i" % (system.name,
                                                               system.id)

                # In each system create a number of planets
                for j in range(0, r.randint(planet_min, planet_max)):
                    planet = Object(
                        type='tp.server.rules.timtrader.objects.Planet')
                    planet.name = "Planet %i in %s" % (j, system.name)
                    planet.size = r.randint(1000, 10000)
                    planet.parent = system.id
                    planet.posx = pos[0] + r.randint(1, 100) * 1000
                    planet.posy = pos[1] + r.randint(1, 100) * 1000
                    planet.insert()
                    print "Created planet (%s) with the id: %i" % (planet.name,
                                                                   planet.id)

                    # FIXME: Add minerals Iron, Uranium
                    mine = False
                    for mineral in minerals:
                        # Does this planet have this mineral
                        if r.random() * 100 > mineral.probability:
                            # Add a smattering of minerals
                            planet.resources_add(id,
                                                 r.randint(0, mineral.density),
                                                 Planet.MINEABLE)
                            mine = True

                    # Add a mine to each planet which has minerals
                    if mine:
                        planet.resources_add(Resource.byname('Mine'), 1,
                                             Planet.ACCESSABLE)

                    # FIXME: Add growing resources
                    for grow in growing:
                        if r.random() * 100 > grow.probability:
                            # Add a smattering of breeding grounds
                            planet.resources_add(Resource.byname(''), 1,
                                                 Planet.ACCESSABLE)

                            # Add a smattering of the same stocks
                            planet.resources_add(Resource.byname(''),
                                                 r.randint(0, grow.density),
                                                 Planet.MINEABLE)

                            # Add 1 fishery/slaughter house to each location

                    # FIXME: Add a other industries in random locations
                    for factory in factories:
                        pass

                    # FIXME: Add a bunch of cities
                    planet.save()

            trans.commit()
        except:
            trans.rollback()
            raise
	def populate(self, seed, system_min, system_max, planet_min, planet_max):
		"""\
		--populate <game> <random seed> <min systems> <max systems> <min planets> <max planets>
		
			Populate a universe with a number of systems and planets.
			The number of systems in the universe is dictated by min/max systems.
			The number of planets per system is dictated by min/max planets.
		"""
		# Convert arguments to integers
		seed, system_min, system_max, planet_min, planet_max = (int(seed), int(system_min), int(system_max), int(planet_min), int(planet_max))

		dbconn.use(self.game)
		trans = dbconn.begin()
		try:
			RulesetBase.populate(self, seed)

			r = Resource(Resource.byname('Ship Parts Factory'))

			# FIXME: Assuming that the Universe and the Galaxy exist.
			r = random.Random()
			r.seed(seed)

			# Create the actual systems and planets.
			for i in range(0, r.randint(system_min, system_max)):
				pos = r.randint(SIZE*-1, SIZE)*1000, r.randint(SIZE*-1, SIZE)*1000, r.randint(SIZE*-1, SIZE)*1000
				
				# Add system
				system = Object(type='tp.server.rules.base.objects.System')
				system.name = "System %s" % i
				system.size = r.randint(800000, 2000000)
				system.posx = pos[0]
				system.posy = pos[1]
				system.insert()
				ReparentOne(system)
				system.save()
				print "Created system (%s) with the id: %i" % (system.name, system.id)
				
				# In each system create a number of planets
				for j in range(0, r.randint(planet_min, planet_max)):
					planet = Object(type='tp.server.rules.timtrader.objects.Planet')
					planet.name = "Planet %i in %s" % (j, system.name)
					planet.size = r.randint(1000, 10000)
					planet.parent = system.id
					planet.posx = pos[0]+r.randint(1,100)*1000
					planet.posy = pos[1]+r.randint(1,100)*1000
					planet.insert()
					print "Created planet (%s) with the id: %i" % (planet.name, planet.id)

					# FIXME: Add minerals Iron, Uranium
					mine = False
					for mineral in minerals:
						# Does this planet have this mineral
						if r.random()*100 > mineral.probability:
							# Add a smattering of minerals 
							planet.resources_add(id, r.randint(0, mineral.density), Planet.MINEABLE)
							mine = True

					# Add a mine to each planet which has minerals
					if mine:
						planet.resources_add(Resource.byname('Mine'), 1, Planet.ACCESSABLE)
						
					# FIXME: Add growing resources
					for grow in growing:
						if r.random()*100 > grow.probability:
							# Add a smattering of breeding grounds
							planet.resources_add(Resource.byname(''), 1, Planet.ACCESSABLE)
							
							# Add a smattering of the same stocks
							planet.resources_add(Resource.byname(''), r.randint(0, grow.density), Planet.MINEABLE)
						

							# Add 1 fishery/slaughter house to each location

					# FIXME: Add a other industries in random locations
					for factory in factories:
						pass

					# FIXME: Add a bunch of cities					
					planet.save()

			trans.commit()
		except:
			trans.rollback()
			raise