设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2728|回复: 12
打印 上一主题 下一主题

两个难题

 关闭 [复制链接]

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4719
在线时间
5242 小时
注册时间
2009-4-29
帖子
14318

贵宾

跳转到指定楼层
1
发表于 2009-5-4 04:10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
先说明,我是新手,大家不要笑我的技术{/pz}
魔法设定应有如下效果:
难题1:设定一种类似魔兽中的“死亡缠绕”或者“神圣只光”,可以对敌人或者自己使用,并且对敌人使用是造成伤害,对自己人使用则是恢复。
难题2:设定某一怪物对所有魔法完全免疫(包括攻击类魔法免疫和状态类魔法免疫),就像“勇者斗恶龙”里的“金史莱姆”一样。
高手来指点两句啊!{/zk}
版务信息:版主帮忙结贴~
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-3-5
帖子
2398
2
发表于 2009-5-4 06:21:55 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4719
在线时间
5242 小时
注册时间
2009-4-29
帖子
14318

贵宾

3
 楼主| 发表于 2009-5-4 06:56:42 | 只看该作者
高手们快来看看吧{/ll}
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-1-19
帖子
591
4
发表于 2009-5-4 07:12:32 | 只看该作者
以下引用protosssonny于2009-5-3 20:10:53的发言:


本贴悬赏额度如下:VIP:0   积分:100   
先说明,我是新手,大家不要笑我的技术
魔法设定应有如下效果:
难题1:设定一种类似魔兽中的“死亡缠绕”或者“神圣只光”,可以对敌人或者自己使用,并且对敌人使用是造成伤害,对自己人使用则是恢复。
难题2:设定某一怪物对所有魔法完全免疫(包括攻击类魔法免疫和状态类魔法免疫),就像“勇者斗恶龙”里的“金史莱姆”一样。
高手来指点两句啊!

我说啊,lz你太贪心了
关于第一问题,我当时也想解决,发现自己没办法了,就用其他方法,例如数据库,事件...
梦想世界在我脑中~~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-3-13
帖子
43
5
发表于 2009-5-4 09:13:34 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4719
在线时间
5242 小时
注册时间
2009-4-29
帖子
14318

贵宾

6
 楼主| 发表于 2009-5-6 04:16:23 | 只看该作者
以下引用开心词典于2009-5-4 1:13:34的发言:

第一个问题难点在于一个技能怎么能选中敌我双方。

既然如此,我想到了一个可以实现的办法,虽然麻烦,但是能实现预期目标。思路流程如下:
1、设定技能名字,如“死亡缠绕”(其效果范围为使用者),并设定本技能会引发公共事件如“公共事件1”;
2、“公共事件1”如下:
(1)变量1=0
(2)变量2=0(初始化)
(3)显示选择项:1、敌人,2、同伴
(4)[敌人]的场合:
输入数值的处理:1-8(表示1-8号敌人),由变量1接受
(5)[同伴]的场合:
输入数值的处理:1-4(表示1-4号同伴),由变量2接受
(6)条件分歧:如果变量1的值>0,执行变量1对应敌人损血
(7)其他场合:执行变量2对应同伴加血
这样基本是解决了难题1,我想了好久才想出的办法。
要是还有更好的办法请告诉我。
难题2我依旧解决不了,盼望高手来指点下啊!!!
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-4-28
帖子
158
7
发表于 2009-5-6 08:25:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

8
发表于 2009-5-6 08:52:32 | 只看该作者
以下引用668RPG于2009-5-6 0:25:02的发言:
第2个问题在数据库里 怪物队伍里也可以设置 金身不灭

那是完全另一回事
不要搞混LZ的問題
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
9
发表于 2009-5-6 13:49:25 | 只看该作者
你有仔细看过巴哈的解答吗?把该敌人对所有魔法属性的有效度设为 E,然后把魔法状态有效度设为 F,这样就是魔法免疫了~

死亡缠绕的做法大概可以分为四大步骤:

1、在数据库中用某种方法设置某技能的范围是战场上所有人;
2、技能选择结束时判断技能范围,如果是所有人则打开一个选择所有人的选项窗口;
3、判断选择后的对象是角色还是敌人
4、应用伤害/治愈,是敌人时伤害为正,是我方伤害为负

以下仅供参考,插入 Main 之前,然后在数据库中添加一个技能死亡缠绕,伤害设为正数,然后在备注中写:
/*范围为所有人*/
在战斗中使用这个技能就能看到效果了~
请注意红色的部分,是在原 RGSS2 脚本基础上新增的内容,方便楼主对照
# 设置一个死亡缠绕专用的战场全员范围的标识
DEATH_COIL_SCOPE = 32767

