Project1

标题: 脚本没效果 [打印本页]

作者: 黑米馒头    时间: 2014-12-30 07:21
标题: 脚本没效果
本帖最后由 RyanBern 于 2015-1-4 22:15 编辑

下面这段脚本
  1.      if @anime_count > 14 - @move_speed * 2
  2.      if not @step_anime and @stop_count > 0
  3.        @pattern = @original_pattern
  4.      else
  5.        @l = @character_name.split(/★/)[1] != nil ? @character_name.split(/★/)[1].to_i : 4
  6.        @pattern = (@pattern + 1) % @l
  7.      end
复制代码
我改成
  1.      if @anime_count > 14 - @move_speed * 2
  2.      if not @step_anime and @stop_count > 0
  3.        @pattern = @original_pattern
  4.      elsif
  5.        @l = @character_name.split(/★/)[1] != nil ? @character_name.split(/★/)[1].to_i : 4
  6.        @pattern = (@pattern + 1) % @l
  7.      elsif
  8.        @l = @character_name.split(/☆/)[1] != nil ? @character_name.split(/☆/)[1].to_i : 4
  9.        @pattern = (@pattern + 1) % @l  
  10.      end
复制代码
可是怎么这句没效果
  1.        @l = @character_name.split(/☆/)[1] != nil ? @character_name.split(/☆/)[1].to_i : 4
  2.        @pattern = (@pattern + 1) % @l  
复制代码
来个朋友帮看下改怎么改。      
作者: song.lian    时间: 2014-12-30 14:18
那个其实我对语法也不太了解,不知道对不对
elsif
       @l = @character_name.split(/★/)[1] != nil ? @character_name.split(/★/)[1].to_i : 4
中,"@l = @character_name.split(/★/)[1] != nil ? @character_name.split(/★/)[1].to_i : 4 "视为elsif的条件,且恒为真,所以不可能执行到
elsif
       @l = @character_name.split(/☆/)[1] != nil ? @character_name.split(/☆/)[1].to_i : 4
       @pattern = (@pattern + 1) % @l
这一步。
作者: VIPArcher    时间: 2014-12-30 14:42
不懂楼主要做什么,没有上下文或说明无法理解。顺便:
  1. if 表达式
  2.   表达式 ...
  3. elsif 表达式
  4.   表达式 ...
  5. ...
  6. else
  7.   表达式 ...
  8. end
复制代码

作者: 黑米馒头    时间: 2014-12-30 17:24
VIPArcher 发表于 2014-12-30 14:42
不懂楼主要做什么,没有上下文或说明无法理解。顺便:

貌似是这样的
  1. def update
  2.    # 跳跃中、移动中、停止中的分支
  3.    if jumping?
  4.      update_jump
  5.    elsif moving?
  6.      update_move
  7.    else
  8.      update_stop
  9.    end
  10.     if @anime_count > 14 - @move_speed * 2
  11.      if not @step_anime and @stop_count > 0
  12.        @pattern = @original_pattern
  13.      else
  14.        @l = @character_name.split(/★/)[1] != nil ? @character_name.split(/★/)[1].to_i : 4
  15.        @pattern = (@pattern + 1) % @l
  16.      end
  17.      # 清除动画计数
  18.      @anime_count = 0
  19.    end
  20.    # 等待中的情况下
  21.    if @wait_count > 0
  22.      # 减少等待计数
  23.      @wait_count -= 1
  24.      return
  25.    end
  26.    # 强制移动路线的场合
  27.    if @move_route_forcing
  28.      # 自定义移动
  29.      move_type_custom
  30.      return
  31.    end
  32.    # 事件执行待机中并且为锁定状态的情况下
  33.    if @starting or lock?
  34.      # 不做规则移动
  35.      return
  36.    end
  37.    # 如果停止计数超过了一定的值(由移动频度算出)
  38.    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
  39.      # 移动类型分支
  40.      case @move_type
  41.      when 1  # 随机
  42.        move_type_random
  43.      when 2  # 接近
  44.        move_type_toward_player
  45.      when 3  # 自定义
  46.        move_type_custom
  47.      end
  48.    end
  49. end
  50. end
