.: Planet Maker :.
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Destribuir Status

2 participantes

Ir para baixo

Destribuir Status Empty Destribuir Status

Mensagem por Tsubasa Qui 10 Set 2009 - 21:46

Stat Distribution System
By Lettuce
Postado por Tsubasa


Introdução
Esse Script Tem Varias Funcionalidades, Mas a Principal é dar pontos da Stats para a pessoa destribuir,se você olhar na screenshot abaixo você vai perceber varias coisas legais que o script traz...

Screenshot
Spoiler:

Script
Código:
=begin
+------------------------------------------------------------------------------+
# ** Stat points distribution system 1.7                                      #
#                  By Lettuce.                                                #
#                                                                              #
#                                                                              #
#Some help:                                                                    #
#    - Position wasn't stored properly in mode 1 (Thanks Akin)                #
#    - Some sort of notification to player (Thanks Akin)                      #
#    - Player switch now supports LEFT and RIGHT arrow (Thanks Akin)          #
#    - Advice on using class attr instead of global var (Thanks GoldenShadow) #
#                                                                              #
#------------------------------------------------------------------------------#
#  This script lets you distribute points onto your actor's stats              #
#                                                                              #
# Call scene using this: $scene = Scene_Stat_Dist.new(0)                      #
#                                                                              #
#                                                                              #
#  You can give points to your actors by using this code                      #
#                                                                              #
#    $game_party.members[<member ID>].points += <amount of points>        #
#                                                                              #
#  If you want your actor to get points after leveling:                        #
#  Under Game_Actor, in def change_exp, under the line level_up; paste this    #
#                                                                              #
#          difference = @level - last_level                      #
#    $game_actors[@actor_id].points += <amount of points>                      #
#                                                                              #
#            OR (if you want RO mode; explained below)      #
#                                                                              #
#      difference = @level - last_level                                        #
#      $game_actors[@actor_id].points += ((@level/5).floor+2).floor*difference #
#                                                                              #
# # It seems the game returns non 0 based array if we use game_party >.<;      #
#                                                                              #
#  **Note**                                                                    #
#  This script does not stop your actors from gaining stats points defined in  #
#  the database. It will just add to it.                                      #
#  Set the stats to 1 all the way in the database to disable growth :0        #
#                                                                              #
#  **Modes**                                                                  #
#  1 : Add one point to the attribute per point                                #
#  2 : Use RO system, attribute with value needs more points to increase.      #
#     Explanation: In RO, if you got high stats, you need more points to  #
#    increase it. So if you have 90 ATK and 5 INT...You can                #
#   choose to use 10 points for 1 more ATK OR use that 10 points          #
#   to get 6 INT                                                          #
+------------------------------------------------------------------------------+
=end
############################### Configuration ##################################
#Starting points; how many points to give to actor at the beginning of the game
StartPoints = 20
#Maximum attribute point you allowed in your game
MaxStat = 255
MaxHP = 9999
MaxMP = 999
    #Max hit, eva and crit rate are all in percentage
MaxHIT = 80 # 100 means never miss
MaxEVA = 12 #100 means ALWAYS dodge; very illogical ^^. 50-70 is good rate
MaxCRIT = 15 #100 means always crit o.O

    #How many points needed per increase
PointsPerHP = 2
PointsPerMP = 2
PointsPerHIT = 15
PointsPerEVA = 7
PointsPerCRIT = 5

#How many stats will increase per point?
IncreaseBy = 2
HPIncreaseBy = 25
MPIncreaseBy = 15
HITIncreaseBy = 5
EVAIncreaseBy = 1
CRITIncreaseBy = 1


#1 for normal mode, 2 or RO mode [points required calculated through formula]
Mode = 1
#You can chage font family and size here
Fontname = Font.default_name
Fontsize = 20

#Layout mode, if you use long words for atk,spi,def or agi ; set LayoutMode to 2
LayoutMode = 1

#========================== End Configuration ==================================
OFFSET = -10 #moves equipment part up and down XD
#==============================================================================
# ** Lettuce_Window_Top
#------------------------------------------------------------------------------
#  This window displays Title message
#==============================================================================

class Lettuce_Window_Top < Window_Base
  def initialize
   super(0,0,544,70)
   self.contents = Bitmap.new(width-32,height-32)
   self.contents.font.name = Fontname
   self.contents.font.size = Fontsize
   refresh
   end
   
  def refresh
   self.contents.clear
   self.contents.draw_text(0,-10,544-32,32,"Stat Distribution",1)
   self.contents.font.size = Fontsize-4
   self.contents.draw_text(0,10,544-32,32,"Press left or right to change character",1)
  end
   
end
#==============================================================================
# ** Lettuce_Window_Points
#------------------------------------------------------------------------------
#  This window displays the attributes of a party member
#==============================================================================
class Lettuce_Window_Points < Window_Base
  def initialize(member_index)
   super(401,320,144,52)
   self.contents = Bitmap.new(width-32,height-32)
   self.contents.font.name = Fontname
   self.contents.font.size = Fontsize
   refresh(member_index)
  end
 
  def refresh(member_index)
   actor = $game_party.members[member_index]
   points = actor.points
  self.contents.clear
   self.contents.draw_text(0,0,162,20,"Points: "+points.to_s)   
  end
end

#==============================================================================
# ** Lettuce_Window_Info
#------------------------------------------------------------------------------
#  This window displays the attributes of a party member
#==============================================================================

