VX 스크립트

 Project1.exe


으헝헝.
최고의 스크립트라고 생각됩니다.
완벽하죠.
이 스크립트 효과는 보통의 RPG 처럼 스탯을 찍어 능력치를 성장시키는 것입니다.

사용법은
$scene = Scene_Stat_Dist.new(0)
이것을 (이벤트를 통해) 스크립트로 적용시킨후 이벤트와 접촉하면 됩니다.(물론 아래의 스크립트는 메인 위쪽에 삽입해주셔야겠지요.)
Crit 는 크리티컬공격을 할 퍼센트 또 뭐드라.. Hit 는 명중률.. 글고 EVA는 회피입니다.


원본 주소: http://www.rmxp.org/forums/index.php?topic=46347.0


스샷


=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


출처는 Lettuce 님이 만드신거에요

잘써주세요

Comment '29'
  • ?
    변남 2008.08.08 11:14
    이게 스크립트가 어떤 능력을 가진 건지 잘 모르겠는데...
    아무튼
    감사합니다.
    근데 난 쓰니까
    48줄 오류....?
  • ?
    아담 2008.08.08 11:19
    오류가 한두군데가 아니군요 ㅡ.ㅡ;;
    스크립트 자체가 이상하네요. 옮기는 도중 인식이 잘못 된것 같은데 원본 주소를 가르쳐주세요.

    그리고 48줄 오류는 주석처리부분에서 end를 써서 오류가 나는겁니다.
    지우면 되구요.
  • ?
    츠키아 2008.08.08 11:25
    이 스크립트 효과는 보통의 RPG 처럼 스탯을 찍어 능력치를 성장시키는 것이고요
    예제 파일 올릴게요

    아담/ 전 잘 되는데요.....
  • ?
    츠키아 2008.08.08 11:32
    출처도 올렸습니다
  • ?
    유키히로 2008.08.08 14:50

    그냥 붙여넣으면 돼나 ㅇ?

  • ?
    츠키아 2008.08.08 17:49
    유키히로님 메인 위에 걍 삽입하세요
  • ?
    아방스마니아 2008.08.08 18:13
    뭐가잘돼요;..
    오류엄청많구만
  • ?
    정의로운녀석 2008.08.10 15:27

    RMXP 스크립터들은 TOMY보다 유용성같은건 좋지만..  역시 커스텀이 너무 약하다는;

  • ?
    만들어보자꾸나 2008.08.11 14:32

     좋은 스크립트네요..
     다만, 장비확장 스크립트와 같이 쓰려면 좀 뜯어고쳐야겟네요;
     어쨌든 감사합니다.

  • ?
    츠키아 2008.08.11 15:02
    아방스매니아/ 님이 다른 스크립트랑 연동해서 사용하시다가 스크립트간 충돌일어난걸 가지고 왜 이 스크립트 탓을 하는지요.
  • ?
    RPG만들기의천재 2008.08.13 03:58
    흠좋긴한데,,,,,
    레벨업을하여도
    포인트는 올라가지않는다는게좀...
  • ?
    자유소년 2008.08.15 20:39
    저도 그렇습니다. 레벨업을 해도,
    포인트가 올라가지 않습니다..
  • ?
    zerobm 2008.08.23 11:49
    뭥미.. 레벨업해도 포인트안올라감 ; 완벽하긴한데 쫌 그렇네
  • ?
    KG3 2008.09.01 20:31

    되긴 되네요 ㅎㅎ
    랩업해도 포인트가 안올라서 그렇지......
    굿이예염

  • ?
    시옷청룡 2008.10.01 17:39
    안뎀...ㅁ
  • ?
    plusll 2008.10.12 10:28
    감사합니다^^
  • ?
    다크아머 2008.10.25 11:02
    좋은자료 감사하므니다.
  • profile
    요시2 2008.11.16 18:54
    좋은 자료 감사합니다.
  • ?
    츠키아 2008.12.03 15:30
    렙업했을시 포인트 올리는건 이벤트 처리 해주시면 됩니다;;
  • ?
    Mok 2008.12.19 03:10
    이벤트 처리 어떤식으로 해야하죠??
    포인트는 변수값인가요??

    스크립트에 대해서 잘몰라서;;
    레벨업마다 포인트를 주려면 어떻게 해야하나요~~ㅎㅎ
  • ?
    피터 2008.12.11 22:42
    ..후아...설명이 없으니 어디를 어떻게 만저야할지 모르겠네...
  • ?
    루이14세 2009.02.01 15:21
    안되는데요....
  • ?
    훈덕 2009.05.07 16:55

    렙업시 포인트 올리는 방법입니다:

    스크립트 에디터에서 Game_Actor로 가서 컨트롤+F 누르고 def change_exp 를 찾는다.

    거기서 level_up 이라는 라인 밑에 아래 코드를 붙여 넣는다.

          #---------Give Points
          difference = @level - last_level
          $game_actors[@actor_id].points += ((@level/5).floor+2).floor*difference
          #actor.points += ((@level/5).floor+2).floor*difference
          #---------Done giving points :D

  • ?
    화염 2009.12.26 22:04

    뭔지잘모르겟음 ㅋㅋ

  • ?
    dwjsdf 2010.01.20 11:15

    감사해요

  • profile
    비극ㆍ 2010.02.10 09:56

    SyntaxError occured while running script

    라고 뜨네여...

    충돌인가여 아니면 오륜가여...?

  • profile
    JEWAPPI 2010.06.23 23:03

    이거슨 완벽한 제가 찾던 스크립트임...!!

    이벤트로도 가능하지만

    이렇게 심플하고 상세하게 나오다니...!

  • ?
    ijsh515 2010.07.10 10:46

  • ?
    허시 2011.06.20 22:21

    잘 쓸게용~