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

Project1

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

[已经过期] 诺干问题请教,卖经验……

[复制链接]

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
跳转到指定楼层
1
发表于 2013-5-17 16:27:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
问题1:
最近在做一个小小的游戏,涉及到了装备升级系统,我在原版的装备升级基础上想加入一个“波动升级属性”的功能,比如:一把剑的基础攻击10,原来有一个固定的升级系数设定为0.2,那么升级之后剑的攻击力就是10*0.2+10=12,问题我想在脚本里用一个rand(4)*0.1,也就是产生一个0.1~0.4的波动系数代替原来的0.2,但发现运行不了:
  def self.upgrade(equip, abs = false)
    unless abs || upgradesucceed?(equip.level)
      $game_party.gain_item(equip, 1)
      return
    end  
    equip.none_upgrade_name = equip.name if equip.level == nil or equip.level == 0
    equip.level = equip.level + 1 rescue 1
    case equip
    when RPG::Weapon
      return if equip.level == MaxLevel
大家看这行————————————————————↓这个rand产生1-4的随机数,乘以0.1之后应该就是0.1~0.4,但是实际情况好像rand不存在,一直都是0.1.
      equip.atk += [($base_weapons[equip.base_id].atk * rand(4)*0.1).round, 1].max if $base_weapons[equip.base_id].atk > 0
      equip.def += [($base_weapons[equip.base_id].def * rand(4)*0.1).round, 1].max if $base_weapons[equip.base_id].def > 0
      equip.spi += [($base_weapons[equip.base_id].spi * rand(4)*0.1).round, 1].max if $base_weapons[equip.base_id].spi > 0
      equip.agi += [($base_weapons[equip.base_id].agi * rand(4)*0.1).round, 1].max if $base_weapons[equip.base_id].agi > 0
      setup_price(equip, 0)
      equip.name = equip.none_upgrade_name + " +" + equip.level.to_s
    end
    return equip
  end
end
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
2
 楼主| 发表于 2013-5-17 16:31:01 | 只看该作者
问题2:
我是用的是B站的不离不弃横版战斗系统,原来的横版战斗使得敌人会统一排列在左方,现在我不使用横版系统了,如何恢复敌人的站位,下面这个脚本要删掉哪些?
#==============================================================================
# vx新遇敌系统 by 沉影不器
# protosssonny修改版
# -----------------------------------------------------------------------------
# 功能描述:
#   根据角色队伍人数决定敌人数
#   在[数据库-敌人队伍]中增加多个不同的敌人;遇敌中,敌人将随机抽取,并自动排列
#   明雷指定敌人ID: 明雷遇敌时,允许指定某个敌人必出现
# -----------------------------------------------------------------------------
# 目前大概是这样,不同敌人有不同出现率(这点还没写 - -!).
# 周末之前没时间,先放出这个粗糙工程,欢迎找bug,礼拜天早上查收意见
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :enemy_id                 # 指定敌人 ID
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias ini initialize
  def initialize
    ini
    # 初始化指定敌人 ID
    @enemy_id = 0
  end
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 战斗处理
  #--------------------------------------------------------------------------
  def command_301
    return true if $game_temp.in_battle
    if @params[0] == 0                      # 直接指定
      troop_id = @params[1]
    else                                    # 使用变量指定
      troop_id = $game_variables[@params[1]]
    end
    if $data_troops[troop_id] != nil
      # 代入指定敌人 ID
      $game_troop.setup(troop_id, $game_temp.enemy_id)
      $game_troop.can_escape = @params[2]
      $game_troop.can_lose = @params[3]
      $game_temp.battle_proc = Proc.new { |n| @branch[@indent] = n }
      $game_temp.next_scene = "battle"
    end
    @index += 1
    return false
  end
end

#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 结束处理
  #--------------------------------------------------------------------------
  def terminate
    super
    # 还原指定敌人 ID
    $game_temp.enemy_id = 0
    dispose_info_viewport
    @message_window.dispose
    @spriteset.dispose
    unless $scene.is_a?(Scene_Gameover)
      $scene = nil if $BTEST
    end
  end
end

