Registrarse

[Duda] Script de Pokédex avanzada

Estado
Cerrado para nuevas respuestas.

crissblack

Entrenando duro
tengo este escript de pokedex avanzada (lo consegui de la pagina del essentials ) y tengo el essentials 15
#===============================================================================
# * Advanced Pokédex - by FL (Credits will be apreciated)
#===============================================================================
#
# This script is for Pokémon Essentials. When a switch is ON, it displays at
# pokédex the pokémon PBS data for a caught pokémon like: base exp, egg steps
# to hatch, abilities, wild hold item, evolution, the moves that pokémon can
# learn by level/breeding/machines/tutors, among others.
#
#===============================================================================
#
# To this script works, put it above main, put a 512x384 background for this
# screen in "Graphics/Pictures/advancedPokedex" location and three 512x384 for
# the top pokédex selection bar at "Graphics/Pictures/advancedPokedexEntryBar",
# "Graphics/Pictures/advancedPokedexNestBar" and
# "Graphics/Pictures/advancedPokedexFormBar".
#
# -In PokemonPokedex script section, after line (use Ctrl+F to find it)
# @Sprites["searchlist"].visible=false' add:
#
# @Sprites["dexbar"]=IconSprite.new(0,0,@viewport)
# @Sprites["dexbar"].setBitmap(_INTL("Graphics/Pictures/advancedPokedexEntryBar"))
# @Sprites["dexbar"].visible=false
#
# -After line @Sprites["dexentry"].visible=true' add:
#
# if @Sprites["dexbar"] && $game_switches[AdvancedPokedexScene::SWITCH]
# @Sprites["dexbar"].visible=true
# end
#
# -Change line 'newpage=page+1 if page<3' to
# 'newpage=page+1 if page<($game_switches[AdvancedPokedexScene::SWITCH] ? 4 : 3)'.
# -After line 'ret=screen.pbStartScreen(@dexlist[curindex][0],listlimits)' add:
#
# when 4 # Advanced Data
# scene=AdvancedPokedexScene.new
# screen=AdvancedPokedex.new(scene)
# ret=screen.pbStartScreen(@dexlist[curindex][0],listlimits)
#
# -In PokemonNestAndForm script section, before line
# @Sprites["map"]=IconSprite.new(0,0,@viewport)' add:
#
# if $game_switches[AdvancedPokedexScene::SWITCH]
# @Sprites["dexbar"]=IconSprite.new(0,0,@viewport)
# @Sprites["dexbar"].setBitmap(_INTL("Graphics/Pictures/advancedPokedexNestBar"))
# end
#
# -Before line
# @Sprites["info"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)'
# add:
#
# if $game_switches[AdvancedPokedexScene::SWITCH]
# @Sprites["dexbar"]=IconSprite.new(0,0,@viewport)
# @Sprites["dexbar"].setBitmap(_INTL("Graphics/Pictures/advancedPokedexFormBar"))
# end
#
# -After line 'pbChooseForm' add:
#
# elsif Input.trigger?(Input::RIGHT)
# if $game_switches[AdvancedPokedexScene::SWITCH]
# ret=6
# break
# end
#
#===============================================================================

class AdvancedPokedexScene
# Switch number that toggle this script ON/OFF
SWITCH=70

# When true always shows the egg moves of the first evolution stage
EGGMOVESFISTSTAGE = true

# When false shows different messages for each of custom evolutions,
# change the messages to ones that fills to your method
HIDECUSTOMEVOLUTION = true

# When true displays TMs/HMs/Tutors moves
SHOWMACHINETUTORMOVES = true

# When true picks the number for TMs and the first digit after a H for
# HMs (like H8) when showing machine moves.
FORMATMACHINEMOVES = true

# When false doesn't displays moves in tm.txt PBS that aren't in
# any TM/HM item
SHOWTUTORMOVES = true

# The division between tutor and machine (TM/HMs) moves is made by
# the TM data in items.txt PBS