class Lettuce_Window_Info < Window_Base
  def initialize(member_index)
   super(0,71,400,346)
   self.contents = Bitmap.new(width-32,height-32)
   self.contents.font.name = Fontname
   self.contents.font.size = Fontsize
  @exo = 25 #equipment section X coordinate offset
  @exo2 = 35 #equipment section X coordinate offset
  @eyo = -10 #equipment section Y coordinate offset
   refresh(member_index)
  end
   
  def refresh(member_index)
   actor = $game_party.members[member_index]
   self.contents.clear
  self.contents.font.size = Fontsize
   draw_actor_face(actor,10,10,92)
   draw_actor_name(actor,120,10)
   self.contents.font.size = Fontsize
   self.contents.draw_text(190,30,200,20,"Class: "+actor.class.name)
   self.contents.draw_text(120,30,200,20,"Lv. "+actor.level.to_s)
 
  if LayoutMode == 1
    draw_actor_state(actor,200,280,168)
  elsif LayoutMode == 2
    draw_actor_state(actor,220,10)
  end
 
   s1 = actor.exp_s #total exp
  s2 = actor.current_lvl_exp #exp to get to this level
  if s1.is_a?(Numeric)
    s3 = s1-s2 #progress in this level
    s4 = actor.next_lvl_exp #exp needed for next level
    self.contents.font.size = Fontsize - 5
    self.contents.draw_text(230,74,90,20,"EXP: "+s3.to_s+"/"+s4.to_s,0)
    self.contents.font.size = Fontsize
  else
    self.contents.draw_text(230,74,85,20,"-----/-----",2)
  end
   
   #Preparing bar colours
   back_color = Color.new(39, 58, 83, 255)
   
   str_color1 = Color.new(229, 153, 73, 255)
   str_color2 = Color.new(255, 72, 0, 255)
   
   def_color1 = Color.new(210, 255, 0, 255)
   def_color2 = Color.new(85, 129, 9, 255)
   
   spi_color1 = Color.new(99, 133, 161, 255)
   spi_color2 = Color.new(10, 60,107, 255)
   
   agi_color1 = Color.new(167, 125, 180, 255)
   agi_color2 = Color.new(90, 11, 107, 255)
 
  hp_color1 = Color.new(66, 114, 164, 255)
  hp_color2 = Color.new(122, 175, 229, 255)
 
  mp_color1 = Color.new(93, 50, 158, 255)
  mp_color2 = Color.new(145, 122, 229, 255)
 
  exp_color1 = Color.new(246, 243, 224, 255)
  exp_color2 = Color.new(255, 182, 0, 255)
  if s1.is_a?(Numeric)
    self.contents.fill_rect(230,90,89,7,back_color)
    self.contents.gradient_fill_rect(232,92,(85*s3)/s4,3,exp_color1,exp_color2)

  else
    self.contents.fill_rect(230,60,89,7,back_color)
  end
 
   
  self.contents.fill_rect(120,67,104,7,back_color)
   self.contents.gradient_fill_rect(122,69,100*actor.hp/actor.maxhp,3,hp_color1,hp_color2)
  self.contents.draw_text(120,44,100,30,"HP",0)
  self.contents.draw_text(120,44,100,30,actor.hp.to_s + "/" + actor.maxhp.to_s,2)
 
  self.contents.fill_rect(120,90,104,7,back_color)
   self.contents.gradient_fill_rect(122,92,100*actor.mp/actor.maxmp,3,mp_color1,mp_color2)
  self.contents.draw_text(120,67,100,30,"MP",0)
  self.contents.draw_text(120,67,100,30,actor.mp.to_s + "/" + actor.maxmp.to_s,2)
 
  ##weapons
  weapon = $data_weapons[actor.weapon_id]
  shield = $data_armors[actor.armor1_id]
  helm =$data_armors[actor.armor2_id]
  body =$data_armors[actor.armor3_id]
  accessory =$data_armors[actor.armor4_id]
 
  bonus_atk = 0
  bonus_def = 0
  bonus_spi = 0
  bonus_agi = 0
  evasion = 0
  crit = 4
 
  if $data_actors[actor.id].critical_bonus
    crit +=4
  end
 
  if weapon
    bonus_atk += weapon.atk
    bonus_def += weapon.def
    bonus_spi += weapon.spi
    bonus_agi += weapon.agi
    if weapon.critical_bonus
      crit += 4
    end
  end
  if shield
    bonus_atk += shield.atk
    bonus_def += shield.def
    bonus_spi += shield.spi
    bonus_agi += shield.agi
    evasion += shield.eva
  end
    if helm
    bonus_atk += helm.atk
    bonus_def += helm.def
    bonus_spi += helm.spi
    bonus_agi += helm.agi
    evasion += helm.eva
  end
    if body
    bonus_atk += body.atk
    bonus_def += body.def
    bonus_spi += body.spi
    bonus_agi += body.agi
    evasion += body.eva
  end
    if accessory
    bonus_atk += accessory.atk
    bonus_def += accessory.def
    bonus_spi += accessory.spi
    bonus_agi += accessory.agi
    evasion += accessory.eva
  end
  if LayoutMode == 1
    draw_item_name(weapon,160+@exo,125+@eyo,true)
    if weapon
      two_hand = true if weapon.two_handed == true
    end
    if two_hand     
      draw_item_name(weapon,160+@exo,155+@eyo,true) 
    else
      draw_item_name(shield,160+@exo,155+@eyo,true)
    end
    draw_item_name(helm,160+@exo,185+@eyo,true)
    draw_item_name(body,160+@exo,215+@eyo,true)
    draw_item_name(accessory,160+@exo,245+@eyo,true)
   
    #Testing area for Weapon upgrade script
    #self.contents.font.size = Fontsize - 7
    #self.contents.draw_text(160+@exo,135,30,20,"[+"+weapon.level.to_s+"]",0)
   
    self.contents.font.color = Color.new(87,87,87,255)
    if !weapon
      #draw_icon(216,160+@exo,125+@eyo,true)
      self.contents.draw_text(184+@exo,127+@eyo,200,20,"Unequipped")
    end
    if !shield
      #draw_icon(217,160+@exo,155+@eyo,true)
      if !two_hand
      self.contents.draw_text(184+@exo,157+@eyo,200,20,"Unequipped")
      end
    end
    if !helm
      #draw_icon(218,160+@exo,185+@eyo,true)
      self.contents.draw_text(184+@exo,187+@eyo,200,20,"Unequipped")
    end
    if !body
      #draw_icon(219,160+@exo,215+@eyo,true)
      self.contents.draw_text(184+@exo,217+@eyo,200,20,"Unequipped")
    end
    if !accessory
      #draw_icon(220,160+@exo,245+@eyo,true)
      self.contents.draw_text(184+@exo,247+@eyo,200,20,"Unequipped")
    end
    self.contents.font.color = Color.new(255,255,255,255)
   
  elsif LayoutMode == 2
    draw_item_name(weapon,160+@exo2,125+OFFSET+@eyo,true)
    #if weapon
  if weapon
    two_hand = true if weapon.two_handed
  end
      if two_hand
      draw_item_name(weapon,160+@exo2,165+OFFSET+@eyo,true)
    else
      draw_item_name(shield,160+@exo2,165+OFFSET+@eyo,true)
      end
    #end
