本帖最后由 Sion 于 2013-11-19 22:36 编辑
dongdongdjh 发表于 2013-11-19 15:59
想想还是要的,不然之前的努力就白费了,如果能做到武器攻击类似 龙与地下城 2D3 4D2攻击的脚本就更好了 ...
获取武器时随机增加0~9点攻击力。那个伤害掷骰子的功能跟这个脚本关系不大,要通过修改伤害公式实现。
class Game_Party # 覆盖方法 alias_method :gain_item_20131119, :gain_item def gain_item(item, amount, include_equip = false) if item.class != RPG::Weapon gain_item_20131119(item, amount, include_equip) else #处理武器 if amount > 0 # 获得武器 weapon = item amount.times { #如果不是武器副本则创建武器副本 item = weapon.create_new unless weapon.cloned @weapons.push(item) } else # 失去武器 amount *= -1 amount.times { if item.cloned @weapons.delete(item) amount -= 1 else @weapons.each_with_index {|w, i| if item.id == w.id @weapons.delete_at(i) amount -= 1 break end } end } end if include_equip && amount > 0 #失去物品包含已装备的 discard_members_equip(item, amount) end $game_map.need_refresh = true end end # 覆盖方法 def init_all_items @items = {} @weapons = [] @armors = {} end # 覆盖方法 def weapons @weapons end # 覆盖方法 alias_method :item_number_20131119, :item_number def item_number(item) item.class == RPG::Weapon ? 1 : item_number_20131119(item) end end class RPG::Weapon attr_accessor :cloned def create_new weapon = Marshal.load(Marshal.dump(self)) #创建武器副本 Deep clone. weapon.cloned = true weapon.params[2] += rand(10) #武器攻击随机增加 0~9 return weapon end end class Game_BaseItem # 覆盖方法 def object return $data_skills[@item_id] if is_skill? return $data_items[@item_id] if is_item? return @item if is_weapon? return $data_armors[@item_id] if is_armor? return nil end # 覆盖方法 def object=(item) @class = item ? item.class : nil @item_id = item ? item.id : 0 @item = item if is_weapon? end # 覆盖方法 def set_equip(is_weapon, item_id) #用于初始化装备时获取随机攻击力武器 if is_weapon @class = RPG::Weapon @item = $data_weapons[item_id].create_new else @class = RPG::Armor end @item_id = item_id end end
class Game_Party
# 覆盖方法
alias_method :gain_item_20131119, :gain_item
def gain_item(item, amount, include_equip = false)
if item.class != RPG::Weapon
gain_item_20131119(item, amount, include_equip)
else #处理武器
if amount > 0 # 获得武器
weapon = item
amount.times {
#如果不是武器副本则创建武器副本
item = weapon.create_new unless weapon.cloned
@weapons.push(item)
}
else # 失去武器
amount *= -1
amount.times {
if item.cloned
@weapons.delete(item)
amount -= 1
else
@weapons.each_with_index {|w, i|
if item.id == w.id
@weapons.delete_at(i)
amount -= 1
break
end
}
end
}
end
if include_equip && amount > 0 #失去物品包含已装备的
discard_members_equip(item, amount)
end
$game_map.need_refresh = true
end
end
# 覆盖方法
def init_all_items
@items = {}
@weapons = []
@armors = {}
end
# 覆盖方法
def weapons
@weapons
end
# 覆盖方法
alias_method :item_number_20131119, :item_number
def item_number(item)
item.class == RPG::Weapon ? 1 : item_number_20131119(item)
end
end
class RPG::Weapon
attr_accessor :cloned
def create_new
weapon = Marshal.load(Marshal.dump(self)) #创建武器副本 Deep clone.
weapon.cloned = true
weapon.params[2] += rand(10) #武器攻击随机增加 0~9
return weapon
end
end
class Game_BaseItem
# 覆盖方法
def object
return $data_skills[@item_id] if is_skill?
return $data_items[@item_id] if is_item?
return @item if is_weapon?
return $data_armors[@item_id] if is_armor?
return nil
end
# 覆盖方法
def object=(item)
@class = item ? item.class : nil
@item_id = item ? item.id : 0
@item = item if is_weapon?
end
# 覆盖方法
def set_equip(is_weapon, item_id) #用于初始化装备时获取随机攻击力武器
if is_weapon
@class = RPG::Weapon
@item = $data_weapons[item_id].create_new
else
@class = RPG::Armor
end
@item_id = item_id
end
end
老实说我觉得看别人的脚本很难学到什么,因为每个人的思维习惯不一样。
而且这个脚本很纠结,我也是是临时看过之后来改,要慢慢去读默认脚本怎么处理武器的,同时还需要查阅 Ace 内置的数据结构。
所以我在制作游戏的时候就只用利用默认的地图与事件功能,这两个我慢慢看完了,改起来也方便。其它的自己设计,阅读别人的脚本真的很蛋疼。
入门的话建议从场景学起,然后学习精灵的使用。 |