复制代码
我给改成这样就不行了,
  1. def update
  2.    # 跳跃中、移动中、停止中的分支
  3.    if jumping?
  4.      update_jump
  5.    elsif moving?
  6.      update_move
  7.    else
  8.      update_stop
  9.    end
  10.     if @anime_count > 14 - @move_speed * 2
  11.      if not @step_anime and @stop_count > 0
  12.        @pattern = @original_pattern
  13.      elsif
  14.        @l = @character_name.split(/★/)[1] != nil ? @character_name.split(/★/)[1].to_i : 4
  15.        @pattern = (@pattern + 1) % @l
  16.      else
  17.        @l = @character_name.split(/☆/)[1] != nil ? @character_name.split(/☆/)[1].to_i : 4
  18.        @pattern = (@pattern + 1) % @l
  19.      end
  20.      # 清除动画计数
  21.      @anime_count = 0
  22.    end
  23.    # 等待中的情况下
  24.    if @wait_count > 0
  25.      # 减少等待计数
  26.      @wait_count -= 1
  27.      return
  28.    end
  29.    # 强制移动路线的场合
  30.    if @move_route_forcing
  31.      # 自定义移动
  32.      move_type_custom
  33.      return
  34.    end
  35.    # 事件执行待机中并且为锁定状态的情况下
  36.    if @starting or lock?
  37.      # 不做规则移动
  38.      return
  39.    end
  40.    # 如果停止计数超过了一定的值(由移动频度算出)
  41.    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
  42.      # 移动类型分支
  43.      case @move_type
  44.      when 1  # 随机
  45.        move_type_random
  46.      when 2  # 接近
  47.        move_type_toward_player
  48.      when 3  # 自定义
  49.        move_type_custom
  50.      end
  51.    end
  52. end
  53. end
复制代码

作者: 恐惧剑刃    时间: 2014-12-30 19:39
本帖最后由 恐惧剑刃 于 2014-12-30 19:42 编辑

其实八方向走没有想象中的那么复杂!
Sprite_Character 中
  1. sx = @character.pattern * @cw
  2. sy = (@character.direction - 2) / 2 * @ch
  3. self.src_rect.set(sx, sy, @cw, @ch)
复制代码
就是控制方向的,可以简单修改为
  1. sx = @character.pattern * @cw
  2. case @character.direction
  3. when 2,4,6,8
  4.   sy = (@character.direction - 2) / 2 * @ch
  5. when 1
  6.   sy = 4 * @ch
  7. when 3
  8.   sy = 5 * @ch
  9. when 7
  10.   sy = 6 * @ch
  11. when 9
  12.   sy = 7 * @ch
  13. end
  14. self.src_rect.set(sx, sy, @cw, @ch)
复制代码
再找到Game_Player
  1. case Input.dir4
  2. when 2
  3.   move_down
  4. when 4
  5.   move_left
  6. when 6
  7.   move_right
  8. when 8
  9.   move_up
  10. end
复制代码
改为
  1. case Input.dir8
  2. when 2
  3.   move_down
  4. when 4
  5.   move_left
  6. when 6
  7.   move_right
  8. when 8
  9.   move_up
  10. when 1
  11.   @direction = 1
  12.   move_lower_left
  13. when 3
  14.   @direction = 3
  15.   move_lower_right
  16. when 7
  17.   @direction = 7
  18.   move_upper_left
  19. when 9
  20.   @direction = 9
  21.   move_upper_right
  22. end
复制代码
可以看到,再移动的时候手动调整方向,在活动块中取得不同的图形
以上,应该没有错吧


