Project1

标题: 如何设置像吞食天地那样的阵型 [打印本页]

作者: zxc3824    时间: 2012-11-13 23:02
标题: 如何设置像吞食天地那样的阵型
如标题。

但是我用的战斗系统是通过修改Game_Actor类里面修改的。


所以求高手发范例dsu_plus_rewardpost_czw
作者: zxcgood2009    时间: 2012-11-14 14:01
本帖最后由 zxcgood2009 于 2012-11-14 14:05 编辑

截张图上来看看。
刚看到的,也是吞食天地的
http://rpg.blue/thread-253732-1-1.html
作者: zxc3824    时间: 2012-11-14 16:04
zxcgood2009 发表于 2012-11-14 14:01
截张图上来看看。
刚看到的,也是吞食天地的
http://rpg.blue/thread-253732-1-1.html ...

这个似乎不太好哦,脚本又不公布
作者: zxcgood2009    时间: 2012-11-14 17:18
那你放张图上来,看看能不能帮你,毕竟你要我为此去玩吞食天地,有点坑爹啊。
作者: zxc3824    时间: 2012-11-14 23:37
  1. class Game_Actor < Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 取得战斗画面的 X 坐标
  4.   #--------------------------------------------------------------------------
  5.   def screen_x
  6.     # 返回计算后的队伍 X 坐标的排列顺序
  7.     case $game_variables[5]
  8.     when 0              #【散开】
  9.       case self.index
  10.       when 0
  11.         return 192
  12.       when 1
  13.         return 192
  14.       when 2
  15.         return 192
  16.       when 3
  17.         return 192
  18.       when 4
  19.         return 192   
  20.       end
  21.     when 1            #【鹤翼】
  22.       case self.index
  23.       when 0
  24.         return 192
  25.       when 1
  26.         return 192
  27.       when 2
  28.         return 256
  29.       when 3
  30.         return 192
  31.       when 4
  32.         return 192   
  33.       end
  34.     when 2          #【冲方】
  35.       case self.index
  36.       when 0
  37.         return 192
  38.       when 1
  39.         return 128
  40.       when 2
  41.         return 192
  42.       when 3
  43.         return 128
  44.       when 4
  45.         return 192   
  46.       end
  47.     when 3          #【白马】
  48.       case self.index
  49.       when 0
  50.         return 256
  51.       when 1
  52.         return 192
  53.       when 2
  54.         return 192
  55.       when 3
  56.         return 128
  57.       when 4
  58.         return 128   
  59.       end
  60.     when 4
  61.       case self.index
  62.       when 0
  63.         return 192
  64.       when 1
  65.         return 192
  66.       when 2
  67.         return 256
  68.       when 3
  69.         return 192
  70.       when 4
  71.         return 192   
  72.       end
  73.     when 5
  74.       case self.index
  75.       when 0
  76.         return 192
  77.       when 1
  78.         return 192
  79.       when 2
  80.         return 256
  81.       when 3
  82.         return 192
  83.       when 4
  84.         return 192   
  85.       end
  86.     when 6
  87.       case self.index
  88.       when 0
  89.         return 192
  90.       when 1
  91.         return 192
  92.       when 2
  93.         return 256
  94.       when 3
  95.         return 192
  96.       when 4
  97.         return 192   
  98.       end
  99.     when 7
  100.       case self.index
  101.       when 0
  102.         return 192
  103.       when 1
  104.         return 192
  105.       when 2
  106.         return 256
  107.       when 3
  108.         return 192
  109.       when 4
  110.         return 192   
  111.       end
  112.     end
  113.     return 192
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 取得战斗画面的 Y 坐标
  117.   #--------------------------------------------------------------------------
  118.   def screen_y
  119.     case self.index
  120.     when 0
  121.       return 60
  122.     when 1
  123.       return 120
  124.     when 2
  125.       return 180
  126.     when 3
  127.       return 240
  128.     when 4
  129.       return 300   
  130.     end
  131.     return self.index * 70 +20
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 取得战斗画面的 Z 坐标
  135.   #--------------------------------------------------------------------------
  136.   def screen_z
  137.     # 返回计算后的队伍 Z 坐标的排列顺序
  138.     if self.index != nil
  139.       return 4 - self.index
  140.     else
  141.       return 0
  142.     end
  143.   end
  144. end

  145. class Game_Enemy < Game_Battler
  146.   #--------------------------------------------------------------------------
  147.   # ● 取得战斗画面 X 坐标
  148.   #--------------------------------------------------------------------------
  149.   def screen_x
  150.     # 返回计算后的队伍 X 坐标的排列顺序
  151.     case $game_variables[6]
  152.     when 0              #【散开】
  153.       case self.index
  154.       when 0
  155.         return 448
  156.       when 1
  157.         return 448
  158.       when 2
  159.         return 448
  160.       when 3
  161.         return 448
  162.       when 4
  163.         return 448   
  164.       end
  165.     when 1            #【鹤翼】
  166.       case self.index
  167.       when 0
  168.         return 448
  169.       when 1
  170.         return 448
  171.       when 2
  172.         return 448-64
  173.       when 3
  174.         return 448
  175.       when 4
  176.         return 448   
  177.       end
  178.     when 2          #【冲方】
  179.       case self.index
  180.       when 0
  181.         return 192
  182.       when 1
  183.         return 128
  184.       when 2
  185.         return 192
  186.       when 3
  187.         return 128
  188.       when 4
  189.         return 192   
  190.       end
  191.     when 3          #【白马】
  192.       case self.index
  193.       when 0
  194.         return 256
  195.       when 1
  196.         return 192
  197.       when 2
  198.         return 192
  199.       when 3
  200.         return 128
  201.       when 4
  202.         return 128   
  203.       end
  204.     when 4
  205.       case self.index
  206.       when 0
  207.         return 192
  208.       when 1
  209.         return 192
  210.       when 2
  211.         return 256
  212.       when 3
  213.         return 192
  214.       when 4
  215.         return 192   
  216.       end
  217.     when 5
  218.       case self.index
  219.       when 0
  220.         return 192
  221.       when 1
  222.         return 192
  223.       when 2
  224.         return 256
  225.       when 3
  226.         return 192
  227.       when 4
  228.         return 192   
  229.       end
  230.     when 6
  231.       case self.index
  232.       when 0
  233.         return 192
  234.       when 1
  235.         return 192
  236.       when 2
  237.         return 256
  238.       when 3
  239.         return 192
  240.       when 4
  241.         return 192   
  242.       end
  243.     when 7
  244.       case self.index
  245.       when 0
  246.         return 192
  247.       when 1
  248.         return 192
  249.       when 2
  250.         return 256
  251.       when 3
  252.         return 192
  253.       when 4
  254.         return 192   
  255.       end
  256.     end
  257.     return 192
  258.   end

  259.   #--------------------------------------------------------------------------
  260.   # ● 取得战斗画面 Y 坐标
  261.   #--------------------------------------------------------------------------
  262.   def screen_y
  263.     case self.index
  264.     when 0
  265.       return 60
  266.     when 1
  267.       return 120
  268.     when 2
  269.       return 180
  270.     when 3
  271.       return 240
  272.     when 4
  273.       return 300   
  274.       end
  275.     return $data_troops[@troop_id].members[@member_index].y
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 取得战斗画面 Z 坐标
  279.   #--------------------------------------------------------------------------
  280.   def screen_z
  281.     return screen_y
  282.   end
  283. end
