Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
*.pyc
*.pyo

*.idea
27 changes: 22 additions & 5 deletions ev-tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,19 @@ def _cmd_status(args):
print pokemon.status()


def _cmd_set(args):
pokemon = _tracker.active
pokemon.set_ev(ev_stat=args.ev_stat, ev_value=args.ev_value)
print pokemon.evs
_save_tracker()


def _cmd_update(args):
raise NotImplementedError('update command is not yet implemented.')
pokemon = _tracker.active
pokerus = args.pokerus if args.pokerus else pokemon.pokerus
pokemon.update(pokerus=pokerus, item=args.item)
print pokemon.status()
_save_tracker()


def _cmd_battle(args):
Expand All @@ -162,10 +173,8 @@ def _cmd_battle(args):
else:
pokemon = _tracker.get_pokemon(args.id)

pokemon.battle(species)

print evs
print pokemon
pokemon.battle(species, number=args.number)
_save_tracker()


def _cmd_release(args):
Expand Down Expand Up @@ -216,13 +225,21 @@ def _build_parser():
status_parser.set_defaults(func=_cmd_status)

update_parser = subparsers.add_parser('update', help='Update a tracked Pokemon\'s details')
update_parser.add_argument('--pokerus', '-p', action='store_true', help='Indicates the given Pokemon has Pokerus')
update_parser.add_argument('--item', '-i', help='Add an item to the active pokemon')
update_parser.set_defaults(func=_cmd_update)

battle_parser = subparsers.add_parser('battle', help='Record a battle for a tracked Pokemon')
battle_parser.add_argument('species', help='Name of number of Pokemon species to battle')
battle_parser.add_argument('--id', '-i', type=int)
battle_parser.add_argument('--number', '-n', type=int, default=1, help="Number of pokemon battles to record")
battle_parser.set_defaults(func=_cmd_battle)

set_ev_parser = subparsers.add_parser('set', help='Set an EV value explicitly')
set_ev_parser.add_argument('ev_stat', help='Name of EV Stat to be explicitly set')
set_ev_parser.add_argument('ev_value', help='Value of EV to set Stat to')
set_ev_parser.set_defaults(func=_cmd_set)

release_parser = subparsers.add_parser('release', help='Stop tracking a Pokemon')
release_parser.add_argument('id', type=int)
release_parser.set_defaults(func=_cmd_release)
Expand Down
52 changes: 41 additions & 11 deletions pokemon.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def __str__(self):
return ', '.join(ev_string)

def verbose(self):
ev_string = ['%s: %d' % (EvSet.label(stat), ev) for stat, ev in self.evs.items()]
ev_string = ['%s: %d' % (EvSet.label(stat), ev) for stat, ev in self.to_dict().items()]
if not len(ev_string):
return 'No EVs'
return '\n'.join(ev_string)
Expand All @@ -73,7 +73,6 @@ def to_dict(self):
return dict



class Species(object):

def __init__(self, id, name, evs=None):
Expand Down Expand Up @@ -106,9 +105,6 @@ def __init__(self, id, species, name=None, item=None, pokerus=False, evs=None):
name = property(lambda self: self.get_name(),
lambda self, name: self.set_name(name))

item = property(lambda self: self._item,
lambda self, item: self.set_item(item))

def get_name(self):
return self.species.name if self._name is None else self._name

Expand All @@ -119,7 +115,13 @@ def set_name(self, name):
def set_item(self, item):
if item is not None and item not in ITEMS:
raise ValueError("Invalid item '%s'" % item)
self._item = ITEMS[item] if item is not None else None
if item:
self.item = item

def update_evs_for_item(self, evs):
if self.item:
evs = ITEMS[self.item](evs)
return evs

def __str__(self):
name = self.name
Expand All @@ -143,18 +145,46 @@ def listing(self, active):
padding = '* ' if self is active else ' '
return '%s%s' % (padding, self)

def battle(species, number=1):
'''
def update(self, pokerus, item=None):
"""
Updates the active pokemon
:param pokerus: Set pokerus to True or False
:param item: give the pokemon an item
"""
self.pokerus = pokerus
if item:
self.set_item(item=item)

def battle(self, species, number=1):
"""
Alter's a tracked Pokemons EVs to simulate having battled a Species.
These values are altered by pokerus and any item held. The EV
increment can be multiplied by number to simulate multiple battles.
'''
"""
evs = species.evs.clone()
if self.item is not None:
evs = self.item(evs)
evs = self.update_evs_for_item(evs)
if self.pokerus:
evs *= 2
self.evs += evs * number
gained_evs = evs * number
if number > 1:
print "Battled {} x #{} {} \t {}".format(number, species.id, species.name, gained_evs)
else:
print "Battled #{} {} \t {}".format(species.id, species.name, gained_evs)
self.evs += gained_evs

def set_ev(self, ev_stat, ev_value):
"""
Method to explicitly set an ev value from the command line.
Call structure: `ev set hp 134` would set the active pokemon's hp ev to 134
:param ev_stat: The stat being explicitly set
:param ev_value: The value that should be set for the ev_stat
"""
if ev_stat not in self.evs.STATS:
raise AttributeError("{} is not an eligible ev stat".format(ev_stat))
evs = self.evs.clone()
setattr(evs, ev_stat, int(ev_value))
self.evs = evs

def to_dict(self):
return {'species': self.species.id, 'name': self._name,
Expand Down