如果是待机动画,加一行判断
RUBY 代码复制
  1. case Input.dir8
  2. when 2
  3.   # 更改图形什么的
  4.   move_down
  5. when 4
  6.   move_left
  7. when 6
  8.   move_right
  9. when 8
  10.   move_up
  11. when 1
  12.   @direction = 1
  13.   move_lower_left
  14. when 3
  15.   @direction = 3
  16.   move_lower_right
  17. when 7
  18.   @direction = 7
  19.   move_upper_left
  20. when 9
  21.   @direction = 9
  22.   move_upper_right
  23. else
  24.   # 更改图形什么的,并且打开停止时动画
  25. end


要修改速度在Game_Character 2中
RUBY 代码复制
  1. if @anime_count > 18 - @move_speed * 2

就是这句
作者: 黑米馒头    时间: 2014-12-30 21:19
恐惧剑刃 发表于 2014-12-30 19:39
其实八方向走没有想象中的那么复杂!
Sprite_Character 中就是控制方向的,可以简单修改为再找到Game_Playe ...

貌似最后还是自己解决了,前段时间自己弄了个支持全方位行走的脚本,4方向素材和8方向素材放游戏里自动识别成8方向的,这样弄素材就方便多了。
作者: 恐惧剑刃    时间: 2014-12-31 17:50
本帖最后由 恐惧剑刃 于 2014-12-31 17:56 编辑

宠物系统  很多东西没有完成   不过大概思路就是这样

