mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 13:15:01 +00:00
228 lines
6.4 KiB
Ruby
228 lines
6.4 KiB
Ruby
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class LevelAdjustment
|
|
BothTeams = 0
|
|
EnemyTeam = 1
|
|
MyTeam = 2
|
|
BothTeamsDifferent = 3
|
|
|
|
def initialize(adjustment)
|
|
@adjustment = adjustment
|
|
end
|
|
|
|
def type
|
|
@adjustment
|
|
end
|
|
|
|
def self.getNullAdjustment(thisTeam, _otherTeam)
|
|
ret = []
|
|
thisTeam.each_with_index { |pkmn, i| ret[i] = pkmn.level }
|
|
return ret
|
|
end
|
|
|
|
def getAdjustment(thisTeam, otherTeam)
|
|
return self.getNullAdjustment(thisTeam, otherTeam)
|
|
end
|
|
|
|
def getOldExp(team1, _team2)
|
|
ret = []
|
|
team1.each_with_index { |pkmn, i| ret[i] = pkmn.exp }
|
|
return ret
|
|
end
|
|
|
|
def unadjustLevels(team1, team2, adjustments)
|
|
team1.each_with_index do |pkmn, i|
|
|
next if !adjustments[0][i] || pkmn.exp == adjustments[0][i]
|
|
pkmn.exp = adjustments[0][i]
|
|
pkmn.calc_stats
|
|
end
|
|
team2.each_with_index do |pkmn, i|
|
|
next if !adjustments[1][i] || pkmn.exp == adjustments[1][i]
|
|
pkmn.exp = adjustments[1][i]
|
|
pkmn.calc_stats
|
|
end
|
|
end
|
|
|
|
def adjustLevels(team1, team2)
|
|
adj1 = nil
|
|
adj2 = nil
|
|
ret = [getOldExp(team1, team2), getOldExp(team2, team1)]
|
|
if @adjustment == BothTeams || @adjustment == MyTeam
|
|
adj1 = getAdjustment(team1, team2)
|
|
elsif @adjustment == BothTeamsDifferent
|
|
adj1 = getMyAdjustment(team1, team2)
|
|
end
|
|
if @adjustment == BothTeams || @adjustment == EnemyTeam
|
|
adj2 = getAdjustment(team2, team1)
|
|
elsif @adjustment == BothTeamsDifferent
|
|
adj2 = getTheirAdjustment(team2, team1)
|
|
end
|
|
if adj1
|
|
team1.each_with_index do |pkmn, i|
|
|
next if pkmn.level == adj1[i]
|
|
pkmn.level = adj1[i]
|
|
pkmn.calc_stats
|
|
end
|
|
end
|
|
if adj2
|
|
team2.each_with_index do |pkmn, i|
|
|
next if pkmn.level == adj2[i]
|
|
pkmn.level = adj2[i]
|
|
pkmn.calc_stats
|
|
end
|
|
end
|
|
return ret
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class FixedLevelAdjustment < LevelAdjustment
|
|
def initialize(level)
|
|
super(LevelAdjustment::BothTeams)
|
|
@level = level.clamp(1, GameData::GrowthRate.max_level)
|
|
end
|
|
|
|
def getAdjustment(thisTeam, _otherTeam)
|
|
ret = []
|
|
thisTeam.each_with_index { |pkmn, i| ret[i] = @level }
|
|
return ret
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class TotalLevelAdjustment < LevelAdjustment
|
|
def initialize(minLevel, maxLevel, totalLevel)
|
|
super(LevelAdjustment::EnemyTeam)
|
|
@minLevel = minLevel.clamp(1, GameData::GrowthRate.max_level)
|
|
@maxLevel = maxLevel.clamp(1, GameData::GrowthRate.max_level)
|
|
@totalLevel=totalLevel
|
|
end
|
|
|
|
def getAdjustment(thisTeam, _otherTeam)
|
|
ret = []
|
|
total = 0
|
|
thisTeam.each_with_index do |pkmn, i|
|
|
ret[i] = @minLevel
|
|
total += @minLevel
|
|
end
|
|
loop do
|
|
work = false
|
|
thisTeam.each_with_index do |pkmn, i|
|
|
next if ret[i] >= @maxLevel || total >= @totalLevel
|
|
ret[i] += 1
|
|
total += 1
|
|
work = true
|
|
end
|
|
break if !work
|
|
end
|
|
return ret
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class CombinedLevelAdjustment < LevelAdjustment
|
|
def initialize(my, their)
|
|
super(LevelAdjustment::BothTeamsDifferent)
|
|
@my = my
|
|
@their = their
|
|
end
|
|
|
|
def getMyAdjustment(myTeam,theirTeam)
|
|
return @my.getAdjustment(myTeam, theirTeam) if @my
|
|
return LevelAdjustment.getNullAdjustment(myTeam, theirTeam)
|
|
end
|
|
|
|
def getTheirAdjustment(theirTeam,myTeam)
|
|
return @their.getAdjustment(theirTeam, myTeam) if @their
|
|
return LevelAdjustment.getNullAdjustment(theirTeam, myTeam)
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class SinglePlayerCappedLevelAdjustment < CombinedLevelAdjustment
|
|
def initialize(level)
|
|
super(CappedLevelAdjustment.new(level), FixedLevelAdjustment.new(level))
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class CappedLevelAdjustment < LevelAdjustment
|
|
def initialize(level)
|
|
super(LevelAdjustment::BothTeams)
|
|
@level = level.clamp(1, GameData::GrowthRate.max_level)
|
|
end
|
|
|
|
def getAdjustment(thisTeam, _otherTeam)
|
|
ret = []
|
|
thisTeam.each_with_index { |pkmn, i| ret[i] = [pkmn.level, @level].min }
|
|
return ret
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
# Unused
|
|
#===============================================================================
|
|
class LevelBalanceAdjustment < LevelAdjustment
|
|
def initialize(minLevel)
|
|
super(LevelAdjustment::BothTeams)
|
|
@minLevel = minLevel
|
|
end
|
|
|
|
def getAdjustment(thisTeam, _otherTeam)
|
|
ret = []
|
|
thisTeam.each_with_index do |pkmn, i|
|
|
ret[i] = (113 - (pbBaseStatTotal(pkmn.species) * 0.072)).round
|
|
end
|
|
return ret
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class EnemyLevelAdjustment < LevelAdjustment
|
|
def initialize(level)
|
|
super(LevelAdjustment::EnemyTeam)
|
|
@level = level.clamp(1, GameData::GrowthRate.max_level)
|
|
end
|
|
|
|
def getAdjustment(thisTeam, _otherTeam)
|
|
ret = []
|
|
thisTeam.each_with_index { |pkmn, i| ret[i] = @level }
|
|
return ret
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class OpenLevelAdjustment < LevelAdjustment
|
|
def initialize(minLevel = 1)
|
|
super(LevelAdjustment::EnemyTeam)
|
|
@minLevel = minLevel
|
|
end
|
|
|
|
def getAdjustment(thisTeam, otherTeam)
|
|
maxLevel = 1
|
|
otherTeam.each do |pkmn|
|
|
level = pkmn.level
|
|
maxLevel = level if maxLevel < level
|
|
end
|
|
maxLevel = @minLevel if maxLevel < @minLevel
|
|
ret = []
|
|
thisTeam.each_with_index { |pkmn, i| ret[i] = maxLevel }
|
|
return ret
|
|
end
|
|
end
|