本代码为原创,使用或转载请注明出自宝可饭堂社区https://bbs.pokefans.cn/threads/81/
这个脚本需要双方游戏都使用才能进行联动,因为有些作者会改游戏存档位置,所以无法直接使用存档来判断,必须额外生成一个识别文件。
而且由于要获取windows用户名,模拟器应该会有兼容性问题,所以最好加上操作系统判断的代码。
使用方法是在main上面新插入一个空页,部分代码需要查看文末说明修改。
0.2更新内容
1.除让玩家手动输入GUID外,还可以作者直接在事件中传入
2.修改了设置开关的逻辑
这个脚本需要双方游戏都使用才能进行联动,因为有些作者会改游戏存档位置,所以无法直接使用存档来判断,必须额外生成一个识别文件。
而且由于要获取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
附件
最后编辑: