设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3496|回复: 19
打印 上一主题 下一主题

[已经解决] 【脚本求助】如何获取变量的数值?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
跳转到指定楼层
1
发表于 2017-4-25 11:05:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
小弟在写脚本遇有一事不明.
就是如何在脚本中获取事件变量数值
如在事件定义一个变量.  
(ID名称83)金钱 = 9000(常量)

如何在脚本中获取事件83金钱的常量?   
麻烦了各位请教了.
@芯☆淡茹水

点评

除非重新定义在一个不会复位的类里面,再根据事件的 地图ID 事件ID 来读取金钱。  发表于 2017-4-25 11:17
事件每次更换地图都会重新生成,你定义了它的金钱数,一换地图它就复位了。  发表于 2017-4-25 11:15

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
2
 楼主| 发表于 2017-4-25 11:29:24 | 只看该作者
这么复杂? 那是否还有别种方法来代替呢?

@芯☆淡茹水
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33143
在线时间
10485 小时
注册时间
2009-3-15
帖子
4756
3
发表于 2017-4-25 11:37:36 | 只看该作者
$game_variables[83]
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31847
在线时间
5079 小时
注册时间
2012-11-19
帖子
4877

开拓者

4
发表于 2017-4-25 11:49:57 | 只看该作者
本帖最后由 芯☆淡茹水 于 2017-4-25 11:51 编辑

比如下面我们可以用 Game_System 来储存事件的金钱, 这个类在存档时也会储存的。

  1. #==============================================================================
  2. class Game_System
  3.   #--------------------------------------------------------------------------
  4.   def initialize
  5.     @map_interpreter = Interpreter.new(0, true)
  6.     @battle_interpreter = Interpreter.new(0, false)
  7.     @timer = 0
  8.     @timer_working = false
  9.     @save_disabled = false
  10.     @menu_disabled = false
  11.     @encounter_disabled = false
  12.     @message_position = 2
  13.     @message_frame = 0
  14.     @save_count = 0
  15.     @magic_number = 0
  16.     # 比如生成一个哈希表储存事件金钱。
  17.     @event_gold = {}
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # 读取事件金钱的定义
  21.   def ev_gold(key)
  22.     # 如果哈希记录中没有该事件,返回 0 。
  23.     return 0 unless @event_gold.keys.include?(key)
  24.     # 返回记录的对应事件的金钱数值。
  25.     return @event_gold[key]
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # 增减事件金钱的定义
  29.   def add_ev_gold(key, n)
  30.     # 如果有记录,就在原记录上增减。
  31.     if @event_gold.keys.include?(key)
  32.       @event_gold[key] += n
  33.     else
  34.       #如果没有记录,新增加该事件的金钱记录。
  35.       @event_gold[key] = n
  36.     end
  37.     # 校正金钱数值,最小为 0 。
  38.     @event_gold[key] = [@event_gold[key], 0].max
  39.   end
  40. end
  41. #--------------------------------------------------------------------------
  42. # 这样就可以用事件脚本,来读取和增加某个事件的金钱。
  43. #--------------------------------------------------------------------------
  44. # 读取:$game_system.ev_gold(key)
  45. #       括号里的 key ,必须代入一个数组参数:[地图ID, 事件ID]
  46. #       比如要读取 2 号地图的 32 号事件金钱:$game_system.ev_gold([2,32])
  47. #       比如要读取 10 号地图的 5 号事件金钱:$game_system.ev_gold([10,5])
  48. #
  49. # 增减金钱:$game_system.add_ev_gold(key,n)
  50. #       括号里的 key 同上, n 为增减的金钱数, 正为加,负为减 。
  51. #       比如 3 号地图的 12 号事件金钱加8000 :$game_system.add_ev_gold([3,12],8000)
  52. #       比如 9 号地图的 6 号事件金钱减2000 :$game_system.add_ev_gold([9,6],-2000)
  53. #==============================================================================
复制代码


上面的脚本可以直接使用。

点评

感谢正确答案  发表于 2017-4-25 11:58

评分

参与人数 1梦石 +2 收起 理由
RyanBern + 2 醋虾

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
5
 楼主| 发表于 2017-4-25 11:52:23 | 只看该作者

感谢大佬回答,但是它好像是读ID的呢.
p 出来是0数值的.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
143
在线时间
62 小时
注册时间
2015-5-24
帖子
56
6
 楼主| 发表于 2017-4-25 11:53:34 | 只看该作者
芯☆淡茹水 发表于 2017-4-25 11:49
比如下面我们可以用 Game_System 来储存事件的金钱, 这个类在存档时也会储存的。

非常感谢.感谢前辈详细解明.
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

