Project1
标题:
如何制作升级随机加点
[打印本页]
作者:
清远
时间:
2012-11-9 22:37
标题:
如何制作升级随机加点
本帖最后由 清远 于 2012-11-11 00:40 编辑
简单来说,假设有5项基础能力值比如HP、力量、魔力、敏捷、运气等等
每次升级,一定会增加3点能力值,但是不是固定的而是随机的
即升级之后,可能HP加一点,力量加两点,或者魔力加1点,敏捷加1点、运气加1点等等
最好可以给每个人设置能力提升的概率
比如法师提升魔力的可能就很高,而战士提升力量的可能很高
用脚本怎么实现呢,谢谢高人
作者:
feizhaodan
时间:
2012-11-10 00:35
#==============================================================================
# ■ FE_Param
#------------------------------------------------------------------------------
# 设置各职业用的各数据
# 制作者:feizhaodan
# 版本: 1.1.0
# 更新: 1.1.0 : 更改了随机式,从原来的非即下一项改为范围随机。
#==============================================================================
module FE_Param
CLASSPER = {} # 不要改
# 在这里设置各职业的提升几率
# 格式:
# CLASSPER[id] = {
# :para => n%,
#}
# id 输入职业ID
# para 代入属性标识(mhp, mmp, atk, def, mat, mdf, agi, luk)
# n 代入属性提升几率
CLASSPER[1] ={
:mhp => 60, # 血
:mmp => 40, # 魔
:atk => 70, # 攻
:def => 60, # 防
:mat => 20, # 魔攻
:mdf => 20, # 魔防
:agi => 50, # 敏
:luk => 10, # 幸运
}
CLASSUP = {} # 不要改
# 在这里设置各职业的提升量
# 格式:
# CLASSUP[id] = [mi, ma]
# id 输入职业ID
# mi 代入提升量最小值
# ma 代入提升量最大值
CLASSUP[1] = [5, 9]
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# 处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
# Game_Party 类请参考 ($game_party) 。
#==============================================================================
class Game_Actor < Game_Battler\
FEPARAM_LIST_ = [:mhp,:mmp,:atk,:def,:mat,:mdf,:agi,:luk]
FEPARAM_LIST_.each_with_index do |pn,ind|
eval(
"alias fe_param_up_#{pn.to_s} #{pn.to_s}
def #{pn.to_s}
return param_gained(#{ind}) + fe_param_up_#{pn.to_s}
end
")
end
#--------------------------------------------------------------------------
# ● 获取提升量
#--------------------------------------------------------------------------
def param_up
param_up = FE_Param::CLASSUP[@class_id]
up = param_up[0] + rand(param_up[1] - param_up[0] + 1)
return up
end
#--------------------------------------------------------------------------
# ● 获取提升率
# param : 属性
#--------------------------------------------------------------------------
def param_per
@param_per = FE_Param::CLASSPER[@class_id] if @param_per == nil
return @param_per
end
#--------------------------------------------------------------------------
# ● 获取已提升量
# param : 属性
#--------------------------------------------------------------------------
def param_gained(param)
return 0 if @param_gained == nil
return 0 if @param_gained[param] == nil
return @param_gained[param]
end
#--------------------------------------------------------------------------
# ● 升级
#--------------------------------------------------------------------------
alias fe_level_up level_up
def level_up
fe_level_up
gain_param
end
#--------------------------------------------------------------------------
# ● 提升属性
#--------------------------------------------------------------------------
def gain_param
@param_gained = {} if @param_gained == nil
param_per
percentage = 0
@param_per.each_value do |v|
percentage += v
end
point = param_up
mhpper = @param_per[:mhp]
mmpper = @param_per[:mmp] + mhpper
atkper = @param_per[:atk] + mmpper
defper = @param_per[:def] + atkper
matper = @param_per[:mat] + defper
mdfper = @param_per[:mdf] + matper
agiper = @param_per[:agi] + mdfper
lukper = @param_per[:luk] + agiper
loop do
if point == 0
break
end
per = rand(percentage) + 1
case per
when 1...mhpper
i = FEPARAM_LIST_.index(:mhp)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when mhpper...mmpper
i = FEPARAM_LIST_.index(:mmp)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when mmpper...atkper
i = FEPARAM_LIST_.index(:atk)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when atkper...defper
i = FEPARAM_LIST_.index(:def)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when defper...matper
i = FEPARAM_LIST_.index(:mat)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when matper...mdfper
i = FEPARAM_LIST_.index(:mdf)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when mdfper...agiper
i = FEPARAM_LIST_.index(:agi)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when agiper...lukper
i = FEPARAM_LIST_.index(:luk)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
end
end
end
end
复制代码
用这个试试吧。用法上面已经有了。
作者:
清远
时间:
2012-11-10 20:58
版主大人好,使用这个脚本之后,只能增加HP和MP,其他的属性点不管怎么修改概率都不会增加。
另外发现即使将概率改到100,HP与MP也不是每次升级都提升。
恳请指点。
另外,这个脚本是不是每次升级只能提升一点能力值呢?
能不能一次升级可以提升多点能力值呢。
作者:
feizhaodan
时间:
2012-11-10 23:11
#==============================================================================
# ■ FE_Param
#------------------------------------------------------------------------------
# 设置各职业用的各数据
# 制作者:feizhaodan
# 版本: 1.1.0
# 更新: 1.1.0 : 更改了随机式,从原来的非即下一项改为范围随机。
#==============================================================================
module FE_Param
CLASSPER = {} # 不要改
# 在这里设置各职业的提升几率
# 格式:
# CLASSPER[id] = {
# :para => n%,
#}
# id 输入职业ID
# para 代入属性标识(mhp, mmp, atk, def, mat, mdf, agi, luk)
# n 代入属性提升几率
CLASSPER[1] ={
:mhp => 60, # 血
:mmp => 40, # 魔
:atk => 70, # 攻
:def => 60, # 防
:mat => 20, # 魔攻
:mdf => 20, # 魔防
:agi => 50, # 敏
:luk => 10, # 幸运
}
CLASSUP = {} # 不要改
# 在这里设置各职业的提升量
# 格式:
# CLASSUP[id] = [mi, ma]
# id 输入职业ID
# mi 代入提升量最小值
# ma 代入提升量最大值
CLASSUP[1] = [5, 9]
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# 处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
# Game_Party 类请参考 ($game_party) 。
#==============================================================================
class Game_Actor < Game_Battler
FEPARAM_LIST_ = [:mhp,:mmp,:atk,:def,:mat,:mdf,:agi,:luk]
#--------------------------------------------------------------------------
# ● 获取普通能力
#--------------------------------------------------------------------------
def param(param_id)
value = super
value += param_gained(param_id)
return [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
end
#--------------------------------------------------------------------------
# ● 获取提升量
#--------------------------------------------------------------------------
def param_up
param_up = FE_Param::CLASSUP[@class_id]
up = param_up[0] + rand(param_up[1] - param_up[0] + 1)
return up
end
#--------------------------------------------------------------------------
# ● 获取提升率
# param : 属性
#--------------------------------------------------------------------------
def param_per
@param_per = FE_Param::CLASSPER[@class_id] if @param_per == nil
return @param_per
end
#--------------------------------------------------------------------------
# ● 获取已提升量
# param : 属性
#--------------------------------------------------------------------------
def param_gained(param)
@param_gained = {} if @param_gained == nil
return 0 if @param_gained[param] == nil
return @param_gained[param]
end
#--------------------------------------------------------------------------
# ● 升级
#--------------------------------------------------------------------------
alias fe_level_up level_up
def level_up
fe_level_up
gain_param
end
#--------------------------------------------------------------------------
# ● 提升属性
#--------------------------------------------------------------------------
def gain_param
@param_gained = {} if @param_gained == nil
param_per
percentage = 0
@param_per.each_value do |v|
percentage += v
end
point = param_up
mhpper = @param_per[:mhp]
mmpper = @param_per[:mmp] + mhpper
atkper = @param_per[:atk] + mmpper
defper = @param_per[:def] + atkper
matper = @param_per[:mat] + defper
mdfper = @param_per[:mdf] + matper
agiper = @param_per[:agi] + mdfper
lukper = @param_per[:luk] + agiper
loop do
if point == 0
break
end
per = rand(percentage) + 1
p [mhpper,mmpper,atkper,defper,matper,mdfper,agiper,lukper,per]
case per
when 1...mhpper
i = FEPARAM_LIST_.index(:mhp)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when mhpper...mmpper
i = FEPARAM_LIST_.index(:mmp)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when mmpper...atkper
i = FEPARAM_LIST_.index(:atk)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when atkper...defper
i = FEPARAM_LIST_.index(:def)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when defper...matper
i = FEPARAM_LIST_.index(:mat)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when matper...mdfper
i = FEPARAM_LIST_.index(:mdf)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when mdfper...agiper
i = FEPARAM_LIST_.index(:agi)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
when agiper...lukper
i = FEPARAM_LIST_.index(:luk)
@param_gained[i] = 0 if @param_gained[i] == nil
@param_gained[i] += 1
point -= 1
end
end
end
end
复制代码
修正版。然后关于这个几率,他每个属性在升级时增加的几率是(所有属性的几率的和)分之(这个属性的几率),因此没法弄每次升级一定增加HP。因为默认的升级增加属性也还是有效,所以增加HP就用那个来吧。
作者:
清远
时间:
2012-11-11 00:39
使用之后,就是我想要的效果,太感谢版主了。
非常感谢,特别感谢
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1