コード例 #1
0
 def update(self, log):
     diplomacy = pm.struct(self.ptr + 0x7C, "iiiiiiiii")
     diplomacy = list(filter(lambda x: x != -1, diplomacy))
     if diplomacy != self:
         log += [(copy(diplomacy), copy(self))]
         self.clear()
         self.extend(diplomacy)
コード例 #2
0
 def update(self):
     self.prev_hp = self.hp
     self.hp = pm.float(self.ptr + 0x34)
     self.status = pm.int8(self.ptr + 0x4C)
     self.resource_amount = pm.float(self.ptr + 0x48)
     self.resource_type = Primitive.ResourceTable[pm.int8(self.ptr + 0x50)]
     self.position = pm.struct(self.ptr + 0x3c, "ff")
     self.selected = pm.int8(self.ptr + 0x3a)
コード例 #3
0
 def __new__(cls, ptr, owner):
     if pm.int16(ptr + 0x4) == SuperclassData.building:
         # Main unit in TC has 4 buildings..
         annex = list(pm.struct(ptr + 0x1F4, "hhhh"))
         annex += [pm.int16(ptr + 0x21c)]
         annex = list(filter(lambda x: x != -1, annex))
         if len(annex) == 1:  # part of TC or gate
             return None
     return super(UnitData, cls).__new__(cls)
コード例 #4
0
 def __init__(self, udata):
     super(Armor, self).__init__()
     cnt = pm.int16(udata.ptr + 0x142)
     self.displayed = pm.int16(udata.ptr + 0x17C)
     self.displayed_pierce = pm.int16(udata.ptr + 0x1A4)
     if cnt != 0:
         ptr = pm.pointer(udata.ptr + 0x144)
         big_struct = pm.struct(ptr, "hh" * cnt)
         iterator = iter(big_struct)
         self.extend(zip(iterator, iterator))
コード例 #5
0
ファイル: aoc_objects.py プロジェクト: heinezen/bartender
 def update(self):
     """Creates a list of objects."""
     self.clear()  # sucks but ok
     ptr_array = pm.pointer(self.ptr + 0x4)
     length = pm.uint32(self.ptr + 0x8)
     object_pointers = pm.struct(ptr_array, "I" * length)
     length = pm.int8(self.owner.ptr + 0x254)
     Objects.selected_pointers += pm.struct(self.owner.ptr + 0x160,
                                            "I" * length)
     for ptr in object_pointers:
         r = Objects._create_(ptr, self.owner)
         if r is not None:
             r.update()
             self.append(r)
             # Appends the object to the list and sets that the object will not be deleted
             Objects._all[self.owner][ptr] = [r, False]
             # adds it into selected objects
             if ptr in Objects.selected_pointers:
                 Objects.selected.append(r)
コード例 #6
0
    def update(self):
        # Check if the game is running: 0 not running, 1 running
        pm.update()
        if not pm.int32(pm.base_address + 0x9E0708):
            self.running = False
            return False

        # Second check.
        try:
            ptr = pm.pointer(
                pm.base_address + 0x006FDA30
            )  # three offsets are avaliable here: 006DC7F8, 006DDCA0, 006FDA30 each should point to the same address.. if not remove one   You need to check for each address in record game.
            pm.pointer(ptr + 0x184)
        except NullAddress:
            self.running = False
            return False

        # Third check. Time
        if pm.int32(ptr + 0x68) <= 0:
            return False

        self.running = True
        # And get the common stuff
        GTime.set(pm.int32(ptr + 0x68))
        self.screen_position = pm.struct(ptr + 0xD8, "ff")
        self.speed = pm.float(ptr + 0x16C)
        self.pov = self.players[pm.int8(ptr + 0x174) - 1]  # Must be -1
        if self.pov != self.player:
            if self.player is not None:
                self.player.pov = False
            self.player = self.pov  # Set the new pov
            self.player.pov = True
            self.__update_teams__()
        market_price = pm.struct(
            ptr + 0x238, "fff"
        )  # Wood, food, stone coeficient see spirit of the law - markets
        Objects.selected.clear()
        Objects.selected_pointers.clear()
        # Update all players data
        for player in self.players:
            player.update(market_price)
        self.gaia.update(market_price)
        return True