仅供参考
随便新建一个工程,去捕捉幽灵看看吧   呵呵
剩下的把对应角色加入队伍,删除角色等需要专用宠物界面  我没有完成。。。
babies 当前角色的所有宠物
canzhan 参战
  1. module Battle
  2. end

  3. #==============================================================================
  4. # ■ Battle::Actor
  5. #------------------------------------------------------------------------------
  6. #  角色模块。
  7. #==============================================================================

  8. module Battle::Actor
  9.   
  10.   Commands = []
  11.   # 一般指令
  12.   Default_Commands = ["攻击", "特技", "防御", "物品"]
  13.   # 特殊指令
  14.   Commands[1] = ["捕捉", "攻击", "防御"]
  15.   Commands[2] = ["攻击", "特技", "防御"]
  16.   Commands[7] = ["魔法", "防御", "物品"]
  17.   Commands[8] = ["魔法", "防御", "物品"]
  18.   
  19. end

  20. #==============================================================================
  21. # ■ Game_Actor
  22. #------------------------------------------------------------------------------
  23. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  24. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  25. #==============================================================================

  26. class Game_Actor < Game_Battler
  27.   attr_writer :babies # baby列表,角色当前所有的宠物
  28.   attr_accessor :canzhan
  29.   def babies
  30.     @babies = [] if @babies.nil?
  31.     return @babies
  32.   end
  33. end

  34. #==============================================================================
  35. # ■ Battle::Enemy
  36. #------------------------------------------------------------------------------
  37. #  敌人模块。
  38. #==============================================================================

  39. module Battle::Enemy
  40.   
  41.   Babies = []
  42.   # 可以捕捉的敌人设置
  43.   Babies = [1]
  44.   
  45.   Acid = []
  46.   # 对应角色id
  47.   Acid[1] = 37
  48.   
  49.   Ani = []
  50.   # [角色id] = [动画1, 动画2]
  51.   Ani[1] = [19, 20]
  52.   
  53. end

  54. #==============================================================================
  55. # ■ Window_BattleCommand
  56. #------------------------------------------------------------------------------
  57. #  角色指令窗口。
  58. #==============================================================================

  59. class Window_BattleCommand < Window_Selectable
  60.   #--------------------------------------------------------------------------
  61.   # ● 初始化对像
  62.   #--------------------------------------------------------------------------
  63.   def initialize
  64.     super(0, 0, 160, 0)
  65.     self.active = false
  66.     self.index = -1
  67.     self.visible = false
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 设置
  71.   #--------------------------------------------------------------------------
  72.   def setup(index)
  73.     return if @actor_index == index
  74.     @actor_index = index
  75.     id = $game_party.actors[index].id
  76.     if not (commands = Battle::Actor::Commands[id])
  77.       commands = Battle::Actor::Default_Commands
  78.     end
  79.     @commands = commands
  80.     @item_max = @commands.size
  81.     self.height = (@item_max + 1) * 32
  82.     self.y = 320 - self.height
  83.     if self.contents
  84.       self.contents.dispose
  85.       self.contents = nil
  86.     end
  87.     self.contents = Bitmap.new(self.width - 32, @item_max * 32)
  88.     refresh
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 指令
  92.   #--------------------------------------------------------------------------
  93.   def command
  94.     return @commands[self.index]
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 刷新
  98.   #--------------------------------------------------------------------------
  99.   def refresh
  100.     for i in 0...@item_max
  101.       draw_item(i, normal_color)
  102.     end
  103.     self.visible = true
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 描绘项目
  107.   #     index : 项目编号
  108.   #     color : 文字色
  109.   #--------------------------------------------------------------------------
  110.   def draw_item(index, color)
  111.     self.contents.font.color = color
  112.     x = 4
  113.     y = 32 * index
  114.     sw = self.contents.width - 8
  115.     sh = 32
  116.     self.contents.draw_text(x, y, sw, sh, @commands[index])
  117.   end
  118. end

  119. #==============================================================================
  120. # ■ Scene_Battle (分割定义 3)
  121. #------------------------------------------------------------------------------
  122. #  处理战斗画面的类。
  123. #==============================================================================

  124. class Scene_Battle
  125.   include Battle::Actor
  126.   #--------------------------------------------------------------------------
  127.   # ● 设置角色指令窗口
  128.   #--------------------------------------------------------------------------
  129.   alias bljrwg phase3_setup_command_window
  130.   def phase3_setup_command_window
  131.     @actor_command_window.setup(@actor_index)
  132.     bljrwg
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 刷新画面 (角色命令回合 : 基本命令)
  136.   #--------------------------------------------------------------------------
  137.   alias ymxjrwg update_phase3_basic_command
  138.   def update_phase3_basic_command
  139.     # 按下 B 键的情况下
  140.     if Input.trigger?(Input::B)
  141.       # 演奏取消 SE
  142.       $game_system.se_play($data_system.cancel_se)
  143.       # 转向前一个角色的指令输入
  144.       phase3_prior_actor
  145.       return
  146.     end
  147.     # 按下 C 键的情况下
  148.     if Input.trigger?(Input::C)
  149.       # 角色指令窗口光标位置分之
  150.       case @actor_command_window.command
  151.       when "攻击"
  152.         # 演奏确定 SE
  153.         $game_system.se_play($data_system.decision_se)
  154.         # 设置行动
  155.         @active_battler.current_action.kind = 0
  156.         @active_battler.current_action.basic = 0
  157.         # 开始选择敌人
  158.         start_enemy_select
  159.       when "特技", "魔法"
  160.         # 演奏确定 SE
  161.         $game_system.se_play($data_system.decision_se)
  162.         # 设置行动
  163.         @active_battler.current_action.kind = 1
  164.         # 开始选择特技
  165.         start_skill_select
  166.       when "防御"
  167.         # 演奏确定 SE
  168.         $game_system.se_play($data_system.decision_se)
  169.         # 设置行动
  170.         @active_battler.current_action.kind = 0
  171.         @active_battler.current_action.basic = 1
  172.         # 转向下一位角色的指令输入
  173.         phase3_next_actor
  174.       when "物品"
  175.         # 演奏确定 SE
  176.         $game_system.se_play($data_system.decision_se)
  177.         # 设置行动
  178.         @active_battler.current_action.kind = 2
  179.         # 开始选择物品
  180.         start_item_select
  181.       when "捕捉"
  182.         # 演奏确定 SE
  183.         $game_system.se_play($data_system.decision_se)
  184.         # 设置行动
  185.         @active_battler.current_action.kind = 3
  186.         # 开始选择敌人
  187.         start_enemy_select
  188.       end
  189.       return
  190.     end
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 刷新画面 (主回合步骤 2 : 开始行动)
  194.   #--------------------------------------------------------------------------
  195.   alias mdhdjwg update_phase4_step2
  196.   def update_phase4_step2
  197.     # 如果不是强制行动
  198.     unless @active_battler.current_action.forcing
  199.       # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
  200.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  201.         # 设置行动为攻击
  202.         @active_battler.current_action.kind = 0
  203.         @active_battler.current_action.basic = 0
  204.       end
  205.       # 限制为 [不能行动] 的情况下
  206.       if @active_battler.restriction == 4
  207.         # 清除行动强制对像的战斗者
  208.         $game_temp.forcing_battler = nil
  209.         # 移至步骤 1
  210.         @phase4_step = 1
  211.         return
  212.       end
  213.     end
  214.     # 清除对像战斗者
  215.     @target_battlers = []
  216.     # 行动种类分支
  217.     case @active_battler.current_action.kind
  218.     when 0  # 基本
  219.       make_basic_action_result
  220.     when 1  # 特技
  221.       make_skill_action_result
  222.     when 2  # 物品
  223.       make_item_action_result
  224.     when 3  # 捕捉
  225.       make_buzhuo_action_result
  226.     end
  227.     # 移至步骤 3
  228.     if @phase4_step == 2
  229.       @phase4_step = 3
  230.     end
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 生成捕捉行动结果
  234.   #--------------------------------------------------------------------------
  235.   def make_buzhuo_action_result
  236.     index = @active_battler.current_action.target_index
  237.     target = $game_troop.smooth_target_enemy(index)
  238.     @target_battlers = [target]
  239.     if !Battle::Enemy::Babies.include?(target.id)
  240.       @phase4_step = 1
  241.       return
  242.     end
  243.     if 20 > rand(100)
  244.       print "捕捉 #{target.name} 失败!"
  245.       @phase4_step = 1
  246.       return
  247.     end
  248.     print "成功捕捉 #{target.name} !"
  249.     @animation1_id = Battle::Enemy::Ani[@active_battler.id][0]
  250.     @animation2_id = Battle::Enemy::Ani[@active_battler.id][1]
  251.     @help_window.set_text("捕捉", 1)
  252.     @active_battler.babies << Battle::Enemy::Acid[target.id]
  253.   end
  254. end