=begin
    if weapon.two_handed == true
      draw_item_name(weapon,160+@exo2,165+OFFSET+@eyo,true)
    else
      draw_item_name(shield,160+@exo2,165+OFFSET+@eyo,true)
    end
=end
    draw_item_name(helm,160+@exo2,205+OFFSET+@eyo,true)
    draw_item_name(body,160+@exo2,245+OFFSET+@eyo,true)
    draw_item_name(accessory,160+@exo2,285+OFFSET+@eyo,true)
   

     
      self.contents.font.color = Color.new(87,87,87,255)
    if !weapon
      #draw_icon(216,160+@exo2,125+OFFSET+@eyo,true)
      self.contents.draw_text(184+@exo2,127+OFFSET+@eyo,200,20,"Unequipped")
    end
    if weapon
    if !shield and weapon.two_handed == false
      #draw_icon(217,160+@exo2,165+OFFSET+@eyo,true)
      self.contents.draw_text(184+@exo2,167+OFFSET+@eyo,200,20,"Unequipped")
    end
    else
    if !shield
      #draw_icon(217,160+@exo2,165+OFFSET+@eyo,true)
      self.contents.draw_text(184+@exo2,167+OFFSET+@eyo,200,20,"Unequipped")
    end
    end
   
    if !helm
      #draw_icon(218,160+@exo2,205+OFFSET+@eyo,true)
      self.contents.draw_text(184+@exo2,207+OFFSET+@eyo,200,20,"Unequipped")
    end
    if !body
      #draw_icon(219,160+@exo2,245+OFFSET+@eyo,true)
      self.contents.draw_text(184+@exo2,247+OFFSET+@eyo,200,20,"Unequipped")
    end
    if !accessory
      #draw_icon(220,160+@exo2,285+OFFSET+@eyo,true)
      self.contents.draw_text(184+@exo2,287+OFFSET+@eyo,200,20,"Unequipped")
    end
    self.contents.font.color = Color.new(255,255,255,255)
  end
 
 
 
  self.contents.font.size = Fontsize - 5
   self.contents.draw_text(10,120,100,20,Vocab::atk+": ")
   self.contents.draw_text(10,120,100,20,(actor.atk-bonus_atk).to_s+" + "+bonus_atk.to_s,2)
   
   self.contents.fill_rect(10,140,104,7,back_color)
   self.contents.gradient_fill_rect(12,142,((actor.atk-bonus_atk)*100)/MaxStat,3,str_color1,str_color2)
   
   self.contents.draw_text(10,150,100,20,Vocab::def+": ")
   self.contents.draw_text(10,150,100,20,(actor.def-bonus_def).to_s+" + "+bonus_def.to_s,2)
   
   self.contents.fill_rect(10,170,104,7,back_color)
   self.contents.gradient_fill_rect(12,172,((actor.def-bonus_def)*100)/MaxStat,3,def_color1,def_color2)
   
   self.contents.draw_text(10,180,100,20,Vocab::spi+": ")
   self.contents.draw_text(10,180,100,20,(actor.spi-bonus_spi).to_s+" + "+bonus_spi.to_s,2)
   
   self.contents.fill_rect(10,200,104,7,back_color)
   self.contents.gradient_fill_rect(12,202,((actor.spi-bonus_spi)*100)/MaxStat,3,spi_color1,spi_color2)
   
   self.contents.draw_text(10,210,100,20,Vocab::agi+": ")
   self.contents.draw_text(10,210,100,20,(actor.agi-bonus_agi).to_s+" + "+bonus_agi.to_s,2)
   
   self.contents.fill_rect(10,230,104,7,back_color)
   self.contents.gradient_fill_rect(12,232,((actor.agi-bonus_agi)*100)/MaxStat,3,agi_color1,agi_color2)
   
  if weapon
    hit_rate = weapon.hit
  else
    hit_rate = 95
  end
   
   
  self.contents.font.size = Fontsize - 5
  self.contents.font.color = Color.new(162,212,98,255)
  self.contents.draw_text(1,245,100,20,"Maximum ATK :",2)
  self.contents.draw_text(1,260,100,20,"Hit rate (%) :",2)
  self.contents.draw_text(1,275,100,20,"Evasion rate (%) :",2)
  self.contents.draw_text(1,290,100,20,"Critical Rate (%) :",2)
 
  self.contents.draw_text(105,245,60,20,(actor.atk*4).to_s,0)
  self.contents.draw_text(105,260,60,20,actor.base_hit.to_s + "+" + actor.hitr.to_s,0)
  self.contents.draw_text(105,275,60,20,actor.base_eva.to_s + "+" +actor.evar.to_s,0)
  self.contents.draw_text(105,290,60,20,actor.base_cri.to_s + "+" + actor.crir.to_s,0)
 
  self.contents.font.size = Fontsize-6
  self.contents.font.color = text_color(16)
  self.contents.draw_text(135,260,60,20,"[Req:"+PointsPerHIT.to_s+"pt.]",2)
  self.contents.draw_text(135,275,60,20,"[Req:"+PointsPerEVA.to_s+"pt.]",2)
  self.contents.draw_text(135,290,60,20,"[Req:"+PointsPerCRIT.to_s+"pt.]",2)
 
  #self.contents.draw_text(120,260,60,20,(hit_rate+actor.hit_bonus).to_s,0)
  #self.contents.draw_text(120,275,60,20,(evasion+actor.eva).to_s,0)
  #self.contents.draw_text(120,290,60,20,(crit+actor.cri_bonus).to_s,0)
 
  if LayoutMode == 1
   
  self.contents.font.color = Color.new(155,199,206,255)
  self.contents.font.size = Fontsize - 8
  if weapon
  self.contents.draw_text(185+@exo,140+@eyo,100,20,Vocab::atk+"+"+weapon.atk.to_s)
  self.contents.draw_text(219+@exo,140+@eyo,100,20,Vocab::def+"+"+weapon.def.to_s)
  self.contents.draw_text(253+@exo,140+@eyo,100,20,Vocab::spi+"+"+weapon.spi.to_s)
  self.contents.draw_text(287+@exo,140+@eyo,100,20,Vocab::agi+"+"+weapon.agi.to_s)
  end

  if shield
  self.contents.draw_text(185+@exo,170+@eyo,100,20,Vocab::atk+"+"+shield.atk.to_s)
  self.contents.draw_text(219+@exo,170+@eyo,100,20,Vocab::def+"+"+shield.def.to_s)
  self.contents.draw_text(253+@exo,170+@eyo,100,20,Vocab::spi+"+"+shield.spi.to_s)
  self.contents.draw_text(287+@exo,170+@eyo,100,20,Vocab::agi+"+"+shield.agi.to_s)
  end
 
  if helm
  self.contents.draw_text(185+@exo,200+@eyo,100,20,Vocab::atk+"+"+helm.atk.to_s)
  self.contents.draw_text(219+@exo,200+@eyo,100,20,Vocab::def+"+"+helm.def.to_s)
  self.contents.draw_text(253+@exo,200+@eyo,100,20,Vocab::spi+"+"+helm.spi.to_s)
  self.contents.draw_text(287+@exo,200+@eyo,100,20,Vocab::agi+"+"+helm.agi.to_s)
  end
 
  if body
  self.contents.draw_text(185+@exo,230+@eyo,100,20,Vocab::atk+"+"+body.atk.to_s)
  self.contents.draw_text(219+@exo,230+@eyo,100,20,Vocab::def+"+"+body.def.to_s)
  self.contents.draw_text(253+@exo,230+@eyo,100,20,Vocab::spi+"+"+body.spi.to_s)
  self.contents.draw_text(287+@exo,230+@eyo,100,20,Vocab::agi+"+"+body.agi.to_s)
  end
 
  if accessory
  self.contents.draw_text(185+@exo,260+@eyo,100,20,Vocab::atk+"+"+accessory.atk.to_s)
  self.contents.draw_text(219+@exo,260+@eyo,100,20,Vocab::def+"+"+accessory.def.to_s)
  self.contents.draw_text(253+@exo,260+@eyo,100,20,Vocab::spi+"+"+accessory.spi.to_s)
  self.contents.draw_text(287+@exo,260+@eyo,100,20,Vocab::agi+"+"+accessory.agi.to_s)
  end
  end
 
   if Mode == 2
     self.contents.font.size = Fontsize - 8
     self.contents.font.color = Color.new(155,199,206,255)
     self.contents.draw_text(23,100,125,20,"POINTS",2)
     self.contents.draw_text(29,110,125,20,"REQUIRED",2)
     self.contents.font.size = Fontsize - 4
     self.contents.draw_text(20,125,115,20,required(actor.atk-bonus_atk).to_s,2)
     self.contents.draw_text(20,155,115,20,required(actor.def-bonus_def).to_s,2)
     self.contents.draw_text(20,185,115,20,required(actor.spi-bonus_spi).to_s,2)
     self.contents.draw_text(20,215,115,20,required(actor.agi-bonus_agi).to_s,2)
   end

  if LayoutMode == 2
  self.contents.font.color = Color.new(155,199,206,255)
  self.contents.font.size = Fontsize - 8
  if weapon
  self.contents.draw_text(185+@exo2,140+OFFSET+@eyo,100,20,Vocab::atk+"+"+weapon.atk.to_s)
  self.contents.draw_text(185+@exo2,150+OFFSET+@eyo,100,20,Vocab::def+"+"+weapon.def.to_s)
  self.contents.draw_text(253+@exo2,140+OFFSET+@eyo,100,20,Vocab::spi+"+"+weapon.spi.to_s)
  self.contents.draw_text(253+@exo2,150+OFFSET+@eyo,100,20,Vocab::agi+"+"+weapon.agi.to_s)
  end

  if shield
  self.contents.draw_text(185+@exo2,180+OFFSET+@eyo,100,20,Vocab::atk+"+"+shield.atk.to_s)
  self.contents.draw_text(185+@exo2,190+OFFSET+@eyo,100,20,Vocab::def+"+"+shield.def.to_s)
  self.contents.draw_text(253+@exo2,180+OFFSET+@eyo,100,20,Vocab::spi+"+"+shield.spi.to_s)
  self.contents.draw_text(253+@exo2,190+OFFSET+@eyo,100,20,Vocab::agi+"+"+shield.agi.to_s)
  end
 
  if helm
  self.contents.draw_text(185+@exo2,220+OFFSET+@eyo,100,20,Vocab::atk+"+"+helm.atk.to_s)
  self.contents.draw_text(185+@exo2,230+OFFSET+@eyo,100,20,Vocab::def+"+"+helm.def.to_s)
  self.contents.draw_text(253+@exo2,220+OFFSET+@eyo,100,20,Vocab::spi+"+"+helm.spi.to_s)
  self.contents.draw_text(253+@exo2,230+OFFSET+@eyo,100,20,Vocab::agi+"+"+helm.agi.to_s)
  end
 
  if body
  self.contents.draw_text(185+@exo2,260+OFFSET+@eyo,100,20,Vocab::atk+"+"+body.atk.to_s)
  self.contents.draw_text(185+@exo2,270+OFFSET+@eyo,100,20,Vocab::def+"+"+body.def.to_s)
  self.contents.draw_text(253+@exo2,260+OFFSET+@eyo,100,20,Vocab::spi+"+"+body.spi.to_s)
  self.contents.draw_text(253+@exo2,270+OFFSET+@eyo,100,20,Vocab::agi+"+"+body.agi.to_s)
  end
 
  if accessory
  self.contents.draw_text(185+@exo2,300+OFFSET+@eyo,100,20,Vocab::atk+"+"+accessory.atk.to_s)
  self.contents.draw_text(185+@exo2,310+OFFSET+@eyo,100,20,Vocab::def+"+"+accessory.def.to_s)
  self.contents.draw_text(253+@exo2,300+OFFSET+@eyo,100,20,Vocab::spi+"+"+accessory.spi.to_s)
  self.contents.draw_text(253+@exo2,310+OFFSET+@eyo,100,20,Vocab::agi+"+"+accessory.agi.to_s)
  end
  end