#==============================================================================
# ■ Game_Troop
#==============================================================================
class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● 敌人角色名称后的文字表
  #--------------------------------------------------------------------------
  LETTER_TABLE = [ 'A','B','C','D','E','F','G','H','I','J',
                   'K','L','M','N','O','P','Q','R','S','T',
                   'U','V','W','X','Y','Z']
  SPACE = 32
  #--------------------------------------------------------------------------
  # ● 清除
  #--------------------------------------------------------------------------
  def clear
    @screen.clear
    @interpreter.clear
    @event_flags.clear
    @enemies = []
    @turn_count = 0
    @names_count = {}
    @can_escape = false
    @can_lose = false
    @preemptive = false
    @surprise = false
    @turn_ending = false
    @forcing_battler = nil
    # 新坐标数组
    @coordinate_x = []
    # 敌方新队伍对象
    @troop = nil
  end
  #--------------------------------------------------------------------------
  # ○ 获取成员
  #--------------------------------------------------------------------------
  def members
    return @enemies
  end
  #--------------------------------------------------------------------------
  # ○ 获取敌方组对象
  #--------------------------------------------------------------------------
  def troop
    return @troop
  end
  #--------------------------------------------------------------------------
  # ○ 获取敌方组对象
  #     enemy_id : 敌人 ID
  #--------------------------------------------------------------------------
  def setup_troop(enemy_id)
    # 角色数
    party_size = $game_party.members.size
    # 指定敌人数
    if $game_variables[PA::V_E_N] > 0
      enemies_size = $game_variables[PA::V_E_N]
    else
      case party_size
      when 1
        enemies_size = 1+rand(2)
      when 2
        enemies_size = 1+rand(4)
      when 3
        enemies_size = 1+rand(6)
      when 4
        enemies_size = 1+rand(8)
      end
    end  
    troop_members = []
    # 没注意这是实例,晕! @_@
    troop_all = $data_troops[@troop_id].clone
    # 使敌人组按指定顺序排列,比如在战斗前调用脚本 $special_array =[0,1,1,2,2]
    if $special_array != nil      
      for i in 0...$special_array.size
        troop_members.push troop_all.members[$special_array[i]]
      end
    # 普通遇敌
    else  
      if $game_switches[PA::S_E_O] == false
        # 1号ID敌人必须出现在1号位
        if $game_switches[PA::S_E_M] == true
          enemy_index = 0
          for i in 0...enemies_size
            troop_members.push troop_all.members[enemy_index]
            enemy_index = 1 + rand(troop_all.members.size - 1)
          end  
        else  
          for i in 0...enemies_size
            enemy_index = rand(troop_all.members.size)
            troop_members.push troop_all.members[enemy_index]
          end  
        end
      end  
    end  
    troop_all.members = troop_members
    return troop_all
  end
  #--------------------------------------------------------------------------
  # ○ 设定敌人坐标
  #--------------------------------------------------------------------------
  def setup_coordinate_x
    # 获取宽度数组
    width = []
    # 获取宽度和
    width_all = 0
    for i in 0...troop.members.size
      width.push battle_graphic_width(i)
      width_all += width[i]
    end
    # 计算间距
    space = [(Graphics.width-width_all)/(troop.members.size), SPACE].min
    space = [(Graphics.width-width_all)/(troop.members.size-1), SPACE].min if troop.members.size > 1
    # 预算外
    width_all += space * (troop.members.size-1)
    # 计算首敌横坐标
    x = (Graphics.width - width_all) / 2
    x += width[0]/2
    x = width[0]/2 if x < width[0]/2
    # 循环返回值数组
    @coordinate_x.push(x)
    for i in 1...troop.members.size
      x += width[i-1]/2 + width[i]/2 + space
      @coordinate_x.push x
    end
  end
  #--------------------------------------------------------------------------
  # ○ 获取敌人战斗图宽度
  #     index    : 敌人队内序号
  #--------------------------------------------------------------------------
  def battle_graphic_width(index)
    id = troop.members[index].enemy_id
    battler_name = $data_enemies[id].battler_name
    battler_hue = $data_enemies[id].battler_hue
    bitmap = Cache.battler(battler_name, battler_hue)
    return bitmap.width
  end
  #--------------------------------------------------------------------------
  # ● 设置
  #     troop_id : 敌方队伍 ID
  #     enemy_id : 敌人 ID
  #--------------------------------------------------------------------------
  def setup(troop_id, enemy_id = 0)
    clear
    @troop_id = troop_id
    # 生成敌方队伍
    @troop = setup_troop(enemy_id)
    # 新坐标重排
    setup_coordinate_x
    @enemies = []
    a = 1
    for member in troop.members
      next if $data_enemies[member.enemy_id] == nil
      enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
      enemy.hidden = member.hidden
      enemy.immortal = member.immortal
      case a
      when 1
        enemy.screen_x = 100
        enemy.screen_y = 350
      when 2
        enemy.screen_x = 200
        enemy.screen_y = 350
      when 3
        enemy.screen_x = 300
        enemy.screen_y = 350
      when 4
        enemy.screen_x = 400
        enemy.screen_y = 350
      when 5
        enemy.screen_x = 100
        enemy.screen_y = 200
      when 6
        enemy.screen_x = 200
        enemy.screen_y = 200
      when 7
        enemy.screen_x = 300
        enemy.screen_y = 200
      when 8
        enemy.screen_x = 400
        enemy.screen_y = 200
      end
      a += 1
      @enemies.push(enemy)
    end
    make_unique_names
  end  
