• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

[Error] Two errors I just got

3
Posts
6
Years
Hi,
I was recently working on my fangame in Essentials and got these two errors when testing a trainer battle:

[Pokémon Essentials version 17]
Exception: NoMethodError
Message: undefined method `fainted?' for #<PokeBattle_Battler:0x7bce430>
PokeBattle_Battle:3341:in `__clauses__pbEndOfRoundPhase'
PokeBattle_Battle:3288:in `each'
PokeBattle_Battle:3288:in `__clauses__pbEndOfRoundPhase'
PokeBattle_Clauses:42:in `pbEndOfRoundPhase'
PokeBattle_Battle:2536:in `pbStartBattleCore'
PokeBattle_Battle:2535:in `logonerr'
PokeBattle_Battle:2535:in `pbStartBattleCore'
PokeBattle_Battle:2517:in `loop'
PokeBattle_Battle:2540:in `pbStartBattleCore'
PokeBattle_Battle:2340:in `pbStartBattle'


[Pokémon Essentials version 17]
Exception: FloatDomainError
Message: Infinity
PokeBattle_AI:2842:in `round'
PokeBattle_AI:2842:in `pbGetMoveScore'
PokeBattle_AI:3895:in `pbChooseMoves'
PokeBattle_AI:3893:in `each'
PokeBattle_AI:3893:in `pbChooseMoves'
PokeBattle_AI:4329:in `pbDefaultChooseEnemyCommand'
PokeBattle_Scene:2786:in `pbChooseEnemyCommand'
PokeBattle_Battle:2586:in `pbCommandPhase'
PokeBattle_Battle:2581:in `each'
PokeBattle_Battle:2581:in `pbCommandPhase'

The first appears whenever a Pokemon faints (sometimes even when no pokemon fainted yet) and keeps repeating itself. I noticed, that after I make my opponent faint, he isn't replaced with another one and I just keep fighting air while the error keeps popping up every turn. The second error shows up after the opponent defeats my pokemon.

My scripts:

First Error

PokeBattle_Battle
2333-2354 :

################################################################################
# Battle core.
################################################################################
def pbStartBattle(canlose=false)
PBDebug.log("")
PBDebug.log("******************************************")
begin
pbStartBattleCore(canlose)
rescue BattleAbortedException
@decision=0
@scene.pbEndBattle(@decision)
end
return @decision
end

def pbStartBattleCore(canlose)
if !@fullparty1 && @party1.length>MAXPARTYSIZE
raise ArgumentError.new(_INTL("Party 1 has more than {1} Pokémon.",MAXPARTYSIZE))
end
if !@fullparty2 && @party2.length>MAXPARTYSIZE
raise ArgumentError.new(_INTL("Party 2 has more than {1} Pokémon.",MAXPARTYSIZE))
end

2515-2542:

pbOnActiveAll # Abilities
@turncount=0
loop do # Now begin the battle loop
PBDebug.log("")
PBDebug.log("***Round #{@turncount+1}***")
if @debug && @turncount>=100
@decision=pbDecisionOnTime()
PBDebug.log("")
PBDebug.log("***Undecided after 100 rounds, aborting***")
pbAbort
break
end
PBDebug.logonerr{
pbCommandPhase
}
break if @decision>0
PBDebug.logonerr{
pbAttackPhase
}
break if @decision>0
PBDebug.logonerr{
pbEndOfRoundPhase
}
break if @decision>0
@turncount+=1
end
return pbEndOfBattle(canlose)
end

3260-3345:


# Leech Seed
for i in priority
next if i.isFainted?
if i.effects[PBEffects::LeechSeed]>=0 && !i.hasWorkingAbility(:MAGICGUARD)
recipient=@battlers[i.effects[PBEffects::LeechSeed]]
if recipient && !recipient.isFainted?
PBDebug.log("[Lingering effect triggered] #{i.pbThis}'s Leech Seed")
pbCommonAnimation("LeechSeed",recipient,i)
hploss=i.pbReduceHP((i.totalhp/8).floor,true)
if i.hasWorkingAbility(:LIQUIDOOZE)
recipient.pbReduceHP(hploss,true)
pbDisplay(_INTL("{1} sucked up the liquid ooze!",recipient.pbThis))
else
if recipient.effects[PBEffects::HealBlock]==0
hploss=(hploss*1.3).floor if recipient.hasWorkingItem(:BIGROOT)
recipient.pbRecoverHP(hploss,true)
end
pbDisplay(_INTL("{1}'s health was sapped by Leech Seed!",i.pbThis))
end
if i.isFainted?
return if !i.pbFaint
end
if recipient.isFainted?
return if !recipient.pbFaint
end
end
end
end
for i in priority
next if i.isFainted?
# Poison/Bad poison
if i.status==PBStatuses::POISON
if i.statusCount>0
i.effects[PBEffects::Toxic]+=1
i.effects[PBEffects::Toxic]=[15,i.effects[PBEffects::Toxic]].min
end
if i.hasWorkingAbility(:POISONHEAL)
pbCommonAnimation("Poison",i,nil)
if i.effects[PBEffects::HealBlock]==0 && i.hp<i.totalhp
PBDebug.log("[Ability triggered] #{i.pbThis}'s Poison Heal")
i.pbRecoverHP((i.totalhp/8).floor,true)
pbDisplay(_INTL("{1} is healed by poison!",i.pbThis))
end
else
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Status damage] #{i.pbThis} took damage from poison/toxic")
if i.statusCount==0
i.pbReduceHP((i.totalhp/8).floor)
else
i.pbReduceHP(((i.totalhp*i.effects[PBEffects::Toxic])/16).floor)
end
i.pbContinueStatus
end
end
end
# Burn
if i.status==PBStatuses::BURN
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Status damage] #{i.pbThis} took damage from burn")
if i.hasWorkingAbility(:HEATPROOF)
PBDebug.log("[Ability triggered] #{i.pbThis}'s Heatproof")
i.pbReduceHP((i.totalhp/16).floor)
else
i.pbReduceHP((i.totalhp/8).floor)
end
end
i.pbContinueStatus
end
# Nightmare
if i.effects[PBEffects::Nightmare]
if i.status==PBStatuses::SLEEP || (i.hasWorkingAbility(:COMATOSE) &&
isConst?(i.species,PBSpecies,:KOMALA))
if !i.hasWorkingAbility(:MAGICGUARD)
PBDebug.log("[Lingering effect triggered] #{i.pbThis}'s nightmare")
i.pbReduceHP((i.totalhp/4).floor,true)
pbDisplay(_INTL("{1} is locked in a nightmare!",i.pbThis))
end
else
i.effects[PBEffects::Nightmare]=false
end
end
if i.fainted?
return if !i.pbFaint
next
end
end

PokeBattle_Clauses
41-51:

def pbEndOfRoundPhase()
__clauses__pbEndOfRoundPhase()
if @rules["suddendeath"] && @decision==0
if pbPokemonCount(@party1)>pbPokemonCount(@party2)
@decision=1 # loss
elsif pbPokemonCount(@party1)<pbPokemonCount(@party2)
@decision=2 # win
end
end
end
end



Second error:

PokeBattle_AI
2839-2861:

# Prefer damaging attack if level difference is significantly high
basedamage*=1.2 if attacker.level-10>opponent.level
# Adjust score
basedamage=basedamage.round
basedamage=120 if basedamage>120 # Treat all OHKO moves the same
basedamage+=40 if basedamage>100 # Prefer moves likely to OHKO
score=score.round
oldscore=score
score+=basedamage
PBDebug.log("[AI] #{PBMoves.getName(move.id)} damage calculated (#{realDamage}=>#{basedamage}% of target's #{opponent.hp} HP), score change #{oldscore}=>#{score}")
end
else
# Don't prefer attacks which don't deal damage
score-=10
# Account for accuracy of move
accuracy=pbRoughAccuracy(move,attacker,opponent,skill)
score*=accuracy/100.0
score=0 if score<=10 && skill>=PBTrainerAI.highSkill
end
score=score.to_i
score=0 if score<0
return score
end

3889-3906:

# Choose a move. There is only 1 opposing Pokémon.
if @doublebattle && opponent.isFainted?
opponent=opponent.pbPartner
end
for i in 0...4
if pbCanChooseMove?(index,i,false)
scores=pbGetMoveScore(attacker.moves,attacker,opponent,skill)
myChoices.push(i)
end
scores=0 if scores<0
totalscore+=scores
end
end
end
maxscore=0
for i in 0...4
maxscore=scores if scores && scores>maxscore
end

4315-4331:

################################################################################
# Choose an action.
################################################################################
def pbDefaultChooseEnemyCommand(index)
if !pbCanShowFightMenu?(index)
return if pbEnemyShouldUseItem?(index)
return if pbEnemyShouldWithdraw?(index)
pbAutoChooseMove(index)
return
else
return if pbEnemyShouldUseItem?(index)
return if pbEnemyShouldWithdraw?(index)
return if pbAutoFightMenu(index)
pbRegisterMegaEvolution(index) if pbEnemyShouldMegaEvolve?(index)
pbChooseMoves(index)
end
end

PokeBattle_Scene:
2784-2787:

# Use this method to choose a command for the enemy.
def pbChooseEnemyCommand(index)
@battle.pbDefaultChooseEnemyCommand(index)
end

PokeBattle_Battle
2575-2593:

# Reset choices to perform Mega Evolution if it wasn't done somehow
for i in 0...2
for j in 0...@megaEvolution.length
@megaEvolution[j]=-1 if @megaEvolution[j]>=0
end
end
for i in 0...4
break if @decision!=0
next if @choices[0]!=0
if !pbOwnedByPlayer?(i) || @controlPlayer
if !@battlers.isFainted? && pbCanShowCommands?(i)
@scene.pbChooseEnemyCommand(i)
end
else
commandDone=false
commandEnd=false
if pbCanShowCommands?(i)
loop do
cmd=pbCommandMenu(i)
 

Attachments

  • Scripts.zip
    762.7 KB · Views: 0
Last edited:
3
Posts
6
Years
I suspect it may have something to do with the Gen 7 Abilities I added. I'm not sure what to do and I need your opinions. I'm pretty new to Essentials and would gladly use your advice.
 
Last edited:
3
Posts
6
Years
So... I removed my Scripts.rxdata and replaced it with the original, unmodified one. Now everything works perfectly. I'll re-add most abilities, but this time I'll be more careful and I'll test the game whenever I add anything. Thankfully, I didn't add much, so it won't take long.
 

HM100

HM100 the Techno
113
Posts
7
Years
  • Age 23
  • Seen Mar 24, 2024
Yes. Be careful when adding new things or else you'll end up in the same error again. It happens to me sometimes but fortunately I can fix them
 
Back
Top