7
发表于 2017-4-25 12:36:22 | 只看该作者
如果是给事件添加一个属性,让这个事件有自己的变量,F1里有这样的内容:
RUBY 代码复制
  1. module RPG
  2.   class Event
  3.     def initialize(x, y)
  4.       @id = 0
  5.       @name = ""
  6.       @x = x
  7.       @y = y
  8.       @pages = [RPG::Event::Page.new]
  9.     end
  10.     attr_accessor :id
  11.     attr_accessor :name
  12.     attr_accessor :x
  13.     attr_accessor :y
  14.     attr_accessor :pages
  15.   end
  16. end

可以清楚的看出事件默认有以下属性:编号id,名称name,坐标x,坐标y,事件页pages
那么只需要添加一个属性gold就行了,由于可能初始化的时候会有问题,所以没有直接用 attr_accessor :gold
RUBY 代码复制
  1. module RPG
  2.   class Event
  3.     def gold
  4.       @gold || 0 # 没有设置gold,在第一次调用gold时返回0
  5.     end
  6.     def gold=(gold)
  7.      @gold = gold
  8.     end
  9.   end
  10. end

现在就可以直接这样用
RUBY 代码复制
  1. _gold = $game_map.events[1].gold
  2. $game_map.events[1].gold = 20

点评

非常感谢提供另一种方法.  发表于 2017-4-27 18:52
这样显然比楼上的方法好很多  发表于 2017-4-25 12:50

评分

参与人数 1梦石 +2 收起 理由
RyanBern + 2 醋虾

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39552
在线时间
7482 小时
注册时间
2009-7-6
帖子
13482

开拓者贵宾

8
发表于 2017-4-25 13:16:39 | 只看该作者
做这种事情不知道是为了什么,觉得楼主可能走了弯路。
4楼的方法消耗大,但可以储存。
楼上的方法消耗小,不能储存。

但按照楼主的意思应该是读事件的内容,应该是
  1. cmd = $game_map.events[83].list.find{|e| e.code==125}
  2. p cmd.parameters[1]==1 ? -cmd.parameters[2] : cmd.parameters[2]
复制代码

点评

来晚了,感谢大佬解答.  发表于 2017-4-27 18:52
我的那个,要是变更完后立即存档也是可以储存的吧?只是切换地图的时候会出问题。  发表于 2017-4-25 13:27

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 插鸡

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31847
在线时间
5079 小时
注册时间
2012-11-19
帖子
4877

开拓者

9
发表于 2017-4-25 13:42:35 | 只看该作者
本帖最后由 芯☆淡茹水 于 2017-4-25 13:59 编辑

加菲猫的这个还缺少关键性的一步
  1. class Game_Event < Game_Character
  2.   def gold
  3.     return @event.gold
  4.   end
  5.   def gold=(gold)
  6.     @event.gold = gold
  7.   end
  8. end
复制代码


只是这样做的话,和直接定义在 Game_Event 里面没有多大的区别,

RUBY 代码复制
  1. class Game_Event < Game_Character
  2.   def gold
  3.     return @gold || 0
  4.   end
  5.   def gold=(gold)
  6.     @gold = gold
  7.   end
  8. end

同样转换地图会重置
因为 Game_Map 里面的一句:@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))

如果在第一个脚本里面再加点储存

RUBY 代码复制
  1. class Game_Event < Game_Character
  2.   def gold
  3.     return @event.gold
  4.   end
  5.   def gold=(gold)
  6.     @event.gold = gold
  7.     save_data($game_map.map, sprintf("Data/Map%03d.rxdata", $game_map.map_id))
  8.   end
  9. end
  10. class Game_Map
  11.   def map
  12.     return @map
  13.   end
  14. end

不知道这样有没效果。但本人觉得动RM的 rxdata 不是很好的选择。


如果默认脚本的 Game_Event  能保存的话,那么默认脚本的 独立开关 就应该定义在 Game_Event 里了,这样省了很多事。

点评

↓对,本来参考的就是独立开关,写在 Game_System 里是方便存档。另写一个类的话,还要在存档那里修改。  发表于 2017-4-25 14:22
对的,是我疏忽了……的确应该在 Game_Event里定义  发表于 2017-4-25 14:15
或者参考独立开关,把独立开关改成“独立变量”~因为独立开关也是单独存储,和rxdata无关的。  发表于 2017-4-25 14:14
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1373
在线时间
295 小时
注册时间
2014-6-24
帖子
100
10
发表于 2017-4-27 22:45:02 | 只看该作者
我觉得楼上所有办法都太复杂了,这是我认为最简洁的办法:

用事件脚本:
RUBY 代码复制
  1. File.new("01.rxdata","w")

以上意思是在游戏工程中新建一个空文件,然后:
RUBY 代码复制
  1. save_data\
  2. ($game_variables[1],"01.rxdata")

上面这条事件脚本的意思是:将1号变量存入01.rxdata文件中
再一个就是读取,依旧是事件脚本:
RUBY 代码复制
  1. $game_variables[2]=load_data("01.rxdata")


以上意思就是将01文件中的变量取出来,并且存到2号变量中
以上这些思路虽然看起来很简单,但是懂得灵活运用的话 可以做出很多有趣的功能
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-19 10:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表