- 428
- Posts
- 5
- Years
- Zekko
- Seen Nov 21, 2023
[Pokémon Essentials version 20.1]
Script error in event 5 (coords 26,8), map 3 (Red's house)
Exception: TypeError
Message: nil can't be coerced into Integer
***Full script:
TrainerBattle.start(:YOUNGSTER, "Ben")
Backtrace:
191:Battle_Scene_Menus:489:in `-'
191:Battle_Scene_Menus:489:in `block in initialize'
191:Battle_Scene_Menus:477:in `initialize'
191:Battle_Scene_Menus:477:in `new'
191:Battle_Scene_Menus:477:in `initialize'
188:Scene_Initialize:48:in `new'
188:Scene_Initialize:48:in `pbInitSprites'
221:BugContestBattle:8:in `pbInitSprites'
188:Scene_Initialize:21:in `pbStartBattle'
148:Battle_StartAndEnd:282:in `pbStartBattleCore'
Why is this happening?
Everything
def setBattleMode(mode)
@sideSizes =
case mode
when "triple", "3v3" then [3, 3]
when "3v6" then [3, 6]
when "3v1" then [3, 1]
when "2v3" then [2, 3]
when "double", "2v2" then [2, 2]
when "2v1" then [2, 1]
when "1v3" then [1, 3]
when "1v2" then [1, 2]
else [1, 1] # Single, 1v1 (default)
end
end
seems fine
def pbGetOpposingIndicesInOrder(idxBattler)
case pbSideSize(0)
when 1
case pbSideSize(1)
when 1 # 1v1 single
return [0] if opposes?(idxBattler)
return [1]
when 2 # 1v2
return [0] if opposes?(idxBattler)
return [3, 1]
when 3 # 1v3
return [0] if opposes?(idxBattler)
return [3, 5, 1]
end
when 2
case pbSideSize(1)
when 1 # 2v1
return [0, 2] if opposes?(idxBattler)
return [1]
when 2 # 2v2 double
return [[3, 1], [2, 0], [1, 3], [0, 2]][idxBattler]
when 3 # 2v3
return [[5, 3, 1], [2, 0], [3, 1, 5]][idxBattler] if idxBattler < 3
return [0, 2]
end
when 3
case pbSideSize(1)
when 1 # 3v1
return [2, 0, 4] if opposes?(idxBattler)
return [1]
when 2 # 3v6
return [[8, 6, 4, 2, 0], [7, 5, 3, 1], [6, 4, 2, 0], [5, 3, 1], [4, 2, 0], [3, 1]][idxBattler]
when 3 # 3v3 triple
return [[5, 3, 1], [4, 2, 0], [3, 5, 1], [2, 0, 4], [1, 3, 5], [0, 2, 4]][idxBattler]
end
end
return [idxBattler]
end
to me.
def opposes?(idxBattler1, idxBattler2 = 0)
idxBattler1 = idxBattler1.index if idxBattler1.respond_to?("index")
idxBattler2 = idxBattler2.index if idxBattler2.respond_to?("index")
return (idxBattler1 & 1) != (idxBattler2 & 1)
end
def nearBattlers?(idxBattler1, idxBattler2)
return false if idxBattler1 == idxBattler2
return true if pbSideSize(0) <= 2 && pbSideSize(1) <= 2
# Get all pairs of battler positions that are not close to each other
pairsArray = [[0, 4], [1, 5]] # Covers 3v1 and 1v3
case pbSideSize(0)
when 3
case pbSideSize(1)
when 3 # 3v3 (triple)
pairsArray.push([0, 1])
pairsArray.push([4, 5])
when 2 # 3v2
pairsArray.push([0, 1])
pairsArray.push([3, 4])
end
when 2 # 2v3
pairsArray.push([0, 1])
pairsArray.push([2, 5])
when 6 # 3v6
pairsArray.push([0, 1], [0, 4], [0, 2], [1, 5], [1, 3], [2, 3], [4, 5])
end
# See if any pair matches the two battlers being assessed
pairsArray.each do |pair|
return false if pair.include?(idxBattler1) && pair.include?(idxBattler2)
end
return true
end
def add_battle_rule(rule, var = nil)
rules = self.battle_rules
case rule.to_s.downcase
when "single", "1v1", "1v2", "2v1", "1v3", "3v1",
"double", "2v2", "2v3", "3v6", "triple", "3v3"
rules["size"] = rule.to_s.downcase
when "canlose" then rules["canLose"] = true
when "cannotlose" then rules["canLose"] = false
when "canrun" then rules["canRun"] = true
when "cannotrun" then rules["canRun"] = false
when "roamerflees" then rules["roamerFlees"] = true
when "noexp" then rules["expGain"] = false
when "nomoney" then rules["moneyGain"] = false
when "disablepokeballs" then rules["disablePokeBalls"] = true
when "forcecatchintoparty" then rules["forceCatchIntoParty"] = true
when "switchstyle" then rules["switchStyle"] = true
when "setstyle" then rules["switchStyle"] = false
when "anims" then rules["battleAnims"] = true
when "noanims" then rules["battleAnims"] = false
when "terrain"
rules["defaultTerrain"] = GameData::BattleTerrain.try_get(var)&.id
when "weather"
rules["defaultWeather"] = GameData::BattleWeather.try_get(var)&.id
when "environment", "environ"
rules["environment"] = GameData::Environment.try_get(var)&.id
when "backdrop", "battleback" then rules["backdrop"] = var
when "base" then rules["base"] = var
when "outcome", "outcomevar" then rules["outcomeVar"] = var
when "nopartner" then rules["noPartner"] = true
else
raise _INTL("Battle rule "{1}" does not exist.", rule)
end
end
end
Script error in event 5 (coords 26,8), map 3 (Red's house)
Exception: TypeError
Message: nil can't be coerced into Integer
***Full script:
TrainerBattle.start(:YOUNGSTER, "Ben")
Backtrace:
191:Battle_Scene_Menus:489:in `-'
191:Battle_Scene_Menus:489:in `block in initialize'
191:Battle_Scene_Menus:477:in `initialize'
191:Battle_Scene_Menus:477:in `new'
191:Battle_Scene_Menus:477:in `initialize'
188:Scene_Initialize:48:in `new'
188:Scene_Initialize:48:in `pbInitSprites'
221:BugContestBattle:8:in `pbInitSprites'
188:Scene_Initialize:21:in `pbStartBattle'
148:Battle_StartAndEnd:282:in `pbStartBattleCore'
Why is this happening?
Everything
def setBattleMode(mode)
@sideSizes =
case mode
when "triple", "3v3" then [3, 3]
when "3v6" then [3, 6]
when "3v1" then [3, 1]
when "2v3" then [2, 3]
when "double", "2v2" then [2, 2]
when "2v1" then [2, 1]
when "1v3" then [1, 3]
when "1v2" then [1, 2]
else [1, 1] # Single, 1v1 (default)
end
end
seems fine
def pbGetOpposingIndicesInOrder(idxBattler)
case pbSideSize(0)
when 1
case pbSideSize(1)
when 1 # 1v1 single
return [0] if opposes?(idxBattler)
return [1]
when 2 # 1v2
return [0] if opposes?(idxBattler)
return [3, 1]
when 3 # 1v3
return [0] if opposes?(idxBattler)
return [3, 5, 1]
end
when 2
case pbSideSize(1)
when 1 # 2v1
return [0, 2] if opposes?(idxBattler)
return [1]
when 2 # 2v2 double
return [[3, 1], [2, 0], [1, 3], [0, 2]][idxBattler]
when 3 # 2v3
return [[5, 3, 1], [2, 0], [3, 1, 5]][idxBattler] if idxBattler < 3
return [0, 2]
end
when 3
case pbSideSize(1)
when 1 # 3v1
return [2, 0, 4] if opposes?(idxBattler)
return [1]
when 2 # 3v6
return [[8, 6, 4, 2, 0], [7, 5, 3, 1], [6, 4, 2, 0], [5, 3, 1], [4, 2, 0], [3, 1]][idxBattler]
when 3 # 3v3 triple
return [[5, 3, 1], [4, 2, 0], [3, 5, 1], [2, 0, 4], [1, 3, 5], [0, 2, 4]][idxBattler]
end
end
return [idxBattler]
end
to me.
def opposes?(idxBattler1, idxBattler2 = 0)
idxBattler1 = idxBattler1.index if idxBattler1.respond_to?("index")
idxBattler2 = idxBattler2.index if idxBattler2.respond_to?("index")
return (idxBattler1 & 1) != (idxBattler2 & 1)
end
def nearBattlers?(idxBattler1, idxBattler2)
return false if idxBattler1 == idxBattler2
return true if pbSideSize(0) <= 2 && pbSideSize(1) <= 2
# Get all pairs of battler positions that are not close to each other
pairsArray = [[0, 4], [1, 5]] # Covers 3v1 and 1v3
case pbSideSize(0)
when 3
case pbSideSize(1)
when 3 # 3v3 (triple)
pairsArray.push([0, 1])
pairsArray.push([4, 5])
when 2 # 3v2
pairsArray.push([0, 1])
pairsArray.push([3, 4])
end
when 2 # 2v3
pairsArray.push([0, 1])
pairsArray.push([2, 5])
when 6 # 3v6
pairsArray.push([0, 1], [0, 4], [0, 2], [1, 5], [1, 3], [2, 3], [4, 5])
end
# See if any pair matches the two battlers being assessed
pairsArray.each do |pair|
return false if pair.include?(idxBattler1) && pair.include?(idxBattler2)
end
return true
end
def add_battle_rule(rule, var = nil)
rules = self.battle_rules
case rule.to_s.downcase
when "single", "1v1", "1v2", "2v1", "1v3", "3v1",
"double", "2v2", "2v3", "3v6", "triple", "3v3"
rules["size"] = rule.to_s.downcase
when "canlose" then rules["canLose"] = true
when "cannotlose" then rules["canLose"] = false
when "canrun" then rules["canRun"] = true
when "cannotrun" then rules["canRun"] = false
when "roamerflees" then rules["roamerFlees"] = true
when "noexp" then rules["expGain"] = false
when "nomoney" then rules["moneyGain"] = false
when "disablepokeballs" then rules["disablePokeBalls"] = true
when "forcecatchintoparty" then rules["forceCatchIntoParty"] = true
when "switchstyle" then rules["switchStyle"] = true
when "setstyle" then rules["switchStyle"] = false
when "anims" then rules["battleAnims"] = true
when "noanims" then rules["battleAnims"] = false
when "terrain"
rules["defaultTerrain"] = GameData::BattleTerrain.try_get(var)&.id
when "weather"
rules["defaultWeather"] = GameData::BattleWeather.try_get(var)&.id
when "environment", "environ"
rules["environment"] = GameData::Environment.try_get(var)&.id
when "backdrop", "battleback" then rules["backdrop"] = var
when "base" then rules["base"] = var
when "outcome", "outcomevar" then rules["outcomeVar"] = var
when "nopartner" then rules["noPartner"] = true
else
raise _INTL("Battle rule "{1}" does not exist.", rule)
end
end
end