#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
#  处理标题画面的类。
#==============================================================================

class Scene_Title
  # 载入数据库时调用
  # 将描述中带有 /*范围为所有人*/ 的技能的范围设置为所有人

  def check_special_skill_scope
    for i in $data_skills
      next if i == nil
      if i.note =~ /\/\*范围为所有人\*\//
        i.scope = DEATH_COIL_SCOPE
      end
    end

  end
  #--------------------------------------------------------------------------
  # ● 载入数据库
  #--------------------------------------------------------------------------

  alias load_database_old load_database if
    !method_defined? :load_database_old

  def load_database
    load_database_old
    check_special_skill_scope
  end
  #--------------------------------------------------------------------------
  # ● 载入战斗测试用的数据库
  #--------------------------------------------------------------------------

  alias load_bt_database_old load_bt_database if
    !method_defined? :load_bt_database_old

  def load_bt_database
    load_bt_database_old
    check_special_skill_scope
  end
end

#==============================================================================
# ■ Window_TargetAll
#------------------------------------------------------------------------------
#  战斗画面中选择行动对象的所有角色(照猫画虎,仿照 Window_TargetEnemy 写就行了)
#==============================================================================


class Window_TargetAll < Window_Command
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------

  def initialize
    commands = []
    @targets = []
    for target in $game_troop.members + $game_party.members
      next unless target.exist?
      commands.push(target.name)
      @targets.push(target)
    end
    super(416, commands, 2, 4)
  end
  #--------------------------------------------------------------------------
  # ● 获取角色对象
  #--------------------------------------------------------------------------

  def target
    return @targets[@index]
  end
end


#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  处理战斗画面的类。
#==============================================================================


class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 确定特技
  #--------------------------------------------------------------------------

  def determine_skill
    @active_battler.action.set_skill(@skill.id)
    @skill_window.active = false
    # 范围为所有人时开始选择所有人
    if @skill.scope == DEATH_COIL_SCOPE
      start_target_all_selection
    elsif
@skill.need_selection?
      if @skill.for_opponent?
        start_target_enemy_selection
      else
        start_target_actor_selection
      end
    else
      end_skill_selection
      next_actor
    end
  end
  #--------------------------------------------------------------------------
  # ● 开始选择对象的所有角色
  #--------------------------------------------------------------------------

  def start_target_all_selection
    @target_all_window = Window_TargetAll.new
    @target_all_window.y = @info_viewport.rect.y
    @info_viewport.rect.x += @target_all_window.width
    @info_viewport.ox += @target_all_window.width
    @actor_command_window.active = false
  end

  #--------------------------------------------------------------------------
  # ● 选择对象所有角色结束
  #--------------------------------------------------------------------------

  def end_target_all_selection
    @info_viewport.rect.x -= @target_all_window.width
    @info_viewport.ox -= @target_all_window.width
    @target_all_window.dispose
    @target_all_window = nil
    if @actor_command_window.index == 0
      @actor_command_window.active = true
    end
  end

  #--------------------------------------------------------------------------
  # ● 更新选择对象敌方角色
  #--------------------------------------------------------------------------

  def update_target_all_selection
    @target_all_window.update
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_target_all_selection
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      # 默认系统传递给 action 的是角色或敌人在队伍中的索引
      # 这里传递的是窗口选项的索引
      # 具体见下面对于 Game_BattleAction 的修改

      @active_battler.action.target_index = @target_all_window.index
      end_target_all_selection
      end_skill_selection
      end_item_selection
      next_actor
    end
  end

  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------

  def update
    super
    update_basic(true)
    update_info_viewport                  # 更新显示信息的视区
    if $game_message.visible
      @info_viewport.visible = false
      @message_window.visible = true
    end
    unless $game_message.visible          # 在显示消息以外的情况
      return if judge_win_loss            # 判断胜败
      update_scene_change
      # 选择所有人的窗口存在时更新
      if @target_all_window != nil
        update_target_all_selection
       # 选择所有对象
      elsif @target_enemy_window != nil
        update_target_enemy_selection     # 选择敌方对象
      elsif @target_actor_window != nil
        update_target_actor_selection     # 选择对象角色
      elsif @skill_window != nil
        update_skill_selection            # 选择特技
      elsif @item_window != nil
        update_item_selection             # 选择物品
      elsif @party_command_window.active
        update_party_command_selection    # 选择同伴指令
      elsif @actor_command_window.active
        update_actor_command_selection    # 选择角色指令
      else
        process_battle_event              # 战斗处理
        process_action                    # 战斗行动
        process_battle_event              # 处理战斗事件
      end
    end
  end