end

  def required(base)
   return (((base-1)/10)+2).floor
  end
 
end

#==============================================================================
# ** Lettuce_Window_Help
#------------------------------------------------------------------------------
#  This window displays property of each attribute
#==============================================================================
class Lettuce_Window_Help < Window_Base
  def initialize(index)
   super(401,372,144,44)
   self.contents = Bitmap.new(width-32,height-32)
   self.contents.font.size = Fontsize - 6
   refresh(index)
  end
 
  def refresh(index)
   self.contents.clear
  self.contents.font.color = text_color(16)

    case index
    when 0
      self.contents.draw_text(0,-5,112,20,"HP + "+HPIncreaseBy.to_s)
    when 1
      self.contents.draw_text(0,-5,112,20,"MP + "+MPIncreaseBy.to_s)
    when 2
      self.contents.draw_text(0,-5,112,20,Vocab::atk+" + "+IncreaseBy.to_s)
    when 3
      self.contents.draw_text(0,-5,112,20,Vocab::def+" + "+IncreaseBy.to_s)
    when 4
      self.contents.draw_text(0,-5,112,20,Vocab::spi+" + "+IncreaseBy.to_s)
    when 5
      self.contents.draw_text(0,-5,112,20,Vocab::agi+" + "+IncreaseBy.to_s)
    when 6
      self.contents.draw_text(0,-5,112,20,"HIT + "+HITIncreaseBy.to_s)
    when 7
      self.contents.draw_text(0,-5,112,20,"EVA + "+EVAIncreaseBy.to_s)
    when 8
      self.contents.draw_text(0,-5,112,20,"CRIT + "+CRITIncreaseBy.to_s)
    end

 
  end
 
