Ir a contenido

0

Sistema de aprendisaje de habilidades


1 respuestas en este tema

#1 ramiazul

    Paladin

  • voidzonero
  • 195 Mensajes:
  • Location:Argentina, el lugar + caro del mundo
  • Interests:La verdad son muchas...
  • Genero:Chico
  • Nivel maker: Experto
  • Especialidad: Scripting

Publicado el 24 July 2008 - 08:14 PM

Sistema de habilidades
v 1.0
Creado por ramiazul

Hola, blaster hace tiempo me habia pedido que le realizara un script sencillo para aprender habilidades estilo el lineage II.
Finalemte llega a realizar este sistema que tiene lo básico del lineage (cambiar obj + dinero) y he quitado la opcion de sp por pérder una habilidad.

Ahora decidi publicarlo(con su permiso) aqui en voidzone.

Espero que les guste
Script:
CODE
#==============================================================================
# ■ Sistema de habilidades V 1.0
#------------------------------------------------------------------------------
# Creado por Ramiazul
# 19/06/08
# Para usar la scene = $scene = Scene_SkillLearn.new([id habilidad a aprender 1, etc])
#==============================================================================



module HOLY_WYVERN_FACES
FACE_TYPE = 0
end
class Window_Base
 def draw_actor_learn_face(actor,x,y)
   @actor = actor
   contents.blt x, y, image("background"), Rect.new(0,0,96,96)
   if HOLY_WYVERN_FACES::FACE_TYPE == 0
   contents.blt x, y, fimage("#{@actor.character_name}",@actor.character_hue), Rect.new(0,0,96,96)
 else
   contents.blt x, y, fimage("#{@actor.battler_name}",@actor.battler_hue), Rect.new(0,0,96,96)
   end
   contents.blt x, y, image("border"), Rect.new(0,0,96,96)
 end
  def image name
    @Path = 'Graphics/Faces/'
  RPG::Cache.load_bitmap @Path, name
end
  def fimage name, hue
    @Path = 'Graphics/Faces/'
  RPG::Cache.load_bitmap @Path, name, hue
end  
end




module LEARN
ITEMS=[]  
MUST=[]
FORGIVE=[]
GOLD=[]
 
for i in 0...999
ITEMS[i]=[]  
MUST[i]=[]
FORGIVE[i]=[]
GOLD[i]=0
end

#==============================================================================
#---------------------------Editar desde aqui------------------------------
#------------------------------------------------------------------------------
#Como crear una habilidad:
# skill_id = id de la habilidad
# ITEMS[skill_id]=[[id objeto 2, cantidad de obj 1], etc] (objetos necesarios)
# MUST[skill_id]=[id magia1, id magia 2, etc]    (habilidades necesarias)
# FORGIVE[skill_id]=[id magia1, id magia 2, etc] (habilidades que se olvidarán)
# GOLD[skill_id]= valor                          (Valor monetario)
#==============================================================================
skill_id=1
ITEMS[skill_id]=[[1,3]]  
MUST[skill_id]=[4,5,2]
FORGIVE[skill_id]=[4]
GOLD[skill_id]=100





#==============================================================================
#---------------------------Fin de parte editable------------------------------
#==============================================================================
def self.have_items(id)
 if ITEMS[id] and ITEMS[id].size > 0
   for i in ITEMS[id]
     if $game_party.item_number(i[0]) < i[1]
       return false
     end
     return true
   end  
 else
   return true
 end  
end

def self.have_skills(id,actor)
 
 if MUST[id] and MUST[id].size > 0
   for i in MUST[id]
     if actor.skills.include?(i)
     next  
   else
     return false
     end
     return true
   end  
 else
   return true
 end    
 
end

def self.have_gold(id)
 if GOLD[id]
  gold=GOLD[id]
 else
  gold=0
 end  
 if $game_party.gold >= gold
   return true
 end
 return false
end

def self.can_learn(id,actor)
 valor = true
 valor = false if !have_items(id)
 valor = false if !have_skills(id,actor)
 valor = false if !have_gold(id)
 return valor
end

def self.lose(id,actor)
   for i in FORGIVE[id]
  actor.forget_skill(id)
 end
 
 for i in ITEMS[id]
  $game_party.lose_item(i,1)
 end  
 
 $game_party.lose_gold(GOLD[id])  
end  

end  