复制代码
这是我的阵型代码,我只想让这个阵型实现一个功能,就是在战斗中,如果有1个人或者2个人死亡,那么阵型散开
作者: zxc3824    时间: 2012-11-14 23:37
zxcgood2009 发表于 2012-11-14 17:18
那你放张图上来,看看能不能帮你,毕竟你要我为此去玩吞食天地,有点坑爹啊。 ...

代码已经发了
作者: 怪蜀黍    时间: 2012-11-15 14:56
从你给的脚本分析:当己方时,阵型是由变量$game_variables[5]决定的,当敌方时,阵型是由变量$game_variables[6]决定的,且变量为0的时候为散开阵。
那么问题就归结于——当友方活人少于5时,令$game_variables[5]=0;当敌方活人少于5时,令$game_variables[6]=0。
判断友方活人少于5的代码
  1.   def all_exist
  2.     return false if $game_party.actors.size < 5
  3.     exist = []
  4.     $game_party.actors.each{|actors| exist? ? exist << true : exist << false}
  5.     return false if exist.include?(false)
  6.     return true
  7.   end
复制代码
判断敌方活人少于5的代码
  1.   def all_exist
  2.     return false if $game_troop.enemies.size < 5
  3.     exist = []
  4.     $game_troop.enemies.each{|enemies| exist? ? exist << true : exist << false}
  5.     return false if exist.include?(false)
  6.     return true
  7.   end
复制代码

作者: zxc3824    时间: 2012-11-15 21:52
protosssonny 发表于 2012-11-15 14:56
从你给的脚本分析:当己方时,阵型是由变量$game_variables[5]决定的,当敌方时,阵型是由变量$game_variab ...

P叔好厉害,但是怎么调用呢?
作者: 怪蜀黍    时间: 2012-11-15 22:52
本帖最后由 protosssonny 于 2012-11-19 20:53 编辑
zxc3824 发表于 2012-11-15 21:52
P叔好厉害,但是怎么调用呢?