复制代码

作者: 黑米馒头    时间: 2014-12-31 20:00
恐惧剑刃 发表于 2014-12-31 17:50
宠物系统  很多东西没有完成   不过大概思路就是这样

仅供参考

貌似现在就差这个捕捉系统了,能给梦幻群侠传的脚本里弄个捕捉的功能吗,战斗的时候可以捕捉特定的怪物当作宠物,不过群侠传的宠物系统好像有点问题,因为里面的宠物等同于角色,所以同种召唤兽不能两个以上的角色同时拥有(能改掉这个问题就好了。。。)。貌似好像很难的样子,你有空的话帮我看下,能弄的话最好了,就差这个功能了。、

梦幻群侠传.rar

1.27 MB, 下载次数: 44


作者: 恐惧剑刃    时间: 2015-1-1 08:17
大概就是这样
遗憾的是 独立宠物依然没有做

貌似不太好改啊
我想用一个数据记录独立的宠物HP MP EXP LV等
在战斗前初始化一个绝对独立的角色,不知道可不可以, 反正我没试过。。

baby.zip

1.27 MB, 下载次数: 54


作者: 黑米馒头    时间: 2015-1-1 08:59
恐惧剑刃 发表于 2015-1-1 08:17
大概就是这样
遗憾的是 独立宠物依然没有做

能否改成这样,捕捉有几率,HP越低越容易捕捉成功,
失败的时候显示

成功的时候显示

当敌人被捕捉成功的时候,对应的敌人就直接消失掉。

