Project1

标题: 能否实现每次进游戏让改过的事件名的复原 [打印本页]

作者: 幻耶    时间: 2009-11-5 15:32
标题: 能否实现每次进游戏让改过的事件名的复原
本帖最后由 幻耶 于 2009-11-5 15:44 编辑

游戏中会用 $game_map.events[6].name="..." 的方法改变1~20号事件的名字,我希望当保存游戏退出再读取进入的时候,1~20号事件的名字能够全部复原,行不行啊?
作者: secondsen    时间: 2009-11-5 16:08
和我在那个帖子里说的一样的方法。。。。。就是重新载入事件
作者: 幻耶    时间: 2009-11-5 16:13
本帖最后由 幻耶 于 2009-11-6 08:58 编辑

还是这样??不变?这样事件名字没变回来啊。。。还有,只重新载入1~20号事件应该怎么写啊?
class Game_Map
  def reset
    @events.clear
    for i in @map.events.keys
      @events = Game_Event.new(@map_id, @map.events)
    end
  end
end
作者: 幻耶    时间: 2009-11-6 09:06
求教!!:(
作者: 幻耶    时间: 2009-11-6 19:43
苦啊~~~顶!
作者: 幻耶    时间: 2009-11-7 10:09
第二天
作者: secondsen    时间: 2009-11-7 14:25
$game_map.events[6].name="..."你这个是怎么做的?默认是不可以的
作者: 幻耶    时间: 2009-11-7 14:41
本帖最后由 幻耶 于 2009-11-7 14:48 编辑

我加了下面这段脚本,所以可以在游戏中随时改事件名了,但是只会改动1~20号事件的名字。我希望每次读存档进游戏,1~20号事件的名字就恢复原样

class Game_Event < Game_Character
def name
  return @event.name
end  
def name=(newname)
  @event.name = newname
end
end
作者: secondsen    时间: 2009-11-7 15:03
class Game_Event < Game_Character
  attr_accessor :name
  alias old_refresh refresh
  def refresh
    @name = @event.name
    old_refresh
  end
end
重新载入地图,包括进入游戏,读档,换场景,都会变成原来的名字。。。替换你那个。。。。如果没效果就证明你这个还有个save_data没有贴出来
作者: 幻耶    时间: 2009-11-7 15:09
我新开一个缺省的工程测试,还是没效果啊
只改EV001的名字变成111,保存退出,再读取进度,用个事件P 事件1的名字,还是111
作者: secondsen    时间: 2009-11-7 15:19
本帖最后由 secondsen 于 2009-11-7 15:20 编辑

class Game_Map
  def reset
    @events.clear
    for i in @map.events.keys
      @events = Game_Event.new(@map_id, @map.events)
    end
  end
end

。。。。

还有  Scene_Load  83行
也就是
    $game_map           = Marshal.load(file)
    $game_player        = Marshal.load(file)
下面插入
    $game_map.reset
没做么。。就是按照以前的改。。。

另外为什么你也是 改EV001的名字变成111。。。难道咱们俩心有灵犀?
作者: secondsen    时间: 2009-11-7 15:22
为什么你也是改EV001的名字变成111,难道咱俩心有灵犀?

Scene_Load 83行
就是
    $game_map           = Marshal.load(file)
    $game_player        = Marshal.load(file)
下面插入
    $game_map.reset

还有这脚本
  1. class Game_Map
  2.   def reset
  3.     @events.clear
  4.     for i in @map.events.keys
  5.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  6.     end
  7.   end
  8. end
复制代码
就是和以前一样的改动
作者: 幻耶    时间: 2009-11-7 15:24
多谢!!能不能限定某些地图的某些事件还原啊?比如只让1~20号地图里面的1~20号事件的名字和位置还原
作者: secondsen    时间: 2009-11-7 15:29
本帖最后由 secondsen 于 2009-11-7 15:32 编辑

1~20号
  1. class Game_Map
  2.   def reset
  3.     @events.clear
  4.     for i in @map.events.keys
  5.       @events[i] = Game_Event.new(@map_id, @map.events[i]) if i>0 && i < 21
  6.     end
  7.   end
  8. end
复制代码
if i>0 && i < 21就加了这个东西。。。

另外。。。name是载入的时候自动变回去的。。。。如要还原不了需要
save_data()把你的数据改掉。。。如果你的游戏要打包加密的话,我也不知道会出现什么情况。。
作者: 幻耶    时间: 2009-11-7 15:29
本帖最后由 幻耶 于 2009-11-7 15:31 编辑

下面两段放一起插在MAIN上面吗?还有在 Scene_Load  83行下面加了$game_map.reset

我保存之后再读取就出错了!缺省的工程啊~~没冲突的。。

class Game_Event < Game_Character
  attr_accessor :name
  alias old_refresh refresh
  def refresh
    @name = @event.name
    old_refresh
  end
end


  # 添加
    def reset
    @events.clear
    for i in @map.events.keys
      @events = Game_Event.new(@map_id, @map.events)
    end
  end

11.JPG (10.99 KB, 下载次数: 2)

11.JPG

作者: secondsen    时间: 2009-11-7 15:34
@events[i] = Game_Event.new(@map_id, @map.events[i]) if i>0 && i < 21


而不是

@events = Game_Event.new(@map_id, @map.events)
作者: secondsen    时间: 2009-11-7 15:35
注意。。你少了 [i]
作者: 幻耶    时间: 2009-11-7 15:37
谢谢!我其实是把敌人的HP放到事件名里了,所以砍敌人的时候就改名字,读档的时候想还原,再次谢谢!
作者: secondsen    时间: 2009-11-7 15:38
本帖最后由 secondsen 于 2009-11-7 15:46 编辑

不用谢,举手之劳而已

那啥。。。认可答案。。。我攒积分中。。。
作者: 幻耶    时间: 2009-11-13 08:32
1~20号class Game_Map
  def reset
    @events.clear
    for i in @map.events.keys
      @events = Game_Event.new(@map_id, @map.events) if i>0 && i < 21
    end
  end
endif i>0 && i < 21就加了这个东西。 ...
secondsen 发表于 2009-11-7 15:29



我加了if i>0 && i < 21,但是存盘退出再读取进游戏发现20号以上的事件都消失了!




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