把这个放到最后应该就可以了

  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 刷新画面
  9.   #--------------------------------------------------------------------------
  10.   def update
  11.     unless a_all_exist
  12.       $game_variables[5] = 0
  13.     end  
  14.     unless e_all_exist  
  15.       $game_variables[6] = 0
  16.     end  
  17.     # 执行战斗事件中的情况下
  18.     if $game_system.battle_interpreter.running?
  19.       # 刷新解释器
  20.       $game_system.battle_interpreter.update
  21.       # 强制行动的战斗者不存在的情况下
  22.       if $game_temp.forcing_battler == nil
  23.         # 执行战斗事件结束的情况下
  24.         unless $game_system.battle_interpreter.running?
  25.           # 继续战斗的情况下、再执行战斗事件的设置
  26.           unless judge
  27.             setup_battle_event
  28.           end
  29.         end
  30.         # 如果不是结束战斗回合的情况下
  31.         if @phase != 5
  32.           # 刷新状态窗口
  33.           @status_window.refresh
  34.         end
  35.       end
  36.     end
  37.     # 系统 (计时器)、刷新画面
  38.     $game_system.update
  39.     $game_screen.update
  40.     # 计时器为 0 的情况下
  41.     if $game_system.timer_working and $game_system.timer == 0
  42.       # 中断战斗
  43.       $game_temp.battle_abort = true
  44.     end
  45.     # 刷新窗口
  46.     @help_window.update
  47.     @party_command_window.update
  48.     @actor_command_window.update
  49.     @status_window.update
  50.     @message_window.update
  51.     # 刷新活动块
  52.     @spriteset.update
  53.     # 处理过渡中的情况下
  54.     if $game_temp.transition_processing
  55.       # 清除处理过渡中标志
  56.       $game_temp.transition_processing = false
  57.       # 执行过渡
  58.       if $game_temp.transition_name == ""
  59.         Graphics.transition(20)
  60.       else
  61.         Graphics.transition(40, "Graphics/Transitions/" +
  62.           $game_temp.transition_name)
  63.       end
  64.     end
  65.     # 显示信息窗口中的情况下
  66.     if $game_temp.message_window_showing
  67.       return
  68.     end
  69.     # 显示效果中的情况下
  70.     if @spriteset.effect?
  71.       return
  72.     end
  73.     # 游戏结束的情况下
  74.     if $game_temp.gameover
  75.       # 切换到游戏结束画面
  76.       $scene = Scene_Gameover.new
  77.       return
  78.     end
  79.     # 返回标题画面的情况下
  80.     if $game_temp.to_title
  81.       # 切换到标题画面
  82.       $scene = Scene_Title.new
  83.       return
  84.     end
  85.     # 中断战斗的情况下
  86.     if $game_temp.battle_abort
  87.       # 还原为战斗前的 BGM
  88.       $game_system.bgm_play($game_temp.map_bgm)
  89.       # 战斗结束
  90.       battle_end(1)
  91.       return
  92.     end
  93.     # 等待中的情况下
  94.     if @wait_count > 0
  95.       # 减少等待计数
  96.       @wait_count -= 1
  97.       return
  98.     end
  99.     # 强制行动的角色存在、
  100.     # 并且战斗事件正在执行的情况下
  101.     if $game_temp.forcing_battler == nil and
  102.        $game_system.battle_interpreter.running?
  103.       return
  104.     end
  105.     # 回合分支
  106.     case @phase
  107.     when 1  # 自由战斗回合
  108.       update_phase1
  109.     when 2  # 同伴命令回合
  110.       update_phase2
  111.     when 3  # 角色命令回合
  112.       update_phase3
  113.     when 4  # 主回合
  114.       update_phase4
  115.     when 5  # 战斗结束回合
  116.       update_phase5
  117.     end
  118.   end
  119.   
  120.   def a_all_exist
  121.     return false if $game_party.actors.size < 5
  122.     exist = []
  123.     $game_party.actors.each{|actors| actors.exist? ? exist << true : exist << false}
  124.     return false if exist.include?(false)
  125.     return true
  126.   end
  127.   
  128.   def e_all_exist
  129.     return false if $game_troop.enemies.size < 5
  130.     exist = []
  131.     $game_troop.enemies.each{|enemies| enemies.exist? ? exist << true : exist << false}
  132.     return false if exist.include?(false)
  133.     return true
  134.   end
  135. end
复制代码
���
作者: zxc3824    时间: 2012-11-15 23:21
protosssonny 发表于 2012-11-15 22:52
把这个放到最后应该就可以了

P叔大大果然厉害,还有一个小问题,就是如果当前队伍不能摆阵,特别是战斗中,如果提示?我发现文本框在战斗中总是显示在上方的
作者: zxc3824    时间: 2012-11-18 02:33
protosssonny 发表于 2012-11-15 22:52
把这个放到最后应该就可以了

P叔,我这个阵型脚本就是独立的啊。def_a_all_exist这两个定义插在哪里?又该如何使用?
作者: zxc3824    时间: 2012-11-19 20:43
本帖最后由 zxc3824 于 2012-11-19 20:48 编辑
protosssonny 发表于 2012-11-15 22:52
把这个放到最后应该就可以了


exist[]是用来装技能的ID的吗?

我添加了那个脚本以后,发现战斗中就算不足五人还是可以摆阵的
作者: zxc3824    时间: 2012-11-20 20:34
protosssonny 发表于 2012-11-15 22:52
把这个放到最后应该就可以了���

不是啊,而是我就算测试的时候,队伍只有3人,还是可以变阵{:2_270:}
作者: 怪蜀黍    时间: 2012-11-20 20:53
那你上工程吧,你的脚本不是默认的。
作者: zxc3824    时间: 2012-11-23 17:38
protosssonny 发表于 2012-11-20 20:53
那你上工程吧,你的脚本不是默认的。

留个QQ吧,我发工程给你,然后改好了我再认可答案




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