end
 

#==============================================================================
# ** Scene_Stat_Dist
#------------------------------------------------------------------------------
#  Performs stat distribution process :)
#==============================================================================
class Scene_Stat_Dist < Scene_Base
  def initialize(menu_index)
   @menu_index = menu_index
  end
 
  def start
   super
   create_menu_background
  ihp = Vocab::hp
  imp = Vocab::mp
   i1 = Vocab::atk
   i2 = Vocab::def
   i3 = Vocab::spi
   i4 = Vocab::agi
  i5 = "HIT"
  i6 = "EVA"
  i7 = "CRIT"
   @window_select = Window_Command.new(144,[ihp,imp,i1,i2,i3,i4,i5,i6,i7])
   if $position
     @window_select.index = $position - 1
   else
     @window_select.index = 0
   end
   
   @window_select.active = true
   @window_select.x = 401
   @window_select.y = 71
   
   @window_top = Lettuce_Window_Top.new
   @window_points = Lettuce_Window_Points.new(@menu_index)
   @window_info = Lettuce_Window_Info.new(@menu_index)
   @window_help = Lettuce_Window_Help.new(@window_select.index)
  end
   
  def terminate
   super
   dispose_menu_background
   @window_top.dispose
   @window_points.dispose
   @window_info.dispose
   @window_help.dispose
   @window_select.dispose
  end
 
  def update
   update_menu_background
   #@window_points.refresh(@menu_index)
 
   @window_select.update
   #@window_help.refresh(@window_select.index)
  if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
    @window_help.refresh(@window_select.index)
  end
 
   @changes = 0
   if Input.trigger?(Input::B)
     Sound.play_cancel
     $scene = Scene_Map.new
   elsif Input.trigger?(Input::R) or Input.trigger?(Input::RIGHT)
     @menu_index += 1
     @menu_index %= $game_party.members.size
     $scene = Scene_Stat_Dist.new(@menu_index)
   elsif Input.trigger?(Input::L) or Input.trigger?(Input::LEFT)
     @menu_index += $game_party.members.size - 1
     @menu_index %= $game_party.members.size
     $scene = Scene_Stat_Dist.new(@menu_index)
   elsif Input.trigger?(Input::C)
     #Points addition begins
     #which attribute
     if Mode == 1
      do_point_reg
     elsif Mode == 2
      do_point_rag
     end
   end 

  end
 
  def do_point_reg
   @att = @window_select.index
 
  actor = $game_party.members[@menu_index]
 