class Window_SkillLearn_Description < Window_Base
 def initialize(skill_id)
  super (320,64,320,480-64)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.contents.font.name = $fontface
   self.contents.font.size = 20
   @skill_id=skill_id
   refresh
 end
 #--------------------------------------------------------------------------
 # - Actualizacion
 #--------------------------------------------------------------------------
 def refresh([email protected]_id)
   @skill_id=skill_id
   self.contents.clear
   cw=contents.width
   ch=contents.height
  skill = $data_skills[@skill_id]
  self.contents.font.size = 20
  self.contents.font.color = normal_color
   x = 0
   y = 0
   rect = Rect.new(x, y, self.width - 32, 32)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   bitmap = RPG::Cache.icon(skill.icon_name)
   opacity = self.contents.font.color == normal_color ? 255 : 128
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
   self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)  
 
   y+=22
   self.contents.font.color = system_color
   self.contents.draw_text(x,y,cw,32,"-Habilidades necesarias-",1)
   y+=32
   
   learn_skills = LEARN::MUST[@skill_id]
   for i in learn_skills
 skill = $data_skills[i]
  self.contents.font.color = LEARN::FORGIVE[@skill_id].include?(skill.id) ? knockout_color : normal_color
   x = 0
   rect = Rect.new(x, y, self.width - 32, 32)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   bitmap = RPG::Cache.icon(skill.icon_name)
   opacity = 255
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
   self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)  
   y += 32
  end
   if LEARN::MUST[@skill_id].size == 0
     self.contents.font.color = normal_color
     self.contents.draw_text(x,y,cw,32,"Ninguna")
   y+=32      
   end  
  self.contents.font.color = system_color

    self.contents.draw_text(x,y,cw,32,"-Objetos necesarios-",1)
   y+=32  
   
  for i in LEARN::ITEMS[@skill_id]
 
  skill = $data_items[i[0]]
  self.contents.font.color = $game_party.item_number(i[0]) < i[1] ?  disabled_color : normal_color
   rect = Rect.new(x, y, self.width - 32, 32)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   bitmap = RPG::Cache.icon(skill.icon_name)
   opacity = self.contents.font.color == normal_color ? 255 : 128
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   self.contents.draw_text(x + 28, y, 204, 32, skill.name+" X "+i[1].to_s, 0)      
   y+=32    
  end
     if LEARN::ITEMS[@skill_id].size == 0
       self.contents.font.color = normal_color
     self.contents.draw_text(x,y,cw,32,"Ninguno")
   y+=32      
   end  
 gold = LEARN::GOLD[@skill_id]
 
   self.contents.font.color = system_color

    self.contents.draw_text(x,y,cw,32,"-"+$data_system.words.gold+" necesario-",1)
   y+=22  
   cx = contents.text_size($data_system.words.gold).width
   
   self.contents.font.color = normal_color
   self.contents.draw_text(0, y, cw, 32, gold.to_s+"/"+$game_party.gold.to_s,1)
   self.contents.font.color = system_color  
   y+=32
   if LEARN::FORGIVE[@skill_id].size > 0
   rect=Rect.new(x,y,640,4)
   self.contents.fill_rect(rect,Color.new(255,255,255))
   y+=4
   self.contents.font.size = 16
   self.contents.font.color = knockout_color
   self.contents.draw_text(0, y, cw, 32, "* Habilidad perdida.")
   end
 end
end




class Window_SkillLearn_Command < Window_Selectable
 def initialize(commands)
  super (0,64,320,480-64-96*2-32)
   @item_max = commands.size
   @commands = commands
   self.contents = Bitmap.new(width - 32, @item_max * 32)
      self.contents.font.name = $fontface
   self.contents.font.size = $fontsize
   refresh
   self.index = 0
 end
 
 def skill
   return $data_skills[@commands[self.index]]
 end  
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   for i in [email protected]_max
     draw_item(i, normal_color)
   end
 end
 #--------------------------------------------------------------------------
 def draw_item(index, color)
   self.contents.font.color = color
   skill = $data_skills[@commands[index]]
   x=0
   y=index*32
   rect = Rect.new(x, y, self.width - 32, 32)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   bitmap = RPG::Cache.icon(skill.icon_name)
   opacity = 255
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)    
   
 end
 #--------------------------------------------------------------------------
 def disable_item(index)
   draw_item(index, disabled_color)
 end
 
 def update_help
   @help_window.set_text(self.skill == nil ? "" : self.skill.description)
 end  
 
end

