oakdex-pokemon 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef6baa578b6a2d019f42ec21901039fb0a8fd18a
4
- data.tar.gz: f0529da87af14479aa59e4f9da3b75a8d3469c08
3
+ metadata.gz: d56143befcd254ccac067dfdb99833ebdd08e865
4
+ data.tar.gz: c001f5809aa83482bfc53faaac4f5a2058b12825
5
5
  SHA512:
6
- metadata.gz: 47762037c82bd2c59fd552186383d9db8701475fcc67bb3623098e7e62ca86ac1ff37cddadd9459e0ec14a5685c38fbfe0765f047b989ba188c82ee656cce863
7
- data.tar.gz: 74310774386369c5edba3930439d9cabcfc617a105870c5a1fc5a90d0ad3283589a8408c10628ce97c877c4a69ec7dfd8404e0e771d5c8c245030674251e92ce
6
+ metadata.gz: 91c81951efe0bc65b3c238a50c855ce221fa5914ac33be1f85a6702745f9eb3a31d8d2bcec9d59c2bc9320900ab36dbcdc1b416daea359dcfdc2d86269af58b3
7
+ data.tar.gz: 8d712bf555aba6ffcf69d08386348c8137a5d8e5803766fa22bcdaa4fa6562da636b12360f180010d7d7bb3c643036ee2ff8eda49ab7c9137fe15c80bce885a7
data/README.md CHANGED
@@ -59,6 +59,20 @@ pikachu.change_pp_by('Thunder Shock', -1)
59
59
  pikachu.moves.map { |p| "#{p.name} #{p.pp}" } # => ["Quick Attack 30", "Tail Whip 30", "Growl 40", "Thunder Shock 29"]
60
60
  ```
61
61
 
62
+
63
+ ### Exp Gain Calculation
64
+
65
+ ```ruby
66
+ fainted = Oakdex::Pokemon.create('Pikachu', level: 10)
67
+ winner = Oakdex::Pokemon.create('Bulbasaur', level: 12)
68
+
69
+ Oakdex::Pokemon::ExperienceGainCalculator.calculate(fainted, winner) # => 269
70
+ Oakdex::Pokemon::ExperienceGainCalculator.calculate(fainted, winner, flat: true) # => 225
71
+ Oakdex::Pokemon::ExperienceGainCalculator.calculate(fainted, winner, winner_using_exp_share: true) # => 135
72
+ ```
73
+
74
+
75
+
62
76
  ## Contributing
63
77
 
64
78
  I would be happy if you want to add your contribution to the project. In order to contribute, you just have to fork this repository.
@@ -4,6 +4,7 @@ require 'oakdex/pokedex'
4
4
  require 'oakdex/pokemon/stat'
5
5
  require 'oakdex/pokemon/move'
6
6
  require 'oakdex/pokemon/factory'
7
+ require 'oakdex/pokemon/experience_gain_calculator'
7
8
 
8
9
  module Oakdex
9
10
  # Represents detailed pokemon instance
@@ -0,0 +1,79 @@
1
+ module Oakdex
2
+ class Pokemon
3
+ # Calculates the experience a pokemon gains after a defeat
4
+ # https://bulbapedia.bulbagarden.net/wiki/Experience#Experience_gain_in_battle
5
+ class ExperienceGainCalculator
6
+ def self.calculate(fainted, winner, options = {})
7
+ new(fainted, winner, options).calculate
8
+ end
9
+
10
+ def initialize(fainted, winner, options = {})
11
+ @options = options
12
+ @fainted = fainted
13
+ @winner = winner
14
+ end
15
+
16
+ def calculate
17
+ (flat? ? flat_formula : scaled_formula).to_i
18
+ end
19
+
20
+ private
21
+
22
+ def flat?
23
+ @options[:flat]
24
+ end
25
+
26
+ def scaled_formula
27
+ (((a * b * l) / (5 * s)) * ((2 * l + 10)**2.5 / (l + lp + 10)**2.5) + 1) * t * e * p
28
+ end
29
+
30
+ def flat_formula
31
+ (a * t * b * e * l * p * f * v) / (7 * s)
32
+ end
33
+
34
+ def a
35
+ @fainted.wild? ? 1.0 : 1.5
36
+ end
37
+
38
+ def b
39
+ @fainted.species.base_exp_yield
40
+ end
41
+
42
+ def l
43
+ @fainted.level
44
+ end
45
+
46
+ def lp
47
+ @winner.level
48
+ end
49
+
50
+ def e
51
+ @winner.item_id == 'Lucky Egg' ? 1.5 : 1.0
52
+ end
53
+
54
+ def p
55
+ # TODO: Integrate Point Power
56
+ 1
57
+ end
58
+
59
+ def f
60
+ @winner.amie_level(:affection) >= 2 ? 1.2 : 1.0
61
+ end
62
+
63
+ def t
64
+ @winner.traded? ? 1.5 : 1.0
65
+ end
66
+
67
+ def s
68
+ @options[:winner_using_exp_share] ? 2 : 1
69
+ end
70
+
71
+ def v
72
+ # TODO: 1.2 if the winning Pokemon is at or past
73
+ # the level where it would be able to evolve,
74
+ # but it has not
75
+ 1
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,5 +1,5 @@
1
1
  module Oakdex
2
2
  class Pokemon
3
- VERSION = '0.0.3'
3
+ VERSION = '0.0.4'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oakdex-pokemon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jalyna Schroeder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-20 00:00:00.000000000 Z
11
+ date: 2019-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oakdex-pokedex
@@ -33,6 +33,7 @@ files:
33
33
  - README.md
34
34
  - lib/oakdex.rb
35
35
  - lib/oakdex/pokemon.rb
36
+ - lib/oakdex/pokemon/experience_gain_calculator.rb
36
37
  - lib/oakdex/pokemon/factory.rb
37
38
  - lib/oakdex/pokemon/move.rb
38
39
  - lib/oakdex/pokemon/stat.rb