Project1

标题: 【FSL】全局哈希 [打印本页]

作者: 小幽的马甲    时间: 2010-10-12 22:09
标题: 【FSL】全局哈希
本帖最后由 小幽的马甲 于 2010-10-13 20:21 编辑

使用说明:
提供一个模块来维护一个不受存档影响的哈希,用于保存游戏X周目、CG的收集状况等,用法见注释
不提供范例,具体的功能实现(如收集CG等)日后在发出对应脚本时再放范例= =现在就当是练习FSL的产物好了
也许可以作为其它需要此类功能的FSL脚本的底层模块……?
  1. #==============================================================================
  2. # ■ [XP/VX] 全局哈希
  3. #     [XP/VX] GlobalHash
  4. #----------------------------------------------------------------------------
  5. # 使用说明:
  6. # 创建一个不受存档影响的哈希
  7. # 用于保存游戏X周目、CG的收集状况等
  8. # G_Hash#clear
  9. #   清空哈希
  10. # G_Hash#load
  11. #   读取哈希
  12. # G_Hash#save
  13. #   保存哈希
  14. # G_Hash#read(key)
  15. #   返回key对应的val
  16. # G_Hash#hash
  17. #   返回整个哈希表
  18. # G_Hash#change(key, val)
  19. # G_Hash#change([key1, key2, ...], val)
  20. # G_Hash#change({key1 =>val1, key2 => val2, ...})
  21. #   修改哈希的值,若修改了@hash的值则保存
  22. #----------------------------------------------------------------------------
  23. #    更新作者: Tune_U
  24. #    许可协议: FSL
  25. #    项目版本: 1.0.1013
  26. #----------------------------------------------------------------------------
  27. #    - *1.0.1013* (2010-10-13) By Tune_U
  28. #      *当G_Hash#change没有修改任何值时不再save
  29. #    - *1.0.1012* (2010-10-12) By Tune_U
  30. #      *初版
  31. #==============================================================================

  32. $fscript = {} if $fscript == nil
  33. $fscript["GlobalHash"] = "1.00.1012"

  34. module FSL
  35.   module GlobalHash
  36.     PATH = "Data/Global.rvdata"   
  37.   end
  38. end

  39. module G_Hash
  40.   include FSL::GlobalHash

  41.   #读取
  42.   def self.load
  43.     if FileTest.exist? PATH
  44.       @hash = load_data(PATH)
  45.     else
  46.       clear
  47.     end
  48.   end

  49.   #清空
  50.   def self.clear
  51.     @hash = Hash.new
  52.     save
  53.   end
  54.   
  55.   #保存
  56.   def self.save
  57.     save_data(@hash,PATH)
  58.   end
  59.   
  60.   #读取键值
  61.   def self.read(key)
  62.     return @hash[key]
  63.   end
  64.   
  65.   #返回hash
  66.   def self.hash
  67.     return @hash
  68.   end
  69.   
  70.   #修改并保存
  71.   def self.change(key, val = nil)
  72.     flag = false
  73.     if key.is_a? Array
  74.       key.each{|i|
  75.       if @hash[i] != val
  76.         flag = true
  77.         @hash[i] = val
  78.       end
  79.       }
  80.       return unless flag
  81.     elsif key.is_a? Hash
  82.       key.each{|i,j|
  83.       if @hash[i] != j
  84.         flag = true
  85.         @hash[i] = j
  86.       end
  87.       }
  88.       return unless flag
  89.     else
  90.       return if @hash[key] == val
  91.       @hash[key] = val
  92.     end
  93.     save
  94.   end
  95. end

  96. G_Hash.load
复制代码
未测试,bug未知,反馈bug或提出意见请回帖,谢谢
作者: moy    时间: 2010-10-12 22:25
虽然发在VX区但是其实是都适用的是吧....抱走了,应该会用到.这样会方便不少吧...?
作者: 紫苏    时间: 2010-10-13 01:22
统一用 GNU 版本号嘛 :$
还有那啥引用网址不应该是发布页嘛 :$
作者: summer92    时间: 2010-10-13 11:58
好东西~~~~~~~~~~
作者: 沉影不器    时间: 2010-10-21 20:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 越前リョーマ    时间: 2010-10-23 18:33
按柳柳以前的做法……
建议一个类似save的档案……直接暴露了 = =
作者: DBZ-1    时间: 2010-11-7 21:12
注释不太懂……怎么创建?还是放个范例好
不过作为一个新手,知道哈希是什么东西我很满足了……




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