Project1
标题:
如何装备武器就学会一招技能?脱下就消失
[打印本页]
作者:
Mr.红茶
时间:
2013-3-31 12:20
标题:
如何装备武器就学会一招技能?脱下就消失
如题,突然感觉自己好无耻 = =
作者:
秋寒
时间:
2013-3-31 12:22
这个很复杂的,除非一直用条件分歧,不然得用到脚本,搜索一下,这个问题出现好多次了
作者:
美丽晨露
时间:
2013-3-31 12:23
http://rpg.blue/thread-256157-1-1.html
请参考我之前的提问
希望对你有帮助
作者:
joe5491
时间:
2013-4-1 00:11
給你看看某個多功能裝備腳本:
blog.yam.com/a870053jjkj/article/29783547
作者:
芯☆淡茹水
时间:
2013-4-1 00:41
正好有这个脚本
#===============================================================================
# 装备武器获得技能
#===============================================================================
# 资料初始化
$skill_plus_w = {}
$skill_plus_a = {}
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
(0...$data_weapons.size).each{|i|$skill_plus_w[i]=[]}
(0...$data_armors.size).each{|i|$skill_plus_a[i]=[]}
#-------------------------------------------------------------------------------
# 资料设定
$skill_plus_w[145] = [77]
$skill_plus_w[146] = [77]
$skill_plus_w[147] = [77]
$skill_plus_w[37] = [87]
$skill_plus_w[38] = [87]
$skill_plus_w[39] = [87]
$skill_plus_w[40] = [87]
$skill_plus_w[41] = [87]
#-------------------------------------------------------------------------------
class Game_Actor
def skills
result = @skills.clone
a = []
a += $skill_plus_w[@weapon_id]
a += $skill_plus_a[@armor1_id]
a += $skill_plus_a[@armor2_id]
a += $skill_plus_a[@armor3_id]
a += $skill_plus_a[@armor4_id]
for i in a
if !result.include?(i)
result.push(i)
end
end
result.sort!
return result
end
def skill_can_use?(skill_id)
return super
end
end
复制代码
作者:
joe5491
时间:
2013-4-1 01:36
本帖最后由 joe5491 于 2013-4-1 01:46 编辑
我也补上脚本好了,这个还有穿上附加能力值、状态等功能
设定武器之类的,请到24行左右(我放了几个范例)
module Sword
#=======================================
#★ 魔劍工舖 - 多功能裝備效果 1.03 (XP)
# blog.yam.com/a870053jjkj/article/29783547
#=======================================
Sword62_Weapon, Sword62_Armor = [], []
=begin
========================================
● 設置腳本
判斷是否不符合裝備條件:角色對象.conditions62?(裝備部位, 裝備編號)
========================================
● 裝備效果資料
設定變更:0=>{'能力值函數名稱'=>更改數值*},
自動狀態:2=>[狀態編號*],
增減技能:3=>[技能編號*],
裝備條件:【1】4=>{'能力值函數名稱'=>所需數值*},
【2】4=>{變數編號=>所需數值*},
經驗加乘:5=>[增加量, 整體百分比, 戰鬥以外是否有效&],
========================================
=end
#● 功能設定
Sword62_2Battle = 2 # 自動狀態附加規則,0為裝備瞬間;1為戰鬥結束;2為不解除
#--------------------------------------------------------------
#○ 武器效果資料表 ( Sword62_Weapon[武器編號] = {效果資料*} )
Sword62_Weapon[3] = {4=>{'level'=>3, 'str'=>300},} #这意思是,必须要3等以上且力量大于300才能穿上3号武器
Sword62_Weapon[6] = {3=>{22},} #这意思是穿上6号武器能自动获得22号技能
Sword62_Weapon[7] = {2=>{1},} #这意思是穿上7号武器马上获得1号状态(就是马上死亡?!)
Sword62_Weapon[8] = {0=>{ 'str'=>9999},} #这意思是穿上8号武器马上力量变9999(可突破上限)
#--------------------------------------------------------------
#○ 防具效果資料表 ( Sword62_Armor[防具編號] = {效果資料*} )
Sword62_Armor[33] = {5=>[0,50],} #这意思是穿上此33号防具经验1.5倍
#=======================================
$Sword ? $Sword[62] = true : $Sword = {62=>true} # 腳本使用標誌
$Sword_F12_Error = {} unless $Sword_F12_Error # F12除錯標誌
#-------------------------------------------------------------
#● 獲取指定的裝備是否有設定指定的效果(裝備類型, 裝備編號, 效果編號)
def self.equip62?(kind, id, id2)
if $Sword[3] ; if id.is_a?(RPG::Weapon) # 「裝備欄位擴充」處理
kind = 0 ; id = id.id # 武器
else ; kind = 1 ; id = id.id # 防具
end ; end
return if id == 0
return unless equip = kind == 0 ? $data_weapons[id] : $data_armors[id]
if $Sword[79] then if equip.fluctuation? # 「浮動數值裝備」處理
id = equip.original_id
end end
kind == 0 ? (Sword62_Weapon[id] ? (Sword62_Weapon[id][id2] ? true : false) : false) :
(Sword62_Armor[id] ? (Sword62_Armor[id][id2] ? true : false) : false)
end
#-------------------------------------------------------------
#● 獲取裝備類型的變量(裝備類型, 裝備編號)
def self.equipment62(kind, id)
if $Sword[3] ; if id.is_a?(RPG::Weapon) # 「裝備欄位擴充」處理
kind = 0 ; id = id.id # 武器
else ; kind = 1 ; id = id.id # 防具
end ; end
equip = kind == 0 ? $data_weapons[id] : $data_armors[id]
if $Sword[79] then if equip.fluctuation? # 「浮動數值裝備」處理
id = equip.original_id
end end
kind == 0 ? Sword62_Weapon[id] : Sword62_Armor[id]
end
end
#=======================================
#■ 處理角色的類
class Game_Actor# < Game_Battler
attr_accessor :ability62 # 裝備後的能力值加乘數值表
attr_accessor :state62 # 裝備附加狀態資料表
#-------------------------------------------------------------
#● 設定角色(角色編號)
alias sword62_setup setup
def setup(actor_id)
sword62_setup(actor_id) ; @ability62, @state62 = {}, []
@weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id = 0, 0, 0, 0, 0
actor = $data_actors[actor_id]
equip_effect62(0, actor.weapon_id)
equip_effect62(1, actor.armor1_id)
equip_effect62(2, actor.armor2_id)
equip_effect62(3, actor.armor3_id)
equip_effect62(4, actor.armor4_id)
if $Sword[3]
else
equip(0, actor.weapon_id) ; @weapon_id = actor.weapon_id
equip(1, actor.armor1_id) ; @armor1_id = actor.armor1_id
equip(2, actor.armor2_id) ; @armor2_id = actor.armor2_id
equip(3, actor.armor3_id) ; @armor3_id = actor.armor3_id
equip(4, actor.armor4_id) ; @armor4_id = actor.armor4_id
end
end
#-------------------------------------------------------------
#● 變更EXP=(新EXP)
alias sword62_exp= exp=
def exp=(exp)
#○ 經驗加乘
self.sword62_exp = exp if (exp2 = exp - self.exp) <= 0
equip = sword62_sword3
equip.each_index do |i| next unless equipment = Sword.equipment62(i, equip[i])
next unless equipment[5]
if equipment[5][2] or $scene.is_a?(Scene_Battle) # 符合加乘規定的場合
exp += (exp2 / 100.0 * equipment[5][1]).round + equipment[5][0]
end
end
self.sword62_exp = exp
end
#-------------------------------------------------------------
#● 可用技能判斷(技能編號)
alias sword62_skill_can_use? skill_can_use?
def skill_can_use?(skill_id)
skills1 = @skills ; @skills = sword62_skills_loop
skills2 = sword62_skill_can_use?(skill_id) ; @skills = skills1 ; skills2
end
#-------------------------------------------------------------
#● 獲取技能對象數組
alias sword62_skills skills
def skills
skills1 = @skills ; @skills = sword62_skills_loop
skills2 = sword62_skills ; @skills = skills1 ; skills2
end
#-------------------------------------------------------------
#● 獲取裝備效果增減技能的技能列表
def sword62_skills_loop
skills1 = @skills
a = $Sword[3] ? Sword::Sword3_Column.size : 4
(0..a).each do |equip_type|
if $Sword[3] ; quip_id = equip3[equip_type] # 「裝備欄位擴充」處理
else
case equip_type # 裝備類型分歧
when 0 ; quip_id = weapon_id # 武器
when 1 ; quip_id = armor1_id # 盾
when 2 ; quip_id = armor2_id # 頭部
when 3 ; quip_id = armor3_id # 身體
when 4 ; quip_id = armor4_id # 裝飾品
end
end
if Sword.equip62?(equip_type, quip_id, 3)
Sword.equipment62(equip_type, quip_id)[3].each do |i|
i > 0 ? skills1 += [i] : (
skills1.delete_at(skills1.index(i.abs)) if skills1.index(i.abs))
skills1.sort! ; skills1.uniq!
end
end
end
skills1
end
#-------------------------------------------------------------
#● 判斷使否不可裝備(裝備部位, 裝備編號)
def conditions62?(kind, id)
script, disabled = '', false
equipment4 = Sword.equipment62(kind, id)[4]
equipment4.each{|key, value|
vtext = sprintf(key.is_a?(Integer) ? '$game_variables[%s]' : 'self.%s', key)
script += sprintf("disabled = true if %s < %i\n", vtext, value)}
eval(script)
disabled
end
#-------------------------------------------------------------
#● 更新裝備效果(裝備位置, 裝備編號)
def equip_effect62(equip, id)
if $Sword[3] ; quip_id = equip3[equip] # 「裝備欄位擴充」處理
else
case equip # 裝備類型分歧
when 0 ; quip_id = weapon_id # 武器
when 1 ; quip_id = armor1_id # 盾
when 2 ; quip_id = armor2_id # 頭部
when 3 ; quip_id = armor3_id # 身體
when 4 ; quip_id = armor4_id # 裝飾品
end
end
#○ 裝備條件(裝備前判斷是否可以裝備)
if Sword.equip62?(equip, id, 4) # 有裝備的情況
return true if conditions62?(equip, id)
end
#○ 自動狀態(裝備之時附加狀態)
if Sword.equip62?(equip, quip_id, 2) and quip_id != id # 解除狀態
Sword.equipment62(equip, quip_id)[2].each{|i|
state62.delete_at(state62.index(i))
remove_state(i) unless state62.include?(i)}
end
if Sword.equip62?(equip, id, 2) and quip_id != id # 附加狀態
Sword.equipment62(equip, id)[2].each{|i| add_state(i)}
self.state62 += Sword.equipment62(equip, id)[2]
end
false
end
#-------------------------------------------------------------
#● 檢查是否符合裝備條件處理
def conditions62
equip = sword62_sword3(1)
actor = self.dup ; actor.equip3 = [] # 生成無裝備分身
equip.each{|item| actor.conditions62?(0, item, 4)}
end
#-------------------------------------------------------------
#● 獲取目前裝備的資料(獲取方式)
def sword62_sword3(d = 0)
case d
when 0 ; $Sword[3] ? equip3 : [weapon_id, armor1_id, armor2_id, armor3_id, armor4_id]
when 1 ; $Sword[3] ? equip3 : [$data_weapons[weapon_id], $data_armors[armor1_id],
$data_armors[armor2_id], $data_armors[armor3_id], $data_armors[armor4_id]]
end
end
end
#=======================================
#■ 裝備畫面、顯示瀏覽變更裝備的候補物品視窗
class Window_EquipItem < Window_Selectable
#-------------------------------------------------------------
#● 獲取普通文字色彩
alias sword62_normal_color normal_color unless defined?(sword62_normal_color) # unless $Sword_F12_Error[62]
def normal_color ; @disabled ? disabled_color : sword62_normal_color ; end
#-------------------------------------------------------------
#● 項目的描繪(項目符號)
alias sword62_draw_item draw_item
def draw_item(index)
#○ 裝備條件(將不符合條件的裝備顏色變為無效顏色)
if Sword.equip62?(@equip_type, $Sword[3] ? @data[index] : @data[index].id, 4)
@disabled = @actor.conditions62?(
@equip_type, $Sword[3] ? @data[index] : @data[index].id)
end
sword62_draw_item(index) ; @disabled = false if @disabled
end
end
#=======================================
#■ 標題畫面
class Scene_Title
#-------------------------------------------------------------
#● 新的遊戲
alias sword62_command_new_game command_new_game
def command_new_game
#Sword.script = [] # 重設腳本字串資料 [裝備條件顏色判斷]
sword62_command_new_game
#○ 設定變更
Sword::Sword62_Weapon.each_index do |i| if Sword::Sword62_Weapon[i]
script, val = "", Sword::Sword62_Weapon[i]
if val[0]
val[0].each{|key, value|
script += sprintf("$data_weapons[%i].%s = %s\n", i, key, value)}
eval(script)
end
end ; end
Sword::Sword62_Armor.each_index do |i| if Sword::Sword62_Armor[i]
script, val = "", Sword::Sword62_Armor[i]
if val[0]
val[0].each{|key, value|
script += sprintf("$data_armors[%i].%s = %s\n", i, key, value)}
eval(script)
end
end ; end
end
end
#=======================================
#■ 處理裝備畫面的類
class Scene_Equip
#-------------------------------------------------------------
#● 更新物品窗口
alias sword62_update_item update_item
def update_item
#○ 裝備條件(中斷更換裝備的處理)
item = $Sword[3] ? (@item_window.item ? @item_window.item : nil) :
(@item_window.item ? @item_window.item.id : 0)
disabled = @actor.equip_effect62(@right_window.index, item) if
Input.trigger?(Input::C)
disabled ? XPVX.se_buzzer : sword62_update_item
end
end
#=======================================
#■ 處理戰鬥畫面的類
class Scene_Battle
#-------------------------------------------------------------
#● 主處理
alias sword62_main main
def main
sword62_main
#○ 自動狀態(戰鬥結束時恢復自動解除後的狀態)
if Sword::Sword62_2Battle >= 1 ; $game_party.actors.each do |actor|
equip = [actor.weapon_id, actor.armor1_id,
actor.armor2_id, actor.armor3_id, actor.armor4_id]
equip.each_index{|i| next unless equipment = Sword.equipment62(i, equip[i])
next unless equipment[2]
equipment[2].each{|ii| actor.add_state(ii)}}
end ; end
end
end
$Sword_F12_Error[62] = true # 腳本讀取完畢,打開F12除錯標誌功能
复制代码
详细使用方式:blog.yam.com/a870053jjkj/article/29783547
作者:
亿万星辰
时间:
2013-4-1 06:58
class Game_Actor
# 武器对应的技能
# 如 WEAPON_SKILL[1] = 10 1号武器装备后附加10号技能
WEAPON_SKILL = []
WEAPON_SKILL[1] = 10
#--------------------------------------------------------------------------
# ● 变更装备
# equip_type : 装备类型
# id : 武器 or 防具 ID (0 为解除装备)
#--------------------------------------------------------------------------
def equip(equip_type, id)
case equip_type
when 0 # 武器
if id == 0 or $game_party.weapon_number(id) > 0
$game_party.gain_weapon(@weapon_id, 1)
unless @weapon_id == 0
skill_id = WEAPON_SKILL[@weapon_id]
self.forget_skill(skill_id) if !skill_id.nil?
end
@weapon_id = id
$game_party.lose_weapon(id, 1)
unless @weapon_id == 0
skill_id = WEAPON_SKILL[@weapon_id]
self.learn_skill(skill_id) if !skill_id.nil?
end
end
when 1 # 盾
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor1_id], $data_armors[id])
$game_party.gain_armor(@armor1_id, 1)
@armor1_id = id
$game_party.lose_armor(id, 1)
end
when 2 # 头
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor2_id], $data_armors[id])
$game_party.gain_armor(@armor2_id, 1)
@armor2_id = id
$game_party.lose_armor(id, 1)
end
when 3 # 身体
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor3_id], $data_armors[id])
$game_party.gain_armor(@armor3_id, 1)
@armor3_id = id
$game_party.lose_armor(id, 1)
end
when 4 # 装饰品
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor4_id], $data_armors[id])
$game_party.gain_armor(@armor4_id, 1)
@armor4_id = id
$game_party.lose_armor(id, 1)
end
end
end
end
复制代码
Game_Actor中的对应方法,这里感觉处理起来容易一些。
作者:
晴兰
时间:
2013-4-1 13:23
提示:
作者被禁止或删除 内容自动屏蔽
作者:
wingzeroplus
时间:
2013-4-1 19:07
http://www.66rpg.com/articles/4457
果然主站没人去么……其实主站上东西都很不错的
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1