作者: 恐惧剑刃    时间: 2015-1-1 13:31
本帖最后由 恐惧剑刃 于 2015-1-1 13:43 编辑

大概就是这样了,刚才出错是因为没有设置“主人”

另外那个提示框。。
我不知道你这个截图是PS的 还是用了 其他提示框脚本 再截的图

如果用了脚本的话,把文字部分替换到就好了

还是老样子,禁止同时拥有一样的宠物
加了判断不会重复捕捉


忘了概率问题 重新上传下附件
现在的算法就是,只要敌人HP越趋近0 所得随机数就越小 捕获概率就越大

baby.zip

1.27 MB, 下载次数: 37


作者: 黑米馒头    时间: 2015-1-1 15:39
本帖最后由 黑米馒头 于 2015-1-1 16:07 编辑
恐惧剑刃 发表于 2015-1-1 13:31
大概就是这样了,刚才出错是因为没有设置“主人”

另外那个提示框。。


这个范例里设置人物携带最高为5只宠物,能否设置成宠物满了,选择捕捉的时候就会弹出一个提示框,会提示,宠物满了,不能捕捉。发现个问题,不可捕捉的敌人ID,这个有问题,我设置成   UNENID = [2,3] # 不可以捕捉的敌人id ,可是战斗的时候,2和3可以捕捉,别的都不能捕捉。。这是什么情况。能否在弄个,当敌人为不能捕捉的怪物时,光标选择敌人,就会弹出,该敌人不能捕捉的字样。
作者: 恐惧剑刃    时间: 2015-1-1 17:30
已经修改好

baby(1).zip

1.27 MB, 下载次数: 36


作者: 黑米馒头    时间: 2015-1-1 19:14
本帖最后由 黑米馒头 于 2015-1-1 19:59 编辑
恐惧剑刃 发表于 2015-1-1 17:30
已经修改好


如果4个角色宠物都满的话,捕捉的时候,之显示1个"宠物仓库已满,无法捕捉",能弄成每个人都有对应的提示吗。还有当敌人不能捕捉的时候,去捕捉的话,显示“该怪物无法捕捉”,还有提示框能重新弄个吗,@help_window.set_text里的显示的时间太短。弄一个class Window_Tip < Window_Base当提示窗口
作者: 黑米馒头    时间: 2015-1-2 07:19
本帖最后由 黑米馒头 于 2015-1-2 08:07 编辑
恐惧剑刃 发表于 2015-1-1 17:30
已经修改好


貌似刚才又测试了下,4个角色宠物都满了的话,只显示1次的。
可以话帮忙重新弄个提示框,弹出提示框的时候,要按C键或X键盘才消失掉。那样就看的清了

不能捕捉的敌人的提示能不能改成,【该敌人无法捕捉】,
现在是不显示文字,能不能改成,角色选择捕捉的时候,也像可以捕捉的那样,先显示捕捉动画,在弹出提示框,该敌人无法捕捉。


我把你以前帮我弄的提示框放进去了,你帮我弄下
捕捉.rar (1.27 MB, 下载次数: 36)
作者: 恐惧剑刃    时间: 2015-1-2 11:54
本帖最后由 恐惧剑刃 于 2015-1-3 12:25 编辑

已经改好。。。。。

捕捉.zip

1.27 MB, 下载次数: 76


作者: 黑米馒头    时间: 2015-1-4 17:23
恐惧剑刃 发表于 2015-1-2 11:54
已经改好。。。。。

我有个想法,能不能这样改,宠物ID弄成数组,比如1号敌人对应的宠物为【30-50】号ID的角色,当成功捕捉1号敌人的时候,随机加入【30-50】号之间的1个角色为宠物。每抓1次1号敌人,这个数组里的角色就少1个,当【30-50】号都被抓光了,就显示该怪物,无法继续捕捉。还有当角色放生【30-50】号ID的时候,捕捉的ID里就加上对应的ID,表示那个ID又可以在被捕捉。貌似这样能修改吗。




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