查看: 1671|回复: 9

[有事请教] 【已解决】如何在脚本中的t和e=一个在事件可以调用的值

[复制链接]
梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
发表于 2023-8-18 08:15:38 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 金芒芒 于 2023-8-21 17:13 编辑

  t= Marshal::load(Marshal.dump(team_selected_troops))
  e = Marshal::load(Marshal.dump(enermy_selected_troops))

[pre lang="ruby"]  #--------------------------------------------------------------------------
  # ● 命令 : 自定义战斗
  #--------------------------------------------------------------------------
  def command_custom_battle#定义命令_自定义战斗
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
     #$游戏系统。se播放($数据系统。未指定文件或目录
   
    choose_map_main#选择主地图
# map_info = $custom_battle_next_map_id#@map_info#地图信息=@地图信息
  #如果选择随机地图随机士兵
# if ! @force_back and map_info[0] == -1#如果!@强制返回并地图信息[0]==-1
#   make_random_efs_game#生成随机efs_game
#   return
# end
#---------------------------------------------------- ↑↓   
    #如果@强制后退或@强制后退==无
    if ! @force_back or @force_back == nil
    #自定义主战场(0,@地图信息[1],@地图信息[2])data_id
    custom_battle_main(0,@map_info[1],@map_info[2])
    #团队选定部队=@选定部队
    team_selected_troops = @selected_units


    #如果@强制后退或@强制后退==无
    if ! @force_back or @force_back == nil
      #自定义主战场(1,@地图信息[1],@地图信息[2])
      custom_battle_main(1,@map_info[1],@map_info[2])
      #敌人选定部队=@选定部队
      if $game_switches[18] == true
      #true是打开,false是关闭
      #敌军enermy精选部队
      
      enermy_selected_troops =[[17],[18],[19],[21],[16]] #@selected_units

      
      # @group_one.x = 928
     
    #  @group_one.y = 544
    #  @group_two.x = 1248
    #  @group_two.y = 640
     
      end
      if $game_switches[19] == true
      enermy_selected_troops =[ [5,5],[5,5,5],[5,5],[5,5,5],[5,5,5,5,5] ]
    end

   
      #如果@强制后退或@强制后退==无
      if ! @force_back or @force_back == nil
        choose_hero_main#选择英雄主
        selected_hero = nil
        #selected_hero = @selected_hero#选定的英雄=@选定的英雄
        #如果@强制后退或@强制后退==无
        if ! @force_back or @force_back == nil
         
        team_army = Game_Army_Slg.new(0)
        #enermy军队
        enermy_army = Game_Army_Slg.new(1)
        team_army.create_empty_army
        enermy_army.create_empty_army
        #team_army.load_twoD_Array(team_selected_troops,selected_hero)
        team_army.load_twoD_Array(team_selected_troops,selected_hero)
        enermy_army.load_twoD_Array(enermy_selected_troops)
       # 切换地图画面

     #team_army.set_groups_name#团队军队。设置团队名称[@character.group-1]
#--------------------------------------------------------------------------------
    t= Marshal::load(Marshal.dump(team_selected_troops))

    a=t.flatten
    x=457
    for i in 0...a.size
    $game_screen.pictures[i+1].show("头像#{a}", 0,x, 550, 100, 100, 255, 0)
    x-=87
    end
