查看: 2078|回复: 4

[已经过期] 【RMVA】若干主要和装备、技能相关功能的实现问题的请教

[复制链接]
梦石
0
星屑
149
在线时间
14 小时
注册时间
2022-10-9
回帖
10
发表于 2022-10-11 22:04:59 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 SimoTCD 于 2022-10-12 17:45 编辑

我是初次尝试使用 RPG Maker VX Ace 制作游戏的新人,在制作过程中遇到若干问题
我在一番查找后仍然未解决,故在此诚挚请教各位:
【以下用绿色字体标记的问题代表已经解决】

1. 我想做几个技能,但不知道该如何实现其功能或限制条件:
① 重生术
 用来在战斗中复活队友【这个功能我会做,移除“无法战斗”状态即可】
 限制条件:使用此技能需要消耗2颗钻石(物品),如果钻石不足2颗则不能使用此技能

解决方案:感谢 alexncf125 提供的链接:
https://yanflychannel.wordpress.com/rmvxa/gameplay-scripts/skill-cost-manager/
https://github.com/Archeia/YEARepo/blob/master/Gameplay/Skill_Cost_Manager.rb

② 顺劈斩
 对两个相邻的敌人各进行一次攻击 ← 解决方案:感谢 alexncf125 提供的代码,请见 3 楼
 限制条件:装备的武器必须是四类武器之一
 (武器限制条件只能写下两种武器,但是我设置了16类武器,其中4类都能发动顺劈斩)
③ 惩戒
 发动一次物理攻击,命中后:既造成物理伤害,也造成光属性伤害,还会恢复使用者的HP
 物理伤害的公式和光伤害的公式分别计算,并且HP回复量和光伤害相关
④ 奥术飞弹
 效果是“随机对一个敌人进行一次魔法攻击”重复三次,命中率很高(我不知道该怎么单独设置技能的命中率修正)
 (注意:改“连续次数”达不到我想要的效果——我不想做成“随机选择一个敌人,然后连续攻击他三次”)

2. 我想把武器装备的规则改成如下,但不知道如何实现:
【优先实现⑤】
① 每名角色都有主手和副手两只手,每只手分别可以装备一件武器或一面盾牌
② 不能同时装备两把武器或者两面盾牌(我有两个想法,任选其一实现即可)
 * 想法1:如果试图同时装备两把武器或两面盾牌,则只有主手的武器/副手的盾牌会生效,另一只手的武器/盾牌会失效
 * 想法2:当一只手装备了武器时,设定另一只手只能装备盾牌、不能装备武器
③ 武器和盾牌都有尺寸的设定,默认为“普通”,表示需要且只需要一只手使用
④ “双手”尺寸的装备,表示需要双手使用
 * 想法:双手武器只能装备在主手;当主手装备了双手武器时,禁用副手(或者让副手的装备失效)
⑤ “两用”尺寸的装备,表示既可以单手使用,也可以双手使用,并且双手使用能更好的操控武器
 * 想法:两用武器只能装备在主手;当主手装备了两用武器,且副手为空时,让这把武器有额外的属性加成
⑥ “轻型”尺寸的装备,轻型武器可以打破规则②双持使用(比如双持短剑),也可以按常规规则使用(比如一把短剑一面盾牌)
 * 具体规则:如果主手和副手都装备着轻型武器时,规则②无效
【注意】我不想通过“武器类型”的功能来实现“武器尺寸”——武器类型已经被我设置成诸如“轻型刀剑”“重型斧”等等了

3. 请问游戏的按键可以修改吗?如果可以该如何修改?
(比如,我想设置成:WASD和方向键都可以用来移动光标和控制行走;J、空格、Enter都可以是确定键;K为取消键;等等)

诚望大家不吝赐教,若能解答我当不胜感激,只解答其中一部分问题也好
每当有问题被解答时,我都会编辑这个帖子,一方面防止重复解答,另一方面方便和我有同样疑问的人知道某功能要如何实现
梦石
0
星屑
149
在线时间
14 小时
注册时间
2022-10-9
回帖
10
 楼主| 发表于 2022-10-12 09:44:53 | 显示全部楼层
我是不是问题有点多了()
制作过程中遇到了一堆问题,连搜带学干掉了一大半,这是留下来的那一小半问题
回复

使用道具 举报

梦石
0
星屑
29901
在线时间
5734 小时
注册时间
2016-3-8
回帖
1653
发表于 2022-10-12 10:48:33 | 显示全部楼层
本帖最后由 alexncf125 于 2022-10-12 11:20 编辑

① 重生术 限制条件:使用此技能需要消耗2颗钻石(物品),如果钻石不足2颗则提示不能使用此技能
https://yanflychannel.wordpress. ... skill-cost-manager/


② 顺劈斩 选择一个敌人,对它和它左右边序列的敌人各进行一次攻击(伤害公式:a.atk * 6 - b.def * 3,离散60)
[fold][pre lang="ruby"]# SideAttack_ver.1.1
#「伤害波及」                                    (作成日……2012/ 1/ 5)
#______________________________________________________________________________

#  1.1 2012/ 1/12  ターゲットの被りを個別に 許可/不許可 にする機能を追加
#      2012/ 1/12   either_side_attack の場合においても
#                  対象(二発目)が左右ランダムに振れるように変更
#______________________________________________________________________________
=begin
-- サイドアタック --


  選択した対象と、対象の隣にいる敵キャラに効果を発揮する
スキル(アイテム)を作成します。


  なお、このスクリプトにおける「"隣"の敵キャラ」とは、
「その敵キャラの index ± 1 の index の位置にいる敵キャラ」……です。

  index の前後で判定する仕組みなので、
「配置ビュー」(見た目) 通りにはならないケースがあります。


  効果範囲が「敵単体」のスキルorアイテムのメモ欄に <side_attack> と書くと、