##weapons
  weapon = $data_weapons[actor.weapon_id]
  shield = $data_armors[actor.armor1_id]
  helm =$data_armors[actor.armor2_id]
  body =$data_armors[actor.armor3_id]
  accessory =$data_armors[actor.armor4_id]
 
  bonus_atk = 0
  bonus_def = 0
  bonus_spi = 0
  bonus_agi = 0
 
  if weapon
    bonus_atk += weapon.atk
    bonus_def += weapon.def
    bonus_spi += weapon.spi
    bonus_agi += weapon.agi
  end
  if shield
    bonus_atk += shield.atk
    bonus_def += shield.def
    bonus_spi += shield.spi
    bonus_agi += shield.agi
  end
    if helm
    bonus_atk += helm.atk
    bonus_def += helm.def
    bonus_spi += helm.spi
    bonus_agi += helm.agi
  end
    if body
    bonus_atk += body.atk
    bonus_def += body.def
    bonus_spi += body.spi
    bonus_agi += body.agi
  end
    if accessory
    bonus_atk += accessory.atk
    bonus_def += accessory.def
    bonus_spi += accessory.spi
    bonus_agi += accessory.agi
  end
 
     case @att
   
    when 0 #HP
      if actor.points < PointsPerHP
        Sound.play_cancel
      elsif actor.maxhp >= MaxHP
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].maxhp += HPIncreaseBy
      if $game_party.members[@menu_index].maxhp > MaxHP
        $game_party.members[@menu_index].maxhp = MaxHP
      end
        actor.points -= PointsPerHP
        @changes += 1
      $position = 1
      end
   
    when 1 #MP
      if actor.points < PointsPerMP
        Sound.play_cancel
      elsif actor.maxmp >= MaxMP
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].maxmp += MPIncreaseBy
      if $game_party.members[@menu_index].maxmp > MaxMP
        $game_party.members[@menu_index].maxmp = MaxMP
      end
        actor.points -= PointsPerMP
        @changes += 1
      $position = 1
      end
   
     when 2 #ATK
      if actor.points < 1
        Sound.play_cancel
      elsif (actor.atk-bonus_atk) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].atk += IncreaseBy
      if ($game_party.members[@menu_index].atk-bonus_atk) > MaxStat
        $game_party.members[@menu_index].atk = MaxStat+bonus_atk
      end
        actor.points -= 1
        @changes += 1
      $position = 1
      end
      
     when 3 #DEF
      if actor.points < 1
        Sound.play_cancel
      elsif (actor.def-bonus_def) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].def += IncreaseBy
      if ($game_party.members[@menu_index].def-bonus_def) > MaxStat
        $game_party.members[@menu_index].def = MaxStat+bonus_def
      end
        actor.points -= 1
        @changes += 1
      $position = 2
      end
      
     when 4 #SPI
      if actor.points < 1
        Sound.play_cancel
      elsif (actor.spi-bonus_spi) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].spi += IncreaseBy
      if ($game_party.members[@menu_index].spi-bonus_spi) > MaxStat
        $game_party.members[@menu_index].spi = MaxStat+bonus_spi
      end
        actor.points -= 1
        @changes += 1
      $position = 3
      end
     when 5 #AGI
      if actor.points < 1
        Sound.play_cancel
      elsif (actor.agi-bonus_agi) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].agi += IncreaseBy
      if ($game_party.members[@menu_index].agi-bonus_agi) > MaxStat
        $game_party.members[@menu_index].agi = MaxStat+bonus_agi
      end
        actor.points -= 1
        @changes += 1
      $position = 4
      end
    
    
    when 6 #HIT
      if actor.points < PointsPerHIT
        Sound.play_cancel
      elsif actor.hitr >= MaxHIT
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].hitr += HITIncreaseBy
      if $game_party.members[@menu_index].hitr > MaxHIT
        $game_party.members[@menu_index].hitr = MaxHIT
      end
        actor.points -= PointsPerHIT
        @changes += 1
      $position = 1
      end
    when 7 #EVA
      if actor.points < PointsPerEVA
        Sound.play_cancel
      elsif actor.evar >= MaxEVA
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].evar += EVAIncreaseBy
      if $game_party.members[@menu_index].evar > MaxEVA
        $game_party.members[@menu_index].evar = MaxEVA
      end
        actor.points -= PointsPerEVA
        @changes += 1
      $position = 1
      end
    when 8 #CRIT
      if actor.points < PointsPerCRIT
        Sound.play_cancel
      elsif actor.crir >= MaxCRIT
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].crir += CRITIncreaseBy
      if $game_party.members[@menu_index].crir > MaxCRIT
        $game_party.members[@menu_index].crir = MaxCRIT
      end
        actor.points -= PointsPerCRIT
        @changes += 1
      $position = 1
      end
  end
 
  if @changes > 0
      @window_info.refresh(@menu_index)
      @window_points.refresh(@menu_index)
        #$scene = Scene_Stat_Dist.new(@menu_index)
     end
  end
 
  def do_point_rag
   @att = @window_select.index
 
  actor = $game_party.members[@menu_index]
 
