Example #1
0
def validTarget(ent, targ, rng):
   if targ is None or not targ.alive:
      return False
   if lInf(ent, targ) > rng:
      return False
   wild = min(ent.status.wilderness, targ.status.wilderness)
   if abs(combat.level(ent.skills) - combat.level(targ.skills)) > wild:
      return False
   return True
Example #2
0
    def inRange(entity, stim, config, N):
        R, C = stim.shape
        R, C = R // 2, C // 2

        rets = set([entity])
        for r in range(R - N, R + N + 1):
            for c in range(C - N, C + N + 1):
                for e in stim[r, c].ents.values():
                    minWilderness = min(entity.status.wilderness.val,
                                        e.status.wilderness.val)

                    selfLevel = combat.level(entity.skills)
                    targLevel = combat.level(e.skills)
                    #if abs(selfLevel - targLevel) <= minWilderness:
                    rets.add(e)
        rets = list(rets)
        return rets
Example #3
0
    def call(env, entity, style, targ):
        #Can't attack if either party is immune
        if entity.status.immune > 0 or targ.status.immune > 0:
            return

        #Check if self targeted
        if entity.entID == targ.entID:
            return

        #Check wilderness level
        wilderness = min(entity.status.wilderness, targ.status.wilderness)
        selfLevel = combat.level(entity.skills)
        targLevel = combat.level(targ.skills)

        if (env.config.WILDERNESS and abs(selfLevel - targLevel) > wilderness
                and entity.isPlayer and targ.isPlayer):
            return

        #Check attack range
        rng = style.attackRange(env.config)
        start = np.array(entity.base.pos)
        end = np.array(targ.base.pos)
        dif = np.max(np.abs(start - end))

        #Can't attack same cell or out of range
        if dif == 0 or dif > rng:
            return

        #Execute attack
        entity.history.attack = {}
        entity.history.attack['target'] = targ.entID
        entity.history.attack['style'] = style.__name__
        targ.attacker = entity

        dmg = combat.attack(entity, targ, style.skill)
        if style.freeze and dmg > 0:
            targ.status.freeze.update(env.config.FREEZE_TIME)

        return dmg
Example #4
0
    def packet(self):
        data = {}

        data['constitution'] = self.constitution.packet()
        data['melee'] = self.melee.packet()
        data['range'] = self.range.packet()
        data['mage'] = self.mage.packet()
        data['defense'] = self.defense.packet()
        data['fishing'] = self.fishing.packet()
        data['hunting'] = self.hunting.packet()
        data['cooking'] = self.cooking.packet()
        data['smithing'] = self.smithing.packet()
        data['level'] = combat.level(self)

        return data
Example #5
0
    def update(self, obs):
        '''Computes a count-based exploration map by painting
      tiles as agents walk over them'''
        for entID, agent in self.realm.realm.players.items():
            r, c = agent.base.pos

            skillLvl = (agent.skills.fishing.level +
                        agent.skills.hunting.level) / 2.0
            combatLvl = combat.level(agent.skills)

            if skillLvl == 10 and combatLvl == 3:
                continue

            self.values[r, c, 0] = skillLvl
            self.values[r, c, 1] = combatLvl
Example #6
0
    def log(self, ent) -> None:
        '''Logs agent data upon death

      This function is called automatically when an agent dies. Logs are used
      to compute summary stats and populate the dashboard. You should not
      call it manually. Instead, override this method to customize logging.

      Args:
         ent: An agent
      '''

        quill = self.quill

        blob = quill.register('Population', self.realm.tick, quill.HISTOGRAM,
                              quill.LINE, quill.SCATTER)
        blob.log(self.realm.population)

        blob = quill.register('Lifetime', self.realm.tick, quill.HISTOGRAM,
                              quill.LINE, quill.SCATTER, quill.GANTT)
        blob.log(ent.history.timeAlive.val)

        blob = quill.register('Skill Level', self.realm.tick, quill.HISTOGRAM,
                              quill.STACKED_AREA, quill.STATS, quill.RADAR)
        blob.log(ent.skills.range.level, 'Range')
        blob.log(ent.skills.mage.level, 'Mage')
        blob.log(ent.skills.melee.level, 'Melee')
        blob.log(ent.skills.constitution.level, 'Constitution')
        blob.log(ent.skills.defense.level, 'Defense')
        blob.log(ent.skills.fishing.level, 'Fishing')
        blob.log(ent.skills.hunting.level, 'Hunting')

        blob = quill.register('Equipment', self.realm.tick, quill.HISTOGRAM,
                              quill.SCATTER)
        blob.log(ent.loadout.chestplate.level, 'Chestplate')
        blob.log(ent.loadout.platelegs.level, 'Platelegs')

        blob = quill.register('Exploration', self.realm.tick, quill.HISTOGRAM,
                              quill.SCATTER)
        blob.log(ent.history.exploration)

        quill.stat('Population', self.realm.population)
        quill.stat('Lifetime', ent.history.timeAlive.val)
        quill.stat('Skilling',
                   (ent.skills.fishing.level + ent.skills.hunting.level) / 2.0)
        quill.stat('Combat', combat.level(ent.skills))
        quill.stat('Equipment', ent.loadout.defense)
        quill.stat('Exploration', ent.history.exploration)
Example #7
0
 def __init__(self, realm, pos, iden):
     super().__init__(realm, pos, iden, 'Hostile', Neon.RED, -3)
     self.dataframe.init(Static.Entity, iden, pos)
     self.vision = int(max(self.vision,
                           1 + combat.level(self.skills) // 10))
     self.dataframe.init(Static.Entity, self.entID, self.pos)
Example #8
0
   def packet(self):
      data          = super().packet() 
      data['level'] = combat.level(self)

      return data