Project1

标题: 请教关于离队系统 [打印本页]

作者: 如梦    时间: 2008-9-30 06:13
标题: 请教关于离队系统
下面是我用的一个离队脚本,我想在这个脚本里添加这个功能:当指定离队角色的编号大于10,那么数据库中该角色以下的所有角色编号都上升1。

比如当选择20号角色离队,那么数据库下面的21号角色自动上升变成20号角色,各项属性都覆盖了原来的20号角色,同样22号角色自动变成21号。。。。。。



  1. #==============================================================================
  2. # ■ Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  处理菜单画面的类。
  5. #==============================================================================

  6. class Scene_Menu
  7. #--------------------------------------------------------------------------
  8. # ● 初始化对像
  9. #     menu_index : 命令光标的初期位置
  10. #--------------------------------------------------------------------------
  11. def initialize(menu_index = 0)
  12.    @menu_index = menu_index
  13. end
  14. #--------------------------------------------------------------------------
  15. # ● 主处理
  16. #--------------------------------------------------------------------------
  17. def main
  18.    # 生成命令窗口
  19.    s1 = $data_system.words.item
  20.    s2 = $data_system.words.skill
  21.    s3 = $data_system.words.equip
  22.    s4 = "状态"
  23.    s5 = "宠物仓库"
  24.    s6 = "升级加点"
  25.    s7 = "离队"
  26.    s8 = "存档"   
  27.    s9 = "结束游戏"
  28.    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7, s8, s9])
  29.    @command_window.index = @menu_index
  30.    # 同伴人数为 0 的情况下
  31.    if $game_party.actors.size == 0
  32.      # 物品、特技、装备、状态无效化
  33.      @command_window.disable_item(0)
  34.      @command_window.disable_item(1)
  35.      @command_window.disable_item(2)
  36.      @command_window.disable_item(3)
  37.    end
  38.    if $game_switches[1]
  39.      @command_window.disable_item(6)
  40.      end
  41.    # 禁止存档的情况下
  42.    if $game_system.save_disabled
  43.      # 存档无效
  44.      @command_window.disable_item(4)
  45.    end
  46.    # 生成游戏时间窗口
  47.    @playtime_window = Window_PlayTime.new
  48.    @playtime_window.x = 0
  49.    @playtime_window.y = 320
  50.    # 生成步数窗口
  51.    #@steps_window = Window_Steps.new
  52.    #@steps_window.x = 0
  53.    #@steps_window.y = 320
  54.    # 生成金钱窗口
  55.    @gold_window = Window_Gold.new
  56.    @gold_window.x = 0
  57.    @gold_window.y = 416
  58.    # 生成状态窗口
  59.    @status_window = Window_MenuStatus.new
  60.    @status_window.x = 160
  61.    @status_window.y = 0
  62.    # 执行过渡
  63.    Graphics.transition
  64.    # 主循环
  65.    loop do
  66.      # 刷新游戏画面
  67.      Graphics.update
  68.      # 刷新输入信息
  69.      Input.update
  70.      # 刷新画面
  71.      update
  72.      # 如果切换画面就中断循环
  73.      if $scene != self
  74.        break
  75.      end
  76.    end
  77.    # 准备过渡
  78.    Graphics.freeze
  79.    # 释放窗口
  80.    @command_window.dispose
  81.    @playtime_window.dispose
  82.    #@steps_window.dispose
  83.    @gold_window.dispose
  84.    @status_window.dispose
  85. end
  86. #--------------------------------------------------------------------------
  87. # ● 刷新画面
  88. #--------------------------------------------------------------------------
  89. def update
  90.    # 刷新窗口
  91.    @command_window.update
  92.    @playtime_window.update
  93.    #@steps_window.update
  94.    @gold_window.update
  95.    @status_window.update
  96.    # 命令窗口被激活的情况下: 调用 update_command
  97.    if @command_window.active
  98.      update_command
  99.      return
  100.    end
  101.    # 状态窗口被激活的情况下: 调用 update_status
  102.    if @status_window.active
  103.      update_status
  104.      return
  105.    end
  106. end
  107. #--------------------------------------------------------------------------
  108. # ● 刷新画面 (命令窗口被激活的情况下)
  109. #--------------------------------------------------------------------------
  110. def update_command
  111.    # 按下 B 键的情况下
  112.    if Input.trigger?(Input::B)
  113.      # 演奏取消 SE
  114.      $game_system.se_play($data_system.cancel_se)
  115.      # 切换的地图画面
  116.      $scene = Scene_Map.new
  117.      return
  118.    end
  119.    # 按下 C 键的情况下
  120.    if Input.trigger?(Input::C)
  121.      # 同伴人数为 0、存档、游戏结束以外的场合
  122.      if $game_party.actors.size == 0 and @command_window.index < 4
  123.        # 演奏冻结 SE
  124.        $game_system.se_play($data_system.buzzer_se)
  125.        return
  126.      end
  127.      # 命令窗口的光标位置分支
  128.      case @command_window.index
  129.      when 0  # 物品
  130.        # 演奏确定 SE
  131.        $game_system.se_play($data_system.decision_se)
  132.        # 切换到物品画面
  133.        $scene = Scene_Item.new
  134.      when 1  # 特技
  135.        # 演奏确定 SE
  136.        $game_system.se_play($data_system.decision_se)
  137.        # 激活状态窗口
  138.        @command_window.active = false
  139.        @status_window.active = true
  140.        @status_window.index = 0
  141.      when 2  # 装备
  142.        # 演奏确定 SE
  143.        $game_system.se_play($data_system.decision_se)
  144.        # 激活状态窗口
  145.        @command_window.active = false
  146.        @status_window.active = true
  147.        @status_window.index = 0
  148.      when 3  # 状态
  149.        # 演奏确定 SE
  150.        $game_system.se_play($data_system.decision_se)
  151.        # 激活状态窗口
  152.        @command_window.active = false
  153.        @status_window.active = true
  154.        @status_window.index = 0
  155.       
  156.      when 4  # 装备宠物
  157.        $game_system.se_play($data_system.decision_se)
  158.        $scene = Scene_Item2.new
  159.       
  160.      when 5  # 升级加点
  161.        # 演奏确定 SE
  162.        $game_system.se_play($data_system.decision_se)
  163.        # 切换到加点界面
  164.        $scene = Scene_Lvup.new
  165.               
  166.      when 6  # 离队
  167.       if $game_switches[1]
  168.         $game_system.se_play($data_system.buzzer_se)
  169.         else
  170.         $game_system.se_play($data_system.decision_se)
  171.         @command_window.active = false
  172.         @status_window.active = true
  173.         @status_window.index = 0
  174.       end
  175.      
  176.      when 7  # 存档
  177.        # 禁止存档的情况下
  178.        if $game_system.save_disabled
  179.          # 演奏冻结 SE
  180.          $game_system.se_play($data_system.buzzer_se)
  181.          return
  182.        end
  183.        # 演奏确定 SE
  184.        $game_system.se_play($data_system.decision_se)
  185.        # 切换到存档画面
  186.        $scene = Scene_Save.new  
  187.      
  188.      when 8  # 游戏结束
  189.        # 演奏确定 SE
  190.        $game_system.se_play($data_system.decision_se)
  191.        # 切换到游戏结束画面
  192.        $scene = Scene_End.new      
  193.      end
  194.      return
  195.    end
  196. end
  197. #--------------------------------------------------------------------------
  198. # ● 刷新画面 (状态窗口被激活的情况下)
  199. #--------------------------------------------------------------------------
  200. def update_status
  201.    # 按下 B 键的情况下
  202.    if Input.trigger?(Input::B)
  203.      # 演奏取消 SE
  204.      $game_system.se_play($data_system.cancel_se)
  205.      # 激活命令窗口
  206.      @command_window.active = true
  207.      @status_window.active = false
  208.      @status_window.index = -1
  209.      return
  210.    end
  211.    # 按下 C 键的情况下
  212.    if Input.trigger?(Input::C)
  213.      # 命令窗口的光标位置分支
  214.      case @command_window.index
  215.      when 1  # 特技
  216.        # 本角色的行动限制在 2 以上的情况下
  217.        if $game_party.actors[@status_window.index].restriction >= 2
  218.          # 演奏冻结 SE
  219.          $game_system.se_play($data_system.buzzer_se)
  220.          return
  221.        end
  222.        # 演奏确定 SE
  223.        $game_system.se_play($data_system.decision_se)
  224.        # 切换到特技画面
  225.        $scene = Scene_Skill.new(@status_window.index)
  226.      when 2  # 装备
  227.        # 演奏确定 SE
  228.        $game_system.se_play($data_system.decision_se)
  229.        # 切换的装备画面
  230.        $scene = Scene_Equip.new(@status_window.index)
  231.      when 3  # 状态
  232.        # 演奏确定 SE
  233.        $game_system.se_play($data_system.decision_se)
  234.        # 切换到状态画面
  235.        $scene = Scene_Status.new(@status_window.index)
  236.      when 6
  237.       if @status_window.index == 0
  238.        $game_system.se_play($data_system.buzzer_se)
  239.      else
  240.        @actor = $game_party.actors[@status_window.index]
  241.        if  @actor.id == 1
  242.          $game_system.se_play($data_system.buzzer_se)
  243.        else
  244.           $game_system.se_play($data_system.decision_se)
  245.        $game_party.actors.delete(@actor)
  246.        $game_player.refresh
  247.        $scene = Scene_Menu.new(6)
  248.        end
  249.        end
  250.      end
  251.      return
  252.    end
  253. end
  254. end
