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
爛電腦無法測試,理論上可行|||
  1. #==============================================================================
  2. # ■ Game_Actor
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  5. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  6. #==============================================================================

  7. class Game_Actor < Game_Battler
  8.   EQUIP_SKILL = [[],[]]
  9.   #武器設置:
  10.   #EQUIP_SKILL[0][id]=[skill's ids]
  11.   #例子:EQUIP_SKILL[0][1]=[1,2,3,4,5]
  12.   #防具設置:
  13.   #EQUIP_SKILL[1][id]=[skill's ids]
  14.   #例子:EQUIP_SKILL[1][1]=[1,2,3,4,5]
  15.   
  16.   #--------------------------------------------------------------------------
  17.   # ● 設置
  18.   #     actor_id : 角色 ID
  19.   #--------------------------------------------------------------------------
  20.   alias sidaf_setup setup
  21.   def setup(actor_id)
  22.     sidaf_setup(actor_id)
  23.   #--------------------------------------------------------------------------#
  24.   # 咸部一齊初始化
  25.   #--------------------------------------------------------------------------#
  26.     @state_skill = []
  27.     equip_skill(nil, @weapon_id ,0,0)
  28.     equip_skill(nil, @armor1_id ,1,1)
  29.     equip_skill(nil, @armor2_id ,1,2)
  30.     equip_skill(nil, @armor3_id ,1,3)
  31.     equip_skill(nil, @armor4_id ,1,4)
  32.   end
  33.   #--------------------------------------------------------------------------#
  34.   # ● 裝備技能
  35.   #--------------------------------------------------------------------------#
  36.   def equip_skill(old_id, new_id, category, equip_type)
  37.     @state_skill[equip_type] = []            #删除舊記錄
  38.     if old_id != nil                         #如果舊裝備存在
  39.       skills = EQUIP_SKILL[category][old_id] #取得關聯數組
  40.       skills||=[]                            #防止出錯,再初始化skills
  41.       @state_skill.each{|others| skills -= others} #取得需要删除的技能
  42.       skills.each{|id|forget_skill(id)}            #删除技能
  43.     end
  44.    
  45.     if new_id != nil                         #如果新裝備存在
  46.       skills = EQUIP_SKILL[category][new_id] #取得關聯數組
  47.       skills||=[]                            #防止出錯,再次初始化skills
  48.       skills.each{|id|learn_skill(id)}       #習得技能
  49.       @state_skill[equip_type] = EQUIP_SKILL[category][new_id] #更新記錄
  50.       @state_skill[equip_type]||=[]                            #修正記錄類型
  51.     end
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 變更裝備
  55.   #     equip_type : 装备类型
  56.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  57.   #--------------------------------------------------------------------------
  58.   def equip(equip_type, id)
  59.     if equip_type == 0
  60.       return unless (id == 0 or $game_party.weapon_number(id) > 0)
  61.       #----------------------------------------------------------------
  62.       # 刷新自動狀態組
  63.       #----------------------------------------------------------------
  64.       equip_skill(@weapon_id, id,0,equip_type)
  65.       #----------------------------------------------------------------
  66.       $game_party.gain_weapon(@weapon_id, 1)
  67.       @weapon_id = id
  68.       $game_party.lose_weapon(id, 1)
  69.     elsif 1..4 === equip_type
  70.       return unless (id == 0 or $game_party.armor_number(id) > 0)
  71.       case equip_type
  72.       when 1
  73.         old_armor_id = @armor1_id
  74.         @armor1_id = id
  75.       when 2
  76.         old_armor_id = @armor2_id
  77.         @armor2_id = id
  78.       when 3
  79.         old_armor_id = @armor3_id
  80.         @armor3_id = id
  81.       when 4
  82.         old_armor_id = @armor4_id
  83.         @armor4_id = id
  84.       end
  85.       #----------------------------------------------------------------
  86.       # 刷新自動狀態組
  87.       #----------------------------------------------------------------
  88.       equip_skill(old_armor_id, id,1,equip_type)
  89.       #----------------------------------------------------------------
  90.       update_auto_state($data_armors[old_armor_id], $data_armors[id])
  91.       $game_party.gain_armor(old_armor_id, 1)
  92.       $game_party.lose_armor(id, 1)
  93.     end
  94.   end
  95. 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 腳本之前)

另外,就是第二個問題:
  1. class Scene_Battle
  2.   SKILL_ANI_ID = []
  3.   #SKILL_ANI_ID[技能ID] = {角色ID =>動畫ID,角色ID =>動畫ID...}
  4.   #--------------------------------------------------------------------------
  5.   # ● 生成特技行动结果
  6.   #--------------------------------------------------------------------------
  7.   def make_skill_action_result
  8.     # 获取特技
  9.     @skill = $data_skills[@active_battler.current_action.skill_id]
  10.     # 如果不是强制行动
  11.     unless @active_battler.current_action.forcing
  12.       # 因为 SP 耗尽而无法使用的情况下
  13.       unless @active_battler.skill_can_use?(@skill.id)
  14.         # 清除强制行动对像的战斗者
  15.         $game_temp.forcing_battler = nil
  16.         # 移至步骤 1
  17.         @phase4_step = 1
  18.         return
  19.       end
  20.     end
  21.     # 消耗 SP
  22.     @active_battler.sp -= @skill.sp_cost
  23.     # 刷新状态窗口
  24.     @status_window.refresh
  25.     # 在帮助窗口显示特技名
  26.     @help_window.set_text(@skill.name, 1)
  27.     # 设置动画 ID
  28. #------------------------------------------------------------------------------
  29.     if @active_battler.is_a?(Game_Actor) and SKILL_ANI_ID[@skill.id] != nil
  30.       if SKILL_ANI_ID[@skill.id][@active_battler.id] != nil
  31.       @animation1_id = SKILL_ANI_ID[@skill.id][@active_battler.id]
  32.       else
  33.       @animation1_id = @skill.animation1_id
  34.       end
  35.     else
  36.       @animation1_id = @skill.animation1_id
  37.     end
  38.     #@animation1_id = @skill.animation1_id
  39. #------------------------------------------------------------------------------
  40.     @animation2_id = @skill.animation2_id
  41.     # 设置公共事件 ID
  42.     @common_event_id = @skill.common_event_id
  43.     # 设置对像侧战斗者
  44.     set_target_battlers(@skill.scope)
  45.     # 应用特技效果
  46.     for target in @target_battlers
  47.       target.skill_effect(@active_battler, @skill)
  48.     end
  49.   end
  50. 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