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

Project1

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

[已经过期] 存档问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
394
在线时间
20 小时
注册时间
2018-2-22
帖子
41
跳转到指定楼层
1
发表于 2018-3-6 12:12:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
存档能不能锁定一部电脑,就是别人玩的存档给别人,能不能让别人电脑打不开这份存档?

Lv2.观梦者

梦石
0
星屑
277
在线时间
53 小时
注册时间
2014-1-24
帖子
18
2
发表于 2018-3-6 13:35:17 | 只看该作者
本帖最后由 qq420134293 于 2018-3-6 13:36 编辑

那就需要根据硬盘信息根据一定算法生成个id,就如下面的$GameId这个是开始游戏就根据硬盘生成的一个游戏id,这个是id不一样就清空道具和清空金币,或者你直接return false就进入不了游戏。

module DataManager
  def self.save_game_without_rescue(index)
    File.open(make_filename(index), "wb") do |file|
      $game_party.addnogai();
      $game_system.on_before_save
      Marshal.dump(make_save_header, file)
      data = Zlib::Deflate.deflate(Marshal.dump(make_save_contents));
      Marshal.dump(data, file)
    end
    file = File.open(make_filename(index), "ab")
    Marshal.dump($GameId, file)
    file.close
    return true
  end
  def self.load_game_without_rescue(index)
    File.open(make_filename(index), "rb") do |file|
      Marshal.load(file)      
      data = Zlib::Inflate.inflate(Marshal.load(file));
      extract_save_contents(Marshal.load(data))
      code = Marshal.load(file);
      if code != $GameId
        $game_party.init_all_items();
        $game_party.gain_gold(0);
      end
      reload_map_if_updated
      @last_savefile_index = index
    end
    return true
  end
end
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
20915
在线时间
9331 小时
注册时间
2012-6-19
帖子
7105

开拓者短篇九导演组冠军

3
发表于 2018-3-6 14:13:03 | 只看该作者
qq420134293 发表于 2018-3-6 13:35
那就需要根据硬盘信息根据一定算法生成个id,就如下面的$GameId这个是开始游戏就根据硬盘生成的一 ...


还以为附了 $GameId 的生成算法咧……
附带一个机器码的生成代码:https://rpg.blue/thread-341893-1-1.html

另外,虽然理论上能锁存档,但除非真的是核心的东西,否则玩家分享存档就睁一只眼闭一只眼算了,要想作弊方式多了去了锁不住的
回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
277
在线时间
53 小时
注册时间
2014-1-24
帖子
18
4
发表于 2018-3-6 14:27:55 | 只看该作者
喵呜喵5 发表于 2018-3-6 14:13
还以为附了 $GameId 的生成算法咧……
附带一个机器码的生成代码:https://rpg.blue/thread-341893-1-1.h ...

那个太麻烦了。
简单点比如
%x{getmac >> System/mac.ini}
直接获取mac生成在一个文本然后读取转成10进制等之类的,反转之类的加上一些数字之类的简单处理就行了。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
394
在线时间
20 小时
注册时间
2018-2-22
帖子
41
5
 楼主| 发表于 2018-3-6 14:46:40 | 只看该作者
喵呜喵5 发表于 2018-3-6 14:13
还以为附了 $GameId 的生成算法咧……
附带一个机器码的生成代码:https://rpg.blue/thread-341893-1-1.h ...

调试一直nil

点评

管理员权限  发表于 2018-3-6 15:06
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
277
在线时间
53 小时
注册时间
2014-1-24
帖子
18
6
发表于 2018-3-6 17:26:29 | 只看该作者
本帖最后由 qq420134293 于 2018-3-6 17:36 编辑

#encoding:utf-8
#==============================================================================
# ■ Main
#------------------------------------------------------------------------------
#  各种定义结束后,从这里开始实际运行。
#==============================================================================

module DataManager
  def self.save_game_without_rescue(index)
    File.open(make_filename(index), "wb") do |file|
      $game_system.on_before_save
      Marshal.dump(make_save_header, file)
      data = Zlib::Deflate.deflate(Marshal.dump(make_save_contents));
      Marshal.dump(data, file)
    end
    file = File.open(make_filename(index), "ab")
    Marshal.dump($GameId, file)
    file.close
    return true
  end
  def self.load_game_without_rescue(index)
    File.open(make_filename(index), "rb") do |file|
      Marshal.load(file)      
      data = Zlib::Inflate.inflate(Marshal.load(file));
      extract_save_contents(Marshal.load(data))
      code = Marshal.load(file);
      if code != $GameId
        return false;
      end
      reload_map_if_updated
      @last_savefile_index = index
    end
    return true
  end
end

$GameId = 1234567895201314;

def GetGameId()
  File.delete("SanGuo.ini") if File::exists?("SanGuo.ini");
  %x{getmac >> SanGuo.ini}
  
  s = "";i = 0;idstring = "";
  while(s != nil&& i < 5)
    i += 1;
    s = IO.readlines("SanGuo.ini");
    idstring += s if s != nil
  end
  len = idstring.length;
  out = 0;
  while(len > 0)
    len -= 1;
    temp = idstring[len].to_s.hex + 1
    out += temp;
    out *= temp if out.to_s.length < 16
  end
  out *= 123456789
  out += $GameId;
  out = out.to_s[0,16].reverse
  $GameId = out.to_s;
  rgss_main { SceneManager.run }
end

GetGameId();




直接用这个吧,很简单的那种,至少95%的电脑都是适用的。稍微会一点的就知道原理。
那乘以的123456789你可以换成其他的,小一点就是了。
数字很方便的,主要是数字再乘以个数字加减一下就可以拿来做验证id比如付费购买某个东西。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
277
在线时间
53 小时
注册时间
2014-1-24
帖子
18
7
发表于 2018-3-6 17:40:27 | 只看该作者
我做的是游戏id是可见的,写在游戏一个目录里,然后存档发给别人了别人玩会把东西和金币清空。
我还添加了一个功能就是A的存档发给B,B可以拿他的游戏id去一个网站生成验证ID,
当前整时有效比如17点10份生成的到18点就无效了,B玩A发的存档东西正常存在不会清空的
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
394
在线时间
20 小时
注册时间
2018-2-22
帖子
41
8
 楼主| 发表于 2018-3-6 20:06:47 | 只看该作者
qq420134293 发表于 2018-3-6 17:26
#encoding:utf-8
#==============================================================================
# ■ ...

你这个直接插入就行拉吧 大佬

点评

让作者设置一个登录码,玩家进去游戏需要输入八位变量,再到脚本里面放个读档执行事件,让玩家输入登录码,如果错误强行退出游戏  发表于 2018-3-6 20:45
回复 支持 0 反对 1

使用道具 举报

Lv2.观梦者

梦石
0
星屑
277
在线时间
53 小时
注册时间
2014-1-24
帖子
18
9
发表于 2018-3-7 08:54:39 | 只看该作者
V5洛 发表于 2018-3-6 20:06
你这个直接插入就行拉吧 大佬

是的,直接替换掉Main就行了。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
394
在线时间
20 小时
注册时间
2018-2-22
帖子
41
10
 楼主| 发表于 2018-3-20 19:08:10 | 只看该作者
本帖最后由 V5洛 于 2018-3-20 19:09 编辑
qq420134293 发表于 2018-3-7 08:54
是的,直接替换掉Main就行了。


测试啦下 在战斗测试结束时报错

123.png (13.03 KB, 下载次数: 18)

123.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 15:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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