def pbStartScene(species)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@species=species
@Sprites={}
@Sprites["background"]=IconSprite.new(0,0,@viewport)
@Sprites["background"].setBitmap(_INTL("Graphics/Pictures/advancedPokedex"))
@Sprites["overlay"]=BitmapSprite.new(
Graphics.width,Graphics.height,@viewport)
pbSetSystemFont @Sprites["overlay"].bitmap)
@Sprites["overlay"].x=0
@Sprites["overlay"].y=0
@Sprites["info"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
@Sprites["icon"]=PokemonSpeciesIconSprite.new(@species,@viewport)
@Sprites["icon"].x=52
@Sprites["icon"].y=290
@type1=nil
@type2=nil
@Page=1
@totalPages=0
if $Trainer.owned[@species]
@infoPages=3
@infoArray=getInfo
@levelMovesArray=getLevelMoves
@eggMovesArray=getEggMoves
@machineMovesArray=getMachineMoves if SHOWMACHINETUTORMOVES
@levelMovesPages = (@levelMovesArray.size+9)/10
@eggMovesPages = (@eggMovesArray.size+9)/10
@machineMovesPages=(@machineMovesArray.size+9)/10 if SHOWMACHINETUTORMOVES
@totalPages = @infoPages+@levelMovesPages+@eggMovesPages
@totalPages+=@machineMovesPages if SHOWMACHINETUTORMOVES
displayPage
end
pbUpdate
return true
end

BASECOLOR = Color.new(88,88,80)
SHADOWCOLOR = Color.new(168,184,184)
BASE_X = 32
EXTRA_X = 224
BASE_Y = 64
EXTRA_Y = 32

def getInfo
ret = []
for i in 0...2*4
ret=[]
for j in 0...6
ret[j]=nil
end
end
dexdata=pbOpenDexData
# Type
pbDexDataOffset(dexdata,@species,8)
@type1=dexdata.fgetb
@type2=dexdata.fgetb
# Base Exp
pbDexDataOffset(dexdata,@species,38)
ret[0][0]=_INTL("BASE EXP: {1}",dexdata.fgetw)
# Catch Rate
pbDexDataOffset(dexdata,@species,16)
ret[1][0]=_INTL("CATCH RARENESS: {1}",dexdata.fgetb)
# Happiness base
pbDexDataOffset(dexdata,@species,19)
ret[0][1]=_INTL("HAPPINESS BASE: {1}",dexdata.fgetb)
# Color
pbDexDataOffset(dexdata,@species,6)
colorName=[
_INTL("Red"),_INTL("Blue"),_INTL("Yellow"),
_INTL("Green"),_INTL("Black"),_INTL("Brown"),
_INTL("Purple"),_INTL("Gray"),_INTL("White"),_INTL("Pink")
][dexdata.fgetb]
ret[1][1]=_INTL("COLOR: {1}",colorName)
# Egg Steps to Hatch
pbDexDataOffset(dexdata,@species,21)
stepsToHatch = dexdata.fgetw
ret[0][2]=_INTL("EGG STEPS TO HATCH: {1} ({2} cycles)",
stepsToHatch,stepsToHatch/255)
# Growth Rate
pbDexDataOffset(dexdata,@species,20)
growthRate=dexdata.fgetb
growthRateString = [_INTL("Medium"),_INTL("Erratic"),_INTL("Fluctuating"),
_INTL("Parabolic"),_INTL("Fast"),_INTL("Slow")][growthRate]
ret[0][3]=_INTL("GROWTH RATE: {1} ({2})",
growthRateString,PBExperience.pbGetMaxExperience(growthRate))
# Gender Rate
pbDexDataOffset(dexdata,@species,18)
genderbyte=dexdata.fgetb
genderPercent= 100-((genderbyte+1)*100/256.0)
genderString = case genderbyte
when 0; _INTL("Always male")
when 254; _INTL("Always female")
when 255; _INTL("Genderless")
else; _INTL("Male {1}%",genderPercent)
end
ret[0][4]=_INTL("GENDER RATE: {1}",genderString)
# Breed Group
pbDexDataOffset(dexdata,@species,31)
compat10=dexdata.fgetb
compat11=dexdata.fgetb
eggGroupArray=[
nil,_INTL("Monster"),_INTL("Water1"),_INTL("Bug"),_INTL("Flying"),
_INTL("Ground"),_INTL("Fairy"),_INTL("Plant"),_INTL("Humanshape"),
_INTL("Water3"),_INTL("Mineral"),_INTL("Indeterminate"),
_INTL("Water2"),_INTL("Ditto"),_INTL("Dragon"),_INTL("No Eggs")
]
eggGroups = compat10==compat11 ? eggGroupArray[compat10] :
_INTL("{1}, {2}",eggGroupArray[compat10],eggGroupArray[compat11])
ret[0][5]=_INTL("BREED GROUP: {1}",eggGroups)
# Base Stats
pbDexDataOffset(dexdata,@species,10)
baseStats=[
dexdata.fgetb, # HP
dexdata.fgetb, # Attack
dexdata.fgetb, # Defense
dexdata.fgetb, # Speed
dexdata.fgetb, # Special Attack
dexdata.fgetb # Special Defense
]
baseStatsTot=0
for i in 0...baseStats.size
baseStatsTot+=baseStats
end
baseStats.push(baseStatsTot)
ret[2][0]=_ISPRINTF(
" HP ATK DEF SPD SATK SDEF")
ret[2][1]=_ISPRINTF(
"BASE STATS: {1:03d} {2:03d} {3:03d} {4:03d} {5:03d} {6:03d} {7:03d}",
baseStats[0],baseStats[1],baseStats[2],
baseStats[3],baseStats[4],baseStats[5],baseStats[6])
# Effort Points
pbDexDataOffset(dexdata,@species,23)
effortPoints=[
dexdata.fgetb, # HP
dexdata.fgetb, # Attack
dexdata.fgetb, # Defense
dexdata.fgetb, # Speed
dexdata.fgetb, # Special Attack
dexdata.fgetb # Special Defense
]
effortPointsTot=0
for i in 0...effortPoints.size
effortPoints=0 if !effortPoints
effortPointsTot+=effortPoints
end
effortPoints.push(effortPointsTot)
ret[2][2]=_ISPRINTF(
"EFFORT POINTS: {1:03d} {2:03d} {3:03d} {4:03d} {5:03d} {6:03d} {7:03d}",
effortPoints[0],effortPoints[1],effortPoints[2],
effortPoints[3],effortPoints[4],effortPoints[5],effortPoints[6])
# Abilities
pbDexDataOffset(dexdata,@species,29)
ability1=dexdata.fgetb
ability2=dexdata.fgetb
abilityString=(ability1==ability2 || ability2==0) ?
PBAbilities.getName(ability1) : _INTL("{1}, {2}",
PBAbilities.getName(ability1), PBAbilities.getName(ability2))
ret[2][3]=_INTL("ABILITIES: {1}",abilityString)
# Hidden Abilities
pbDexDataOffset(dexdata,@species,40)
hiddenAbility1=dexdata.fgetb
hiddenAbility2=dexdata.fgetb
hiddenAbility3=dexdata.fgetb
hiddenAbility4=dexdata.fgetb
if hiddenAbility1!=0
abilityString=""
if(hiddenAbility3!=0)
abilityString = _INTL("{1}, {2},",PBAbilities.getName(hiddenAbility1),
PBAbilities.getName(hiddenAbility2))
elsif(hiddenAbility2!=0)
abilityString = _INTL("{1}, {2}",PBAbilities.getName(hiddenAbility1),
PBAbilities.getName(hiddenAbility2))
else
abilityString = PBAbilities.getName(hiddenAbility1)
end
ret[2][4]=_INTL("HIDDEN ABILITIES: {1}",abilityString)
if(hiddenAbility3!=0)
ret[2][5] = (hiddenAbility4==0) ? PBAbilities.getName(hiddenAbility3) :
_INTL("{1}, {2}",PBAbilities.getName(hiddenAbility3),
PBAbilities.getName(hiddenAbility4))
end
end
# Wild hold item
pbDexDataOffset(dexdata,@species,48)
holdItems=[dexdata.fgetw,dexdata.fgetw,dexdata.fgetw]
holdItemsStrings=[]
if(holdItems[0]!=0 && holdItems[0]==holdItems[1] &&
holdItems[0]==holdItems[2])
holdItemsStrings.push(_INTL("{1} (always)",
PBItems.getName(holdItems[0])))
else
holdItemsStrings.push(_INTL("{1} (common)",
PBItems.getName(holdItems[0]))) if holdItems[0]>0
holdItemsStrings.push(_INTL("{1} (uncommon)",
PBItems.getName(holdItems[1]))) if holdItems[1]>0
holdItemsStrings.push(_INTL("{1} (rare)",
PBItems.getName(holdItems[2]))) if holdItems[2]>0
end
ret[4][0] = _INTL("HOLD ITEMS: {1}",holdItemsStrings.empty? ?
"" : holdItemsStrings[0])
ret[4][1] = holdItemsStrings[1] if holdItemsStrings.size>1
ret[4][2] = holdItemsStrings[2] if holdItemsStrings.size>2
# Evolutions
evolutionsStrings = []
lastEvolutionSpecies = -1
for evolution in pbGetEvolvedFormData(@species)
# The below "if" it's to won't list the same evolution species more than
# one time. Only the last is displayed.
evolutionsStrings.pop if lastEvolutionSpecies==evolution[2]
evolutionsStrings.push(getEvolutionMessage(evolution))
lastEvolutionSpecies=evolution[2]
end
line=3
column=4
ret[column][line] = _INTL("EVO: {1}",evolutionsStrings.empty? ?
"" : evolutionsStrings[0])
evolutionsStrings.shift
line+=1
for string in evolutionsStrings
if(line>5) # For when the pokémon has more than 3 evolutions (AKA Eevee)
line=0
column+=2
@infoPages+=1 # Creates a new page
end
ret[column][line] = string
line+=1
end
# End
dexdata.close
return ret
end

# Gets the evolution array and return evolution message
def getEvolutionMessage(evolution)
evoPokemon = PBSpecies.getName(evolution[2])
evoMethod = evolution[0]
evoItem = evolution[1] # Sometimes it's level
ret = case evoMethod
when 1; _INTL("{1} when happy",evoPokemon)
when 2; _INTL("{1} when happy at day",evoPokemon)
when 3; _INTL("{1} when happy at night",evoPokemon)
when 4, 13;_INTL("{1} at level {2}",
evoPokemon,evoItem) # Pokémon that evolve by level AND Ninjask
when 5; _INTL("{1} trading",evoPokemon)
when 6; _INTL("{1} trading holding {2}",
evoPokemon,PBItems.getName(evoItem))
when 7; _INTL("{1} using {2}",evoPokemon,PBItems.getName(evoItem))
when 8; _INTL("{1} at level {2} and ATK > DEF",
evoPokemon,evoItem) # Hitmonlee
when 9; _INTL("{1} at level {2} and ATK = DEF",
evoPokemon,evoItem) # Hitmontop
when 10;_INTL("{1} at level {2} and DEF < ATK",
evoPokemon,evoItem) # Hitmonchan
when 11,12; _INTL("{1} at level {2} with personalID",
evoPokemon,evoItem) # Silcoon/Cascoon
when 14;_INTL("{1} at level {2} with empty space",
evoPokemon,evoItem) # Shedinja
when 15;_INTL("{1} when beauty is greater than {2}",
evoPokemon,evoItem) # Milotic
when 16;_INTL("{1} using {2} and it's male",
evoPokemon,PBItems.getName(evoItem))
when 17;_INTL("{1} using {2} and it's female",
evoPokemon,PBItems.getName(evoItem))
when 18;_INTL("{1} holding {2} at day",
evoPokemon,PBItems.getName(evoItem))
when 19;_INTL("{1} holding {2} at night",
evoPokemon,PBItems.getName(evoItem))
when 20;_INTL("{1} when has move {2}",
evoPokemon,PBMoves.getName(evoItem))
when 21;_INTL("{1} when has {2} at party",
evoPokemon,PBSpecies.getName(evoItem))
when 22;_INTL("{1} at level {2} and it's male",
evoPokemon,evoItem)
when 23;_INTL("{1} at level {2} and it's female",
evoPokemon,evoItem)
when 24;_INTL("{1} at {2}",
evoPokemon, pbGetMapNameFromId(evoItem)) # Evolves on a certain map
when 25;_INTL("{1} trading by {2}",
evoPokemon,PBSpecies.getName(evoItem)) # Escavalier/Accelgor
# When HIDECUSTOMEVOLUTION = false the below 7 messages will be displayed
when 26;_INTL("{1} custom1 with {2}", evoPokemon,evoItem)
when 27;_INTL("{1} custom2 with {2}", evoPokemon,evoItem)
when 28;_INTL("{1} custom3 with {2}", evoPokemon,evoItem)
when 29;_INTL("{1} custom4 with {2}", evoPokemon,evoItem)
when 30;_INTL("{1} custom5 with {2}", evoPokemon,evoItem)
when 31;_INTL("{1} custom6 with {2}", evoPokemon,evoItem)
when 32;_INTL("{1} custom7 with {2}", evoPokemon,evoItem)
else; ""
end
ret = _INTL("{1} by an unknown way", evoPokemon) if(ret.empty? ||
(evoMethod>=26 && HIDECUSTOMEVOLUTION))
return ret
end

def getLevelMoves
ret=[]
atkdata=pbRgssOpen("Data/attacksRS.dat","rb")
offset=atkdata.getOffset(@species-1)
length=atkdata.getLength(@species-1)>>1
atkdata.pos=offset
for k in 0..length-1
level=atkdata.fgetw
move=PBMoves.getName(atkdata.fgetw)
ret.push(_ISPRINTF("{1:02d} {2:s}",level,move))
end
atkdata.close
return ret
end

def getEggMoves
ret=[]
eggMoveSpecies = @species
eggMoveSpecies = pbGetBabySpecies(eggMoveSpecies) if EGGMOVESFISTSTAGE
pbRgssOpen("Data/eggEmerald.dat","rb"){|f|
f.pos=(eggMoveSpecies-1)*8
offset=f.fgetdw
length=f.fgetdw
if length>0
f.pos=offset
i=0; loop do break unless i<length
move=PBMoves.getName(f.fgetw)
ret.push(_ISPRINTF(" {1:s}",move))
i+=1
end
end
}
ret.sort!
return ret
end

def getMachineMoves
ret=[]
movesArray=[]
machineMoves=[]
tmData=load_data("Data/tm.dat")
for move in 1...tmData.size
next if !tmData[move]
movesArray.push(move) if tmData[move].any?{ |item| item==@species }
end
for item in 1..PBItems.maxValue
if pbIsMachine?(item)
move = $ItemData[item][ITEMMACHINE]
if movesArray.include?(move)
if FORMATMACHINEMOVES
machineLabel = PBItems.getName(item)
machineLabel = machineLabel[2,machineLabel.size-2]
machineLabel = "H"+machineLabel[1,1] if pbIsHiddenMachine?(item)
ret.push(_ISPRINTF("{1:s} {2:s}",
machineLabel,PBMoves.getName(move)))
movesArray.delete(move)
else
machineMoves.push(move)
end
end
end
end
# The above line removes the tutors moves. The movesArray will be
# empty if the machines are already in the ret array.
movesArray = machineMoves if !SHOWTUTORMOVES
unnumeredMoves=[]
for move in movesArray # Show the moves unnumered
unnumeredMoves.push(_ISPRINTF(" {1:s}",PBMoves.getName(move)))
end
ret = ret.sort + unnumeredMoves.sort
return ret
end

def displayPage
return if !$Trainer.owned[@species]
if @Page<=@infoPages)
pageInfo @Page)
elsif @Page<=@infoPages+@levelMovesPages)
pageMoves(@levelMovesArray,_INTL("LEVEL UP MOVES:") @Page-@infoPages)
elsif @Page<=@infoPages+@levelMovesPages+@eggMovesPages)
pageMoves(@eggMovesArray,_INTL("EGG MOVES:"),
@Page-@infoPages-@levelMovesPages)
elsif(SHOWMACHINETUTORMOVES &&
@Page <= @infoPages+@levelMovesPages+@eggMovesPages+@machineMovesPages)
pageMoves(@machineMovesArray,_INTL("MACHINE MOVES:"),
@Page-@infoPages-@levelMovesPages-@eggMovesPages)
end
end

def pageInfo(page)
@Sprites["overlay"].bitmap.clear
textpos = []
for i in (12*(page-1))...(12*page)
line = i%6
column = i/6
next if !@infoArray[column][line]
x = BASE_X+EXTRA_X*(column%2)
y = BASE_Y+EXTRA_Y*line
textpos.push([@infoArray[column][line],x,y,false,BASECOLOR,SHADOWCOLOR])
end
pbDrawTextPositions @Sprites["overlay"].bitmap,textpos)
end

def pageMoves(movesArray,label,page)
@Sprites["overlay"].bitmap.clear
textpos = [[[[label,BASE_X,BASE_Y,false,BASECOLOR,SHADOWCOLOR]]]]
for i in (10*(page-1))...(10*page)
break if i>=movesArray.size
line = i%5
column = i/5
x = BASE_X+EXTRA_X*(column%2)
y = BASE_Y+EXTRA_Y*(line+1)
textpos.push([movesArray,x,y,false,BASECOLOR,SHADOWCOLOR])
end
pbDrawTextPositions @Sprites["overlay"].bitmap,textpos)
end

def pbUpdate
@Sprites["info"].bitmap.clear
pbSetSystemFont @Sprites["info"].bitmap)
height = Graphics.height-54
text=[[PBSpecies.getName(@species),(Graphics.width+72)/2,height-32,
2,BASECOLOR,SHADOWCOLOR]]
text.push([_INTL("{1}/{2}" @Page,@totalPages),Graphics.width-52,height,
1,BASECOLOR,SHADOWCOLOR]) if $Trainer.owned[@species]
pbDrawTextPositions @Sprites["info"].bitmap,text)
typebitmap=AnimatedBitmap.new(_INTL("Graphics/Pictures/pokedexTypes"))
if !@type1 # This "if" only occurs when the getInfo isn't called
dexdata=pbOpenDexData
pbDexDataOffset(dexdata,@species,8) # Type
@type1=dexdata.fgetb
@type2=dexdata.fgetb
dexdata.close
end
type1rect=Rect.new(0,@type1*32,96,32)
type2rect=Rect.new(0,@type2*32,96,32)
if(@type1==@type2)
@Sprites["info"].bitmap.blt((Graphics.width+16-36)/2,height,
typebitmap.bitmap,type1rect)
else
@Sprites["info"].bitmap.blt((Graphics.width+16-144)/2,height,
typebitmap.bitmap,type1rect)
@Sprites["info"].bitmap.blt((Graphics.width+16+72)/2,height,
typebitmap.bitmap,type2rect) if @type1!=@type2
end
@Sprites["icon"].update
end

