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调用。调用后自动获得生成的古剑。
更新:- $imported = {} if $imported.nil?
- if $imported["RuntimeDB"].nil?
- $imported["RuntimeDB"] = true
- module DataManager
- class <<self
- alias make_save_contents_runtimedb_zabing make_save_contents
- alias extract_save_contents_runtimedb_zabing extract_save_contents
- end
- def self.make_save_contents
- contents = make_save_contents_runtimedb_zabing
- contents[:dataactorszabing] = $data_actors
- contents[:dataclasseszabing] = $data_classes
- contents[:dataskillszabing] = $data_skills
- contents[:dataitemszabing] = $data_items
- contents[:dataweaponszabing] = $data_weapons
- contents[:dataarmorszabing] = $data_armors
- contents[:dataenemieszabing] = $data_enemies
- contents[:datatroopszabing] = $data_troops
- contents[:datastateszabing] = $data_states
- contents[:dataanimationszabing] = $data_animations
- contents[:datatilesetszabing] = $data_tilesets
- contents[:datacommoneventszabing] = $data_common_events
- contents[:datasystemzabing] = $data_system
- contents[:datamapinfoszabing] = $data_mapinfos
- contents
- end
- def self.extract_save_contents(contents)
- extract_save_contents_runtimedb_zabing(contents)
- $data_actors = contents[:dataactorszabing]
- $data_classes = contents[:dataclasseszabing]
- $data_skills = contents[:dataskillszabing]
- $data_items = contents[:dataitemszabing]
- $data_weapons = contents[:dataweaponszabing]
- $data_armors = contents[:dataarmorszabing]
- $data_enemies = contents[:dataenemieszabing]
- $data_troops = contents[:datatroopszabing]
- $data_states = contents[:datastateszabing]
- $data_animations = contents[:dataanimationszabing]
- $data_tilesets = contents[:datatilesetszabing]
- $data_common_events = contents[:datacommoneventszabing]
- $data_system = contents[:datasystemzabing]
- $data_mapinfos = contents[:datamapinfoszabing]
- end
- end
- else
- msgbox "请不要重复加载脚本。"
- end
- $imported = {} if $imported.nil?
- if $imported["RatiosClov"].nil?
- #--------------------------------------------------------------------------
- # 多项比率选一(Ratios) By.Clov
- # 使用 Ratios.Co({对象=>比率},分比数)
- #--------------------------------------------------------------------------
- $imported["RatiosClov"] = true
- module Ratios
- def self.Co(data = {}, b = 100)
- r = rand b;n = data.keys;f = data.values;arr = [];mii = []
- f.each {|v| if v >= r;arr.push v;else;arr.push nil;end}
- unless arr.compact.empty?
- arr.each {|a|
- if a;mii.push a - rand(a) - r
- else;mii.push b;end}
- x = mii.index mii.min
- else
- x = f.index f.max
- end
- return [n[x],f[x]]
- end
- end
- else
- msgbox "请不要重复加载脚本。"
- end
- class Game_Interpreter
- def createweapon
- thishash = {
- ["龙神","晋库走龙剑,吴室荡燕雏。"]=>100,
- ["照胆","武丁在位五十九年,以元年岁次午铸一剑,长三
- 尺,铭曰‘照胆’,古文篆书。"]=>500,
- ["青霜","紫电青霜,王将军之武库。"]=>800,
- ["龙泉","章帝赐尚书剑,韩棱渊深有谋,故得龙泉剑。"]=>1000,
- ["磐郢","吴王得越所献宝剑三枚。一曰鱼肠,二曰磐郢,
- 三曰湛泸。"]=>50,
- ["淳钧","山崩而落洛之水涸,欧治子而淳钧之剑成。"]=>10,
- ["卧槽","卧槽泥马勒戈壁,兰州芝麻大烧饼。"]=>1000,
- }
-
- thathash = {}
- temp = RPG::BaseItem::Feature.new
- temp.code = 31
- temp.data_id = 1
- temp.value = 0
- thathash[temp]=100#100几率物理武器专精
- temp = RPG::BaseItem::Feature.new
- temp.code = 22
- temp.data_id = 0
- temp.value = 0.5
- thathash[temp]=50#50几率精准专精
- temp = RPG::BaseItem::Feature.new
- temp.code = 33
- temp.data_id = 0
- temp.value = 500
- thathash[temp]=25#25几率超速专精
- c = Ratios.Co(thathash)
- a = RPG::Weapon.new
- a.icon_index = 147
- a.animation_id = 7
- a.features = [c[0]]
- a.params = [0,0,0,0,0,0,0,0]
- a.etype_id = 0
- a.wtype_id = 1
- a.params[0] = rand(1000)
- a.params[1] = rand(50)
- a.params[2] = rand(150)
- a.params[3] = rand(100)
- a.params[4] = rand(100)
- a.params[5] = rand(100)
- a.params[6] = rand(100)
- a.params[7] = rand(100)
- a.price = 0
- for i in 0..7
- case i
- when 0
- a.price += a.params[i] * 100
- when 1
- a.price += a.params[i] * 2000
- when 2
- a.price += a.params[i] * 2000
- else
- a.price += a.params[i] * 1000
- end
- end
- a.price = a.price.to_i
- c = Ratios.Co(thishash)
- a.name = "价值"+a.price.to_s+"的"+c[0][0]+"剑"
- if c[0][0]=="卧槽"
- temp = RPG::BaseItem::Feature.new
- temp.code = 43
- temp.data_id = 24
- temp.value = 0.0
- a.features.push(temp)
- end
- a.description = c[0][1]
- a.id = $data_weapons.size
- $data_weapons[$data_weapons.size] = a.clone
- a=nil
- $game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
- end
- end
复制代码 这是新版代码。请注意此版中,价格总是50的倍数,并且随着属性而改变。
所有的卧槽剑都会附加一个冥想技能。
运用这样的思路,可以制作此系统:
class Game_Interpreter
def makeweapon(a,b,c,d,e,f,g,h,i)
a = RPG::Weapon.new
a.icon_index = a
a.animation_id = b
a.features = c
a.params = d
a.etype_id = e
a.wtype_id = f
a.price = g
a.name = h
a.description = i
a.id = $data_weapons.size
$data_weapons[$data_weapons.size] = a.clone
a=nil
$game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
end
def mergeweapon(a,b)
if $game_party.has_item?(a)
if $game_party.has_item?(b)
$game_party.lose_item(a, 1, false)
$game_party.lose_item(b, 1, false)
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)
end
end
end
end
class Game_Interpreter
def makeweapon(a,b,c,d,e,f,g,h,i)
a = RPG::Weapon.new
a.icon_index = a
a.animation_id = b
a.features = c
a.params = d
a.etype_id = e
a.wtype_id = f
a.price = g
a.name = h
a.description = i
a.id = $data_weapons.size
$data_weapons[$data_weapons.size] = a.clone
a=nil
$game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
end
def mergeweapon(a,b)
if $game_party.has_item?(a)
if $game_party.has_item?(b)
$game_party.lose_item(a, 1, false)
$game_party.lose_item(b, 1, false)
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)
end
end
end
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 编辑
- $imported = {} if $imported.nil?
- if $imported["RuntimeDB"].nil?
- $imported["RuntimeDB"] = true
- module DataManager
- class <<self
- alias make_save_contents_runtimedb_zabing make_save_contents
- alias extract_save_contents_runtimedb_zabing extract_save_contents
- end
- def self.make_save_contents
- contents = make_save_contents_runtimedb_zabing
- contents[:dataactorszabing] = $data_actors
- contents[:dataclasseszabing] = $data_classes
- contents[:dataskillszabing] = $data_skills
- contents[:dataitemszabing] = $data_items
- contents[:dataweaponszabing] = $data_weapons
- contents[:dataarmorszabing] = $data_armors
- contents[:dataenemieszabing] = $data_enemies
- contents[:datatroopszabing] = $data_troops
- contents[:datastateszabing] = $data_states
- contents[:dataanimationszabing] = $data_animations
- contents[:datatilesetszabing] = $data_tilesets
- contents[:datacommoneventszabing] = $data_common_events
- contents[:datasystemzabing] = $data_system
- contents[:datamapinfoszabing] = $data_mapinfos
- contents
- end
- def self.extract_save_contents(contents)
- extract_save_contents_runtimedb_zabing(contents)
- $data_actors = contents[:dataactorszabing]
- $data_classes = contents[:dataclasseszabing]
- $data_skills = contents[:dataskillszabing]
- $data_items = contents[:dataitemszabing]
- $data_weapons = contents[:dataweaponszabing]
- $data_armors = contents[:dataarmorszabing]
- $data_enemies = contents[:dataenemieszabing]
- $data_troops = contents[:datatroopszabing]
- $data_states = contents[:datastateszabing]
- $data_animations = contents[:dataanimationszabing]
- $data_tilesets = contents[:datatilesetszabing]
- $data_common_events = contents[:datacommoneventszabing]
- $data_system = contents[:datasystemzabing]
- $data_mapinfos = contents[:datamapinfoszabing]
- end
- end
- else
- msgbox "请不要重复加载脚本。"
- end
- $imported = {} if $imported.nil?
- if $imported["RatiosClov"].nil?
- #--------------------------------------------------------------------------
- # 多项比率选一(Ratios) By.Clov
- # 使用 Ratios.Co({对象=>比率},分比数)
- #--------------------------------------------------------------------------
- $imported["RatiosClov"] = true
- module Ratios
- def self.Co(data = {}, b = 100)
- r = rand b;n = data.keys;f = data.values;arr = [];mii = []
- f.each {|v| if v >= r;arr.push v;else;arr.push nil;end}
- unless arr.compact.empty?
- arr.each {|a|
- if a;mii.push a - rand(a) - r
- else;mii.push b;end}
- x = mii.index mii.min
- else
- x = f.index f.max
- end
- return [n[x],f[x]]
- end
- end
- else
- msgbox "请不要重复加载脚本。"
- end
- class Game_Interpreter
- def createweapon
- thishash = {
- ["龙神","晋库走龙剑,吴室荡燕雏。"]=>100,
- ["照胆","武丁在位五十九年,以元年岁次午铸一剑,长三
- 尺,铭曰‘照胆’,古文篆书。"]=>500,
- ["青霜","紫电青霜,王将军之武库。"]=>800,
- ["龙泉","章帝赐尚书剑,韩棱渊深有谋,故得龙泉剑。"]=>1000,
- ["磐郢","吴王得越所献宝剑三枚。一曰鱼肠,二曰磐郢,
- 三曰湛泸。"]=>50,
- ["淳钧","山崩而落洛之水涸,欧治子而淳钧之剑成。"]=>10,
- ["卧槽","卧槽泥马勒戈壁,兰州芝麻大烧饼。"]=>1000,
- }
-
- thathash = {}
- temp = RPG::BaseItem::Feature.new
- temp.code = 31
- temp.data_id = 1
- temp.value = 0
- thathash[temp]=100#100几率物理武器专精
- temp = RPG::BaseItem::Feature.new
- temp.code = 22
- temp.data_id = 0
- temp.value = 0.5
- thathash[temp]=50#50几率精准专精
- temp = RPG::BaseItem::Feature.new
- temp.code = 33
- temp.data_id = 0
- temp.value = 500
- thathash[temp]=25#25几率超速专精
- c = Ratios.Co(thathash)
- a = RPG::Weapon.new
- a.icon_index = 147
- a.animation_id = 7
- a.features = [c[0]]
- a.params = [0,0,0,0,0,0,0,0]
- a.etype_id = 0
- a.wtype_id = 1
- a.params[0] = rand(1000)
- a.params[1] = rand(50)
- a.params[2] = rand(150)
- a.params[3] = rand(100)
- a.params[4] = rand(100)
- a.params[5] = rand(100)
- a.params[6] = rand(100)
- a.params[7] = rand(100)
- a.price = 0
- for i in 0..7
- case i
- when 0
- a.price += a.params[i] * 100
- when 1
- a.price += a.params[i] * 2000
- when 2
- a.price += a.params[i] * 2000
- else
- a.price += a.params[i] * 1000
- end
- end
- a.price = a.price.to_i
- c = Ratios.Co(thishash)
- a.name = "价值"+a.price.to_s+"的"+c[0][0]+"剑"
- if c[0][0]=="卧槽"
- temp = RPG::BaseItem::Feature.new
- temp.code = 43
- temp.data_id = 24
- temp.value = 0.0
- a.features.push(temp)
- end
- a.description = c[0][1]
- a.id = $data_weapons.size
- $data_weapons[$data_weapons.size] = a.clone
- a=nil
- $game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
- end
- end
复制代码 这是新版代码。请注意此版中,价格总是50的倍数,并且随着属性而改变。
所有的卧槽剑都会附加一个冥想技能。
运用这样的思路,可以制作此系统:
class Game_Interpreter
def makeweapon(a,b,c,d,e,f,g,h,i)
a = RPG::Weapon.new
a.icon_index = a
a.animation_id = b
a.features = c
a.params = d
a.etype_id = e
a.wtype_id = f
a.price = g
a.name = h
a.description = i
a.id = $data_weapons.size
$data_weapons[$data_weapons.size] = a.clone
a=nil
$game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
end
def mergeweapon(a,b)
if $game_party.has_item?(a)
if $game_party.has_item?(b)
$game_party.lose_item(a, 1, false)
$game_party.lose_item(b, 1, false)
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)
end
end
end
end
class Game_Interpreter
def makeweapon(a,b,c,d,e,f,g,h,i)
a = RPG::Weapon.new
a.icon_index = a
a.animation_id = b
a.features = c
a.params = d
a.etype_id = e
a.wtype_id = f
a.price = g
a.name = h
a.description = i
a.id = $data_weapons.size
$data_weapons[$data_weapons.size] = a.clone
a=nil
$game_party.gain_item($data_weapons[$data_weapons.size-1], 1, false)
end
def mergeweapon(a,b)
if $game_party.has_item?(a)
if $game_party.has_item?(b)
$game_party.lose_item(a, 1, false)
$game_party.lose_item(b, 1, false)
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)
end
end
end
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 |