end
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复 支持 反对

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
3
 楼主| 发表于 2013-5-17 16:33:46 | 只看该作者
问题3:
如何在事件-对话框里面显示出变量数值?比如我在后台有一个“道德数值”的变量值,查寻的时候对话框里如何输出这个变量值?

点评

\v[n]就是显示 n 号变量的值啊。  发表于 2013-5-17 17:12
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复 支持 反对

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
4
 楼主| 发表于 2013-5-17 16:36:25 | 只看该作者
问题4:我想在主角的血条或者其他地方添加一条“活力值“或者更简单的只是一个反应”活力值“变量的数值,可以的话如何做出另一个状态页面显示其他变量?
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复 支持 反对

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
5
 楼主| 发表于 2013-5-17 16:41:04 | 只看该作者
问题X:VX系统的图块除了替换E图块(还不能改大小)那一点就没有其他的了吗?
问题X-2:关于事件-播放BGM系统,比如我触发了一个事件,会播放一段BMG,但是有没有”结束播放恢复原来的BGM“的方法呢?
好吧这两个问题是很离谱,实在是润的技术太渣了,在此请教大家,阿莉娜朵……

点评

说实话,问题太多的话,大部分人都失去了继续看下去的耐心。  发表于 2013-5-17 17:28

评分

参与人数 1星屑 -50 收起 理由
hys111111 -50 不要一题多问啊……

查看全部评分

长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33620
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

6
发表于 2013-5-17 17:07:49 | 只看该作者
本帖最后由 芯☆淡茹水 于 2013-5-17 17:16 编辑

rand (4) 好像是随机 0~3 吧
如果是 1~4 应该是:rand (4) + 1

LZ的 [rand (4), 1].max  ,有一半的几率都是 1 ,所以看起来都是 0.1 的样子。

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
hys111111 + 100 + 1 感谢回答

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-8-1
帖子
12
7
发表于 2013-5-17 18:47:58 | 只看该作者
上贺茂润 发表于 2013-5-17 16:41
问题X:VX系统的图块除了替换E图块(还不能改大小)那一点就没有其他的了吗?
问题X-2:关于事件-播放BGM系 ...

问题X-2:
好吧。。这里你说得不是很清楚。是指结束播放那个BGM后,从之前的BGM停止的地方继续播放呢,还是重新播放之前的BGM?前者的话应该是没有办法实现的吧,后者的话可以再插入之前的BGM。或者在地图上设个BGM,新建事件,插入另一个BGM。BLABLA.....然后最后是BGM淡出。也就是说,在地图上设的BGM会一直播放,直到事件里的BGM被触发,然后等该事件执行完了,(比如说人物对话完了)对话框消失之后,事件里的BGM就停了,地图上的BGM又开始放。。

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
hys111111 + 100 + 1 感谢回答

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
8
 楼主| 发表于 2013-5-17 22:00:47 | 只看该作者
芯☆淡茹水 发表于 2013-5-17 17:07
rand (4) 好像是随机 0~3 吧
如果是 1~4 应该是:rand (4) + 1

太谢谢了!我其实想搞懂关于脚本生成随机数的函数rand()的用法,比如我什么都不写,只有一个rand()好像也能产生随机数,那产生的是什么?
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复 支持 反对

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
9
 楼主| 发表于 2013-5-17 22:03:43 | 只看该作者
CIEL蓝 发表于 2013-5-17 18:47
问题X-2:
好吧。。这里你说得不是很清楚。是指结束播放那个BGM后,从之前的BGM停止的地方继续播放呢,还 ...

我也是这样想的,播放完bgm后继续播放原来的,其实我的想法是弄一个公共事件,中间会插播一段bgm,因为是公共事件所以会在很多场景进行,每个场景的原来bgm不同就不知道怎么弄了。
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-26 14:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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