コード例 #7
0
 def __init__(self, udata):
     super(Attack, self).__init__()
     self.range = pm.float(udata.ptr + 0x154)
     self.reload_time = pm.float(udata.ptr + 0x160)
     self.accurancy = pm.int16(udata.ptr + 0x166)
     self.displayed = pm.int16(udata.ptr + 0x17e)
     cnt = pm.int16(udata.ptr + 0x148)
     if cnt != 0:
         ptr = pm.pointer(udata.ptr + 0x14c)
         big_struct = pm.struct(ptr, "hh" * cnt)
         iterator = iter(big_struct)
         self.extend(zip(iterator, iterator))
コード例 #8
0
ファイル: aoc_game.py プロジェクト: heinezen/bartender
    def update(self):
        # Check if the game is running
        pm.update()
        if not pm.int32(pm.base_address + 0x9C8FB0):
            self.running = False
            return False
        # Second check.
        try:
            ptr = pm.pointer(pm.base_address + 0x006E62D8)
            pm.pointer(ptr + 0x184)
        except NullAddress:
            self.running = False
            return False

        # Third check. Time
        if pm.int32(ptr + 0x68) <= 0:
            return False

        self.running = True
        # And get the common stuff
        GTime.set(pm.int32(ptr + 0x68))
        self.screen_position = pm.struct(ptr + 0xD8, "ff")
        self.speed = pm.float(ptr + 0x16C)
        self.pov = self.players[pm.int8(ptr + 0x174) - 1]  # Must be -1
        if self.pov != self.player:
            if self.player is not None:
                self.player.pov = False
            self.player = self.pov  # Set the new pov
            self.player.pov = True
            self.__update_teams__()
        market_price = pm.struct(
            ptr + 0x238, "fff"
        )  # Wood, food, stone coeficient see spirit of the law - markets
        Objects.selected.clear()
        Objects.selected_pointers.clear()
        # Update all players data
        for player in self.players:
            player.update(market_price)
        self.gaia.update(market_price)
        return True
コード例 #9
0
ファイル: aoc_object_unit.py プロジェクト: heinezen/bartender
 def _check_garrison_(self):
     garrison = []
     if not self.udata.max_garrison:
         return garrison
     try:
         ptr = pm.pointer(self.ptr + 0x28)
         ptr, cnt = pm.struct(ptr, "II")
         if not ptr:
             return garrison
         arr = pm.struct(ptr, "I"*cnt)
         for ptr in arr:
             udata = UnitData(pm.pointer(ptr + 0xC), self.owner)
             """
             if r is not None:
                 return garrison 
             if udata and udata.superclass == SuperclassData.combatant: # << checks recursion
                 garrison.append(Unit(ptr, self.owner, udata)) # trebuchet shouldnt bug this 
             """
             garrison.append(Unit(ptr, self.owner, udata)) # trebuchet shouldnt bug this 
     except NullAddress:
         return garrison
     self.garrison.clear()
     self.garrison.extend(garrison)
コード例 #10
0
 def create(self):
     self.length = pm.int16(self.building.ptr + 0x21c)
     try:
         ptr = pm.pointer(self.building.ptr + 0x214)
     except NullAddress:
         return None
     while len(self) < self.length:
         uid, units_amount = pm.struct(ptr, "hh")
         for i in range(units_amount):
             try:
                 ptr_icon = self.building.owner.ptr
                 ptr_icon = pm.pointer(ptr_icon + 0x14)
                 ptr_icon = pm.pointer(ptr_icon + 0x4 * uid)
                 icon = pm.int16(ptr_icon + 0x54)
             except NullAddress:
                 return None
             self.append((uid, icon))
         ptr += 4
     return self
コード例 #11
0
 def __init__(self, udata):
     super(Costs, self).__init__()
     r_type, r_amount, r_pay = pm.struct(udata.ptr + 0x18c, "hhh")
     if r_amount != -1:
         self.append((Resources.keys[r_type], r_amount, Costs.pay[r_pay]))
コード例 #12
0
 def __init__(self, owner):
     super(Resources, self).__init__()
     self.owner = owner
     self.ptr = pm.pointer(owner.ptr + 0x3c)  # Pointer should be unchanged
     self.keys = Resources.keys
     self.values = pm.struct(self.ptr, Resources.fmt)
コード例 #13
0
 def update(self):
     self.values = pm.struct(self.ptr, Resources.fmt)
コード例 #14
0
 def __init__(self, owner):
     self.owner = owner
     self.ptr = owner.ptr
     diplomacy = pm.struct(self.ptr + 0x7C, "iiiiiiiii")
     diplomacy = filter(lambda x: x != -1, diplomacy)
     super(Diplomacy, self).__init__(diplomacy)