复制代码
[LINE]1,#dddddd[/LINE]版务信息:版主帮忙结贴~
作者: hitlerson    时间: 2008-9-30 06:26
1.改數據庫估計不可能
2.提供錯了腳本
作者: 越前リョーマ    时间: 2008-9-30 06:33
这不是菜单画面的脚本么……
作者: 如梦    时间: 2008-9-30 06:37
类似于数据库中批量复制粘贴的效果不能在脚本里实现么



作者: 越前リョーマ    时间: 2008-9-30 06:40
以下引用如梦于2008-9-29 22:37:40的发言:

类似于数据库中批量复制粘贴的效果不能在脚本里实现么

至今没见过改这个的,
而且也没什么用处。
作者: 如梦    时间: 2008-9-30 06:42
对我很有用啦.!..好像最后那一段是关于离队的
......
     when 6
      if @status_window.index == 0
       $game_system.se_play($data_system.buzzer_se)
     else
       @actor = $game_party.actors[@status_window.index]
       if  @actor.id == 1
         $game_system.se_play($data_system.buzzer_se)
       elsif  @actor.id == 6
         $game_system.se_play($data_system.buzzer_se)
       elsif  @actor.id == 7
         $game_system.se_play($data_system.buzzer_se)
       else
          $game_system.se_play($data_system.decision_se)
       $game_party.actors.delete(@actor)
       $game_player.refresh
       $scene = Scene_Menu.new(6)
       end
       end
