users.rb 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. class User < ActiveRecord::Base
  2. validates :id, presence: true
  3. def allowed_chars(member)
  4. # Determine if the member is a Nitro Booster
  5. booster = Util::Roles.booster?(member) ? 2 : 1
  6. level / 10 + booster
  7. end
  8. def make_stats
  9. stats = {}
  10. stats['hp_base'] = rand(1..184)
  11. stats['s_base'] = 185 - stats['hp_base']
  12. stats['a_base'] = rand(1..184)
  13. stats['sa_base'] = 185 - stats['a_base']
  14. stats['d_base'] = rand(1..184)
  15. stats['sd_base'] = 185 - stats['d_base']
  16. self.update(stats)
  17. self.update(
  18. hp_iv: rand(0..31),
  19. a_iv: rand(0..31),
  20. d_iv: rand(0..31),
  21. sa_iv: rand(0..31),
  22. sd_iv: rand(0..31),
  23. s_iv: rand(0..31),
  24. nature: rand(1..25)
  25. )
  26. self.reload
  27. n = Nature.find(nature)
  28. stats = stat_calc(n.up_stat, n.down_stat)
  29. self.update(stats)
  30. self.reload
  31. self
  32. end
  33. def update_xp(msg_length, member=nil)
  34. old_xp =
  35. case msg_length
  36. when 40..149 then 1
  37. when 150..299 then 2
  38. when 300..599 then 3
  39. when 600..999 then 4
  40. else 5
  41. end
  42. multiplier =
  43. case msg_length
  44. when 50..299 then 1
  45. when 300..649 then 1.5
  46. when 650..999 then 1
  47. else 0.5
  48. end
  49. xp = (msg_length/50 * multiplier).to_i
  50. self.update(
  51. boosted_xp: boosted_xp + xp,
  52. unboosted_xp: unboosted_xp + xp,
  53. additional_xp: additional_xp + (xp - old_xp),
  54. post_length: post_length + msg_length,
  55. post_count: post_count + 1
  56. )
  57. self.reload
  58. reply = level_up(member) if next_level && boosted_xp > next_level
  59. reply
  60. end
  61. def level_up(member=nil)
  62. if level < 100
  63. next_level = (level + 6) ** 3 / 10.0
  64. self.update(level: level + 1, next_level: next_level.round)
  65. self.reload
  66. else
  67. self.update(level: level + 1, next_level: nil)
  68. self.reload
  69. end
  70. n = Nature.find(nature)
  71. stats = stat_calc(n.up_stat, n.down_stat)
  72. img = UsersController.stat_image(self, member, stats) if member
  73. self.update(stats)
  74. self.reload
  75. img
  76. end
  77. def stat_calc(up_stat, down_stat)
  78. stats = {}
  79. stats['hp'] =
  80. ((2 * hp_base + hp_iv + (hp_ev / 4)) * level) / 100 + level + 10
  81. stats['attack'] =
  82. (((2 * a_base + a_iv + (a_ev / 4)) * level) / 100) + 5
  83. stats['defense'] =
  84. (((2 * d_base + d_iv + (d_ev / 4)) * level) / 100) + 5
  85. stats['sp_attack'] =
  86. (((2 * sa_base + sa_iv + (sa_ev / 4)) * level) / 100) + 5
  87. stats['sp_defense'] =
  88. (((2 * sd_base + sd_iv + (sd_ev / 4)) * level) / 100) + 5
  89. stats['speed'] =
  90. (((2 * s_base + s_iv + (s_ev / 4)) * level) / 100) + 5
  91. case up_stat
  92. when /attack/ then stats['attack'] = (stats['attack'] * 1.1).round
  93. when /defense/ then stats['defense'] = (stats['defense'] * 1.1).round
  94. when /sp_attack/ then stats['sp_attack'] = (stats['sp_attack'] * 1.1).round
  95. when /sp_defense/ then stats['sp_defense'] = (stats['sp_defense'] * 1.1).round
  96. when /speed/ then stats['speed'] = (stats['speed'] * 1.1).round
  97. end
  98. case down_stat
  99. when /attack/ then stats['attack'] = (stats['attack'] * 0.9).round
  100. when /defense/ then stats['defense'] = (stats['defense'] * 0.9).round
  101. when /sp_attack/ then stats['sp_attack'] = (stats['sp_attack'] * 0.9).round
  102. when /sp_defense/ then stats['sp_defense'] = (stats['sp_defense'] * 0.9).round
  103. when /speed/ then stats['speed'] = (stats['speed'] * 0.9).round
  104. end
  105. stats
  106. end
  107. end