으헝헝.
최고의 스크립트라고 생각됩니다.
완벽하죠.
이 스크립트 효과는 보통의 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 님이 만드신거에요
잘써주세요