創作內容

3 GP

【RGSS/Ruby】防止變數及金錢被修改_v2

作者:解凍豬腳│2012-01-07 00:24:41│贊助:6│人氣:1200

RMXP推出至今已很多年了,很多人都在鑽研「如何保護好這些變數不被修改」……

其實,這個腳本在一年半以前就已經被我和金也安里成功做出來了

(也許有類似腳本更早出現只是沒公開),只是當時猶豫很久,一直沒發布到網路上。

這個腳本為金也安里所構思及編寫基底,而我則是把它修正、簡化及改為插件式腳本。



我和安里把它完成之後,我有稍微去Google了一下,

看來把防修改的專用腳本發布到網路上似乎是R界的首例(自high中)

這個腳本原先打算不公開的,不過後來經過決議,

為了促進R界的發展及和平(?),還是把它發出來讓大家可以互相交流、研究。

我也知道「複製貼上組織」的成員是無可避免的,

但我仍希望使用這些腳本的人能夠自行觀察,去了解它的原理,

而不是單純複製貼上,否則這樣子虧損的是你自己。



好啦,廢話不多說,腳本在這裡,歡迎大家把它帶回去研究。



使用方法很簡單,就是把Main刪除,然後把這腳本取代掉它。

其餘的注意事項都有標明在腳本的注釋中。

#===================================================================
# 變數及金錢內部數值保護腳本_v2 by 金也安里 & 解凍豬腳(土撥撥)
#-------------------------------------------------------------------
# $vg_Start : 設定欲保護之變數範圍(起點)
# $vg_End : 設定欲保護之變數範圍(結束)
# $vg_warning : 所彈出之中文訊息
# $vg_pop : 所彈出訊息之樣式--
# 0 : 不彈出通知視窗而直接關閉遊戲
# 1 : 彈出警告視窗($vg_warning的內容)
# 2 : 彈出較完整的警告視窗($vg_warning的內容加上被修改前及被修改後的數值)
# $vg_except : 不列入保護範圍的變數代號。
# 假設7號與10號變數不需被保護則將$vg_except設為[7,10]
# $vg_nguard : 是否關閉此功能(true為是,false為否)
#-------------------------------------------------------------------
# 使用方法:
# 將此腳本直接取代Main腳本即可,
#  之後若需更改Main設定請至此腳本尾調整。
#
# 注意事項:
# 勿使用 $game_party.gold += x 語法,
# 請將其改為 $game_party.gain_gold(x) 。
#===================================================================


#==================================
# 腳本設定
#==================================
$vg_Start = 1
$vg_End = 100
$vg_warning = "系統數值發生異常"
$vg_pop = 1
$vg_except = []
$vg_nguard = false
#==================================


#腳本初始化。此處資料不需更動
$vplus = []
$gplus = (rand(20000) + 1) * 1001
$gplus += rand(1001)
for i in $vg_Start..$vg_End
$vplus.push(rand(9999))
end
$old_V = []

