about summary refs log tree commit diff stats
path: root/app/models/revision.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/revision.rb')
-rw-r--r--app/models/revision.rb494
1 files changed, 494 insertions, 0 deletions
diff --git a/app/models/revision.rb b/app/models/revision.rb new file mode 100644 index 0000000..477a042 --- /dev/null +++ b/app/models/revision.rb
@@ -0,0 +1,494 @@
1require 'active_record/diff'
2
3class Revision < ApplicationRecord
4 include ActiveRecord::Diff
5
6 diff :species_id, :nickname, :level, :hp, :attack, :defense,
7 :special_attack, :special_defense, :speed, :coolness, :beauty, :cuteness,
8 :smartness, :toughness, :sheen, :item_id, :move_1_id, :move_2_id,
9 :move_3_id, :move_4_id, :move_1_pp_bonuses, :move_2_pp_bonuses,
10 :move_3_pp_bonuses, :move_4_pp_bonuses, :cool_ribbons, :beauty_ribbons,
11 :cute_ribbons, :smart_ribbons, :tough_ribbons, :champion_ribbon,
12 :winning_ribbon, :victory_ribbon, :artist_ribbon, :effort_ribbon,
13 :marine_ribbon, :land_ribbon, :sky_ribbon, :country_ribbon,
14 :national_ribbon, :earth_ribbon, :world_ribbon
15
16 belongs_to :pokemon
17 acts_as_sequenced scope: :pokemon_id
18
19 after_create :cache_pokemon_current
20
21 belongs_to :species
22
23 validates :nickname, presence: true
24
25 validates :experience, presence: true,
26 numericality: { greater_than_or_equal_to: 1, only_integer: true }
27
28 validates :level, presence: true,
29 numericality: { greater_than_or_equal_to: 1, only_integer: true }
30
31 validates :hp, presence: true,
32 numericality: { greater_than_or_equal_to: 1, only_integer: true }
33
34 validates :attack, presence: true,
35 numericality: { greater_than_or_equal_to: 1, only_integer: true }
36
37 validates :defense, presence: true,
38 numericality: { greater_than_or_equal_to: 1, only_integer: true }
39
40 validates :special_attack, presence: true,
41 numericality: { greater_than_or_equal_to: 1, only_integer: true }
42
43 validates :special_defense, presence: true,
44 numericality: { greater_than_or_equal_to: 1, only_integer: true }
45
46 validates :speed, presence: true,
47 numericality: { greater_than_or_equal_to: 1, only_integer: true }
48
49 validates :coolness, presence: true,
50 numericality: {
51 greater_than_or_equal_to: 0,
52 less_than_or_equal_to: 10,
53 only_integer: true }
54
55 validates :beauty, presence: true,
56 numericality: {
57 greater_than_or_equal_to: 0,
58 less_than_or_equal_to: 10,
59 only_integer: true }
60
61 validates :cuteness, presence: true,
62 numericality: {
63 greater_than_or_equal_to: 0,
64 less_than_or_equal_to: 10,
65 only_integer: true }
66
67 validates :smartness, presence: true,
68 numericality: {
69 greater_than_or_equal_to: 0,
70 less_than_or_equal_to: 10,
71 only_integer: true }
72
73 validates :toughness, presence: true,
74 numericality: {
75 greater_than_or_equal_to: 0,
76 less_than_or_equal_to: 10,
77 only_integer: true }
78
79 validates :sheen, presence: true,
80 numericality: {
81 greater_than_or_equal_to: 0,
82 less_than_or_equal_to: 10,
83 only_integer: true }
84
85 belongs_to :item, optional: true
86
87 belongs_to :move_1, class_name: "Move"
88 belongs_to :move_2, class_name: "Move", optional: true
89 belongs_to :move_3, class_name: "Move", optional: true
90 belongs_to :move_4, class_name: "Move", optional: true
91
92 validates :move_1_pp_bonuses, presence: true,
93 numericality: {
94 greater_than_or_equal_to: 0,
95 less_than_or_equal_to: 3,
96 only_integer: true}
97
98 validates :move_2_pp_bonuses, presence: true,
99 numericality: {
100 greater_than_or_equal_to: 0,
101 less_than_or_equal_to: 3,
102 only_integer: true}
103
104 validates :move_3_pp_bonuses, presence: true,
105 numericality: {
106 greater_than_or_equal_to: 0,
107 less_than_or_equal_to: 3,
108 only_integer: true}
109
110 validates :move_4_pp_bonuses, presence: true,
111 numericality: {
112 greater_than_or_equal_to: 0,
113 less_than_or_equal_to: 3,
114 only_integer: true}
115
116 validates :cool_ribbons, presence: true,
117 numericality: {
118 greater_than_or_equal_to: 0,
119 less_than_or_equal_to: 4,
120 only_integer: true}
121
122 validates :beauty_ribbons, presence: true,
123 numericality: {
124 greater_than_or_equal_to: 0,
125 less_than_or_equal_to: 4,
126 only_integer: true}
127
128 validates :cute_ribbons, presence: true,
129 numericality: {
130 greater_than_or_equal_to: 0,
131 less_than_or_equal_to: 4,
132 only_integer: true}
133
134 validates :smart_ribbons, presence: true,
135 numericality: {
136 greater_than_or_equal_to: 0,
137 less_than_or_equal_to: 4,
138 only_integer: true}
139
140 validates :tough_ribbons, presence: true,
141 numericality: {
142 greater_than_or_equal_to: 0,
143 less_than_or_equal_to: 4,
144 only_integer: true}
145
146 def icon_path
147 form = ""
148 if species_id == 201
149 # Handle Unown form
150 form = "-#{pokemon.unown_letter}"
151 elsif species_id == 386
152 # Handle Deoxys forms
153 if pokemon.trainer.firered?
154 form = "-attack"
155 elsif pokemon.trainer.leafgreen?
156 form = "-defense"
157 elsif pokemon.trainer.emerald?
158 form = "-speed"
159 end
160 end
161
162 "icons/#{species_id}#{form}.png"
163 end
164
165 def sprite_path
166 shininess = "normal"
167 if pokemon.shiny
168 shininess = "shiny"
169 end
170
171 game = "ruby-sapphire"
172 unless pokemon.trainer.nil?
173 if (pokemon.trainer.firered? or pokemon.trainer.leafgreen?) and (species_id <= 151 or species_id == 216 or species_id == 386)
174 game = "firered-leafgreen"
175 elsif pokemon.trainer.emerald?
176 game = "emerald"
177 end
178 end
179
180 form = ""
181 if species_id == 201
182 # Handle Unown forms
183 form = "-#{pokemon.unown_letter}"
184 elsif species_id == 386
185 # Handle Deoxys forms
186 if pokemon.trainer.firered?
187 form = "-attack"
188 elsif pokemon.trainer.leafgreen?
189 form = "-defense"
190 elsif pokemon.trainer.emerald?
191 form = "-speed"
192 end
193 end
194
195 if game == "emerald"
196 "sprites/emerald/#{shininess}/#{species_id}#{form}.gif"
197 else
198 "sprites/#{game}/#{shininess}/#{species_id}#{form}.png"
199 end
200 end
201
202 def ability
203 if pokemon.second_ability
204 species.ability_2
205 else
206 species.ability_1
207 end
208 end
209
210 def move_1_pp
211 move_1.pp * (5 + move_1_pp_bonuses) / 5
212 end
213
214 def move_2_pp
215 move_2.pp * (5 + move_2_pp_bonuses) / 5
216 end
217
218 def move_3_pp
219 move_3.pp * (5 + move_3_pp_bonuses) / 5
220 end
221
222 def move_4_pp
223 move_4.pp * (5 + move_4_pp_bonuses) / 5
224 end
225
226 def ribbons
227 result = []
228
229 if cool_ribbons >= 1
230 result << {
231 filename: "cool-ribbon.png",
232 name: "Cool Ribbon",
233 description: "Cool Contest Normal Rank Winner!"
234 }
235 end
236
237 if cool_ribbons >= 2
238 result << {
239 filename: "cool-ribbon-super.png",
240 name: "Cool Ribbon Super",
241 description: "Cool Contest Super Rank Winner!"
242 }
243 end
244
245 if cool_ribbons >= 3
246 result << {
247 filename: "cool-ribbon-hyper.png",
248 name: "Cool Ribbon Hyper",
249 description: "Cool Contest Hyper Rank Winner!"
250 }
251 end
252
253 if cool_ribbons == 4
254 result << {
255 filename: "cool-ribbon-master.png",
256 name: "Cool Ribbon Master",
257 description: "Cool Contest Master Rank Winner!"
258 }
259 end
260
261 if beauty_ribbons >= 1
262 result << {
263 filename: "beauty-ribbon.png",
264 name: "Beauty Ribbon",
265 description: "Beauty Contest Normal Rank Winner!"
266 }
267 end
268
269 if beauty_ribbons >= 2
270 result << {
271 filename: "beauty-ribbon-super.png",
272 name: "Beauty Ribbon Super",
273 description: "Beauty Contest Super Rank Winner!"
274 }
275 end
276
277 if beauty_ribbons >= 3
278 result << {
279 filename: "beauty-ribbon-hyper.png",
280 name: "Beauty Ribbon Hyper",
281 description: "Beauty Contest Hyper Rank Winner!"
282 }
283 end
284
285 if beauty_ribbons == 4
286 result << {
287 filename: "beauty-ribbon-master.png",
288 name: "Beauty Ribbon Master",
289 description: "Beauty Contest Master Rank Winner!"
290 }
291 end
292
293 if cute_ribbons >= 1
294 result << {
295 filename: "cute-ribbon.png",
296 name: "Cute Ribbon",
297 description: "Cute Contest Normal Rank Winner!"
298 }
299 end
300
301 if cute_ribbons >= 2
302 result << {
303 filename: "cute-ribbon-super.png",
304 name: "Cute Ribbon Super",
305 description: "Cute Contest Super Rank Winner!"
306 }
307 end
308
309 if cute_ribbons >= 3
310 result << {
311 filename: "cute-ribbon-hyper.png",
312 name: "Cute Ribbon Hyper",
313 description: "Cute Contest Hyper Rank Winner!"
314 }
315 end
316
317 if cute_ribbons == 4
318 result << {
319 filename: "cute-ribbon-master.png",
320 name: "Cute Ribbon Master",
321 description: "Cute Contest Master Rank Winner!"
322 }
323 end
324
325 if smart_ribbons >= 1
326 result << {
327 filename: "smart-ribbon.png",
328 name: "Smart Ribbon",
329 description: "Smart Contest Normal Rank Winner!"
330 }
331 end
332
333 if smart_ribbons >= 2
334 result << {
335 filename: "smart-ribbon-super.png",
336 name: "Smart Ribbon Super",
337 description: "Smart Contest Super Rank Winner!"
338 }
339 end
340
341 if smart_ribbons >= 3
342 result << {
343 filename: "smart-ribbon-hyper.png",
344 name: "Smart Ribbon Hyper",
345 description: "Smart Contest Hyper Rank Winner!"
346 }
347 end
348
349 if smart_ribbons == 4
350 result << {
351 filename: "smart-ribbon-master.png",
352 name: "Smart Ribbon Master",
353 description: "Smart Contest Master Rank Winner!"
354 }
355 end
356
357 if tough_ribbons >= 1
358 result << {
359 filename: "tough-ribbon.png",
360 name: "Tough Ribbon",
361 description: "Tough Contest Normal Rank Winner!"
362 }
363 end
364
365 if tough_ribbons >= 2
366 result << {
367 filename: "tough-ribbon-super.png",
368 name: "Tough Ribbon Super",
369 description: "Tough Contest Super Rank Winner!"
370 }
371 end
372
373 if tough_ribbons >= 3
374 result << {
375 filename: "tough-ribbon-hyper.png",
376 name: "Tough Ribbon Hyper",
377 description: "Tough Contest Hyper Rank Winner!"
378 }
379 end
380
381 if tough_ribbons == 4
382 result << {
383 filename: "tough-ribbon-master.png",
384 name: "Tough Ribbon Master",
385 description: "Tough Contest Master Rank Winner!"
386 }
387 end
388
389 if champion_ribbon
390 result << {
391 filename: "champion-ribbon.png",
392 name: "Champion Ribbon",
393 description: "Champion-beating, Hall of Fame Member Ribbon"
394 }
395 end
396
397 if winning_ribbon
398 result << {
399 filename: "winning-ribbon.png",
400 name: "Winning Ribbon",
401 description: "Ribbon for clearing LV50 at the Battle Tower."
402 }
403 end
404
405 if victory_ribbon
406 result << {
407 filename: "victory-ribbon.png",
408 name: "Victory Ribbon",
409 description: "Won for clearing LV100 at the Battle Tower."
410 }
411 end
412
413 if artist_ribbon
414 result << {
415 filename: "artist-ribbon.png",
416 name: "Artist Ribbon",
417 description: "Ribbon for being chosen as a super sketch model."
418 }
419 end
420
421 if effort_ribbon
422 result << {
423 filename: "effort-ribbon.png",
424 name: "Effort Ribbon",
425 description: "Ribbon awarded for being a hard worker."
426 }
427 end
428
429 if marine_ribbon
430 result << {
431 filename: "marine-ribbon.png",
432 name: "Marine Ribbon",
433 description: pokemon.gift_ribbon_description(:marine_ribbon)
434 }
435 end
436
437 if land_ribbon
438 result << {
439 filename: "land-ribbon.png",
440 name: "Land Ribbon",
441 description: pokemon.gift_ribbon_description(:land_ribbon)
442 }
443 end
444
445 if sky_ribbon
446 result << {
447 filename: "sky-ribbon.png",
448 name: "Sky Ribbon",
449 description: pokemon.gift_ribbon_description(:sky_ribbon)
450 }
451 end
452
453 if country_ribbon
454 result << {
455 filename: "country-ribbon.png",
456 name: "Country Ribbon",
457 description: pokemon.gift_ribbon_description(:country_ribbon)
458 }
459 end
460
461 if national_ribbon
462 result << {
463 filename: "national-ribbon.png",
464 name: "National Ribbon",
465 description: pokemon.gift_ribbon_description(:national_ribbon)
466 }
467 end
468
469 if earth_ribbon
470 result << {
471 filename: "earth-ribbon.png",
472 name: "Earth Ribbon",
473 description: pokemon.gift_ribbon_description(:earth_ribbon)
474 }
475 end
476
477 if world_ribbon
478 result << {
479 filename: "world-ribbon.png",
480 name: "World Ribbon",
481 description: pokemon.gift_ribbon_description(:world_ribbon)
482 }
483 end
484
485 result
486 end
487
488 private
489
490 def cache_pokemon_current
491 self.pokemon.current_id = self.id
492 self.pokemon.save!
493 end
494end