class Window_SkillLearn_Party < Window_Base
   def initialize(id=1)
  super (0,32*8,320,32*7)
   self.contents = Bitmap.new(width - 32, height - 32)
      self.contents.font.name = $fontface
   self.contents.font.size = 20
   refresh(id)
 end
 def refresh(id=1)
   self.contents.clear
   self.contents.font.color=system_color
   for i in 0...$game_party.actors.size
     actor=$game_party.actors[i]
     x=(i%2)*(contents.width/2)+16
     x2=(i%2)*(contents.width/2)
     y=(i/2)*96
     draw_actor_learn_face(actor,x,y)
     if actor.skill_learn?(id)
       text="-Aprendida-"
       else
     text = LEARN.can_learn(id,actor) ? "-Puede-" : "-No puede-"
     end
   self.contents.draw_text(x2,y,contents.width/2,96,text,1)
   end  
   end
end




class Scene_SkillLearn
 def initialize(comm)
   @comm=comm
 end  
 def main
   # Creacion de la ventana
@objets = []
@objets[0]=Window_Help.new
@objets[1]=Window_SkillLearn_Command.new(@comm)
@objets[2]=Window_SkillLearn_Description.new(@objets[1].skill.id)
@objets[3]=Window_SkillLearn_Party.new(@objets[1].skill.id)
@objets[1][email protected][0]
@objets[4]=Window_Target.new
@objets[4][email protected][4].visible=false
@objets[4].index=0
@last_index=-1
   # Ejecucion de transicion
   Graphics.transition
   # Loop Principal
   loop do
     # Actualizar pantalla de juego
     Graphics.update
     # Actualizar Introducido
     Input.update
     # Renovacion del Frame
     update
     # Loop interrumpida por cambios de Pantalla
     if $scene != self
       break
     end
   end
   # Refrescar Mapa
   $game_map.refresh
   # Preparacion de Trasicion
   Graphics.freeze
   # Lanzar Pantalla
for i in @objets
 i.dispose if i
 end  
end

def update
for i in @objets
 i.update if i
end
if @objets[1].active
 update_command
return
end
update_target

end

def update_command
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     $scene = Scene_Map.new
     return
   end
 
if @last_index != @objets[1].index
@last_index = @objets[1].index
@objets[2].refresh(@objets[1].skill.id)
@objets[3].refresh(@objets[1].skill.id)
return
end

    if Input.trigger?(Input::C)
     $game_system.se_play($data_system.decision_se)
 @objets[1].active=false
 @objets[4].active=true
 @objets[4].visible=true
     return
   end  

end  


def update_target
 
    if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
 @objets[1].active=true
 @objets[4].active=false
 @objets[4].visible=false
     return
   end

   if Input.trigger?(Input::C)
     actor=$game_party.actors[@objets[4].index]
     [email protected][1].skill.id
     if LEARN.can_learn(id,actor) and not actor.skill_learn?(id)
       
 @objets[4].active=false
 @objets[4].visible=false  
  for i in LEARN::FORGIVE[id]
  actor.forget_skill(i)
 end
 
 for i in LEARN::ITEMS[id]
  $game_party.lose_item(i[0],i[1])
 end  
 
 $game_party.lose_gold(LEARN::GOLD[id])  
 actor.learn_skill(id)
 
 @objets[0].set_text("¡"+actor.name+" aprendió "+$data_skills[id].name+"!")
 Input.update
 while !Input.trigger?(Input::C)
   Input.update
   Graphics.update
   if Input.trigger?(Input::C) or Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     break
   end  
 end  
 Input.update
 @objets[2].refresh(@objets[1].skill.id)
@objets[3].refresh(@objets[1].skill.id)
 @objets[4].active=true
 @objets[4].visible=true  
 return
else
 @objets[4].active=false
 @objets[4].visible=false  
       @objets[0].set_text("¡"+actor.name+" no puede aprender "+$data_skills[id].name+"!")
 Input.update
 while !Input.trigger?(Input::C)
   Input.update
   Graphics.update
   if Input.trigger?(Input::C) or Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     break
   end  
 end  
 Input.update
 @objets[2].refresh(@objets[1].skill.id)
@objets[3].refresh(@objets[1].skill.id)
 @objets[4].active=true
 @objets[4].visible=true  
 return    
       
     end  
   end
   
 end







end





Instrucciones:

Llamar escena:
Spoiler
Para crear una habilidad
Spoiler

Demo:

Bueno, los dejo en una demo para que vean lo que necesita:
sistema de habilidades.rar - 0.90MB

Screen :

user posted image



Espero que les agrade, cualquier sugerencia solo diganla

Editado por ramiazul, 24 July 2008 - 08:23 PM.


#2 avanosis

    Aprendiz

  • voidzonero
  • 11 Mensajes:
  • Genero:Chico
  • Nivel maker: Guru
  • Especialidad: Grafismo

Publicado el 31 July 2008 - 11:00 AM

Le falta alguna que otra picture en la scene fuera de eso el sistema es muy novedoso campeon.gif