Project1
标题:
JAES XP2.1 技能养成+能量技能双系统
[打印本页]
作者:
菜鸟飞呀飞
时间:
2011-8-26 03:43
提示:
作者被禁止或删除 内容自动屏蔽
作者:
orzfly
时间:
2011-8-26 05:04
本帖最后由 orzfly 于 2011-8-26 07:26 编辑
看上去是个好东西。
支持一下楼主。
Minax代码似乎都写得啰嗦了点。
return min[x,y,z] == max[x,y,z] ? true : false
复制代码
这样的语句完全没有必要吧……
return min[x,y,z] == max[x,y,z]
复制代码
就可以了。
代码写的又有些没有必要
min[x,y,z] = [0, [min[x,y,z] += value, max[x,y,z]].min].max
复制代码
这里,为什么中间要用+=呢,虽然是没有问题,但是会对变量进行两次赋值,这就显得没有必要了。
为什么$jaes要独立出来、还要修改存档结构?建议还是把它保存到$game_temp里面把。兼容也可以变好的。
orzfly于2011-8-26 07:01补充以下内容:
为什么 Minax 中几乎每个函数我都能写成一行……
高强度压缩了一下,性能未测试。
其实剩下4个函数也可以用multirange_each处理掉。
# -----------------------------------------------------------------------------
# Minax
# ver:1.0 (compressed by orzFly)
# date:2011.8.23
# -by.Ultra
# -----------------------------------------------------------------------------
# ◆性能:
# Minax 工作效率测试
# 测试电脑:1.81 GHz 1.5G RAM
# MIN类1秒处理>30万个单元,同时处理上限为300万个单元(临近10秒备份)
# MAX类1秒处理>150万个单元,同时处理上限为2000万个单元(临近10秒备份)
# ◆函数:
# Minax 全部函数简要
# 函数(参数) * 函数处理简要
# ━ minax_table(size) * 生成 MIN 与 MAX 多维数组
# ━ min_full?(type,unit) * 判断MIN是否达到上限 MAX
# ┏ min_set(type,set) * 用数据设置到 MIN
# ┗ max_set(type,set) * 用数据设置到 MAX
# ┏ min_all_cover(type,value) * MIN 全部代入某值
# ┗ max_all_cover(type,value) * MAX 全部代入某值
# ┏ min_all_pr(type,value) * MIN 全部增减某值
# ┗ max_all_pr(type,value) * MAX 全部增减某值
# ┏ min_range_cover(type,value,qx,zx,qy,zy,qz,zz) * MIN 范围代入某值
# ┗ max_range_cover(type,value,qx,zx,qy,zy,qz,zz) * MAX 范围代入某值
# ┏ min_range_pr(type,value,qx,zx,qy,zy,qz,zz) * MIN 范围增减某值
# ┗ max_range_pr(type,value,qx,zx,qy,zy,qz,zz) * MAX 范围增减某值
# ┏ min_unit_cover(type,unit,value) * MIN 单元代入某值
# ┗ max_unit_cover(type,unit,value) * MAX 单元代入某值
# ┏ min_unit_pr(type,unit,value) * MIN 单元增减某值
# ┗ max_unit_pr(type,unit,value) * MAX 单元增减某值
# ◆参数:
# Minax 全部参数规格
# 参数 * 参数结构规格 * 参数内容规格
# size * {"T"=>[x,y,z],""=>[]…} * T为字符串 x,y,z为整数
# type * "T" * T为字符串
# set * [[x,y,z,num],[]…] * x,y,z值为每维范围内 num为整数,浮点数
# value * num * num为整数,浮点数
# unit * [x,y,z] * x,y,z值为每维范围内
# qx,qy,qz * x,y,z * x,y,z值为每维范围内
# zx,zy,zz * x,y,z * x,y,z值为每维范围内
# -----------------------------------------------------------------------------
class Minax
attr_accessor :min
attr_accessor :max
attr_accessor :size
def initialize
@min = {}
@max = {}
@size = {}
end
# ---------------------------------------------------------------------------
# 多 Range each by orzFly
# ex: multirange_each(0..2, 1..5, 1..2) {|*a| p a}
# ---------------------------------------------------------------------------
def multirange_each(*args)
args[0].each { |i|
args.size > 1 ?
(multirange_each(*args[1, args.size - 1]) { |*v| yield(i, *v) }) :
(yield(i))
}
nil
end
# ---------------------------------------------------------------------------
# 多维数组生成
# 规则:MIN 与 MAX 尺寸相同
# size:数据尺寸
# ---------------------------------------------------------------------------
def minax_table(size)
size.each {|k,v|
@size[k] = v
@min[k] = Table.new(*v)
@max[k] = Table.new(*v)
}
end
# ---------------------------------------------------------------------------
# MIN 是否达上限(=MAX)
# 规则:是则返回 true,否则返回 false
# type:MAX 类型
# unit:MAX 单元地址
# ---------------------------------------------------------------------------
def min_full?(type,unit)
v = @size[type]
return @min[type][*v] == @max[type][*v]
end
# ---------------------------------------------------------------------------
# MIN 加载设置
# 规则:设置数组最后一个单元为设置值
# type:MIN 类型
# set:设置数据
# ---------------------------------------------------------------------------
def min_set(type,set)
set.each {|i|
@min[type][*(i[0, @size[type].size])] = i[-1]
}
end
# ---------------------------------------------------------------------------
# MAX 加载设置
# 规则:设置数组最后一个单元为设置值
# type:MIN 类型
# set:设置数据
# ---------------------------------------------------------------------------
def max_set(type,set)
set.each {|i|
@max[type][*(i[0, @size[type].size])] = i[-1]
}
end
# ---------------------------------------------------------------------------
# MIN 全部代入
# 规则:MIN 上限为 MAX
# type:MIN 类型
# value:代入的值
# ---------------------------------------------------------------------------
def min_all_cover(type,value)
multirange_each(*(@size[type].map{|i|0...i})) {|*arg|
@min[type][*arg] = [value, @max[type][*arg]].min
}
end
# ---------------------------------------------------------------------------
# MAX 全部代入
# 规则:MAX 无限制
# type:MAX 类型
# value:代入的值
# ---------------------------------------------------------------------------
def max_all_cover(type,value)
multirange_each(*(@size[type].map{|i|0...i})) {|*arg|
@max[type][*arg] = value
}
end
# ---------------------------------------------------------------------------
# MIN 全部增减
# 规则:MIN 下限为 0,上限为 MAX
# type:MIN 类型
# value:增加的值,负数为减
# ---------------------------------------------------------------------------
def min_all_pr(type,value)
multirange_each(*(@size[type].map{|i|0...i})) {|*arg|
@min[type][*arg] = [0, [@min[type][*arg] + value, @max[type][*arg]].min].max
}
end
# ---------------------------------------------------------------------------
# MAX 全部增减
# 规则:MAX 无限制
# type:MAX 类型
# value:增加的值,负数为减
# ---------------------------------------------------------------------------
def max_all_pr(type,value)
multirange_each(*(@size[type].map{|i|0...i})) {|*arg|
@max[type][*arg] = @max[type][*arg] + value
}
end
# ---------------------------------------------------------------------------
# MIN 范围代入
# 规则:MIN 上限为 MAX
# type:MIN 类型
# value:代入的值
# qx,qy,qz:各维范围起点,值为该维尺寸内,0为起点
# zx,zy,zz:各维范围终点,值为该维尺寸内,0为终点
# ---------------------------------------------------------------------------
def min_range_cover(type,value,qx=0,zx=0,qy=0,zy=0,qz=0,zz=0)
v = @size[type]
min = @min[type]
max = @max[type]
case v.size
when 1
zx = v[0] - zx - 1 if zx > 0
(v[0]-qx-zx).times {|x|
min[x+qx] = [value,max[x+qx]].min
}
when 2
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
min[x+qx,y+qy] = [value,max[x+qx,y+qy]].min
}
}
when 3
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
zz = v[2] - zz - 1 if zz > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
(v[2]-qz-zz).times {|z|
min[x+qx,y+qy,z+qz] = [value,max[x+qx,y+qy,z+qz]].min
}
}
}
end
end
# ---------------------------------------------------------------------------
# MAX 范围代入
# 规则:MAX 无限制
# type:MAX 类型
# value:代入的值
# qx,qy,qz:各维范围起点,值为该维尺寸内,0为起点
# zx,zy,zz:各维范围终点,值为该维尺寸内,0为终点
# ---------------------------------------------------------------------------
def max_range_cover(type,value,qx=0,zx=0,qy=0,zy=0,qz=0,zz=0)
v = @size[type]
max = @max[type]
case v.size
when 1
zx = v[0] - zx - 1 if zx > 0
(v[0]-qx-zx).times {|x|
max[x+qx] = value
}
when 2
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
max[x+qx,y+qy] = value
}
}
when 3
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
zz = v[2] - zz - 1 if zz > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
(v[2]-qz-zz).times {|z|
max[x+qx,y+qy,z+qz] = value
}
}
}
end
end
# ---------------------------------------------------------------------------
# MIN 范围增减
# 规则:MIN 下限为 0,上限为 MAX
# type:MIN 类型
# value:增加的值,负数为减
# qx,qy,qz:各维范围起点,值为该维尺寸内,0为起点
# zx,zy,zz:各维范围终点,值为该维尺寸内,0为终点
# ---------------------------------------------------------------------------
def min_range_pr(type,value,qx=0,zx=0,qy=0,zy=0,qz=0,zz=0)
v = @size[type]
min = @min[type]
max = @max[type]
case v.size
when 1
zx = v[0] - zx - 1 if zx > 0
(v[0]-qx-zx).times {|x|
min[x+qx] =
[0, [min[x+qx] += value, max[x+qx]].min].max
}
when 2
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
min[x+qx,y+qy] =
[0, [min[x+qx,y+qy] += value, max[x+qx,y+qy]].min].max
}
}
when 3
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
zz = v[2] - zz - 1 if zz > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
(v[2]-qz-zz).times {|z|
min[x+qx,y+qy,z+qz] =
[0, [min[x+qx,y+qy,z+qz] += value, max[x+qx,y+qy,z+qz]].min].max
}
}
}
end
end
# ---------------------------------------------------------------------------
# MAX 范围增减
# 规则:MAX 无限制
# type:MAX 类型
# value:增加的值,负数为减
# qx,qy,qz:各维范围起点,值为该维尺寸内,0为起点
# zx,zy,zz:各维范围终点,值为该维尺寸内,0为终点
# ---------------------------------------------------------------------------
def max_range_pr(type,value,qx=0,zx=0,qy=0,zy=0,qz=0,zz=0)
v = @size[type]
max = @max[type]
case v.size
when 1
zx = v[0] - zx - 1 if zx > 0
(v[0]-qx-zx).times {|x|
max[x+qx] += value
}
when 2
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
max[x+qx,y+qy] += value
}
}
when 3
zx = v[0] - zx - 1 if zx > 0
zy = v[1] - zy - 1 if zy > 0
zz = v[2] - zz - 1 if zz > 0
(v[0]-qx-zx).times {|x|
(v[1]-qy-zy).times {|y|
(v[2]-qz-zz).times {|z|
max[x+qx,y+qy,z+qz] += value
}
}
}
end
end
# ---------------------------------------------------------------------------
# MIN 单元代入
# 规则:MIN 上限为 MAX
# type:MIN 类型
# unit:MIN 单元地址
# value:增加的值,负数为减
# ---------------------------------------------------------------------------
def min_unit_cover(type,unit,value)
@min[type][*unit] = [value,@max[type][*unit]].min
end
# ---------------------------------------------------------------------------
# MAX 单元代入
# 规则:无限制
# type:MAX 类型
# unit:MAX 单元地址
# value:增加的值,负数为减
# ---------------------------------------------------------------------------
def max_unit_cover(type,unit,value)
@max[type][*unit] = value
end
# ---------------------------------------------------------------------------
# MIN 单元增减
# 规则:MIN 下限为 0,上限为 MAX
# type:MIN 类型
# unit:MIN 单元地址
# value:增加的值,负数为减
# ---------------------------------------------------------------------------
def min_unit_pr(type,unit,value)
@min[type][*unit] = [0, [@min[type][*unit] + value, @max[type][*unit][x]].min].max
end
# ---------------------------------------------------------------------------
# MAX 单元增减
# 规则:MAX 无限制
# type:MAX 类型
# unit:MAX 单元地址
# value:增加的值,负数为减
# ---------------------------------------------------------------------------
def max_unit_pr(type,unit,value)
@max[type][*unit] = @max[type][*unit] + value
end
end
复制代码
作者:
无名小兵
时间:
2011-8-26 19:49
坐等VX版。。。。
作者:
九夜神尊
时间:
2011-8-27 12:58
有一种LZ把旧东西翻新了一道,然后又拿出来卖的感觉,貌似比以前强大了。
那我说几点吧。
首先咋又是名字上@XXX啊? 好吧,转移话题。
此外你有木有发现你那些进度条是在默认的界面上画的,那么局限性可想而知,说白了就是必须使用默认的窗口才能使用你这脚本,况且是否支持装备扩充不得而知。
再来扩展性,一般来说一个装备学会技能无可争议,作者可以选择是否附加技能。但是我要附加两个,三个呢?这里讲的扩展性,就是在1.0版就要为以后的版本提供接口。
然后你可以参考这样的设置方式。
直接从技能的描述上取得信息。
比如,钢剑
钢铁打造的剑,威力不错。
附加技能
旋风
,
养成值达到
800
可习得该技能。
附加技能
十字斩,
养成值达到
900
可习得该技能。
这样的描述通俗易懂。注意蓝色字尾关键字,直接在描述里面搜索关键字,进而获得附加装备的信息以及养成值。
然后具体在游戏里面显示呢就是。
钢铁打造的剑,威力不错 旋风 > 500 / 800 十字斩 > 300 / 900(当然也可以是别的表现方式),因为描述直接就是放在帮助窗口里,所以无论什么样的窗口系统都能兼容进去。
写一个脚本如果要想用的人多就要有,易用性,易查性,易改性,兼容性。
有多少人愿意放弃华丽一点的界面系统来用你这个JAEP技能,最简单的那个更换装备显示详细更改信息的(用默认界面的作者80%都在用。)你能兼容上不?额,装备扩充呢?
此贴绝非吐槽,只是建议,现在愿意发布技术的人太少了,66的人啊。。...
作者:
plummy
时间:
2011-8-27 13:35
看起来真的很不错啊,下下来看看
作者:
菜鸟飞呀飞
时间:
2011-8-27 14:04
提示:
作者被禁止或删除 内容自动屏蔽
作者:
天使喝可乐
时间:
2011-8-28 09:29
记得最终幻想(战略版)里有这么个系统 觉得还是一个装备带1个技能就够了
话说LZ最好不要设置成“@XXX” 因为太多脚本是这么设置了 什么魔法商店啊等等 为什么不设置成一个特殊点的符号呢 变量前面是@ 所以想把@改成别的 全局搜索全部改掉的方法也是行不通的 最好把修改符号的地方全部标出 或者用一个脚本里没有出现过的符号
但是关于窗口兼容还是应该考虑下 最好信息显示成可以随时变更的 因为这个描绘位置定死了 稍微改下装备窗口 位置就不对了
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1