def pbControls(listlimits)
Graphics.transition
ret=0
loop do
Graphics.update
Input.update
pbUpdate
if Input.trigger?(Input::C)
@Page+=1
@Page=1 if @Page>@totalPages
displayPage
elsif Input.trigger?(Input::A)
@Page-=1
@Page=@totalPages if @Page<1
displayPage
elsif Input.trigger?(Input::LEFT)
ret=4
break
# If not at top of list
elsif Input.trigger?(Input::UP) && listlimits&1==0
ret=8
break
# If not at end of list
elsif Input.trigger?(Input::DOWN) && listlimits&2==0
ret=2
break
elsif Input.trigger?(Input::B)
ret=1
pbPlayCancelSE()
pbFadeOutAndHide @Sprites)
break
end
end
return ret
end

def pbEndScene
pbDisposeSpriteHash @Sprites)
@viewport.dispose
end
end


class AdvancedPokedex
def initialize(scene)
@scene=scene
end

def pbStartScreen(species,listlimits)
@scene.pbStartScene(species)
[email protected](listlimits)
@scene.pbEndScene
return ret
end
end


y el error que me da es este:
Exception: TypeError
Message: cannot convert Array into String
SpriteWindow:1444:in `text_size'
SpriteWindow:1444:in `pbDrawTextPositions'
SpriteWindow:1443:in `each'
SpriteWindow:1443:in `pbDrawTextPositions'
adv poke:501:in `pageMoves'
adv poke:465:in `displayPage'
adv poke:545:in `pbControls'
adv poke:538:in `loop'
adv poke:567:in `pbControls'
adv poke:585:in `pbStartScreen'
por favor ayúdenme y si me equivoco en algo del post dígame por que no encontré nada

ya lo aregle pueden cerrar el post
 
Estado
Cerrado para nuevas respuestas.
Arriba