示例#1
0
	def __setitem__(self, key, value):
		if type(value) == types.InstanceType:
			value.oid = key
		# set value
		self.updateCacheItem(key)
		self.cache[key] = value
		#value.setModified(0)
		# write through new objects
		if not self.has_key(key):
			raise ige.ServerException("'%s' created using set method" % key)
示例#2
0
def computeScanner(obj1, obj2, playerMaps, signatures):
    d = math.hypot(obj1.x - obj2.x, obj1.y - obj2.y)
    sigMod = signatures.get(obj2.oid, 0)
    if hasattr(obj1, "scannerPwr"):
        recordScanLevel(d, obj2, sigMod, obj1.scannerPwr, obj1.owner,
                        playerMaps)
    elif hasattr(obj1, "scannerPwrs"):
        for owner, scannerPwr in obj1.scannerPwrs.iteritems():
            recordScanLevel(d, obj2, sigMod, scannerPwr, owner, playerMaps)
    else:
        raise ige.ServerException("Unsupported object")
示例#3
0
	def create(self, object, id = None):
		#@log.debug("Creating new object", id)
		if not id:
			id = self.nextID
			while self.has_key(id):
				id += 1
			self.nextID = id + 1
			object.oid = id
		#@log.debug("OID =", id)
		if self.has_key(id):
			raise ige.ServerException("'%s' created twice" % id)
		self.cache[id] = object
		self.addNewCacheItem(id)
		self.put(id, pickle.dumps(object, pickle.HIGHEST_PROTOCOL))
		return id
	def restore(self, filename):
		log.message("Restoring database from file", filename)
		fh = file(filename, "r")
		line = fh.readline().strip()
		if line != "IGE OUTER SPACE BACKUP VERSION 1":
			raise ige.ServerException("Incorrect header: %s" % line)
		while True:
			key = fh.readline().strip()
			if key == "END OF BACKUP":
				break
			data = fh.readline().strip()
			key = binascii.a2b_hex(key)
			data = binascii.a2b_hex(data)
			self.db.put(key, data, txn = self.txn)
		log.message("Database restored")
示例#5
0
	def loadBSDDBBackup(self, filename):
		log.message("Restoring database from file", filename)
		fh = file(filename, "r")
		for hLine in ("VERSION=3", "format=bytevalue", "type=btree", "keys=1",
			"HEADER=END"):
			line = fh.readline().strip()
			if line != hLine:
				raise ige.ServerException("Incorrect header: %s" % line)
		while True:
			key = fh.readline().strip()
			if key == "DATA=END":
				break
			data = fh.readline().strip()
			key = int(binascii.a2b_hex(key))
			data = binascii.a2b_hex(data)
			#@log.debug("Storing key", key)
			self.put(key, data)
		log.message("Database restored")
示例#6
0
def getSpeedBoost(tran, player, objs):
    speedBoost = 10000.0
    for obj in objs:
        if obj.type == Const.T_PLANET:
            system = tran.db[obj.compOf]
        elif obj.type in (Const.T_SYSTEM, Const.T_WORMHOLE):
            system = obj
        else:
            raise ige.ServerException("Not a planet or system")
        #
        tmpBoost = 1.0
        for planetID in system.planets:
            planet = tran.db[planetID]
            if planet.owner == player.oid:
                tmpBoost = max(tmpBoost, planet.fleetSpeedBoost)
            elif tran.gameMngr.cmdPool[player.type].isPactActive(
                    tran, player, planet.owner, Const.PACT_ALLOW_TANKING):
                tmpBoost = max(tmpBoost, planet.fleetSpeedBoost)
        speedBoost = min(speedBoost, tmpBoost)
    #@log.debug("Speed boost", speedBoost)
    return speedBoost
示例#7
0
	def restore(self, filename, include = None):
		log.message("Restoring database from file", filename)
		fh = file(filename, "r")
		line = fh.readline().strip()
		if line != "IGE OUTER SPACE BACKUP VERSION 1":
			raise ige.ServerException("Incorrect header: %s" % line)
		imported = 0
		skipped = 0
		while True:
			key = fh.readline().strip()
			if key == "END OF BACKUP":
				break
			data = fh.readline().strip()
			key = binascii.a2b_hex(key)
			if include and not include(key):
				skipped += 1
				continue
			imported += 1
			data = binascii.a2b_hex(data)
			#@log.debug("Storing key", key)
			self.put(key, data)
		log.message("Database restored (%d imported, %d skipped)" % (imported, skipped))
示例#8
0
 def create(self, object, id = None):
     #@log.debug("Creating new object", id)
     if not id:
         id = self.nextID
         while self.has_key(id):
             id += 1
         self.nextID = id + 1
         id = self.keyMethod(id)
         object.oid = id
     elif hasattr(object, "oid") and object.oid != id:
         id = self.keyMethod(id)
         log.message("Object OID '%s' != forced OID '%s' - FIXING" % (object.oid, id))
         object.oid = id
     else:
         id = self.keyMethod(id)
     #@log.debug("OID =", id)
     if self.has_key(id):
         raise ige.ServerException("'%s' created twice" % id)
     self.cache[id] = object
     self._addNewCacheItem(id)
     self.put(id, pickle.dumps(object, pickle.HIGHEST_PROTOCOL))
     return id