Project1

标题: 有关禾西的领队更换脚本~ [打印本页]

作者: 君迁子    时间: 2008-11-10 01:04
标题: 有关禾西的领队更换脚本~
有时会遇到一种诡异的情况:
队伍中作为领队的第一主角战斗时挂了,结果回到地图的时候还是第一主角带路,感觉很奇怪……有没有什么限制可以让领队自动跳过HP为0的已死亡角色? [LINE]1,#dddddd[/LINE]此贴于 2008-11-19 11:08:04 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 天圣的马甲    时间: 2008-11-10 01:50
战斗结束的时候判定一下吧,如果$game_actor的HP为零且领队还是他,则switch_leader。
作者: 君迁子    时间: 2008-11-10 07:58
公共事件调用脚本啊……感觉很棘手了,试了好几下完全不会=v=bbbb
不知天圣可否指点一下呢?>w<(星星眼)
如果只在战斗结束判定,在地图上切换人物的话是不是还是会切换到HP=0的人物呢|||||||OTL
作者: 天圣的马甲    时间: 2008-11-10 13:44
那么就不光是要在战斗结束判定了吧……
你那个领队脚本本身也要判定,当按下那个切换键的时候,在刷新里判定一下,如果有角色HP为零并且依然是他带队,则return或者无反应,否则switch_leader……
- -我懒得搜索脚本了,回头你给我弄个工程我给你改吧。
作者: 君迁子    时间: 2008-11-10 17:16
http://rpg.blue/upload_program/d ... ��始_106737257.rar
工程在此~已经把战斗结束调用公共事件弄进去了
先拜谢一个m(_ _)m
作者: 天圣的马甲    时间: 2008-11-14 21:40
= =禾西这脚本好麻烦,都没有直接定义过一个switch_leader可以直接调用,不如LZ你换sailcat版本的领队系统吧{/hx}差不多是一回事来着
作者: 君迁子    时间: 2008-11-15 00:26
条件分歧:脚本:$game_party.leader == 3
  条件分歧:[4号角色]为[死亡]变为
    脚本:$game_party.switch_leader
         refresh
  分歧结束
分歧结束

可能这样写不对,因为战斗之后领队还是没变化OTZ
作者: 天圣的马甲    时间: 2008-11-15 00:59
以下引用君迁子于2008-11-14 16:26:23的发言:

条件分歧:脚本:$game_party.leader == 3
条件分歧:[4号角色]为[死亡]变为
   脚本:$game_party.switch_leader
        refresh
分歧结束
分歧结束

可能这样写不对,因为战斗之后领队还是没变化OTZ

大概是在refresh那里判定
for actor in $game_party.actors
if actor.hp == 0 and actor.id == @leader(或者你那个脚本里的领队变量编号)
switch_leader
end
end
(不行的话可以switch两次总之跳过这个角色就OK了吧……{/gg})
作者: tiandi79    时间: 2008-11-15 01:30
按LZ上传的工程中的脚本小改一下,可以做到行走按键切换判断死亡角色不显示。
至于当前角色如果死亡,则更换为下一编号人物似乎应该在战斗后处理,行走的切换中应该不需要这个判定了。


     # by tiandi HP为0的队员不能作为领队   
      #p "队员数量" + $game_party.actors.size.to_s
       for i in 1..$game_party.actors.size + 1
       #p @leader_id
            @leader_id += 1
       #     p "下一位置队员编号leader_id" + @leader_id.to_s
             if $game_party.actors[@leader_id].nil?
       #        p "下一位置队员超过队员数"
            @leader_id = 0
             end
            if $game_party.actors[@leader_id].hp != 0
       #       p "下一位置队员符合要求,调换队长" + @leader_id.to_s
              break
            end
        #    p "下一位置队员死亡,再次计算"
          end
        #  p "总过计算" + i.to_s + "次"
          # by tiandi 全部HP为0的情况下强制使用0作为LEADER标记
          if i == $game_party.actors.size + 1
            @leader_id = 0
         #    p "所有队员死亡,强迫0编号"
          end [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 君迁子    时间: 2008-11-15 08:38
先谢谢楼上的仁兄{/hx}这样在地图上面的就解决了,就差战斗后在公共时间中的脚本判定。
按天圣的思路拼了这么一段,条件的判断没错,但是中间的执行阶段报“+”出错=v=b
因为不太会写脚本,想让人帮忙看看应该怎么写TvT
for actor in $game_party.actors
if actor.hp == 0 and actor.id == $game_variables[3]#用的是3号变量

@leader_id += 1

end
end
作者: 天圣的马甲    时间: 2008-11-15 13:01
{/pz}@leader_id += 1
这种只能在脚本内部调用的命令不能放在公共事件脚本里啊。
最好是弄到$game_party全局调用命令比较方便一点,嗯啊。
(手头没有RM太不方便了啊打滚>_<)
作者: 君迁子    时间: 2008-11-15 18:41
改成了$game_party.actors[@leader_id] += 1
也会发生typeError……QAQ
从来都不会在公共时间里写脚本啊啊口牙TAT
作者: 天圣的马甲    时间: 2008-11-15 19:37
{/ll}带@的变量不能直接调用那不是全局的变量啊啊啊……
带$的才是全局变量,$game_party只是个举例而已……
在Game_Party再写一个def来调用比较好……这样就能在$game_party调用了……
(神啊啊啊啊为什么我手头没有RM啊!!!{/dk})
作者: 君迁子    时间: 2008-11-16 00:55
难怪加一个@与不加的区别那么大,干脆把leader_id定义算了……我再弄弄看=v=b [LINE]1,#dddddd[/LINE]版主对此帖的认可:『摸摸,不当ssd才是好孩子。=v=』,积分『+50』。 [LINE]1,#dddddd[/LINE]版主对此帖的评论:『搂主的问题看来好像解决了...20/11/2008还没有回应的话就强制认可了,请多多包涵...可以的话请你亲自认可给与帮助的会员,也可以直接按“直接结帖”...』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 君迁子    时间: 2008-11-19 21:14
因为战斗后的领队判定还没搞定,还不能完全认可,遂自顶=v=b
定义了lead_id还是会报"+"错OTZ
作者: 禾西    时间: 2008-11-25 17:39
小心己方全灭会有死循环:

  1. #------------------------------------------------------------------------------
  2. # 添加此脚本后,在地图画面按下X键更换当前的领队。
  3. # 领队更改不会造成战斗队伍、菜单队伍次序的更改。
  4. # 領隊的ID可以在第「ID」號的變量中取得(不再使用序列好了)
  5. #==============================================================================
  6. class Game_Player < Game_Character
  7.   ID = 0
  8. #--------------------------------------------------------------------------
  9. # ● 刷新
  10. #--------------------------------------------------------------------------
  11. def refresh
  12.    # 同伴人数为 0 的情况下
  13.    if $game_party.actors.size == 0
  14.      # 清除角色的文件名及对像
  15.      @character_name = ""
  16.      @character_hue = 0
  17.      $game_variables[ID] = 0 unless ID.zero?
  18.      # 分支结束
  19.      return
  20.    end
  21.    if @leader_id.nil? or $game_party.actors[@leader_id].nil?
  22.      # 获取带头的角色
  23.      actor = $game_party.actors[0]
  24.      @leader_id = 0
  25.    else
  26.      # 获取带头的角色
  27.      actor = $game_party.actors[@leader_id]
  28.    end
  29.    $game_variables[ID] = $game_party.actors[@leader_id].id unless ID.zero?
  30.    # 设置角色的文件名及对像
  31.    @character_name = actor.character_name
  32.    @character_hue = actor.character_hue
  33.    # 初始化不透明度和合成方式子
  34.    @opacity = 255
  35.    @blend_type = 0
  36. end
  37. #--------------------------------------------------------------------------
  38. # ● 画面更新
  39. #--------------------------------------------------------------------------
  40. alias oir_update update
  41. def update
  42.    if $game_party.actors[@leader_id].hp <= 0
  43.      begin
  44.        @leader_id += 1
  45.        @leader_id = 0 if $game_party.actors[@leader_id].nil?
  46.      end until $game_party.actors[@leader_id].hp > 0
  47.      refresh
  48.    end
  49.    # 按下 X 键的情况下
  50.    if Input.trigger?(Input::X)
  51.      @leader_id += 1
  52.      @leader_id = 0 if $game_party.actors[@leader_id].nil?
  53.      refresh
  54.    end
  55.    oir_update
  56. end
  57. end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 君迁子    时间: 2008-11-25 18:22
但是己方全灭不会先判断游戏结束吗?(除了“失败仍继续”……这种情况就必须在失败的场合加全体回复)=v=b
不过效果很完美~谢谢禾西大{/hx}




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