end

#==============================================================================
# ■ Game_BattleAction
#------------------------------------------------------------------------------
#  处理行动 (战斗中的行动) 的类。这个类在 Game_Battler 类
# 的内部使用。
#==============================================================================


class Game_BattleAction
  #--------------------------------------------------------------------------
  # ● 生成特技以及物品目标
  #     obj : 特技以及物品
  #--------------------------------------------------------------------------

  def make_obj_targets(obj)
    targets = []
    # 范围为所有人时
    if obj.scope == DEATH_COIL_SCOPE
      # 所有敌人在窗口选项中我方角色的前面
      # 如果 @target_index 大于等于存活敌人的数量
      # 说明选择的是我方角色

      bound = $game_troop.existing_members.size
      targets.push(@target_index < bound ?
        $game_troop.smooth_target(@target_index) :
        $game_party.smooth_target(@target_index - bound))
    elsif
obj.for_opponent?
      if obj.for_random?
        if obj.for_one?         # 敌单体随机
          number_of_targets = 1
        elsif obj.for_two?      # 敌二体随机
          number_of_targets = 2
        else                    # 敌三体随机
          number_of_targets = 3
        end
        number_of_targets.times do
          targets.push(opponents_unit.random_target)
        end
      elsif obj.dual?           # 敌单体 连续
        targets.push(opponents_unit.smooth_target(@target_index))
        targets += targets
      elsif obj.for_one?        # 敌单体
        targets.push(opponents_unit.smooth_target(@target_index))
      else                      # 敌全体
        targets += opponents_unit.existing_members
      end
    elsif obj.for_user?         # 使用者
      targets.push(battler)
    elsif obj.for_dead_friend?
      if obj.for_one?           # 我方单体 (不能战斗)
        targets.push(friends_unit.smooth_dead_target(@target_index))
      else                      # 我方单体 (不能战斗)
        targets += friends_unit.dead_members
      end
    elsif obj.for_friend?
      if obj.for_one?           # 我方单体
        targets.push(friends_unit.smooth_target(@target_index))
      else                      # 我方单体
        targets += friends_unit.existing_members
      end
    end
    return targets.compact
  end
end

#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================


class Game_Battler
  #--------------------------------------------------------------------------
  # ● 计算特技以及物品造成的伤害
  #     user : 使用特技以及物品的人
  #     obj  : 特技以及物品
  #    将结果代入 @hp_damage 或 @mp_damage。
  #--------------------------------------------------------------------------

  def make_obj_damage_value(user, obj)
    damage = obj.base_damage                        # 获取基本伤害
    if damage > 0                                   # 伤害为正数
      damage += user.atk * 4 * obj.atk_f / 100      # 打击关系度: 使用者
      damage += user.spi * 2 * obj.spi_f / 100      # 精神关系度: 使用者
      unless obj.ignore_defense                     # 无视防御力以外
        damage -= self.def * 2 * obj.atk_f / 100    # 打击关系度: 对象者
        damage -= self.spi * 1 * obj.spi_f / 100    # 精神关系度: 对象者
      end
      damage = 0 if damage < 0                      # 减少为 0
    elsif damage < 0                                # 伤害为负数
      damage -= user.atk * 4 * obj.atk_f / 100      # 打击关系度: 使用者
      damage -= user.spi * 2 * obj.spi_f / 100      # 精神关系度: 使用者
    end
    damage *= elements_max_rate(obj.element_set)    # 属性修正
    damage /= 100
    damage = apply_variance(damage, obj.variance)   # 分散
    damage = apply_guard(damage)                    # 防御修正
    # 技能范围是所有人且对象是我方人员时
    if obj.scope == DEATH_COIL_SCOPE && self.is_a?(Game_Actor)
      damage = -damage
                              # 伤害变为治疗
    end
    if obj.damage_to_mp  
      @mp_damage = damage                           # MP 伤害
    else
      @hp_damage = damage                           # HP 伤害
    end
  end
end

系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

10
发表于 2009-5-6 14:30:09 | 只看该作者
建议LS把这段脚本整理整理
弄成教程贴在技术区


对脚本本身的建议:
- 范围不要设为12,考虑到会跟范围加强脚本冲突
- 窗口部分,Game_Unit有个方法叫做 existing_members
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-11 07:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表