作者: hitlerson    时间: 2008-9-30 06:54
actor.id為索引創建數組 ACTOR_ID = [0,0,0,0,0,0,0,0,0,0,10,11,12,13...]
actor.id >= 10的退了,就相應索引的數值 -1
actor.id == 20的退了,循環以上的值 -1
吧所有要變得隊員的屬性從算一邊就好了 [LINE]1,#dddddd[/LINE]系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
作者: 如梦    时间: 2008-9-30 07:04
这...写哪儿哦{/fd}{/fd}
作者: hitlerson    时间: 2008-9-30 07:14
只是個思路,要實現,路還有很長

用事件,改個頭像,改個名字,改幾個屬性 就算了
作者: 天圣的马甲    时间: 2008-9-30 08:40
关于数据库修改角色的设定可以看这里:
http://rpg.blue/web/htm/news229.htm
作者: 如梦    时间: 2008-10-2 23:50
以下引用hitlerson于2008-9-29 22:54:16的发言:

actor.id為索引創建數組 ACTOR_ID = [0,0,0,0,0,0,0,0,0,0,10,11,12,13...]
actor.id >= 10的退了,就相應索引的數值 -1
actor.id == 20的退了,循環以上的值 -1
吧所有要變得隊員的屬性從算一邊就好了




能不能这样:离队的队员先用一个变量X记录其在数据库的编号,然后for i=变量X..999
$data_actors = $data_actors[i+1].clone




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