-----------------------------------------------------------------------------
  
    e = Marshal::load(Marshal.dump(enermy_selected_troops))
    b=e.flatten
    x=544
    for i in 0...b.size
    $game_screen.pictures[6+i+1].show("头像#{b}", 0,x, 550, 100, 100, 255, 0)
    x+=87
    end
        #$自定义战斗下一个战斗者团队=团队军队
        $custom_battle_next_fighter_team = team_army
        #$自定义战斗下一个战斗者敌军=敌军军队
        $custom_battle_next_fighter_enermy = enermy_army
        #$自定义战斗下一个地图ID=16
        $custom_battle_next_map_id = 16#map_info[0]
       #if $game_switches[19] == true
       # a = [1, 2, 3, 5, 8]
       # $custom_battle_next_map_id  = a[rand(a.size)]
       # end
        $game_party.setup_starting_members#游戏部分设置启动成员
        
        
        
    # 设置初期位置的地图##############1356622
       $game_map.setup(30)
    # 主角向初期位置移动
        $game_player.moveto(0, 0)
        
        
    # 刷新主角
        $game_player.refresh
    # 执行地图设置的 BGM 与 BGS 的自动切换
        $game_map.autoplay
        
        
        
        
    # 刷新地图 (执行并行事件)
        $game_map.update
    # 切换地图画面
        $scene = Scene_Map.new
      
         # $scene = Scene_Map.new
          #efs_title_main
         
         else # fourth
        @force_back = false#@强制后退=错误
        Graphics.update #图形更新
        efs_title_update#EFS标题更新
        end   
         
           
      else # third
      @force_back = false#@强制后退=错误
      Graphics.update#图形更新
      efs_title_update#EFS标题更新
      end   
    else # second
    @force_back = false#@强制后退=错误
    Graphics.update#图形更新
    efs_title_update#EFS标题更新
    end
  
   else #1st
     @force_back = false#@强制后退=错误
     Graphics.update#图形更新
     efs_title_update#EFS标题更新
   end

  end
end  [/pre]
梦石
0
星屑
4756
在线时间
389 小时
注册时间
2012-11-8
回帖
235
发表于 2023-8-18 09:17:50 | 显示全部楼层
作为全局变量或者实例变量,事件中用脚本调用
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2023-8-18 10:03:34 | 显示全部楼层
本帖最后由 金芒芒 于 2023-8-18 10:42 编辑
qq634488405 发表于 2023-8-18 09:17
作为全局变量或者实例变量,事件中用脚本调用


全局变量是这样吗
t($game_variables[1]) = Marshal::load(Marshal.dump(team_selected_troops))
还是
$t[1] = Marshal::load(Marshal.dump(team_selected_troops))


回复

使用道具 举报

梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2023-8-20 11:51:43 | 显示全部楼层
咋看去上去楼主的Marshal::load 的双引号是什么作用的, 我看读取里是Marshal.load , 会不会是楼主定义了什么新方法
我在某游戏里找到这个储读档方法,不知有没用
[pre lang="ruby"]#储存
  name="Data/save.sys"
  file = File.open(name, "wb")
  Marshal.dump($game_variables[1234], file)
  file.close
  



#读取
name="Data/save.sys"
if FileTest.exist?(name)
    file = File.open(name, "rb")
$game_variables[1234]=Marshal.load(file)
    file.close
  end
[/pre]

点评

原来如此,谢指导  发表于 2023-8-21 18:03
.dup也只能算浅拷贝,数组中的数组或字符串就不能被复制,Marshal这个则是从内到外完全复制一份  发表于 2023-8-21 08:28
他那个是其他太太教的方法似乎相当於.dup  发表于 2023-8-20 17:05
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2023-8-20 14:19:28 | 显示全部楼层
建议不要自己定义全局变量,可以挂靠在游戏已有的全局变量中。
如果你的变量不需要存档,可以挂靠在$game_temp下;需要存档,可以根据设计挂靠在$game_party或$game_system上。

当然,你这个场景显然和战斗有关,我估计你是在战斗中传递数值,那可以挂靠在$game_troop上。

class Game_Troop
  attr_accessor :你的变量名称_用下划线代替空格
end

比如:
class Game_Troop
  attr_accessor :t
end

之后,你就可以通过 $game_troop.t = 1,然后在脚本中通过$game_troop.t读到这个1。
用头画头像,用脚写脚本
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2023-8-21 11:52:55 | 显示全部楼层
ppspssss 发表于 2023-8-20 11:51
咋看去上去楼主的Marshal::load 的双引号是什么作用的, 我看读取里是Marshal.load , 会不会是楼主定义了什 ...

因为数组是选着数组  也就是a=[[],[],[],[],[]]未知数,所以要Marshal::load(Marshal.dump(a)
a=变量,可以在事件中调用
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2023-8-21 11:54:13 | 显示全部楼层
KB.Driver 发表于 2023-8-20 14:19
建议不要自己定义全局变量,可以挂靠在游戏已有的全局变量中。
如果你的变量不需要存档,可以挂靠在$game_t ...

谢谢应该是可以用了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部