##weapons
  weapon = $data_weapons[actor.weapon_id]
  shield = $data_armors[actor.armor1_id]
  helm =$data_armors[actor.armor2_id]
  body =$data_armors[actor.armor3_id]
  accessory =$data_armors[actor.armor4_id]
 
  bonus_atk = 0
  bonus_def = 0
  bonus_spi = 0
  bonus_agi = 0
 
  if weapon
    bonus_atk += weapon.atk
    bonus_def += weapon.def
    bonus_spi += weapon.spi
    bonus_agi += weapon.agi
  end
  if shield
    bonus_atk += shield.atk
    bonus_def += shield.def
    bonus_spi += shield.spi
    bonus_agi += shield.agi
  end
    if helm
    bonus_atk += helm.atk
    bonus_def += helm.def
    bonus_spi += helm.spi
    bonus_agi += helm.agi
  end
    if body
    bonus_atk += body.atk
    bonus_def += body.def
    bonus_spi += body.spi
    bonus_agi += body.agi
  end
    if accessory
    bonus_atk += accessory.atk
    bonus_def += accessory.def
    bonus_spi += accessory.spi
    bonus_agi += accessory.agi
  end
 
     case @att
   
    when 0 #HP
      if actor.points < PointsPerHP
        Sound.play_cancel
      elsif actor.maxhp >= MaxHP
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].maxhp += HPIncreaseBy
      if $game_party.members[@menu_index].maxhp > MaxHP
        $game_party.members[@menu_index].maxhp = MaxHP
      end
        actor.points -= PointsPerHP
        @changes += 1
      $position = 1
      end
   
    when 1 #MP
      if actor.points < PointsPerMP
        Sound.play_cancel
      elsif actor.maxmp >= MaxMP
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].maxmp += MPIncreaseBy
      if $game_party.members[@menu_index].maxmp > MaxMP
        $game_party.members[@menu_index].maxmp = MaxMP
      end
        actor.points -= PointsPerMP
        @changes += 1
      $position = 1
      end
   
     when 2 #ATK
      base_value = actor.atk-bonus_atk
      points = actor.points
      if enough_point(base_value,points)
        Sound.play_cancel
      elsif (actor.atk-bonus_atk) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].atk += IncreaseBy
      if ($game_party.members[@menu_index].atk-bonus_atk) > MaxStat
        $game_party.members[@menu_index].atk = MaxStat+bonus_atk
      end
        actor.points -= required(base_value)
        @changes += 1
        $position = 1
      end
      
     when 3 #DEF
      base_value = actor.def-bonus_def
      points = actor.points
      if enough_point(base_value,points)
        Sound.play_cancel
      elsif (actor.def-bonus_def) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].def += IncreaseBy
      if ($game_party.members[@menu_index].def-bonus_def) > MaxStat
        $game_party.members[@menu_index].def = MaxStat+bonus_def
      end
        actor.points -= required(base_value)
        @changes += 1
        $position = 2
      end
      
     when 4 #SPI
      base_value = actor.spi-bonus_spi
      points = actor.points
      if enough_point(base_value,points)
        Sound.play_cancel
      elsif (actor.spi-bonus_spi) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].spi += IncreaseBy
      if ($game_party.members[@menu_index].spi-bonus_spi) > MaxStat
        $game_party.members[@menu_index].spi = MaxStat+bonus_spi
      end
        actor.points -= required(base_value)
        @changes += 1
        $position = 3
      end
     when 5 #AGI
      base_value = actor.agi-bonus_agi
      points = actor.points
      if enough_point(base_value,points)
        Sound.play_cancel
      elsif (actor.agi-bonus_agi) >= MaxStat
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].agi += IncreaseBy
      if ($game_party.members[@menu_index].agi-bonus_agi) > MaxStat
        $game_party.members[@menu_index].agi = MaxStat+bonus_agi
      end
        actor.points -= required(base_value)
        @changes += 1
        $position = 4
      end
    when 6 #HIT
      if actor.points < PointsPerHIT
        Sound.play_cancel
      elsif actor.hitr >= MaxHIT
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].hitr += HITIncreaseBy
      if $game_party.members[@menu_index].hitr > MaxHIT
        $game_party.members[@menu_index].hitr = MaxHIT
      end
        actor.points -= PointsPerHIT
        @changes += 1
      $position = 1
      end
    when 7 #EVA
      if actor.points < PointsPerEVA
        Sound.play_cancel
      elsif actor.evar >= MaxEVA
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].evar += EVAIncreaseBy
      if $game_party.members[@menu_index].evar > MaxEVA
        $game_party.members[@menu_index].evar = MaxEVA
      end
        actor.points -= PointsPerEVA
        @changes += 1
      $position = 1
      end
    when 8 #CRIT
      if actor.points < PointsPerCRIT
        Sound.play_cancel
      elsif actor.crir >= MaxCRIT
        Sound.play_cancel
      else
      Sound.play_use_item
        $game_party.members[@menu_index].crir += CRITIncreaseBy
      if $game_party.members[@menu_index].crir > MaxCRIT
        $game_party.members[@menu_index].crir = MaxCRIT
      end
        actor.points -= PointsPerCRIT
        @changes += 1
      $position = 1
      end
     end
     if @changes > 0
      @window_points.refresh(@menu_index)
      @window_info.refresh(@menu_index)
      #$scene = Scene_Stat_Dist.new(@menu_index)
     end
  end
 
  def enough_point(base,points)
   required = (((base-1)/10)+2).floor
   if required > points
     return true
   elsif required <= points
     return false
   end
  end
 
  def required(base)
   return (((base-1)/10)+2).floor
  end
 
