Project1

标题: 【VA】铸剑系统 [打印本页]

作者: 杂兵天下    时间: 2012-3-5 11:36
标题: 【VA】铸剑系统
本帖最后由 feizhaodan 于 2012-12-1 09:42 编辑

使用的随机系统是从http://rpg.blue/thread-224387-1-1.html里拿到的
其实我做此系统本身就是因为看到上面的帖子,想起很久之前看到的柳柳XP版随机铸剑系统做的。
不过柳柳那个系统有很大的错误,用xp的朋友也不要去翻找了,反正有极大的BUG你也用不了。
代码在6楼。
会从三个特性中选一个,七种古剑中选一个。
其他属性均为随机生成。事件脚本createweapon调用。调用后自动获得生成的古剑。


更新:
  1. $imported = {} if $imported.nil?
  2. if $imported["RuntimeDB"].nil?
  3.   $imported["RuntimeDB"] = true
  4.   module DataManager
  5.     class <<self
  6.       alias make_save_contents_runtimedb_zabing make_save_contents
  7.       alias extract_save_contents_runtimedb_zabing extract_save_contents
  8.     end
  9.     def self.make_save_contents
  10.       contents = make_save_contents_runtimedb_zabing
  11.       contents[:dataactorszabing] = $data_actors
  12.       contents[:dataclasseszabing] = $data_classes
  13.       contents[:dataskillszabing] = $data_skills
  14.       contents[:dataitemszabing] = $data_items
  15.       contents[:dataweaponszabing] = $data_weapons
  16.       contents[:dataarmorszabing] = $data_armors
  17.       contents[:dataenemieszabing] = $data_enemies
  18.       contents[:datatroopszabing] = $data_troops
  19.       contents[:datastateszabing] = $data_states
  20.       contents[:dataanimationszabing] = $data_animations
  21.       contents[:datatilesetszabing] = $data_tilesets
  22.       contents[:datacommoneventszabing] = $data_common_events
  23.       contents[:datasystemzabing] = $data_system
  24.       contents[:datamapinfoszabing] = $data_mapinfos
  25.       contents
  26.     end
  27.     def self.extract_save_contents(contents)
  28.       extract_save_contents_runtimedb_zabing(contents)
  29.       $data_actors = contents[:dataactorszabing]
  30.       $data_classes = contents[:dataclasseszabing]
  31.       $data_skills = contents[:dataskillszabing]
  32.       $data_items = contents[:dataitemszabing]
  33.       $data_weapons = contents[:dataweaponszabing]
  34.       $data_armors = contents[:dataarmorszabing]
  35.       $data_enemies = contents[:dataenemieszabing]
  36.       $data_troops = contents[:datatroopszabing]
  37.       $data_states = contents[:datastateszabing]
  38.       $data_animations = contents[:dataanimationszabing]
  39.       $data_tilesets = contents[:datatilesetszabing]
  40.       $data_common_events = contents[:datacommoneventszabing]
  41.       $data_system = contents[:datasystemzabing]
  42.       $data_mapinfos = contents[:datamapinfoszabing]
  43.     end
  44.   end
  45. else
  46.   msgbox "请不要重复加载脚本。"
  47. end
  48. $imported = {} if $imported.nil?
  49. if $imported["RatiosClov"].nil?
  50. #--------------------------------------------------------------------------
  51. # 多项比率选一(Ratios) By.Clov
  52. # 使用 Ratios.Co({对象=>比率},分比数)
  53. #--------------------------------------------------------------------------
  54.   $imported["RatiosClov"] = true  
  55.   module Ratios
  56.     def self.Co(data = {}, b = 100)
  57.       r = rand b;n = data.keys;f = data.values;arr = [];mii = []
  58.       f.each {|v| if v >= r;arr.push v;else;arr.push nil;end}
  59.       unless arr.compact.empty?
  60.         arr.each {|a|
  61.         if a;mii.push a - rand(a) - r
  62.         else;mii.push b;end}
  63.         x = mii.index mii.min
  64.       else
  65.         x = f.index f.max
  66.       end
  67.       return [n[x],f[x]]
  68.     end
  69.   end
  70. else
  71.   msgbox "请不要重复加载脚本。"
  72. end
  73. class Game_Interpreter
  74.   def createweapon
  75.     thishash = {
  76.     ["龙神","晋库走龙剑,吴室荡燕雏。"]=>100,
  77.     ["照胆","武丁在位五十九年,以元年岁次午铸一剑,长三
  78. 尺,铭曰‘照胆’,古文篆书。"]=>500,
  79.     ["青霜","紫电青霜,王将军之武库。"]=>800,
  80.     ["龙泉","章帝赐尚书剑,韩棱渊深有谋,故得龙泉剑。"]=>1000,
  81.     ["磐郢","吴王得越所献宝剑三枚。一曰鱼肠,二曰磐郢,
  82. 三曰湛泸。"]=>50,
  83.     ["淳钧","山崩而落洛之水涸,欧治子而淳钧之剑成。"]=>10,
  84.     ["卧槽","卧槽泥马勒戈壁,兰州芝麻大烧饼。"]=>1000,
  85. }

  86.     thathash = {}
  87.     temp = RPG::BaseItem::Feature.new
  88.     temp.code = 31
  89.     temp.data_id = 1
  90.     temp.value = 0
  91.     thathash[temp]=100#100几率物理武器专精
  92.     temp = RPG::BaseItem::Feature.new
  93.     temp.code = 22
  94.     temp.data_id = 0
  95.     temp.value = 0.5
  96.     thathash[temp]=50#50几率精准专精
  97.     temp = RPG::BaseItem::Feature.new
  98.     temp.code = 33
  99.     temp.data_id = 0
  100.     temp.value = 500
  101.     thathash[temp]=25#25几率超速专精
  102.     c = Ratios.Co(thathash)
  103.     a = RPG::Weapon.new
  104.     a.icon_index = 147
  105.     a.animation_id = 7
  106.     a.features = [c[0]]
  107.     a.params = [0,0,0,0,0,0,0,0]
  108.     a.etype_id = 0
  109.     a.wtype_id = 1
  110.     a.params[0] = rand(1000)
  111.     a.params[1] = rand(50)
  112.     a.params[2] = rand(150)
  113.     a.params[3] = rand(100)
  114.     a.params[4] = rand(100)
  115.     a.params[5] = rand(100)
  116.     a.params[6] = rand(100)
  117.     a.params[7] = rand(100)
  118.     a.price = 0
  119.     for i in 0..7
  120.       case i
  121.       when 0
  122.         a.price += a.params[i] * 100
  123.       when 1
  124.         a.price += a.params[i] * 2000
  125.       when 2
  126.         a.price += a.params[i] * 2000
  127.       else
  128.         a.price += a.params[i] * 1000
  129.       end
  130.     end
  131.     a.price = a.price.to_i
  132.     c = Ratios.Co(thishash)
  133.     a.name = "价值"+a.price.to_s+"的"+c[0][0]+"剑"
  134.     if c[0][0]=="卧槽"
  135.       temp = RPG::BaseItem::Feature.new
  136.       temp.code = 43
  137.       temp.data_id = 24
  138.       temp.value = 0.0
  139.       a.features.push(temp)
  140.     end
  141.     a.description = c[0][1]
  142.     a.id = $data_weapons.size
  143.     $data_weapons[$data_weapons.size] = a.clone
  144.     a=nil
  145.     $game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
  146.   end
  147. end
复制代码
这是新版代码。请注意此版中,价格总是50的倍数,并且随着属性而改变。
所有的卧槽剑都会附加一个冥想技能。
运用这样的思路,可以制作此系统:
RUBY 代码复制
  1. class Game_Interpreter
  2.   def makeweapon(a,b,c,d,e,f,g,h,i)
  3.     a = RPG::Weapon.new
  4.     a.icon_index = a
  5.     a.animation_id = b
  6.     a.features = c
  7.     a.params = d
  8.     a.etype_id = e
  9.     a.wtype_id = f
  10.     a.price = g
  11.     a.name = h
  12.     a.description = i
  13.     a.id = $data_weapons.size
  14.     $data_weapons[$data_weapons.size] = a.clone
  15.     a=nil
  16.     $game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
  17.   end
  18.   def mergeweapon(a,b)
  19.     if $game_party.has_item?(a)
  20.       if $game_party.has_item?(b)
  21.         $game_party.lose_item(a, 1, false)
  22.         $game_party.lose_item(b, 1, false)
  23. makeweapon(a.icon_index,a.animation_id,b.features,a.params,a.etype_id,a.wtype_id,a.price,a.name+"+"+b.name,a.description)
  24.       end
  25.     end
  26.   end
  27. end

用mergeweapon($data_weapons[1],$data_weapons[18])这样来融合剑1与剑18。比如说剑1是属性高的龙泉剑,剑2是属性低的卧槽剑,为了得到冥想效果与高属性,可以用mergeweapon来操作。mergeweapon(龙泉的ID,卧槽的ID)。
如果结合Fomar的武器选择窗口脚本,效果更好。

作者: 判约之轮    时间: 2012-3-5 16:38
本帖最后由 判约之轮 于 2012-3-5 16:38 编辑

这么有扩展性的脚本居然没人理会?
果断收下研究一下~
看代码似乎是可以把空着的武器设置栏位充分利用起来?
但愿和其他脚本不会有冲突嗯~

哈希表大爱,那就意味着可以自由修改增加项目了~
作者: 消失的三千    时间: 2012-3-5 17:07
本帖最后由 消失的三千 于 2012-3-5 18:43 编辑

里面的道具名字与说明也太碉堡了吧= =
不过为何不要重复加载脚本啊?
作者: viktor    时间: 2012-3-5 17:14
为什么不允许重复加载脚本?
如果重复加载,会有什么问题?
作者: 菜鸟飞呀飞    时间: 2012-3-5 18:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: 杂兵天下    时间: 2012-3-5 18:54
本帖最后由 杂兵天下 于 2012-3-5 23:06 编辑
  1. $imported = {} if $imported.nil?
  2. if $imported["RuntimeDB"].nil?
  3.   $imported["RuntimeDB"] = true
  4.   module DataManager
  5.     class <<self
  6.       alias make_save_contents_runtimedb_zabing make_save_contents
  7.       alias extract_save_contents_runtimedb_zabing extract_save_contents
  8.     end
  9.     def self.make_save_contents
  10.       contents = make_save_contents_runtimedb_zabing
  11.       contents[:dataactorszabing] = $data_actors
  12.       contents[:dataclasseszabing] = $data_classes
  13.       contents[:dataskillszabing] = $data_skills
  14.       contents[:dataitemszabing] = $data_items
  15.       contents[:dataweaponszabing] = $data_weapons
  16.       contents[:dataarmorszabing] = $data_armors
  17.       contents[:dataenemieszabing] = $data_enemies
  18.       contents[:datatroopszabing] = $data_troops
  19.       contents[:datastateszabing] = $data_states
  20.       contents[:dataanimationszabing] = $data_animations
  21.       contents[:datatilesetszabing] = $data_tilesets
  22.       contents[:datacommoneventszabing] = $data_common_events
  23.       contents[:datasystemzabing] = $data_system
  24.       contents[:datamapinfoszabing] = $data_mapinfos
  25.       contents
  26.     end
  27.     def self.extract_save_contents(contents)
  28.       extract_save_contents_runtimedb_zabing(contents)
  29.       $data_actors = contents[:dataactorszabing]
  30.       $data_classes = contents[:dataclasseszabing]
  31.       $data_skills = contents[:dataskillszabing]
  32.       $data_items = contents[:dataitemszabing]
  33.       $data_weapons = contents[:dataweaponszabing]
  34.       $data_armors = contents[:dataarmorszabing]
  35.       $data_enemies = contents[:dataenemieszabing]
  36.       $data_troops = contents[:datatroopszabing]
  37.       $data_states = contents[:datastateszabing]
  38.       $data_animations = contents[:dataanimationszabing]
  39.       $data_tilesets = contents[:datatilesetszabing]
  40.       $data_common_events = contents[:datacommoneventszabing]
  41.       $data_system = contents[:datasystemzabing]
  42.       $data_mapinfos = contents[:datamapinfoszabing]
  43.     end
  44.   end
  45. else
  46.   msgbox "请不要重复加载脚本。"
  47. end
  48. $imported = {} if $imported.nil?
  49. if $imported["RatiosClov"].nil?
  50. #--------------------------------------------------------------------------
  51. # 多项比率选一(Ratios) By.Clov
  52. # 使用 Ratios.Co({对象=>比率},分比数)
  53. #--------------------------------------------------------------------------
  54.   $imported["RatiosClov"] = true  
  55.   module Ratios
  56.     def self.Co(data = {}, b = 100)
  57.       r = rand b;n = data.keys;f = data.values;arr = [];mii = []
  58.       f.each {|v| if v >= r;arr.push v;else;arr.push nil;end}
  59.       unless arr.compact.empty?
  60.         arr.each {|a|
  61.         if a;mii.push a - rand(a) - r
  62.         else;mii.push b;end}
  63.         x = mii.index mii.min
  64.       else
  65.         x = f.index f.max
  66.       end
  67.       return [n[x],f[x]]
  68.     end
  69.   end
  70. else
  71.   msgbox "请不要重复加载脚本。"
  72. end
  73. class Game_Interpreter
  74.   def createweapon
  75.     thishash = {
  76.     ["龙神","晋库走龙剑,吴室荡燕雏。"]=>100,
  77.     ["照胆","武丁在位五十九年,以元年岁次午铸一剑,长三
  78. 尺,铭曰‘照胆’,古文篆书。"]=>500,
  79.     ["青霜","紫电青霜,王将军之武库。"]=>800,
  80.     ["龙泉","章帝赐尚书剑,韩棱渊深有谋,故得龙泉剑。"]=>1000,
  81.     ["磐郢","吴王得越所献宝剑三枚。一曰鱼肠,二曰磐郢,
  82. 三曰湛泸。"]=>50,
  83.     ["淳钧","山崩而落洛之水涸,欧治子而淳钧之剑成。"]=>10,
  84.     ["卧槽","卧槽泥马勒戈壁,兰州芝麻大烧饼。"]=>1000,
  85. }

  86.     thathash = {}
  87.     temp = RPG::BaseItem::Feature.new
  88.     temp.code = 31
  89.     temp.data_id = 1
  90.     temp.value = 0
  91.     thathash[temp]=100#100几率物理武器专精
  92.     temp = RPG::BaseItem::Feature.new
  93.     temp.code = 22
  94.     temp.data_id = 0
  95.     temp.value = 0.5
  96.     thathash[temp]=50#50几率精准专精
  97.     temp = RPG::BaseItem::Feature.new
  98.     temp.code = 33
  99.     temp.data_id = 0
  100.     temp.value = 500
  101.     thathash[temp]=25#25几率超速专精
  102.     c = Ratios.Co(thathash)
  103.     a = RPG::Weapon.new
  104.     a.icon_index = 147
  105.     a.animation_id = 7
  106.     a.features = [c[0]]
  107.     a.params = [0,0,0,0,0,0,0,0]
  108.     a.etype_id = 0
  109.     a.wtype_id = 1
  110.     a.params[0] = rand(1000)
  111.     a.params[1] = rand(50)
  112.     a.params[2] = rand(150)
  113.     a.params[3] = rand(100)
  114.     a.params[4] = rand(100)
  115.     a.params[5] = rand(100)
  116.     a.params[6] = rand(100)
  117.     a.params[7] = rand(100)
  118.     a.price = 0
  119.     for i in 0..7
  120.       case i
  121.       when 0
  122.         a.price += a.params[i] * 100
  123.       when 1
  124.         a.price += a.params[i] * 2000
  125.       when 2
  126.         a.price += a.params[i] * 2000
  127.       else
  128.         a.price += a.params[i] * 1000
  129.       end
  130.     end
  131.     a.price = a.price.to_i
  132.     c = Ratios.Co(thishash)
  133.     a.name = "价值"+a.price.to_s+"的"+c[0][0]+"剑"
  134.     if c[0][0]=="卧槽"
  135.       temp = RPG::BaseItem::Feature.new
  136.       temp.code = 43
  137.       temp.data_id = 24
  138.       temp.value = 0.0
  139.       a.features.push(temp)
  140.     end
  141.     a.description = c[0][1]
  142.     a.id = $data_weapons.size
  143.     $data_weapons[$data_weapons.size] = a.clone
  144.     a=nil
  145.     $game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
  146.   end
  147. end
复制代码
这是新版代码。请注意此版中,价格总是50的倍数,并且随着属性而改变。
所有的卧槽剑都会附加一个冥想技能。
运用这样的思路,可以制作此系统:
RUBY 代码复制
  1. class Game_Interpreter
  2.   def makeweapon(a,b,c,d,e,f,g,h,i)
  3.     a = RPG::Weapon.new
  4.     a.icon_index = a
  5.     a.animation_id = b
  6.     a.features = c
  7.     a.params = d
  8.     a.etype_id = e
  9.     a.wtype_id = f
  10.     a.price = g
  11.     a.name = h
  12.     a.description = i
  13.     a.id = $data_weapons.size
  14.     $data_weapons[$data_weapons.size] = a.clone
  15.     a=nil
  16.     $game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
  17.   end
  18.   def mergeweapon(a,b)
  19.     if $game_party.has_item?(a)
  20.       if $game_party.has_item?(b)
  21.         $game_party.lose_item(a, 1, false)
  22.         $game_party.lose_item(b, 1, false)
  23. makeweapon(a.icon_index,a.animation_id,b.features,a.params,a.etype_id,a.wtype_id,a.price,a.name+"+"+b.name,a.description)
  24.       end
  25.     end
  26.   end
  27. end

用mergeweapon($data_weapons[1],$data_weapons[18])这样来融合剑1与剑18。比如说剑1是属性高的龙泉剑,剑2是属性低的卧槽剑,为了得到冥想效果与高属性,可以用mergeweapon来操作。mergeweapon(龙泉的ID,卧槽的ID)。
如果结合Fomar的武器选择窗口脚本,效果更好。
作者: 玄机子    时间: 2012-3-6 14:50
感觉挺棒的,做个可以下载的范例吧。
作者: 红白机    时间: 2012-3-17 15:47
我喜欢LZ起的威武剑名,可我是小白啊。求LZ弄个范例,让我知道具体的操作啊。拜谢!!!
作者: 漫步烟雨    时间: 2012-7-13 21:42
小白  请教一下,这个系统,添加进去了,但是怎么使用选项把他呼出来?

作者: zhaoyusi    时间: 2015-1-10 21:52
谢谢,好东西
作者: rpg-sheep    时间: 2015-1-11 10:46
很不错的脚本哈,支持一下大神~
另外有条小建议:如果把铸好的剑作为一种物品储存起来(或是直接在数据库里设置剑的属性)
是不是就避免了重复加载导致的覆盖?
作者: oOTESOo    时间: 2015-1-12 20:55
很不错哦,我也想做一个装备道具参数随机生成的游戏,楼主有没有兴趣?加我好友
作者: 沙C米    时间: 2015-3-1 00:25
本帖最后由 沙C米 于 2015-3-1 00:43 编辑

說真的 這各對我們這種新人蔡鳥   完全看不懂怎麼使用    ( 昨天看了一晚  有好幾各腳本  幾乎都是....看了標題就感覺 很強大  很實用 的名稱    想進去看看怎麼使用    但卻....把使用方法   說的太高端了....不是新手能懂的範疇...只能輕輕嘆息的  返回上一頁.)

複製腳本  很簡單  貼上去RMVACE 也不難  重點來了....我們新手  不知道如何調用  怎麼把這好用的功能呼叫出來  難倒了一台鐵達尼號上的人了...

雖然大神有說  用事件調用  就好了   但是.....對眾多高手們  可能一看便能一目了然  閉著眼睛都知道怎麼使用這腳本    但....對菜鳥...卻是  鴨子聽雷...有聽沒有懂...

何謂新人 就是對某些人 事 物 都不懂   初來乍到的人  通常我們都稱之為新人或者新手

新手最會的就是  有各參考物件  可以依樣畫葫蘆   來學習自己不會的東西   也能稱之模仿或者拷貝

我知道大神們幫助我們並不是義務    但我相信 你們是最熱心的!!  

希望6R的各位大神們  能夠高抬貴手  可以上各使用方法  或者 範例...給像我這種新手菜鳥  也能來個依樣畫葫蘆  感激不盡...謝謝你們..

作者: wangzh9173    时间: 2015-4-18 15:53
沙C米 发表于 2015-3-1 00:25
說真的 這各對我們這種新人蔡鳥   完全看不懂怎麼使用    ( 昨天看了一晚  有好幾各腳本  幾乎都是....看了 ...

说出了新手的心声,完全不知道该怎么用




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