#主要核心
module Var_Guard
def self.all_1
self::Game_Party_Gold.Game_Party_Gold_1
self::V_C.check_1
end
def self.all_2
self::Game_Party_Gold.Game_Party_Gold_2
for i in $vg_Start..$vg_End
self::V_C.check_2(i)
end
end
module Game_Party_Gold
def self.Game_Party_Gold_1
@old_gold = $game_party.gold * $gplus
end
def self.Game_Party_Gold_2
unless $vg_nguard
if @old_gold != $game_party.gold * $gplus and @old_gold != nil
@a = $game_party.gold - (@old_gold / $gplus)
@c = 0
@b = $game_temp.gold_check
@b.each{|i| @c += i}
if @a == @c
@old_gold = $game_party.gold * $gplus
@b.clear
else
print $vg_warning if $vg_pop == 1
print "#{$vg_warning}\n:::Error10000-#{@old_gold/($gplus)}-#{$game_party.gold}" if $vg_pop == 2
exit
end
end
end
end
end
module V_C
def self.check_1
for i in $vg_Start..$vg_End
if $gplus != nil and $vplus[i] !=nil
$old_V[i] = $game_variables[i] * ($gplus + $vplus[i])
end
end
end
def self.check_2(v)
unless $vg_nguard
if $gplus != nil and $vplus[v] !=nil
if $old_V[v] != $game_variables[v] * ($gplus + $vplus[v]) and $old_V[v] != nil
@a = $game_variables[v] - ($old_V[v] / ($gplus+$vplus[v]))
@c = 0
@b = $game_temp.V_check[v]
@b.each{|i| @c += i}
if @a == @c
$old_V[v] = $game_variables[v] * ($gplus + $vplus[v])
@b.clear
elsif (@a != @c) and (not $vg_except.include?(v))
tmp = sprintf("1%04d",v)
print $vg_warning if $vg_pop == 1
print "#{$vg_warning}\n:::Error#{tmp}-#{$old_V[v]/($gplus+$vplus[v])}-#{$game_variables[v]}" if $vg_pop == 2
exit
end
end
end
end
end
end
end

#新增此系統需要的變數
class Game_Temp
attr_accessor :gold_check
attr_accessor :V_check
alias tubobo_initialize initialize
def initialize
tubobo_initialize
@gold_check = []
@V_check = []
$old_V = []
for i in $vg_Start..$vg_End
@V_check[i] = []
end
end
end

#重新定義變數被更改時觸發的腳本
class Game_Variables
def []=(variable_id, value)
@a = $game_variables[variable_id]
if variable_id <= 5000
@data[variable_id] = value
end
@a_1 = ($game_variables[variable_id]-@a)
$game_temp.V_check[variable_id].push(@a_1)
end
end

#重新定義取得金錢的方式
class Game_Party
def gain_gold(n)
@og = @gold
@gold = [[@gold + n, 0].max, 9999999].min
$game_temp.gold_check.push(@gold-@og)
end
end
class Scene_Map
alias tubobo_mupd update
def update
tubobo_mupd
begin;Var_Guard.all_2;rescue;end
end
end

#此處可設定Main之內容
begin
Graphics.freeze
Font.default_name = (["標楷體"])
$scene = Scene_Title.new
while $scene != nil
begin;Var_Guard.all_2;rescue;end
begin;Var_Guard.all_1;rescue;end
$scene.main
end
Graphics.transition(20)
rescue Errno::ENOENT
filename = $!.message.sub("No such file or directory - ", "")
print("找不到文件 #{filename}。 ")
end

如果你需要經過縮排的腳本,請點此

這個腳本目前可以防止金錢及變數遭到修改,

我也很鼓勵RGSS高手們去破解,這樣才更能完善它。

當然,如果你是純粹為了不被修改而一味塞腳本的那種人,

那我想你大概可以不需要它了--

因為若真要讓資料安全,得下點功夫在檔案格式上面。

近年來R界變得有些冷清,

希望R友們能互相帶動交流研究的風氣,讓R界的溫度回升~

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1503185
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:RPG|RM|RPG Maker|RPG Maker XP|RMXP|遊戲|RPG 製作大師|程式|RGSS

留言共 3 篇留言

李尋仇
啊啊啊啊我玩遊戲都只看劇情一定要修的啊啊啊啊

01-07 08:33

解凍豬腳
嗚...所以我才要研究這個[e36]01-07 14:09
bbooyy71
嗯嗯,話說解凍豬腳開始從「遊戲加密」的腳本發展了。[e6]

01-07 13:29

解凍豬腳
兩三年前就開始了[e16]01-07 14:09
RPG鬧爆大師
RPG的考古

09-08 20:55

解凍豬腳
[e6]09-08 21:17
我要留言提醒:您尚未登入,請先登入再留言

3喜歡★johnny860726 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【RGSS/Ruby】不... 後一篇:我的勇者成就 窩科科...

追蹤私訊

作品資料夾

powersdALL
小說創作更新,歡迎閱讀。看更多我要大聲說昨天17:40


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】