Project1
标题:
技能装备脚本(要求独立脚本)
[打印本页]
作者:
悠哈悠哈
时间:
2008-5-8 18:07
标题:
技能装备脚本(要求独立脚本)
虽然网上有装备决定技能的脚本,但那个脚本不能满足我的要求,加上本人对脚本完全文盲,所以特悬赏本脚本:
要求:1.防具决定技能(注意,不是武器),不可习得,也就是说,只要该装备一拿下,该角色就不能使用该技能了.(装备时该技能与普通技能一样,会出现在菜单技能表上)
2.设定方式,可以多个装备都拥有同一个技能(即不是一种技能只对应唯一装备),也可以一个装备对应多个技能(也就是说一个装备不一定是对应唯一技能,可以是多个的技能)
3.描述方式,为了方便本人设置,该脚本定义时采用直接脚本定义法,比如这样:
防具ID=技能ID(技能ID可以是多个)===>当然这是本人的设定的一种想法,具体要怎么样描述就是各位高人的事了!(本人完全不知道)
================================================================================
同时为了配合该脚本,补充一个设定(因为以上脚本对于纵版游戏来说已经可以了,但对横版或45度角的游戏来说是还有件事要做的,那就是动画播放问题):
考虑到技能动画播放问题,我想到一个解决方法.对于所有由装备决定的技能,我都不会设置使用方演示动画,这样将该类技能动画演示定义为:如果该技能没有设定使用者动画,那么该技能谁使用就播放谁的技能使用动画.
专人使用技能动画设定方式:(脚本内定义)
角色ID=动画ID
(这个可以另设定一独立脚本,也可和上面这个脚本整合.)
================================================================================
最后补充说明:本人现已改动的默认脚本有如下几个(如果有可能冲突的请指出,我马上贴上已改动过的脚本内容,以供各位高手研究用!)
Game_Battler 3
Game_Actor
彩虹神剑
作者:
悠哈悠哈
时间:
2008-5-8 18:13
须便问一下,我只设定了3VIP,为什么会扣我6VIP?这是为什么?
(发该贴前我的VIP点数是51)
作者:
禾西
时间:
2008-5-8 18:15
好像會有收很多很多的稅...
問一下,自動狀態附加技能的腳本行不行? [LINE]1,#dddddd[/LINE]
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者:
八云紫
时间:
2008-5-8 18:15
悬赏VIP需要收费50%,悬赏3VIP,其实是扣除6VIP。
作者:
悠哈悠哈
时间:
2008-5-8 18:46
这不是100%税吗?........我倒,不过没办法了,为了游戏,那就收吧(话说我点的是3VIP,可是你们也看到了,实际上出现的是2VIP赏.这样可不可以理解为2点悬赏要交4点税!天啊!这不是200%税了吗?我狂倒)
还有,不能通过状态设定,因为状态方面我还有其他改动,为了减少冲突,我只难这样做(没办法,不会脚本的人,对于这个来说,冲突越少,设定越方便越好!
作者:
禾西
时间:
2008-5-8 19:33
再問一下,這些技能會被角色自身昇級習得嗎?因爲RM的某個很囧的設定,一定要問清楚才行。不會我就偷偷懶...
作者:
悠哈悠哈
时间:
2008-5-8 20:04
不会,这类技能我设定为非等级所能习得,就算是事件习得也不会,只能装备相关装备才能使用,(至于那个使用动画的设定的问题最好对其他技能也适用,不过如果麻烦的话可以只对应装备决定技能的脚本.=====>因为别的技能我可以用重复设定方法解决,不一定要用到这个东东)
还有要提醒一下的是,对应技的装备可以是多个的,不是唯一的,比如说对应火一级魔法的炎盾可以有四个,四人可以同时装备,战斗中可以都会使用火一级魔法(这个刚才忘了说明了,不好意思.呵呵{/hx})
作者:
禾西
时间:
2008-5-8 21:01
爛電腦無法測試,理論上可行|||
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# 处理角色的类。本类在 Game_Actors 类 ($game_actors)
# 的内部使用、Game_Party 类请参考 ($game_party) 。
#==============================================================================
class Game_Actor < Game_Battler
EQUIP_SKILL = [[],[]]
#武器設置:
#EQUIP_SKILL[0][id]=[skill's ids]
#例子:EQUIP_SKILL[0][1]=[1,2,3,4,5]
#防具設置:
#EQUIP_SKILL[1][id]=[skill's ids]
#例子:EQUIP_SKILL[1][1]=[1,2,3,4,5]
#--------------------------------------------------------------------------
# ● 設置
# actor_id : 角色 ID
#--------------------------------------------------------------------------
alias sidaf_setup setup
def setup(actor_id)
sidaf_setup(actor_id)
#--------------------------------------------------------------------------#
# 咸部一齊初始化
#--------------------------------------------------------------------------#
@state_skill = []
equip_skill(nil, @weapon_id ,0,0)
equip_skill(nil, @armor1_id ,1,1)
equip_skill(nil, @armor2_id ,1,2)
equip_skill(nil, @armor3_id ,1,3)
equip_skill(nil, @armor4_id ,1,4)
end
#--------------------------------------------------------------------------#
# ● 裝備技能
#--------------------------------------------------------------------------#
def equip_skill(old_id, new_id, category, equip_type)
@state_skill[equip_type] = [] #删除舊記錄
if old_id != nil #如果舊裝備存在
skills = EQUIP_SKILL[category][old_id] #取得關聯數組
skills||=[] #防止出錯,再初始化skills
@state_skill.each{|others| skills -= others} #取得需要删除的技能
skills.each{|id|forget_skill(id)} #删除技能
end
if new_id != nil #如果新裝備存在
skills = EQUIP_SKILL[category][new_id] #取得關聯數組
skills||=[] #防止出錯,再次初始化skills
skills.each{|id|learn_skill(id)} #習得技能
@state_skill[equip_type] = EQUIP_SKILL[category][new_id] #更新記錄
@state_skill[equip_type]||=[] #修正記錄類型
end
end
#--------------------------------------------------------------------------
# ● 變更裝備
# equip_type : 装备类型
# id : 武器 or 防具 ID (0 为解除装备)
#--------------------------------------------------------------------------
def equip(equip_type, id)
if equip_type == 0
return unless (id == 0 or $game_party.weapon_number(id) > 0)
#----------------------------------------------------------------
# 刷新自動狀態組
#----------------------------------------------------------------
equip_skill(@weapon_id, id,0,equip_type)
#----------------------------------------------------------------
$game_party.gain_weapon(@weapon_id, 1)
@weapon_id = id
$game_party.lose_weapon(id, 1)
elsif 1..4 === equip_type
return unless (id == 0 or $game_party.armor_number(id) > 0)
case equip_type
when 1
old_armor_id = @armor1_id
@armor1_id = id
when 2
old_armor_id = @armor2_id
@armor2_id = id
when 3
old_armor_id = @armor3_id
@armor3_id = id
when 4
old_armor_id = @armor4_id
@armor4_id = id
end
#----------------------------------------------------------------
# 刷新自動狀態組
#----------------------------------------------------------------
equip_skill(old_armor_id, id,1,equip_type)
#----------------------------------------------------------------
update_auto_state($data_armors[old_armor_id], $data_armors[id])
$game_party.gain_armor(old_armor_id, 1)
$game_party.lose_armor(id, 1)
end
end
end
复制代码
作者:
悠哈悠哈
时间:
2008-5-8 21:14
理论上........不过还是说一声辛苦你了,我先研究一下......
作者:
禾西
时间:
2008-5-8 21:21
沒有辦法(攤手),$200一部二手電腦,用久了就無法打開內存消耗稍大的程序。除了用來上網以及用 word 寫小說與腳本以外一無用處。另外一個問題大概明天再處理。實際上就是根據角色不同讀取不同動畫而已,非常簡單。大概就只有「感謝共享」的價值|||如果剛才的腳本有甚麽問題可以直接PM禾西...手殘寫錯字已經成爲一種習慣了(啥?)
作者:
悠哈悠哈
时间:
2008-5-8 21:38
按你的脚本设定后,连游戏进不了,马上报错:
该脚第9行发生了NameError.
unintialized constant Game_Actor::EQUIP_SKILL
作者:
禾西
时间:
2008-5-8 21:44
你確認沒有抄少這一行?
EQUIP_SKILL = [[],[]]
作者:
悠哈悠哈
时间:
2008-5-8 21:53
这回加了
EQUIP_SKILL = [[],[]]
不过之后进入游戏,技能没有习得,同时在装御该装备时马上出错,内容如下:
脚本的39行发生了NoMethodError.
undefuned method `[]='for nil:NilClass
我设定如下:
class Game_Actor < Game_Battler
EQUIP_SKILL = [[],[]]
EQUIP_SKILL[1][24]=[17,18]
#武器設置:
#EQUIP_SKILL[0][id]=[skill's ids]
#例子:EQUIP_SKILL[0][1]=[1,2,3,4,5]
#防具設置:
#EQUIP_SKILL[1][id]=[skill's ids]
#例子:EQUIP_SKILL[1][1]=[1,2,3,4,5]
作者:
禾西
时间:
2008-5-8 22:04
感覺上有某個霸道的腳本把 Game_Actor < Game_Battler 的 setup 吃掉了
因爲剛才RP爆發居然可以打開RM測試,結果完全成功-v-+
試試把這個腳本放在最下面(main 腳本之前)
另外,就是第二個問題:
class Scene_Battle
SKILL_ANI_ID = []
#SKILL_ANI_ID[技能ID] = {角色ID =>動畫ID,角色ID =>動畫ID...}
#--------------------------------------------------------------------------
# ● 生成特技行动结果
#--------------------------------------------------------------------------
def make_skill_action_result
# 获取特技
@skill = $data_skills[@active_battler.current_action.skill_id]
# 如果不是强制行动
unless @active_battler.current_action.forcing
# 因为 SP 耗尽而无法使用的情况下
unless @active_battler.skill_can_use?(@skill.id)
# 清除强制行动对像的战斗者
$game_temp.forcing_battler = nil
# 移至步骤 1
@phase4_step = 1
return
end
end
# 消耗 SP
@active_battler.sp -= @skill.sp_cost
# 刷新状态窗口
@status_window.refresh
# 在帮助窗口显示特技名
@help_window.set_text(@skill.name, 1)
# 设置动画 ID
#------------------------------------------------------------------------------
if @active_battler.is_a?(Game_Actor) and SKILL_ANI_ID[@skill.id] != nil
if SKILL_ANI_ID[@skill.id][@active_battler.id] != nil
@animation1_id = SKILL_ANI_ID[@skill.id][@active_battler.id]
else
@animation1_id = @skill.animation1_id
end
else
@animation1_id = @skill.animation1_id
end
#@animation1_id = @skill.animation1_id
#------------------------------------------------------------------------------
@animation2_id = @skill.animation2_id
# 设置公共事件 ID
@common_event_id = @skill.common_event_id
# 设置对像侧战斗者
set_target_battlers(@skill.scope)
# 应用特技效果
for target in @target_battlers
target.skill_effect(@active_battler, @skill)
end
end
end
复制代码
作者:
悠哈悠哈
时间:
2008-5-8 22:22
呵呵,我又试了一下也成功了,发现问题出在哪里了:
因为我之前是用全新世纪的工程做试验的.问题出在当角色已经装备该装备的情况下,再使用这脚本读档的话,会发现装备者没有习得相关技能,这时如果拿下这个人的装备时就会发生脚本错误,如果完全从头开始,或使用该脚本前无人装备对应装备,之后再使用这装备是不会出错的.
是我试验不周.不过这同样也说明,你的脚本可能会出现的冲突吧!{/hx}
那动画脚本我再试一下,如果也没问题就大谢谢了!
同时这脚本今后发生相关问题时还请仁手出手相助!!!
作者:
悠哈悠哈
时间:
2008-5-8 22:43
太好了,完全满足我的要求,2VIP值了!!!!{/cy}
(不过这次实际花了我6VIP.........{/ll}唉,本人的VIP得来不易啊,都是开发游戏争的,足足存了2年才这么几点........不过为了游戏我舍得......)
作者:
禾西
时间:
2008-5-8 22:51
其實完全不值得用VIP來提問這些問題(攤手),VIP提問收稅收很高。還是去版務區私人轉換比較便...
况且就是,問題得不得到解决很大程度决定於提問方式與腳本的特色。
寫腳本是講心情的(裝B)
作者:
悠哈悠哈
时间:
2008-5-8 23:00
这样啊!是个好方法!下一次VIP一定私下交易!(这个方法我根本没想到,没经验啊!{/ll})交学费了!(MS学费好贵啊!)
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1