end


#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  Giving game actor a point attribute
#  -> $game_party.member[x].points
#==============================================================================

class Game_Actor < Game_Battler

  attr_accessor :points
  attr_accessor :hit_bonus
  attr_accessor :eva_bonus
  attr_accessor :cri_bonus
  attr_accessor :hitr
  attr_accessor :evar
  attr_accessor :crir
  #attr_accessor :current_lvl_exp
  #attr_accessor :next_lvl_exp
  alias Lettuce_Game_Actor_Ini initialize
 
  def initialize(actor_id)
    Lettuce_Game_Actor_Ini(actor_id)
    @points = StartPoints
    @hitr = 0
    @evar = 0
    @crir = 0
    #@current_lvl_exp = @exp_list[@level-1]
    #@next_lvl_exp = @exp_list[@level]
  end

  def points
    return @points
  end
 
  #--------------------------------------------------------------------------
  # * Get Hit Rate
  #--------------------------------------------------------------------------
  def hit
    if two_swords_style
      n1 = weapons[0] == nil ? 95 : weapons[0].hit
      n2 = weapons[1] == nil ? 95 : weapons[1].hit
      n = [n1, n2].min
    else
      n = weapons[0] == nil ? 95 : weapons[0].hit
    end
    if n+@hitr <= MaxHIT
    return n+@hitr
  else return MaxHIT
    end
  end
  #--------------------------------------------------------------------------
  # * Get Evasion Rate
  #--------------------------------------------------------------------------
  def eva
    n = 5
    for item in armors.compact do n += item.eva end
    if n+@evar <= MaxEVA
    return n+@evar
  else return MaxEVA
    end
  end
  #--------------------------------------------------------------------------
  # * Get Critical Ratio
  #--------------------------------------------------------------------------
  def cri
    n = 4
    n += 4 if actor.critical_bonus
    for weapon in weapons.compact
      n += 4 if weapon.critical_bonus
    end
    if n+@crir <= MaxCRIT
      return n+@crir
    else return MaxCRIT
      end
  end
 
 #--------------------------------------------------------------------------
  # * Get Hit Rate
  #--------------------------------------------------------------------------
  def base_hit
    if two_swords_style
      n1 = weapons[0] == nil ? 95 : weapons[0].hit
      n2 = weapons[1] == nil ? 95 : weapons[1].hit
      n = [n1, n2].min
    else
      n = weapons[0] == nil ? 95 : weapons[0].hit
    end
    return n
  end
  #--------------------------------------------------------------------------
  # * Get Evasion Rate
  #--------------------------------------------------------------------------
  def base_eva
    n = 5
    for item in armors.compact do n += item.eva end
    return n
  end
  #--------------------------------------------------------------------------
  # * Get Critical Ratio
  #--------------------------------------------------------------------------
  def base_cri
    n = 4
    n += 4 if actor.critical_bonus
    for weapon in weapons.compact
      n += 4 if weapon.critical_bonus
    end
    return n
  end
 
 
  #--------------------------------------------------------------------------
  # * bonus rates
  #-------------------------------------------------------------------------- 
  def hitr
    return @hitr
  end
 
  def evar
    return @evar
  end
 
  def crir
    return @crir
  end
   
   
 
  def current_lvl_exp
    return @exp_list[@level]
  end
 
  def next_lvl_exp
    return @exp_list[@level+1]-@exp_list[@level]
  end
end

Como Usar

Para Char o Script Use
Código:
$scene = Scene_Stat_Dist.new(0)

Para Mudar a Qtd de Pontos Por Lv Mude.
Código:
$game_party.members[<member ID>].points += <amount of points>
mude <member ID> para o Personagem da Party e <amount of points> para qtd, você pode configurar para qualquer char uma qtd....
Tsubasa
Tsubasa
Iniciante
Iniciante

Mensagens : 20
Moedas : 5411

Data de inscrição : 10/09/2009
Idade : 31

Ir para o topo Ir para baixo

Destribuir Status Empty Re: Destribuir Status

Mensagem por Kiin Qui 10 Set 2009 - 22:08

Ótimo script !!
Nossa, muito perfeito, agora sim vai dar para fazer um MMORPG muuito bom !
Sabe se funciona no XP ?
Obrigaada por disponilibizar + 5 Moedas
Kiin
Kiin
Administrador
Administrador

Mensagens : 34
Moedas : 5850

Data de inscrição : 05/09/2009
Idade : 29
Localização : RS

https://planetmaker.forumeiros.com

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos