Project1

标题: 关于切换副本人物脚本 [打印本页]

作者: tuifeiheihu    时间: 2022-4-29 21:56
标题: 关于切换副本人物脚本
#  记录队员ID后切换副本人物(单个人物)
#  事件里调用 $game_party.remove_all_actor(id)
#    id:角色的数据库id
class Game_Party
  def remove_all_actor(id)
    $game_variables[510] = $game_party.members.size
    for i in 1..$game_variables[510]
      $game_variables[i+510] = $game_party.members[i-1].id
    end
    @actors = [id]
    $game_player.refresh
  end
end

这个脚本只能实现切换成单个人物的效果,输入多个id就会出错,请问能不能改成无论切换成单个或者多个人物都可以的效果,虽然在编辑事件时让其余人物入队就能达到一样的效果,但我还是想学习一下。而且能不能改成输入角色名字呢?ID不太好记……
作者: alexncf125    时间: 2022-4-30 01:31
@actors = [id]改成@actors = id后

调用时使用
$game_party.remove_all_actor([5])
$game_party.remove_all_actor([6,7,8])
作者: 喵呜喵5    时间: 2022-4-30 01:32
第七行的
  1. @actors = [id]
复制代码
改成
  1. @actors = id
复制代码


然后使用这个脚本的方式从
  1. $game_party.remove_all_actor(id)
复制代码
改成
  1. $game_party.remove_all_actor([id1, id2, id3])
复制代码

作者: KB.Driver    时间: 2022-4-30 02:17
RUBY 代码复制
  1. class Game_Party
  2.   def replace(*array)
  3.     array.flatten!
  4.     return if array.empty?
  5.     $game_party.members.each_with_index do |m, i|
  6.       $game_variables[i+510] = m.id
  7.     end
  8.     @actors = array
  9.     $game_player.refresh
  10.     $game_map.need_refresh = true
  11.   end
  12.  
  13.   def replace_by_names(*array)
  14.     array.flatten!
  15.     ids = array.map do |name|
  16.       actor = $data_actors.find { |a| a && a.name == name }
  17.       actor ? actor.id : msgbox("数据库中不存在角色'#{name}'")
  18.     end.compact
  19.     replace(ids)
  20.   end
  21. end


$game_party.replace(1, 2, 3) # 将队伍成员替换为1 2 3号角色
$game_party.replace_by_names("艾里克", "娜塔丽") # 将队伍成员替换为艾里克与娜塔丽。如果有多个同名角色,只取第一个。
作者: tuifeiheihu    时间: 2022-4-30 13:28
好哦,谢谢几位大佬!




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