Project1

标题: 有关人物仓库的问题 [打印本页]

作者: 峰星    时间: 2011-1-31 22:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: 451483807    时间: 2011-1-31 23:49
学了脚本就可以自己解决了。设置些开关和条件之类的。具体的要靠自己去研究,我没看到脚本也说不出个什么。。。好好研究,你一定可以学会脚本的。
作者: 银·乌尔    时间: 2011-2-1 12:59
好吧,星星请带上脚本或工程吧,
这个需要加点东西就能解决掉的~
作者: 峰星    时间: 2011-2-1 13:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 银·乌尔    时间: 2011-2-1 14:02
现在,要问的是,星星想在仓库里放多少人?
或者,有队员加入的时候,如果队伍满了就加入仓库?
作者: piaoy    时间: 2011-2-1 14:24
人往仓库放??是不是替换队员额??没看懂
作者: 银·乌尔    时间: 2011-2-1 19:00
我只是把脚本改了一点,
角色满4个的时候加入人物仓库,
然后自己可以添加不能移动的角色ID,
银在必要的地方写了标志,
脚本里搜索"# 银"查看:
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #==============================================================================
  5. # ■ chaochao的人物仓库ver1.02正式版
  6. # 修改了Game_Party
  7. # 功能:
  8. # 用来存放角色的仓库……
  9. # 召唤画面用$scene = Chaochao_Scene_Party.new
  10. # 其它使用说明在代码里已经备注。
  11. #------------------------------------------------------------------------------
  12. # 作者:chaochao
  13. # http://zhuchao.go1.icpcn.com
  14. #==============================================================================
  15. class Chaochao_Window_PartyLeft < Window_Selectable
  16.   def initialize
  17.     super(0, 0, 320, 224)
  18.     self.contents = Bitmap.new(width - 32, height - 32)
  19.     self.index = 0
  20.     refresh
  21.   end
  22.   def actor
  23.     return @actors[self.index]
  24.   end
  25.   def refresh
  26.     if self.contents != nil
  27.       self.contents.dispose
  28.       self.contents = nil
  29.     end
  30.     @actors = []
  31.     for i in 0...$game_party.actors.size
  32.       @actors.push($game_party.actors[i])
  33.     end
  34.    
  35.     @item_max = 4
  36.     if @item_max > 0
  37.       self.contents = Bitmap.new(width - 32, (row_max+1) * 32)
  38.       for i in 0...@item_max
  39.         draw_item(i)
  40.       end
  41.     end
  42.   end
  43.   
  44.   def draw_item(index)
  45.     if @actors[index] != nil
  46.       actor = @actors[index]
  47.       text = @actors[index].name
  48.       lv = @actors[index].level.to_s + " "
  49.       if $game_party.chaochao.include?(actor.id) or $game_party.actors.size <= 1
  50.         self.contents.font.color = Color.new(255, 0, 0) #不能被移动的颜色
  51.       else
  52.         self.contents.font.color = Color.new(0, 255, 0) #可以被移动的颜色
  53.       end
  54.       self.contents.draw_text(4, index * 32 + 32, 288, 32, text)
  55.       self.contents.font.color = normal_color
  56.       self.contents.font.size = 16
  57.       self.contents.draw_text(4, index * 32 + 36, 288, 32,  "Level:   ", 2)
  58.       colorx = [255.0000 - 255.0000/60 * @actors[index].level,0].max
  59.       colory = [255.0000 / 60 * @actors[index].level,255].min
  60.       self.contents.font.color = Color.new(colorx, colory, 0)
  61.       self.contents.draw_text(4, index * 32 + 36, 288, 32,  lv, 2)
  62.       self.contents.font.color = normal_color
  63.       self.contents.font.size = 22
  64.     else
  65.       self.contents.draw_text(4, index * 32 + 32, 288, 32,  "米有人物!")
  66.     end
  67.   end
  68.   def update_cursor_rect
  69.     if @index < 0
  70.       self.cursor_rect.empty
  71.       return
  72.     end
  73.     row = @index / @column_max
  74.     if row < self.top_row
  75.       self.top_row = row
  76.     end
  77.     if row > self.top_row + (self.page_row_max - 1)
  78.       self.top_row = row - (self.page_row_max - 1)
  79.     end
  80.     cursor_width = self.width / @column_max - 32
  81.     x = @index % @column_max * (cursor_width + 32)
  82.     y = @index / @column_max * 32 - self.oy + 32
  83.     self.cursor_rect.set(x, y, cursor_width, 32)
  84.   end
  85.   def item_max
  86.     return @item_max
  87.   end
  88.   def actor?(index)
  89.     return @actors[index] == nil ? false : true
  90.   end
  91.   def set_index(x)
  92.     @index = x
  93.   end
  94. end

  95. #------------------------------------------------------------------------------

  96. class Chaochao_Window_PartyRight < Window_Selectable
  97.   def initialize
  98.     super(320, 0, 320, 224)
  99.     self.contents = Bitmap.new(width - 32, height - 32)
  100.     self.index = -1
  101.     refresh
  102.   end
  103.   def actor
  104.     return @actors[self.index]
  105.   end
  106.   def refresh
  107.     if self.contents != nil
  108.       self.contents.dispose
  109.       self.contents = nil
  110.     end
  111.     @actors = []
  112.     for i in 0...$game_party.actors2.size
  113.       @actors.push($game_party.actors2[i])
  114.     end
  115.    
  116.     @item_max = $game_party.actors2.size
  117.     if @item_max > 0
  118.       self.contents = Bitmap.new(width - 32, row_max * 32)
  119.       for i in 0...@item_max
  120.         draw_item(i)
  121.       end
  122.     elsif @item_max == 0
  123.       
  124.     end
  125.   end
  126.   def draw_item(index)
  127.     actor = @actors[index]
  128.     text = @actors[index].name
  129.     lv = @actors[index].level.to_s + " "
  130.     if $game_party.chaochao2.include?(actor.id) or $game_party.actors.size >= 4
  131.         self.contents.font.color = Color.new(255, 0, 0) #不能被移动的颜色
  132.       else
  133.         self.contents.font.color = Color.new(0, 255, 0) #可以被移动的颜色
  134.       end
  135.     self.contents.draw_text(4, index * 32, 288, 32, text)
  136.     self.contents.font.color = normal_color
  137.     self.contents.font.size = 16
  138.     self.contents.draw_text(4, index * 32 + 4, 288, 32,  "Level:   ", 2)
  139.     colorx = [255.0000 - 255.0000/60 * @actors[index].level,0].max
  140.     colory = [255.0000 / 60 * @actors[index].level,255].min
  141.     self.contents.font.color = Color.new(colorx, colory, 0)
  142.     self.contents.draw_text(4, index * 32 + 4, 288, 32,  lv, 2)
  143.     self.contents.font.color = normal_color
  144.     self.contents.font.size = 22
  145.   end
  146.   def update_cursor_rect
  147.     if @index < 0
  148.       self.cursor_rect.empty
  149.       return
  150.     end
  151.     row = @index / @column_max
  152.     if row < self.top_row
  153.       self.top_row = row
  154.     end
  155.     if row > self.top_row + (self.page_row_max - 1)
  156.       self.top_row = row - (self.page_row_max - 1)
  157.     end
  158.     cursor_width = self.width / @column_max - 32
  159.     x = @index % @column_max * (cursor_width + 32)
  160.     y = @index / @column_max * 32 - self.oy
  161.     self.cursor_rect.set(x, y, cursor_width, 32)
  162.   end
  163.   def item_max
  164.     return @item_max
  165.   end
  166.   def actor?(index)
  167.     return @actors[index] == nil ? false : true
  168.   end
  169.   def set_index(x)
  170.     @index = x
  171.   end
  172. end

  173. #------------------------------------------------------------------------------

  174. class Chaochao_Window_PartyData < Window_Base
  175.   
  176.   def initialize
  177.     super(0, 224, 640, 256)
  178.     self.contents = Bitmap.new(width - 32, height - 32)
  179.     @actor = nil
  180.   end
  181.   
  182.   def set_actor(actor)
  183.     self.contents.clear
  184.     draw_actor_name(actor, 4, 0)
  185.     draw_actor_state(actor, 140, 0)
  186.     draw_actor_hp(actor, 284, 0)
  187.     draw_actor_sp(actor, 460, 0)
  188.     @actor = actor
  189.     self.visible = true
  190.   end
  191.   def clear
  192.     self.contents.clear
  193.   end
  194. end

  195. #------------------------------------------------------------------------------

  196. class Game_Party
  197.   attr_reader   :actors2
  198.   attr_accessor   :chaochao#不能从队伍向备用角色移动的角色ID
  199.   attr_reader   :chaochao2#不能从备用角色向队伍移动的角色ID
  200.   def initialize
  201.     @actors = []
  202.     @gold = 0
  203.     @steps = 0
  204.     @items = {}
  205.     @weapons = {}
  206.     @armors = {}
  207.     @actors2 = []

  208.     @chaochao = [] # 银~这里添加不能移动的角色的ID..用","隔开
  209.     @chaochao2 = []
  210.   end
  211.   
  212.   def chaochao
  213.     return @chaochao if @chaochao != nil
  214.   end
  215.   
  216.   def add_actor(actor_id,type=1)#type为1是向队伍中添加,为2则加入仓库。
  217.     case type
  218.     when 1
  219.       if $game_actors[actor_id] != nil
  220.         actor = $game_actors[actor_id]
  221.         #如果队伍没有满和队伍中没有此角色
  222. # 银~改 向队伍加入角色的时候,当队伍满了,就加入仓库
  223. if @actors.size < 4
  224.   
  225. if [email protected]?(actor)
  226. @actors.push(actor)
  227. $game_player.refresh
  228. end
  229. else
  230. if [email protected]?(actor)
  231. @actors2.push(actor)
  232. $game_player.refresh
  233. end

  234. end
  235. # ==============
  236.       end
  237.     when 2
  238.       if $game_actors[actor_id] != nil
  239.         actor = $game_actors[actor_id]
  240.         #如果角色不在队伍中和不在备用角色队伍中的情况下
  241.         #向备用角色中添加角色
  242.         if not @actors.include?(actor) and not @actors2.include?(actor)
  243.           @actors2.push(actor)
  244.           $game_player.refresh
  245.         end
  246.       end
  247.     end
  248.   end
  249.   
  250.   def huanren(index,type=1)#type为1是从备用角色向队伍中移动,为2则相反。
  251.     case type
  252.     when 1
  253.       id = @actors2[index].id
  254.       actor = $game_actors[id]
  255.       if @actors.size < 4  and not @chaochao2.include?(index) #and not @actors.include?(actor)
  256.         @actors.push(actor)
  257.         #@actors2.delete(actor)
  258.         @actors2.each do |i|
  259.           @actors2.delete(i) if i.id == actor.id
  260.         end
  261.         $game_system.se_play($data_system.decision_se)
  262.         $game_player.refresh
  263.       end
  264.     when 2
  265.       id = @actors[index].id
  266.       actor = $game_actors[id]
  267.       if actor != nil  and not @chaochao.include?(index)
  268.         @actors2.push(actor)
  269.         @actors.each do |i|
  270.           @actors.delete(i) if i.id == actor.id
  271.         end
  272.         $game_system.se_play($data_system.decision_se)
  273.         $game_player.refresh
  274.       end
  275.     end
  276.   end
  277.   
  278.   #type1,1是操作队伍中的角色能否向备用队伍移动,2则相反。
  279.   #type2,1是添加不能移动的,2是删除不能移动的。
  280.   def yidong(actor_id,type1,type2=1)
  281.     case type2
  282.     when 1
  283.       case type1
  284.       when 1
  285.         @chaochao.push(actor_id)
  286.       when 2
  287.         @chaochao2.push(actor_id)
  288.       end
  289.     when 2
  290.       case type1
  291.       when 1
  292.         @chaochao.delete(actor_id)
  293.       when 2
  294.         @chaochao2.delete(actor_id)
  295.       end
  296.     end
  297.   end
  298.   
  299.   #type,1从队伍中离开,2从备用角色中离开,3从队伍和备用角色中离开。
  300.   def remove_actor(actor_id,type=1)
  301.     actor = $game_actors[actor_id]
  302.     case type
  303.     when 1
  304.       @actors.delete(actor)
  305.       $game_player.refresh
  306.     when 2
  307.       @actors2.delete(actor)
  308.       $game_player.refresh
  309.     when 3
  310.       @actors.delete(actor)
  311.       @actors2.delete(actor)
  312.       $game_player.refresh
  313.     end
  314.   end
  315.   
  316.   
  317.   def refresh
  318.     new_actors = []
  319.     new_actors2 = []
  320.     for i in [email protected]
  321.       if $game_actors[@actors.id] != nil
  322.         new_actors.push($game_actors[@actors.id])
  323.       end
  324.     end
  325.     @actors = new_actors
  326.     for i in [email protected]
  327.       if $game_actors[@actors2.id] != nil
  328.         new_actors2.push($game_actors[@actors2.id])
  329.       end
  330.     end
  331.     @actors2 = new_actors2
  332.   end
  333. end

  334. #------------------------------------------------------------------------------

  335. class Chaochao_Scene_Party
  336.   def main
  337.     @left_temp_command = 0
  338.     @right_temp_command = 0
  339.     @temp = 0
  340.     @left_window = Chaochao_Window_PartyLeft.new
  341.     @left_window.active = true
  342.     @right_window = Chaochao_Window_PartyRight.new
  343.     @right_window.active = false
  344.     @data_window = Chaochao_Window_PartyData.new
  345.     update_data
  346.     Graphics.transition
  347.     loop do
  348.       Graphics.update
  349.       Input.update
  350.       update
  351.       if $scene != self
  352.         break
  353.       end
  354.     end
  355.     Graphics.freeze
  356.     @left_window.dispose
  357.     @right_window.dispose
  358.     @data_window.dispose
  359.   end
  360.   
  361.   def update
  362.     @left_window.update
  363.     @right_window.update
  364.     @data_window.update
  365.     update_command
  366.     update_data
  367.   end
  368.   
  369.   def update_command
  370.     if Input.trigger?(Input::B)
  371.       $game_system.se_play($data_system.cancel_se)
  372.       #画面切换
  373.       $scene = Scene_Map.new
  374.       return
  375.     end
  376.     if @left_window.active
  377.       update_left
  378.       return
  379.     end
  380.     if @right_window.active
  381.       update_right
  382.       return
  383.     end
  384.   end
  385.   
  386.   def update_left
  387.     if Input.trigger?(Input::RIGHT)
  388.       if @right_window.item_max > 0
  389.         @left_temp_command = @left_window.index
  390.         @left_window.set_index(-1)
  391.         $game_system.se_play($data_system.cursor_se)
  392.         @left_window.active = false
  393.         @right_window.active = true
  394.         @left_window.refresh
  395.         @right_window.refresh
  396.         @right_window.set_index(@right_temp_command)
  397.         return
  398.       else
  399.         $game_system.se_play($data_system.buzzer_se)
  400.         return
  401.       end
  402.     end
  403.     if Input.trigger?(Input::C)
  404.       if (@left_window.active and @left_window.actor?(@left_window.index) and $game_party.actors.size > 1) and
  405.         not $game_party.chaochao.include?($game_party.actors[@left_window.index].id)
  406.         
  407.         $game_party.huanren(@left_window.index,2)#type为1是从备用角色向队伍中移动,为2则相反。
  408.         @left_window.refresh
  409.         @right_window.refresh
  410.       else
  411.         $game_system.se_play($data_system.buzzer_se)
  412.       end
  413.     end
  414.     return
  415.   end
  416.   
  417.   def update_right
  418.     if Input.trigger?(Input::LEFT)
  419.       if @left_window.item_max > 0
  420.         @right_temp_command = @right_window.index
  421.         @right_window.set_index(-1)
  422.         $game_system.se_play($data_system.cursor_se)
  423.         @left_window.active = true
  424.         @right_window.active = false
  425.         @left_window.refresh
  426.         @right_window.refresh
  427.         @left_window.set_index(@left_temp_command)
  428.         return
  429.       else
  430.         $game_system.se_play($data_system.buzzer_se)
  431.         return
  432.       end
  433.     end
  434.     if Input.trigger?(Input::C)
  435.       if $game_party.actors.size >= 4
  436.         $game_system.se_play($data_system.buzzer_se)
  437.         return
  438.       end
  439.       if @right_window.active and @right_window.actor?(@right_window.index) and not $game_party.chaochao2.include?($game_party.actors2[@right_window.index].id)
  440.         $game_party.huanren(@right_window.index,1)#type为1是从备用角色向队伍中移动,为2则相反。
  441.         if $game_party.actors2.size == 0
  442.           @right_temp_command = @right_window.index
  443.           @right_window.set_index(-1)
  444.           $game_system.se_play($data_system.cursor_se)
  445.           @left_window.active = true
  446.           @right_window.active = false
  447.           @left_window.refresh
  448.           @right_window.refresh
  449.           @left_window.set_index(@left_temp_command)
  450.         end
  451.         if @right_window.index > 0
  452.           @right_window.set_index(@right_window.index-1)
  453.         end
  454.         @left_window.refresh
  455.         @right_window.refresh
  456.       else
  457.         $game_system.se_play($data_system.buzzer_se)
  458.       end
  459.     end
  460.     return
  461.   end
  462.   
  463.   def update_data
  464.     if @left_window.active
  465.       if $game_party.actors[@left_window.index] != nil
  466.         @data_window.set_actor($game_party.actors[@left_window.index])
  467.       else
  468.         @data_window.clear
  469.       end
  470.       return
  471.     end
  472.     if @right_window.active
  473.       if $game_party.actors2[@right_window.index] != nil
  474.         @data_window.set_actor($game_party.actors2[@right_window.index])
  475.       else
  476.         @data_window.clear
  477.       end
  478.       return
  479.     end
  480.   end
  481. end

  482. #==============================================================================
  483. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  484. #==============================================================================
复制代码


银·乌尔于2011-2-1 20:16补充以下内容:
嗯,库存应该是无限量的..
如果需要限制,可以加个条件~
作者: stevenrock    时间: 2011-2-1 20:59
我告诉你我的办法吧,我设置人物仓库的时候,单独设置在一个地图里,想要离开人物仓库所在的地图,主角必须在队伍中,否则不改变场景。办法不算很好,凑合用吧……
作者: 银·乌尔    时间: 2011-2-1 21:46
呃..就上面银贴出来的脚本
238-241行:
if [email protected]?(actor)
@actors2.push(actor)
$game_player.refresh
end
这里,只需要在条件if [email protected]?(actor)
里加上 and @actors2.size < 4
其中,4就是仓库的限制啦~同理,
在type = 1
的那里也加上这个条件,
就会在角色直接加到仓库的时候也判定一下.




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1