選択した対象と、その隣の敵キャラを対象とするスキル(アイテム)になります。
  このとき、二発目の対象が、左右どちらの対象になるかはランダム。


  また、<either_side_attack> と書くと、対象とその両隣を攻撃します。


  どちらの機能も、敵グループのメンバーが一人の場合(対象が被ってしまう場合)は、
自動的に単発になります。

  ……が、メモ欄の書式を <side_attack, same> や <either_side_attack, same>
に変えると、対象の被りが許可され、必ず複数回攻撃を行う仕様に。 (ver.1.1以降)
=end

class RPG::UsableItem < RPG::BaseItem
  def side_attack?
    if @__side_attack == nil
      @__side_attack    = false
      if /<side_attack(?:,\s*(same)>|>)/i =~ note
        @__side_attack    = true
        @__same_target_ok = true  if $1
      end
    end
    return @__side_attack
  end
  #--------------------------------------------------------------------------
  def either_side_attack?
    if @__either_side_attack == nil
      @__either_side_attack = false
      if /<either_side_attack(?:,\s*(same)>|>)/i =~ note
        @__either_side_attack = true
        @__same_target_ok     = true  if $1
      end
    end
    return @__either_side_attack
  end
  #--------------------------------------------------------------------------
  def same_target_ok?
    if @__same_target_ok == nil
      @__same_target_ok = false
      return false  unless side_attack? or either_side_attack?
    end
    return @__same_target_ok
  end
end
#______________________________________________________________________________


class Game_Action
  alias side_attack__targets_for_opponents  targets_for_opponents
  def targets_for_opponents
    if item.for_one? && (item.side_attack? or item.either_side_attack?)
      return targets_for_side_attack
    end

    return side_attack__targets_for_opponents
  end
  #--------------------------------------------------------------------------
  def targets_for_side_attack
    targets = side_attack__targets_for_opponents

    opps   = opponents_unit.alive_members
    index  = opps.index(targets[0])
    index1 = [index - 1, 0].max
    index2 = [index + 1, opps.size - 1].min

    case index
    when 0
      targets.push(opps[index2])
      targets.push(opps[index1])  if item.either_side_attack?
    when opps.size - 1
      targets.push(opps[index1])
      targets.push(opps[index2])  if item.either_side_attack?
    else
      candidates = [opps[index1], opps[index2]]
      target =  (rand(2) == 0) ?  candidates.shift : candidates.pop
      targets.push(target)
      targets.push(candidates[0]) if item.either_side_attack?
    end

    return  item.same_target_ok? ?  targets : targets.uniq
  end
end[/pre][/fold]
限制条件:装备的武器必须是四类武器之一
魔改Game_Actor的skill_wtype_ok?

④ 奥术飞弹
效果是“随机对一个敌人进行一次魔法攻击”重复三次,...
技能的效果范围选"任意三个敌人"
...命中率很高
自行魔改item_hit跟item_eva
回复 1 0

使用道具 举报

梦石
0
星屑
149
在线时间
14 小时
注册时间
2022-10-9
回帖
10
 楼主| 发表于 2022-10-12 17:39:35 | 显示全部楼层
本帖最后由 SimoTCD 于 2022-10-12 17:42 编辑
alexncf125 发表于 2022-10-12 10:48
① 重生术 限制条件:使用此技能需要消耗2颗钻石(物品),如果钻石不足2颗则提示不能使用此技能
ht ...


首先非常感谢你能提供帮助
但是我还是有一些问题

① 重生术
已解决

② 顺劈斩
限制条件的问题,我已经将 Game_Actor 的 skill_wtype_ok? 改为如下代码(最多允许八类武器)
但不知道该怎么设置更多的限制条件,因为“数据库-技能-武器限制”这里还是只有两个空
  1.   def skill_wtype_ok?(skill)
  2.     wtype_id1 = skill.required_wtype_id1
  3.     wtype_id2 = skill.required_wtype_id2
  4.     wtype_id3 = skill.required_wtype_id3
  5.     wtype_id4 = skill.required_wtype_id4
  6.     wtype_id5 = skill.required_wtype_id5
  7.     wtype_id6 = skill.required_wtype_id6
  8.     wtype_id7 = skill.required_wtype_id7
  9.     wtype_id8 = skill.required_wtype_id8
  10.     return true if wtype_id1 == 0 && wtype_id2 == 0
  11.     return true if wtype_id1 > 0 && wtype_equipped?(wtype_id1)
  12.     return true if wtype_id2 > 0 && wtype_equipped?(wtype_id2)
  13.     return true if wtype_id3 > 0 && wtype_equipped?(wtype_id3)
  14.     return true if wtype_id4 > 0 && wtype_equipped?(wtype_id4)
  15.     return true if wtype_id5 > 0 && wtype_equipped?(wtype_id5)
  16.     return true if wtype_id6 > 0 && wtype_equipped?(wtype_id6)
  17.     return true if wtype_id7 > 0 && wtype_equipped?(wtype_id7)
  18.     return true if wtype_id8 > 0 && wtype_equipped?(wtype_id8)
  19.     return false
  20.   end
复制代码


④ 奥术飞弹
[1] 请问 "任意三个敌人" 要在哪里选?我这个下拉菜单里没有“任意三个敌人” QQ截图20221012172852.png
[2] 我是初学者,只会照葫芦画瓢,不知道在哪改、怎么改,有没有 item_hit 和 item_eva 的修改例子可供参考?
回复

使用道具 举报

梦石
0
星屑
149
在线时间
14 小时
注册时间
2022-10-9
回帖
10
 楼主| 发表于 2022-10-14 22:19:16 | 显示全部楼层
修改了好久,不但没有解决还把文件搞坏了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部