插件脚本 【原创】简易存档联动功能v0.2

本代码为原创,使用或转载请注明出自宝可饭堂社区https://bbs.pokefans.cn/threads/81/
这个脚本需要双方游戏都使用才能进行联动,因为有些作者会改游戏存档位置,所以无法直接使用存档来判断,必须额外生成一个识别文件。
而且由于要获取windows用户名,模拟器应该会有兼容性问题,所以最好加上操作系统判断的代码。

使用方法是在main上面新插入一个空页,部分代码需要查看文末说明修改。

0.2更新内容
1.除让玩家手动输入GUID外,还可以作者直接在事件中传入
2.修改了设置开关的逻辑


Ruby:
#当前游戏的识别码,最长10位字母数字组合,不要和别人的重复
$self_guid = "ZDE"
#支持联动的游戏的识别码,最长10位字母数字组合
$collab_guids = ["RX","universe"]

#在事件内调用此函数,括号内传入GUID领取奖励
def inputGUID(guid="")
  #=======================================
  #如果需要禁用模拟器,os_family在文末(毕竟要获取windows用户名,模拟器应该会有兼容性问题吧)
  if os_family!="windows"
    pbMessage("当前操作系统不支持此功能。")
    return
  end
  #=======================================
  if guid==""   #如果事件里不传参,就让玩家手动输入
    guid = pbMessageFreeText(_INTL("请输入需要联动的游戏的GUID:"),"",false,10)
  end
  return if guid==""
  if $collab_guids.include?(guid)  #如果输入的guid在所支持的数组内
    #由于可能不止会联动一个游戏,所以最好留一片连续空闲的开关,这里以160举例
    if $game_switches[160] #开关为true则已领取
      pbMessage("已领取当前联动游戏的奖励。")
    else    #开关为false则未领取
      if loadGUID(guid)!=false  #确实读取到了数据,而不是玩家手动创建的文件
        pbReceiveItem(:MASTERBALL,10)
        $game_switches[160]=true
      else  #未找到识别文件,或文件是玩家手动创建的
        pbMessage("未找到符合条件的游戏记录。")
      end
    end
=begin
#其他游戏
    if $game_switches[161] #开关为true则已领取
      pbMessage("已领取当前联动游戏的奖励。")
    else    #开关为false则未领取
      if loadGUID(guid)!=false  #确实读取到了数据,而不是玩家手动创建的文件
        pbAddPokemon(:MEWTWO,100)
        $game_switches[161]=true
      else  #未找到识别文件,或文件是玩家手动创建的
        pbMessage("未找到符合条件的游戏记录。")
      end
    end
=end
  else  #输入的guid不在所支持的数组内
    pbMessage("当前不支持与此游戏联动或不能识别的GUID。")
  end
end

#保存当前游戏的GUID,在存档函数def pbSave(safesave=false)的return之前调用此函数(见文末示例)
def saveGUID
  guid = $self_guid
  owner = ENV["USERNAME"]
  owner = owner.gsub(/\s+.*$/,"")
  begin
    guidfile = "C:\\Users\\" + owner + "\\Saved Games\\" + guid + ".guid"
    File.open(guidfile,"wb"){ |f|
      Marshal.dump($Trainer,f)
    }
  rescue
    guidfile = "C:\\Users\\Administrator\\Saved Games\\" + guid + ".guid"
    begin
      File.open(guidfile,"wb"){ |f|
        Marshal.dump($Trainer,f)
      }
    rescue
      return false
    end
  end
  return true
end

#根据GUID查找识别文件,若存在则返回玩家内部id,否则返回false
def loadGUID(guid)
  owner = ENV["USERNAME"]
  owner = owner.gsub(/\s+.*$/,"")
  trainer = nil
  begin
    guidfile = "C:\\Users\\"+owner+"\\Saved Games\\" + guid + ".guid"
    File.open(guidfile){ |f|
      trainer = Marshal.load(f)
    }
    return trainer.id
  rescue
    begin
      guidfile = "C:\\Users\\Administrator\\Saved Games\\" + guid + ".guid"
      File.open(guidfile){ |f|
        trainer = Marshal.load(f)
      }
      return trainer.id
    rescue
      return false
    end
  end
end
Ruby:
#========================================================
#在def pbSave(safesave=false)的return之前调用saveGUID函数
    if os_family=="windows"
      if saveGUID
        echo "GUID saved successfully!"
      else
        pbMessage("GUID保存失败!")
      end
    end
#========================================================

#========================================================
#操作系统判断函数
def os_family
  os = "other"
  case RUBY_PLATFORM
  when /ix/i, /ux/i, /gnu/i,/sysv/i, /solaris/i,/sunos/i, /bsd/i
    os = "unix"
  when /win/i, /ming/i
    os = "windows"
  end
  return os
end
 

附件

  • Pokefans_GUID v0.2.rb
    3.9 KB · 查看: 10
最后编辑:

在线成员

现在没有会员在线。

论坛统计

主题
340
消息
1,560
会员
2,323
最新会员
LightenPan

关于我们

  • 宝可梦以及其他相关名称是任天堂的商标,版权归宝可梦公司所有。宝可饭堂是一个同人游戏中文社区,不隶属于宝可梦公司。在宝可饭堂上的粉丝游戏亦未获得其授权,请支持正版游戏。
© 2022- pokefans.cn
点此延长宝可饭堂生命